Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.5.0] - 2026-08-29

### Fixed
- **dom.ts / vdom.ts / reconcile.ts** — SVG elements created via dynamic `html` fragments (e.g. `html`<g>`, `html`<circle>` or `items.map(html`<circle>`)) inside `<svg>` now correctly get `SVG` namespace. Previously they were parsed as HTML (`http://www.w3.org/1999/xhtml`) and remained HTML when inserted, so nested circles/lines/g's from `showGrid` toggle and keyed lists in `x-svg-demo` were invisible. Static `svg` content was unaffected. Now fragments are NS-corrected on creation and on every `reconcile` insertion, with `foreignObject` children correctly reverting to HTML — including dynamic children re-inserted into a live `<foreignObject>` after being removed (the reconcile insertion path now applies the same `foreignObject` → HTML exception as template parsing). SVG element names are case-sensitive and several are camelCase (`foreignObject`, `clipPath`, `linearGradient`, `fe*`, …). Previously `createElementNS(svgNS, "foreignobject")` was called with the lowercased tag, which Chromium treats as an *unknown* SVG element with no layout — so a static `<foreignObject>` rendered as a 0×0 box with invisible HTML content. `svgTagName()` in **ns.ts** now maps lowercase tags back to the canonical spelling for every SVG element created via `createEl` (**dom.ts** / **vdom.ts**), so `foreignObject`, `clipPath`, `linearGradient`, `fe*` and friends render and behave correctly.
- **dom.ts** — `aria-*` and `role` attributes now correctly stringify boolean values as `"true"`/`"false"` instead of empty string/removed. `html`<div aria-hidden=${true}>` now renders `aria-hidden="true"` and `aria-hidden=${false}` renders `aria-hidden="false"` (previously `aria-hidden=""` / removed), matching React and the ARIA spec. Dynamic toggling and numeric `aria-*` (e.g. `aria-valuenow`) also stringify correctly.
Expand Down
2 changes: 1 addition & 1 deletion packages/micro-ui/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@opentf/micro-ui",
"version": "0.4.0",
"version": "0.5.0",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
Expand Down
Loading