@adia-ai/web-components 0.8.42 → 0.8.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/MIGRATION.md +130 -80
  3. package/USAGE.md +1 -1
  4. package/color/index.js +1 -1
  5. package/components/action-list/action-item.a2ui.json +3 -8
  6. package/components/action-list/action-item.yaml +10 -16
  7. package/components/action-list/action-list.class.js +5 -61
  8. package/components/action-list/action-list.d.ts +1 -3
  9. package/components/avatar/avatar.class.js +12 -1
  10. package/components/button/button.d.ts +4 -0
  11. package/components/button/button.yaml +1 -1
  12. package/components/calendar-picker/calendar-picker.a2ui.json +1 -1
  13. package/components/calendar-picker/calendar-picker.class.js +2 -3
  14. package/components/calendar-picker/calendar-picker.css +16 -18
  15. package/components/calendar-picker/calendar-picker.yaml +2 -2
  16. package/components/card/card.css +3 -3
  17. package/components/chart/chart.a2ui.json +29 -18
  18. package/components/chart/chart.class.js +1308 -266
  19. package/components/chart/chart.css +151 -1
  20. package/components/chart/chart.d.ts +9 -9
  21. package/components/chart/chart.yaml +63 -31
  22. package/components/chart-legend/chart-legend.a2ui.json +20 -14
  23. package/components/chart-legend/chart-legend.class.js +79 -58
  24. package/components/chart-legend/chart-legend.css +65 -1
  25. package/components/chart-legend/chart-legend.d.ts +5 -5
  26. package/components/chart-legend/chart-legend.examples.md +4 -4
  27. package/components/chart-legend/chart-legend.yaml +50 -20
  28. package/components/check/check.css +9 -0
  29. package/components/color-area/color-area.a2ui.json +1 -1
  30. package/components/color-area/color-area.class.js +2 -2
  31. package/components/color-area/color-area.css +4 -7
  32. package/components/color-area/color-area.d.ts +1 -1
  33. package/components/color-area/color-area.yaml +3 -3
  34. package/components/color-input/color-input.a2ui.json +1 -1
  35. package/components/color-input/color-input.class.js +1 -1
  36. package/components/color-input/color-input.yaml +2 -2
  37. package/components/combobox/combobox.a2ui.json +3 -0
  38. package/components/combobox/combobox.class.js +9 -8
  39. package/components/combobox/combobox.css +25 -4
  40. package/components/combobox/combobox.yaml +6 -0
  41. package/components/command/command.css +17 -1
  42. package/components/context-menu/context-menu.d.ts +2 -0
  43. package/components/drilldown/drilldown.a2ui.json +3 -0
  44. package/components/drilldown/drilldown.css +8 -1
  45. package/components/drilldown/drilldown.yaml +2 -0
  46. package/components/field/field.class.js +5 -5
  47. package/components/heatmap/heatmap.a2ui.json +5 -0
  48. package/components/heatmap/heatmap.d.ts +2 -0
  49. package/components/heatmap/heatmap.yaml +8 -0
  50. package/components/index.js +0 -4
  51. package/components/input/input.a2ui.json +4 -4
  52. package/components/input/input.class.js +20 -7
  53. package/components/input/input.css +6 -0
  54. package/components/input/input.yaml +15 -11
  55. package/components/integration-card/integration-card.d.ts +2 -0
  56. package/components/menu/menu-item.a2ui.json +3 -8
  57. package/components/menu/menu-item.yaml +13 -21
  58. package/components/menu/menu.class.js +5 -27
  59. package/components/menu/menu.d.ts +1 -3
  60. package/components/noodles/noodles.a2ui.json +0 -15
  61. package/components/noodles/noodles.yaml +0 -12
  62. package/components/number-format/number-format.class.js +10 -0
  63. package/components/pagination/pagination.class.js +88 -4
  64. package/components/pane/pane.a2ui.json +2 -12
  65. package/components/pane/pane.class.js +5 -30
  66. package/components/pane/pane.d.ts +3 -5
  67. package/components/pane/pane.yaml +7 -19
  68. package/components/popover/popover.d.ts +2 -0
  69. package/components/progress/progress.a2ui.json +1 -1
  70. package/components/progress/progress.class.js +13 -8
  71. package/components/progress/progress.d.ts +1 -1
  72. package/components/progress/progress.yaml +2 -2
  73. package/components/radio/radio.css +7 -0
  74. package/components/range/range.class.js +9 -1
  75. package/components/search/search.css +10 -1
  76. package/components/segment/segment.a2ui.json +1 -2
  77. package/components/segment/segment.css +10 -0
  78. package/components/segment/segment.yaml +1 -2
  79. package/components/segmented/segmented.a2ui.json +1 -3
  80. package/components/segmented/segmented.class.js +2 -2
  81. package/components/segmented/segmented.yaml +2 -4
  82. package/components/select/select.a2ui.json +5 -1
  83. package/components/select/select.class.js +14 -14
  84. package/components/select/select.css +20 -1
  85. package/components/select/select.yaml +7 -1
  86. package/components/step-progress/step-progress.yaml +1 -1
  87. package/components/stream/stream.d.ts +2 -0
  88. package/components/switch/switch.css +8 -0
  89. package/components/table/table.a2ui.json +6 -1
  90. package/components/table/table.class.js +18 -1
  91. package/components/table/table.css +31 -6
  92. package/components/table/table.d.ts +3 -1
  93. package/components/table/table.examples.md +2 -2
  94. package/components/table/table.yaml +9 -1
  95. package/components/table-toolbar/table-toolbar.a2ui.json +67 -2
  96. package/components/table-toolbar/table-toolbar.class.js +492 -17
  97. package/components/table-toolbar/table-toolbar.css +311 -0
  98. package/components/table-toolbar/table-toolbar.d.ts +17 -1
  99. package/components/table-toolbar/table-toolbar.yaml +220 -15
  100. package/components/tag/tag.class.js +13 -1
  101. package/components/text/text.a2ui.json +3 -3
  102. package/components/text/text.d.ts +5 -3
  103. package/components/text/text.yaml +3 -3
  104. package/components/textarea/textarea.class.js +9 -1
  105. package/components/textarea/textarea.css +4 -0
  106. package/components/time-picker/time-picker.yaml +3 -2
  107. package/components/tour/tour.d.ts +10 -0
  108. package/components/tree/tree.yaml +1 -1
  109. package/components/upload/upload.class.js +16 -0
  110. package/components/upload/upload.d.ts +7 -0
  111. package/components/upload/upload.yaml +7 -3
  112. package/core/a11y.d.ts +22 -0
  113. package/core/a11y.js +64 -0
  114. package/core/anchor.js +9 -5
  115. package/core/element.js +1 -1
  116. package/core/icons.js +2 -5
  117. package/custom-elements.json +142 -594
  118. package/dist/host.min.css +1 -1
  119. package/dist/host.sheet.js +1 -1
  120. package/dist/theme-provider.min.js +1 -1
  121. package/dist/web-components.min.css +1 -1
  122. package/dist/web-components.min.js +122 -119
  123. package/dist/web-components.sheet.js +1 -1
  124. package/index.d.ts +0 -15
  125. package/package.json +1 -1
  126. package/patterns/access-requests/access-requests.examples.html +1 -1
  127. package/patterns/admin-keys-and-export/admin-keys-and-export.examples.html +7 -7
  128. package/patterns/agent-cost/agent-cost.examples.html +6 -6
  129. package/patterns/agent-memory/agent-memory.examples.html +3 -3
  130. package/patterns/agent-prompt-library/agent-prompt-library.examples.html +8 -8
  131. package/patterns/agent-tool-call/agent-tool-call.examples.html +1 -1
  132. package/patterns/approvals/approvals.examples.html +6 -6
  133. package/patterns/audit-log/audit-log.examples.html +1 -1
  134. package/patterns/bulk-action-toolbar/bulk-action-toolbar.examples.html +4 -4
  135. package/patterns/chart-in-card/chart-in-card.examples.html +124 -10
  136. package/patterns/chart-in-card/chart-in-card.examples.js +37 -0
  137. package/patterns/comments-and-collaboration/comments-and-collaboration.examples.html +5 -5
  138. package/patterns/conversion-funnel/conversion-funnel.html +2 -2
  139. package/patterns/data-tables-inline-edit-and-tree/data-tables-inline-edit-and-tree.examples.html +2 -2
  140. package/patterns/diff-review/diff-review.examples.html +6 -6
  141. package/patterns/editor-shell/editor-shell.examples.html +3 -3
  142. package/patterns/export-flow/export-flow.examples.html +2 -2
  143. package/patterns/filter-bar/filter-bar.examples.html +2 -2
  144. package/patterns/forms-conditional-and-autocomplete/forms-conditional-and-autocomplete.examples.html +2 -2
  145. package/patterns/inline-dialog/inline-dialog.examples.html +2 -2
  146. package/patterns/marketing-engagement/marketing-engagement.examples.html +4 -4
  147. package/patterns/notifications-bell-and-digest/notifications-bell-and-digest.examples.html +1 -1
  148. package/patterns/permissions-matrix/permissions-matrix.examples.html +1 -1
  149. package/patterns/permissions-sharing/permissions-sharing.examples.html +2 -2
  150. package/patterns/profile-public-and-verification/profile-public-and-verification.examples.html +4 -4
  151. package/patterns/search-discovery/search-discovery.examples.html +2 -2
  152. package/styles/colors/semantics/features.css +8 -1
  153. package/styles/components.css +0 -4
  154. package/styles/type/roles.css +29 -9
  155. package/traits/arrow-grid-nav/arrow-grid-nav.js +1 -1
  156. package/traits/resize-observer/resize-observer.js +1 -1
  157. package/components/color-picker/color-picker.a2ui.json +0 -148
  158. package/components/color-picker/color-picker.class.js +0 -46
  159. package/components/color-picker/color-picker.css +0 -14
  160. package/components/color-picker/color-picker.d.ts +0 -99
  161. package/components/color-picker/color-picker.examples.md +0 -19
  162. package/components/color-picker/color-picker.js +0 -17
  163. package/components/color-picker/color-picker.yaml +0 -175
  164. package/components/datetime-picker/datetime-picker.a2ui.json +0 -256
  165. package/components/datetime-picker/datetime-picker.class.js +0 -58
  166. package/components/datetime-picker/datetime-picker.css +0 -11
  167. package/components/datetime-picker/datetime-picker.d.ts +0 -87
  168. package/components/datetime-picker/datetime-picker.examples.md +0 -25
  169. package/components/datetime-picker/datetime-picker.js +0 -17
  170. package/components/datetime-picker/datetime-picker.yaml +0 -254
  171. package/components/progress-row/progress-row.a2ui.json +0 -107
  172. package/components/progress-row/progress-row.class.js +0 -118
  173. package/components/progress-row/progress-row.css +0 -60
  174. package/components/progress-row/progress-row.d.ts +0 -24
  175. package/components/progress-row/progress-row.examples.md +0 -7
  176. package/components/progress-row/progress-row.js +0 -17
  177. package/components/progress-row/progress-row.yaml +0 -85
  178. package/components/toggle-group/toggle-group.a2ui.json +0 -148
  179. package/components/toggle-group/toggle-group.class.js +0 -195
  180. package/components/toggle-group/toggle-group.css +0 -127
  181. package/components/toggle-group/toggle-group.d.ts +0 -50
  182. package/components/toggle-group/toggle-group.examples.md +0 -33
  183. package/components/toggle-group/toggle-group.js +0 -18
  184. package/components/toggle-group/toggle-group.yaml +0 -135
  185. package/components/toggle-group/toggle-option.a2ui.json +0 -86
  186. package/components/toggle-group/toggle-option.yaml +0 -75
package/CHANGELOG.md CHANGED
@@ -1,5 +1,49 @@
1
1
  # Changelog — @adia-ai/web-components
2
2
 
3
+ ## [0.8.44] — 2026-08-20
4
+
5
+ ### Added
6
+ - **`chart-ui[y-min]`/`[y-max]` — pins the value-axis domain for cartesian types (gh#1690, ADIA2-9137).** `bar`, `line`, `area`, `scatter`, `multi-line`, `stacked-bar`, `grouped-bar`, and `composed` all read the pinned domain instead of auto-scaling to the data's own range — unset (default) is byte-identical to today's auto-scale (floor 0, ceiling the data max). Auto-scale already zero-floors a positive series (a migrating d3 consumer's own "pin the floor to 0" habit is the built-in default, not something to configure) — the pins earn their keep for three OTHER cases (review correction, replacing an earlier draft's inaccurate "auto-scale reads a percent drift as a cliff" claim): zooming a narrow window (`y-min="0.9" y-max="1"` magnifies a percent series clustered near 92-95%, which reads flatter against the full auto-scaled [0,1]), a mixed-sign series (the unpinned floor never goes below 0, so negative values clip at the axis unless `y-min` is pinned negative), and aligning two charts to one shared scale. N/A for radial/part-to-whole types (pie, donut, radar, radial-bar, gauge, funnel, treemap, sankey, segments, sparkline) — those never read a shared linear value axis. New `evals/visual/fixtures/comp-chart-n-ydomain-pinned.json` golden (outside the strict 60-fixture Charts floor's ratio-suffix sweep, same convention as the pre-existing `chart-dashboard` fixture) exercises the pinned path; the 60-fixture floor itself stays green, proving the unset path is unchanged. Added to the `/site/patterns/charts` showcase's ratified-attributes table + a zoomed-window demo (verified in a rendered DOM to produce visibly different axis labels and plotted positions, not just different attributes). Review finding: a datum exceeding the pinned domain now CLAMPS to the nearest edge for rendering (chart-ui's SVG is `overflow: visible`, so an unclamped value previously rendered off-canvas — e.g. `y-max="1"`, value `1.5` resolved to a negative y-coordinate bursting above the plot) — the displayed value label/tooltip still shows the real, unclamped value. 7 new regression tests assert every render path's geometry stays within its own `viewBox` for an out-of-domain datum.
7
+
8
+ ### Fixed
9
+ - **`text-ui[variant="label"|"kicker"|"section"]` render in the mono font stack instead of the UI-sans/heading families (gh#1718).** `label`/`kicker` are now `--a-font-family-code` at regular (400) weight; `section` is the same mono stack at medium (500) — operator-ruled component-level, answering the issue's own open question. Fixed at the shared L3 role tokens (`styles/type/roles.css`'s `--a-kicker-family`/`-weight`, `--a-label-family`/`-weight`, `--a-section-family`/`-weight`), not `text.css`'s own `[variant]` rules — those per-variant `--text-family`/`--text-weight` overrides are dead code for these three properties, since `roles.css`'s `[variant="<role>"]` attribute rule lives in the `utilities` cascade layer, which always wins over `text.css`'s `components`-layer rule by layer order regardless of selector specificity (ADR-0038 step 6 — text-ui is deliberately not excluded from this shared grammar). Side effect of fixing the true single-source token: `menu-ui`'s kicker-styled group headers and `richtext-ui`'s h2 (aliases `--richtext-h2-weight` to `--a-section-weight`) also move to the mono stack, as does `@adia-ai/web-modules`'s `admin-shell` settings-tab section `<h2>` (`--page-section-weight: var(--a-kicker-weight)`) — a weight-only bleed to regular/400, since its own `--page-section-size` reads `--a-kicker-size` (unchanged); `nav`/`nav-item`/`nav-group`'s own structural `[variant="section"]` is already excluded from this token's global rule and is unaffected.
10
+ - **`pagination-ui` first-connect adoption — `connected()` no longer duplicates its `<nav>` when upgrading over server-rendered light DOM (gh#1687, ADIA2-6243).** It guarded on a private `#nav` field (always `null` at construction) and unconditionally appended a fresh `<nav>`; it now queries for a pre-existing `<nav slot="nav">` child first and adopts it, matching `empty-state-ui`'s existing adoption pattern. Adopting the element alone wasn't the whole fix (review finding) — `render()`'s keyed reconcile diffs against `parent[KEY_MAP]`, a keyed `Map` populated by this element's own prior render calls, which a freshly-parsed SSR fragment never has; without seeding it, the first render treated every adopted child as unrecognized and stamped a full duplicate set of buttons alongside the originals. `#seedKeyMapFromAdoptedNav()` positionally zips the adopted children against the same key order the next render would produce, falling back to a normal rebuild on any shape mismatch — two further review findings on that fallback: (1) it bare-returned without clearing the adopted nav's stale children, so `reconcile()`'s own cleanup (which only removes entries already IN its key-map) left the stale children sitting alongside a full fresh render (reproduced: 3 stale placeholders + a correct 9-item render = 12 nodes); (2) child COUNT alone isn't a reliable correlation signal — a same-length fixture with the wrong tag/marker per position (e.g. bare `<span>`s standing in for `<button-ui>` page-cells) would pass a count-only check and get seeded, then `#updateItem()` (attribute-only, never a tag swap) leaves it permanently wrong. Fixed by validating each adopted child's tag + `data-*` marker against its expected item shape (`#childMatchesItem()`) and clearing the adopted nav's children on ANY mismatch before falling through, so the fallback is a genuine clean rebuild either way. Steady-state reconcile is unaffected.
11
+ - **`ssr-linkedom-smoke.mjs` gains a nested-rendering sweep (gh#1699) — proves gen-ui-kit's own light-DOM lifecycle never drops content when one registered custom element's children are themselves other registered custom elements, covering both `col-ui` wrapping `card-ui` DIRECTLY (gh#1699's reported shape) and one level deeper via an anchor wrapper (the mapped-JSX shape gh#1699's own repro used).** Investigated as an SSR content-loss report (Astro dropping `col-ui`/`card-ui` children under `custom-elements-ssr`, adiav2 ADIA2-9483) — root-caused to Astro core's own `renderComponent`/`renderSlots` nesting resolution, entirely outside this repo's dependency graph (no `astro`/`custom-elements-ssr` dep here to reproduce that pipeline against). This sweep is the durable proof of the one thing gen-ui-kit's lifecycle IS responsible for: a fully synchronous `connectedCallback()` round-trip never loses nested light-DOM children on its own. No production code changed.
12
+ - **`command-ui`'s search input rendered its placeholder (and, structurally, any typed text) centered instead of left-aligned next to the leading icon (gh#1697).** Root cause: the search input span and the list's own "No results found." empty-state `<div>` both toggle the same `data-empty` attribute for unrelated reasons, and `command.css`'s empty-state rule was a bare, unscoped `[data-empty]` selector that matched both — its `text-align: center` (meant only for the centered empty-state message) leaked onto the input whenever the input itself was empty. Scoped the rule to `[slot="list"] [data-empty]`, matching the DOM position the empty-state `<div>` actually renders at, removing the collision at its root.
13
+ - **Restored kebab-case props silently dropped from `.d.ts` (gh#1686, `dts-codegen.mjs` fix — see repo-root CHANGELOG).** `button-ui[iconTrailing]`/`[ariaLabel]`, and props on `context-menu-ui`, `integration-card-ui`, `noodles-ui`, `popover-ui`, `stream-ui`, `text-ui`, and `tour-ui` are restored to their `.d.ts` files. No runtime behavior change — these props already worked at runtime; only the shipped TypeScript surface was affected.
14
+ - **Corpus dead-attribute sweep (gh#1669, gh#1611 pt 2 / PR #1668's full-depth harvest-gate findings) — 111 findings across 46 demo/pattern/app-shell source files burned down to zero.** Each fix rewrites the SOURCE usage to the component's real yaml-contract prop rather than inventing a new one: `button-ui[icon-leading|icon-position|icon-only|formnovalidate|tooltip]` → `icon`/`icon-trailing`/(dropped, already auto-computed)/(dropped, unwired)/`title`; `input-ui[icon|icon-leading|icon-trailing|hint]` → `prefix`/`prefix`/`suffix`/`error`; `tag-ui[icon|icon-leading]` dropped (tag-ui has no icon slot); `text-ui[muted|align|tracking]` → `color="subtle"`/`text-align`/dropped; `card-ui[span|compact]` → inline `style="grid-column: span N"`/`size="sm"`; `image-ui[span]` → same grid-column style move; `stat-ui[delta]` → `change`; `nav-item-ui[active]` → `selected`; `otp-input-ui[autocomplete]` dropped (hardcoded internally); `chat-composer[placeholder]` dropped (no such prop); `chart-ui[height]` → inline style; `popover-ui[anchor]` dropped (no such prop — anchoring is implicit); `integration-card-ui[icon]` → `logo`; `progress-ui[indeterminate]` dropped (component's own contract: omit `value`). `input.yaml`'s own `a2ui.rules` doc text corrected alongside — it falsely claimed input-ui supports an inline `[hint]` prop (only `field-ui` does); that false claim was itself feeding the misuse this sweep just fixed.
15
+
16
+ ### Changed
17
+ - **`harvest-chunks.mjs`'s attr-gate promoted from advisory to blocking-by-default (gh#1669)**, now that the 111 known findings are zero — `npm run build:components` / `harvest:chunks` now REFUSE to write when a dead attribute reappears; pass `--advisory-attrs` to warn-only for a one-off triage run. `findAllOpenTagsInRange` hardened to blank `<script>`/`<style>` bodies and HTML comments before matching (reviewer note on PR #1668 — previously harmless only because `attrSchemas` drops unknown tag names, but latent).
18
+
19
+ ### Added
20
+ - **`table-ui` render-cell truncation contract via `[data-truncate]` (gh#1681).** Built-in cell types get single-line ellipsis truncation for free because their output is always a bare `<span>`/`<a>` direct child of the gridcell — a `column.render` function's markup isn't guaranteed to match that shape, so consumer-rendered cells clipped with no ellipsis and no documented opt-in. Set `data-truncate` on whichever rendered element (any tag, including a custom element) should single-line-ellipsis to extend the identical CSS contract built-ins already have; `[wrap]`/`[data-wrap]` override it back to multi-line the same way they do for built-ins. Built-in cell truncation is unchanged.
21
+ - **`table-ui[clickable-rows]` cursor affordance (gh#1680).** adiav2's zero-overrides purge deleted an app-side `[data-clickable]` cursor rule with no kit-side replacement, leaving row-click tables reading as inert. `row-click` fires unconditionally regardless of whether a listener is attached, so the cursor can't be inferred from listener presence — `clickable-rows` is an explicit boolean opt-in (reflected attribute, default `false`) that sets `cursor: pointer` on body rows. No behavior change for tables without it.
22
+ - **`table-toolbar-ui` container-query substrate + `stage` override attribute + breakpoint custom properties (gh#1660 step 1, ADR-0076).** `:scope` now declares `container-type: inline-size; container-name: table-toolbar` (width-only measurement, per `chart.css`'s own documented `size`-containment trap). A new `stage` attribute (enum `full | search-tight | icon-only | overflow`, default `""` = auto-snap, reflects) pins a compaction stage regardless of container width. Three normative `--table-toolbar-bp-search-tight`/`-icon-only`/`-overflow` custom properties (defaults `56rem`/`40rem`/`26rem`) are the single source of truth the coming compaction stages' `@container` rules and the `data-stage-resolved` reflection will both read. No stage-specific rendering lands yet — this step only lands the measurement substrate (PLAN step 1 of the compaction ladder).
23
+ - **`table-toolbar-ui` search-tight compaction stage (gh#1660 step 2, ADR-0076).** The search field's `--table-toolbar-search-min`/`-max` now step down to `--table-toolbar-search-tight-min`/`-max` (defaults `9rem`/`14rem`) once the toolbar's own `inline-size` container crosses `--table-toolbar-bp-search-tight` (`56rem` default), via `@container table-toolbar (max-width: 56rem)`. An explicit `stage="search-tight"` (or the tighter `"icon-only"`/`"overflow"` pins, ahead of their own steps 3/5 CSS) forces the same narrowed extents regardless of the container's actual width, per ADR-0076's `stage` override.
24
+ - **`table-toolbar-ui` icon-only controls stage + title tooltip + range-summary compact/hide (gh#1660 steps 3+4, ADR-0076).** At `--table-toolbar-bp-icon-only` (`40rem` default) — or an explicit `stage="icon-only"`/`"overflow"` pin — Filter/Sort/Columns drop their rendered text label (`::after { content: none }`, overriding `button.css`'s own generated-content rule) and take on square icon-button geometry; `aria-label` stays intact throughout (set unconditionally by `button-ui`'s own `render()`). Every control button now also carries a native `title` attribute unconditionally — harmless at wider stages, the hover-tooltip affordance once the label is visually hidden. At the same breakpoint, the range summary (`"Showing X–Y of N"`) hides only when a visible `[page-size]` select already carries the same context; when page-size is absent, the summary compacts to a short form (`"1–25/320"`) instead of disappearing — the toolbar's sole range indicator never fully vanishes.
25
+ - **`table-toolbar-ui` overflow-menu compaction stage for Filter/Sort/Columns (gh#1660 step 5, ADR-0076).** At `--table-toolbar-bp-overflow` (`26rem` default) — or an explicit `stage="overflow"` pin — the three granular control buttons hide (CSS-only; they stay in the DOM, never destroyed) and one "More" trigger appears instead — reuses the existing `menu-ui`/`menu-item-ui` primitives; adds `menu-ui` to `table-toolbar-ui`'s composition list. Selecting a menu item routes through the same `#togglePopover(kind, btn)` every granular button already calls. The trigger carries a static `aria-label="More table actions"` + `aria-haspopup="menu"` (a genuinely new interactive element). The overflow menu mirrors `chrome-only`/`no-*` suppression — a suppressed control stays suppressed inside the menu too, and the whole trigger hides once every item it would offer is suppressed.
26
+ - **`table-toolbar-ui` visual-eval fixture floor for the compaction ladder (gh#1660 step 6, ADR-0076).** Seven golden fixtures under `evals/visual/` — the four compaction stages (`full`/`search-tight`/`icon-only`/`overflow`, pinned deterministically via `[stage]`), the ratified adiav2 `chrome-only` list-page-toolbar-row shape at the icon-only stage (REQ-A-003's reduced-region case), and AC-003b's two range-summary branches (hide vs compact) as separate fixtures — wired into `npm run check` as `check:table-toolbar-visual-eval`, mirroring the Charts 2.0 visual-eval floor's own harness shape (`scripts/eval/visual-charts-ci.mjs`, gh#1624 step 8).
27
+ - **`table-toolbar-ui` reflects its resolved compaction stage as `data-stage-resolved` (gh#1660 step 7, ADR-0076, ADIA2-9123 S4-ii).** A lightweight `ResizeObserver` classifies the toolbar's own live inline-size against the same three `--table-toolbar-bp-*` breakpoints its CSS `@container` rules use (read live via `getComputedStyle`, falling back to each breakpoint's documented default only when the custom property can't be read at all), reflecting the result onto the host — mirrors `chart-ui`'s `data-ratio-resolved` convention, including its is-different guard. Purely informational: never drives table-toolbar's own rendering, which stays 100% CSS-driven (REQ-M-002). An explicit `stage` pin reports itself; the reflection updates on both a live resize and a `stage` attribute change alone.
28
+
29
+ ### Maintenance
30
+ - **`dist/` bundles rebuilt** in this cut's window (6 file(s)) — regenerated from the source changes described above, not independent edits.
31
+ - **`test/` touched in this release window** (1 file(s), e.g. `test/ssr-linkedom-smoke.test.js`) — carried by the entries above.
32
+
33
+ ## [0.8.43] — 2026-08-18
34
+
35
+ ### Removed
36
+ - **BREAKING — ADR-0063 attribute-grammar addendum cuts: `chart-ui[hide-average|hide-grid|hide-values]`, `chart-legend-ui[static]`, `pane-ui[side]`, `menu-item-ui[subtitle]` prop, and the `color-picker-ui` tag (gh#1617, gh#1377/gh#1563).** Each 0.8.42 dual-read compat shim is removed outright — the deprecated old spellings are now inert (no property, no mirroring, no console warning): `chart-ui` keeps only `no-average`/`no-grid`/`no-values`; `chart-legend-ui` keeps only `interactive` (default still `true` — the ADR's own default-inversion consumer-scan remains a separate follow-up); `pane-ui` keeps only `edge`; `menu-item-ui` keeps only the `description` prop (its `subtitle` SLOT is unchanged); `color-picker-ui`/`ColorPicker`/`UIColorPicker` no longer resolve at all — `color-area-ui`/`ColorArea`/`UIColorArea` is the sole tag/component/class. Operator ruling on gh#1562 (IDR-0004 deviation) lifted all 0.9.0-parked breaking cuts onto this 0.8.43 wave. See `.claude/docs/MIGRATION GUIDE.md` § Shipped in `0.8.43` — ADR-0063 attribute-grammar addendum.
37
+ - **BREAKING — `action-item-ui[subtitle]` prop cut (gh#1617, gh#1571).** `[description]` is the sole prop now; the `subtitle` SLOT is unchanged. Closes the gap PR #1569 flagged once `menu-item-ui` converged onto `description`. See `.claude/docs/MIGRATION GUIDE.md` § Shipped in `0.8.43` — `action-item-ui[description]` ADR-0063 convergence.
38
+ - **BREAKING — three 0.8.41-era deprecated components removed outright: `toggle-group-ui`/`toggle-option-ui`, `progress-row-ui`, `datetime-picker-ui` (gh#1617).** Each shipped its `status: deprecated` soft-deprecation additively in 0.8.41 with a one-time `console.warn`, behavior unchanged; all three are now removed — none of the three tags register as custom elements anymore. Migrate `<toggle-group-ui value>` + `<toggle-option-ui>` children → `<segmented-ui multiple value>` + `<segment-ui>` children (`<toggle-group-ui single>` → plain `<segmented-ui>`); `<progress-row-ui label value meta>` → `<progress-ui label value meta>` (mechanical tag rename); `<datetime-picker-ui>` → `<calendar-picker-ui precision="minute">`. Each alias's successor shipped in 0.8.41, one full release (0.8.42) before this cut — the maturity guard the ticket required. See `.claude/docs/MIGRATION GUIDE.md` § Shipped in `0.8.43` — three 0.8.41-era deprecated components removed.
39
+
40
+ ### Maintenance
41
+ - **`core/` touched in this release window** (1 file(s), e.g. `core/icons.js`) — carried by the entries above.
42
+ - **`dist/` bundles rebuilt** in this cut's window (6 file(s)) — regenerated from the source changes described above, not independent edits.
43
+ - **`patterns/` touched in this release window** (3 file(s), e.g. `chart-in-card/chart-in-card.examples.html`) — carried by the entries above.
44
+ - **`styles/` touched in this release window** (2 file(s), e.g. `semantics/features.css`) — carried by the entries above.
45
+ - **`traits/` touched in this release window** (2 file(s), e.g. `arrow-grid-nav/arrow-grid-nav.js`) — carried by the entries above.
46
+
3
47
  ## [0.8.42] — 2026-08-17
4
48
 
5
49
  ### Added
package/MIGRATION.md CHANGED
@@ -64,7 +64,7 @@ Version cuts and migration scope:
64
64
 
65
65
  - **Shipped in `0.8.41` (`progress-ui` retires `variant`, gh#1370)** — **BREAKING, no deprecation alias:** `<progress-ui>`'s `variant` prop (`bar` | `spinner`) is removed — progress is bar-only now. The former `variant="spinner"` render mode (a Sanctioned Mode Attribute per the component-token-contract) is gone; `<spinner-ui>` owns circular loading indicators (`arc`/`ring`/`dots`/`knight`). Migration: `<progress-ui variant="spinner">` → `<spinner-ui>` (pick the closest `variant`; `arc` is the nearest visual match to the old spinner render). `<progress-ui variant="bar">` → drop the attribute (bar was already the default). Filed from the catalog-regularity audit's C2 finding (gh#1363) — a 2026-06 merge folded a standalone spinner into progress as `variant="spinner"`, then a richer standalone `spinner-ui` was re-added later, leaving two circular-loading answers in the catalog; this rider un-forks them. See [§ Shipped in `0.8.41` — `progress-ui` retires `variant`](#upcoming--progress-ui-retires-variant-090-gh1370).
66
66
 
67
- - **Shipped in `0.8.41` (`input-ui` trims `type` enum, gh#1381)** — **BREAKING, no deprecation alias:** `<input-ui>`'s `type` enum drops `search`/`date`/`datetime-local`/`time`/`month`/`week`/`color` — none ever rendered a native affordance (all seven fell back to a plain contenteditable surface), so the enum was first-pass-VALID but functionally broken generation output. The implemented set is now exactly `text`/`email`/`password`/`number`/`tel`/`url`. Migration: `type="search"` → `<search-ui>`; `type="date"`/`"month"`/`"week"` → `<calendar-picker-ui>` (day granularity only — no dedicated month/week primitive exists); `type="datetime-local"` → `<datetime-picker-ui>`; `type="time"` → `<time-picker-ui>`; `type="color"` → `<color-input-ui>` (or `<color-picker-ui>` directly for a full-surface editor). Filed from the catalog-regularity audit's B10 finding (gh#1363). See [§ Shipped in `0.8.41` — `input-ui` trims `type` enum](#upcoming--input-ui-trims-type-enum-090-gh1381).
67
+ - **Shipped in `0.8.41` (`input-ui` trims `type` enum, gh#1381)** — **BREAKING, no deprecation alias:** `<input-ui>`'s `type` enum drops `search`/`date`/`datetime-local`/`time`/`month`/`week`/`color` — none ever rendered a native affordance (all seven fell back to a plain contenteditable surface), so the enum was first-pass-VALID but functionally broken generation output. The implemented set is now exactly `text`/`email`/`password`/`number`/`tel`/`url`. Migration: `type="search"` → `<search-ui>`; `type="date"`/`"month"`/`"week"` → `<calendar-picker-ui>` (day granularity only — no dedicated month/week primitive exists); `type="datetime-local"` → `<calendar-picker-ui precision="minute">` (`<datetime-picker-ui>` was cut in 0.8.43, gh#1617); `type="time"` → `<time-picker-ui>`; `type="color"` → `<color-input-ui>` (or `<color-area-ui>` directly for a full-surface editor — `<color-picker-ui>` was likewise cut in 0.8.43, gh#1617). Filed from the catalog-regularity audit's B10 finding (gh#1363). See [§ Shipped in `0.8.41` — `input-ui` trims `type` enum](#upcoming--input-ui-trims-type-enum-090-gh1381).
68
68
 
69
69
  - **Shipped in `0.8.41` (web-modules `data-*` state converges to bare attributes, gh#1332)** — **BREAKING, no deprecation alias:** two web-modules' declared `states:` entries drop a private `data-*` stamp for a bare state attribute, per the data-* usage sweep's Category A disposition (ADR-0056's rule generalized past `toggle-option-ui`). `<integrations-page-ui>`'s `empty-search`/`empty-data` states (was `data-empty-search`/`data-empty-data`) and `<onboarding-checklist-ui>`'s `complete` state (was `data-complete`) now match their own sibling states' existing bare-attribute convention (`loading`, `collapsed`). Migration: any `[data-empty-search]`/`[data-empty-data]`/`[data-complete]` CSS or script targeting these two modules moves to `[empty-search]`/`[empty-data]`/`[complete]`. See [§ Shipped in `0.8.41` — web-modules data-* state converges to bare attributes](#upcoming--web-modules-data--state-converges-to-bare-attributes-090-gh1332).
70
70
 
@@ -82,11 +82,13 @@ Version cuts and migration scope:
82
82
 
83
83
  - **Shipped in `0.8.41` (`image-ui` load/error states declared + converge to bare attributes, gh#1464)** — **BREAKING, no deprecation alias.** The final residue of the [data-* usage sweep](https://github.com/adiahealth/gen-ui-kit/issues/1332), deferred out of the residual round above because it needed a new `states:` declaration rather than a bare mapping change: `<image-ui>`'s `[data-loaded]`/`[data-error]` were genuine undeclared host-level state (never yaml-declared at all) — now declared as `loaded`/`error` in `image.yaml`'s `states:` list with bare `attribute:` mappings, matching qr-code-ui's own converged `error` state. Migration: any `[data-loaded]`/`[data-error]` CSS or script targeting `image-ui` moves to `[loaded]`/`[error]`; `image-ui`'s unrelated `[data-overlay]` skeleton-proximity marker (gh#1362) is untouched. A repo-wide consumer sweep (`rg -nU 'data-loaded|data-error'`) found zero external consumers of image-ui's forms specifically, so no deprecation alias was kept. The same ticket also dispositioned the `data-msg-*` validation-message config family (`data-msg-required`/`pattern`/`minlength`/`maxlength`/`min`/`max`/`bad-input`) as **exempt, non-breaking, no migration** — it stays `data-*` by design (component-side config read by `core/form.js`'s shared mixin across 7+ components, not host-reflected state; see `primitive-authoring/references/yaml-contract.md`'s new `data-msg-*` section for the full rationale). See [§ Shipped in `0.8.41` — image-ui load/error states declared + converge to bare attributes](#upcoming--image-ui-loaderror-states-declared--converge-to-bare-attributes-090-gh1464).
84
84
 
85
- - **Upcoming `0.9.0` (rename wave — `data-grid` / `data-resize`, docs/ops/plan/plan-090-rename-wave.md)** — **BREAKING at the 0.9.0 cut; a 0.8.x patch ships additive dual-read compat shims first (this entry), per the 2026-08-14 standing ruling that breaking renames never ship in a patch.** `admin-shell`'s consumer-authored 2/3-column content-layout helper `[data-grid]` / `[data-grid="3"]` renames to `[data-layout-grid]` / `[data-layout-grid="3"]` (sits with the `data-col`/`data-row`/`data-actions`/`data-spacer` form-layout-helper family it belongs to, outside every trait-owned root). The author-supplied drag-handle child of `<admin-sidebar>`/`<chat-sidebar>`/`<editor-sidebar>` `[data-resize]` renames to `[data-sidebar-resize]` (owner-scoped to the `*-sidebar` composite family, outside resize-observer's grandfathered `resize` root). Both attributes decorate plain light-DOM children the shells don't own (not a trait/component API), so only the name changes. **Now (0.8.x, additive):** both old and new names work JS reads dual-query (new name first, falling back to old with a one-time `console.warn`), CSS selectors dual-select via `:is()`, and `adia-lint`'s SHELL-RESIZE rule accepts either name (advisory `DEPRECATED-LAYOUT-NAME` flags the old ones). **At the `0.9.0` cut:** the old names stop resolving — `[data-resize]` reverts to `<admin-sidebar>`'s existing "no handle found" author warning (the correct post-cut behavior, no new code needed) and `[data-grid]` simply no longer matches any CSS rule. Migration (published again, final, at the cut): `git grep -l 'data-resize' | xargs perl -pi -e 's/\bdata-resize\b(?!-)/data-sidebar-resize/g'` and `git grep -l 'data-grid' | xargs perl -pi -e 's/\bdata-grid\b(?!-)/data-layout-grid/g'` (negative lookahead protects trait-owned `data-resize-*`/`data-grid-*` names — unrelated grandfathered attributes, e.g. resize-observer's `data-resize-width`/`data-resize-observer-observed` and arrow-grid-nav's `data-grid-columns`/`mode`/`active-row`/`active-col`, which this wave never touches). Tracked: gh#1560 (this shim) → gh#1561 (in-repo consumer + docs migration) → gh#1562 (the 0.9.0 cut). Disjoint from, and coordinated with, gh#1377/gh#1563's ADR-0063 rename set (chart `hide-*`, `pane[side]`, `color-picker-ui` → `color-area-ui`, `menu-item-ui[subtitle]`) same 0.9.0 cycle, separate PRs, no file overlap.
85
+ - **Shipped in `0.8.43` (rename wave — `data-grid` / `data-resize`, docs/ops/plan/plan-090-rename-wave.md)** — **BREAKING, no deprecation alias the 0.8.x dual-read compat shim (gh#1560/gh#1561) is removed.** `admin-shell`'s consumer-authored 2/3-column content-layout helper `[data-grid]` / `[data-grid="3"]` is renamed to `[data-layout-grid]` / `[data-layout-grid="3"]` (sits with the `data-col`/`data-row`/`data-actions`/`data-spacer` form-layout-helper family it belongs to, outside every trait-owned root). The author-supplied drag-handle child of `<admin-sidebar>`/`<chat-sidebar>`/`<editor-sidebar>` `[data-resize]` is renamed to `[data-sidebar-resize]` (owner-scoped to the `*-sidebar` composite family, outside resize-observer's grandfathered `resize` root). Both attributes decorate plain light-DOM children the shells don't own (not a trait/component API), so only the name changed. **The old names no longer resolve:** `[data-resize]` now falls through to `<admin-sidebar>`'s existing "no handle found" author warning (the correct post-cut behavior, no new code needed `<chat-sidebar>` has no such warning and is silently unhandled) and `[data-grid]` simply no longer matches any CSS rule. `adia-lint`'s SHELL-RESIZE rule now requires `[data-sidebar-resize]` only; its transition-window `DEPRECATED-LAYOUT-NAME` advisory is retired with the window it existed for. `KNOWN_GRAZING_PAIRS` (`scripts/build/traits-catalog.mjs`) drops both entries 2 0, and `verify:traits` now fails hard on any NEW overlap with either old name. Migration (mechanical): `git grep -l 'data-resize' | xargs perl -pi -e 's/\bdata-resize\b(?!-)/data-sidebar-resize/g'` and `git grep -l 'data-grid' | xargs perl -pi -e 's/\bdata-grid\b(?!-)/data-layout-grid/g'` (negative lookahead protects trait-owned `data-resize-*`/`data-grid-*` names — unrelated grandfathered attributes, e.g. resize-observer's `data-resize-width`/`data-resize-observer-observed` and arrow-grid-nav's `data-grid-columns`/`mode`/`active-row`/`active-col`, which this wave never touches). Shipped: gh#1560 (W1 shim) → gh#1561 (W2 in-repo consumer + docs migration) → gh#1562 (W3, this cut). **Deviates from release invariant 7 / IDR-0004** (breaking removals never ship in a patch) — operator ruling 2026-08-18 on gh#1562 moved this 0.9.0-parked cut into the `0.8.43` window ("whatever items are waiting for 0.9.0 should use 0.8.43"), the same recorded-deviation pattern as the `0.8.41` cut. Disjoint from, and coordinated with, gh#1377/gh#1563's ADR-0063 rename set (chart `hide-*`, `pane[side]`, `color-picker-ui` → `color-area-ui`, `menu-item-ui[subtitle]`) and gh#1617's own 0.8.43 breaking-wave build — separate PRs, no file overlap.
86
86
 
87
- - **Upcoming `0.9.0` (ADR-0063 attribute-grammar addendum — chart `no-*`, `chart-legend[interactive]`, `pane[edge]`, `color-area-ui`, `menu-item[description]`, gh#1377/gh#1563)** — **BREAKING at the 0.9.0 cut; a 0.8.42 patch ships additive dual-read compat shims first (this entry), per the same 2026-08-14 standing ruling gh#1560's rename wave follows: breaking renames never ship in a patch.** Five identifiers converge onto ADR-0063's ratified spellings: `chart-ui[hideAverage|hideGrid|hideValues]` → `[noAverage|noGrid|noValues]` (same polarity, straight rename — `no-*` has 8-component/12-attribute plurality over `hide-*`'s 2/4); `chart-legend-ui[static]` (opt-out) → `[interactive]` (opt-in) — **the default itself is NOT flipped in 0.8.42**, `[interactive]` defaults `true` so omitting both attributes keeps today's behavior unchanged, the real default-inversion to `false` is deferred to the 0.9.0 cut per the ADR's own consumer-scan requirement (every `<chart-legend-ui>` tag needs review first); `pane-ui[side]` → `[edge]` (pane-only — `drawer-ui[side]` keeps its own name/vocabulary unchanged); `menu-item-ui[subtitle]` → `[description]` (prop only — the `subtitle` SLOT is a separate, deliberately unrenamed surface); and the tag/component rename `color-picker-ui`/`ColorPicker`/`UIColorPicker` `color-area-ui`/`ColorArea`/`UIColorArea` (B11 — `-picker` is reserved for the outer trigger+popover composite shape; `color-picker-ui` was the sole violator, playing `calendar-grid-ui`'s inline-substrate role — mirrors the `datetime-picker-ui` → `calendar-picker-ui` alias shape from gh#1372). **Now (0.8.42, additive):** every old name/tag keeps working each renamed attribute dual-reads (new name wins when both are present, the old name resolves with a one-time `console.warn` when it's the only one set, no warn either way otherwise) and `<color-picker-ui>` is a thin `UIColorArea` subclass (`status: deprecated`) rather than a removed tag. `<color-input-ui>`'s own `composes:` and internal substrate references move to `<color-area-ui>` (its own tag/name is unaffected — it was already correctly *not* named `-picker` despite playing the composite role). **At the `0.9.0` cut:** the old names/tag stop resolving and `chart-legend-ui[interactive]`'s default flips to `false`. Migration (mechanical, at the cut): `git grep -l 'hide-average\|hide-grid\|hide-values' | xargs perl -pi -e 's/\bhide-average\b/no-average/g; s/\bhide-grid\b/no-grid/g; s/\bhide-values\b/no-values/g'`; `git grep -l 'pane-ui' | xargs perl -pi -e 's/(<pane-ui\b[^>]*\b)side=/\1edge=/g'`; `git grep -l 'menu-item-ui' | xargs perl -pi -e 's/(<menu-item-ui\b[^>]*\b)subtitle=/\1description=/g'`; `git grep -rl 'color-picker-ui\|UIColorPicker' | xargs perl -pi -e 's/color-picker-ui/color-area-ui/g; s/UIColorPicker/UIColorArea/g'`; every `<chart-legend-ui>` tag (with or without `[static]`/`[interactive]`) needs a manual pass adding `[interactive]` where the old default was relied on. Filed from the catalog-regularity audit's B2/B3(noodles-only, non-breaking)/B5/B11 findings (gh#1363) via [ADR-0063](../../docs/ops/adr/adr-0063-attribute-grammar-addendum.md). **Rejected/deferred, not part of this dispatch's five items:** `action-item-ui[subtitle]` (a newly-surfaced sole outlier once menu-item converges — flagged for a human decision, not fixed here); `segmented-ui[multiple]`'s comma-separated value encoding (operator-sanctioned as-is); `toggle-group-ui[value]`'s comma-string violation (tracked by gh#1363's own toggle-group/segmented consolidation candidate); `drilldown-ui[static]`→`[no-slide-transition]`, `alert-ui[dismissible]`, `card-ui[outline]`, `agent-reasoning-ui[status="done"]`→`"completed"`, and `noodles-ui[port-size]`/`[show-ports]` duplicate-entry cleanup (all ADR-0063 decisions, but each is its own separately-scoped follow-up build, not gh#1563's five-item scope). Disjoint from, and coordinated with, gh#1560/gh#1561/gh#1562's `data-grid`/`data-resize` rename wave — same 0.9.0 cycle, separate PRs, no file overlap. See [§ Upcoming — ADR-0063 attribute-grammar addendum](#upcoming--adr-0063-attribute-grammar-addendum-chart-no--chart-legendinteractive-paneedge-color-area-ui-menu-itemdescription-090-gh1377gh1563).
87
+ - **Shipped in `0.8.43` (ADR-0063 attribute-grammar addendum — chart `no-*`, `chart-legend[interactive]`, `pane[edge]`, `color-area-ui`, `menu-item[description]`, gh#1377/gh#1563/gh#1617)** — **BREAKING.** The 0.8.42 additive dual-read compat shims are removed per the operator ruling on gh#1562 (IDR-0004 deviation) lifting all 0.9.0-parked breaking cuts onto 0.8.43. Five identifiers now resolve to ADR-0063's ratified spellings ONLY: `chart-ui[hideAverage|hideGrid|hideValues]` → `[noAverage|noGrid|noValues]`; `chart-legend-ui[static]` → `[interactive]` (default still NOT flipped that inversion remains its own unscoped follow-up); `pane-ui[side]` → `[edge]`; `menu-item-ui[subtitle]` prop → `[description]` prop (the `subtitle` SLOT is unchanged); and `color-picker-ui`/`ColorPicker`/`UIColorPicker` are removed outright — `color-area-ui`/`ColorArea`/`UIColorArea` is the sole tag/component/class. Every old name/tag is now inert (no property, no dual-read, no warning). Filed from the catalog-regularity audit's B2/B3/B5/B11 findings (gh#1363) via [ADR-0063](../../docs/ops/adr/adr-0063-attribute-grammar-addendum.md). **Rejected/deferred:** `chart-legend-ui[interactive]`'s default-inversion to `false` (its own consumer-scan requirement is unmet); `drilldown-ui[static]`, `alert-ui[dismissible]`, `card-ui[outline]`, `agent-reasoning-ui[status]`, `noodles-ui[port-size]`/`[show-ports]` cleanup (separately-scoped follow-ups). See Shipped in `0.8.43` — ADR-0063 attribute-grammar addendum](#upcoming--adr-0063-attribute-grammar-addendum-chart-no--chart-legendinteractive-paneedge-color-area-ui-menu-itemdescription-090-gh1377gh1563).
88
88
 
89
- - **Upcoming `0.9.0` (ADR-0063 convergence — `action-item-ui[description]`, gh#1571)** — **BREAKING at the 0.9.0 cut; an additive patch ships a dual-read compat shim first (this entry), per the same 2026-08-14 standing ruling gh#1560's rename wave and gh#1563's ADR-0063 addendum both follow: breaking renames never ship in a patch.** `action-item-ui[subtitle]` `[description]` (prop only the `subtitle` **slot** is a separate, deliberately unrenamed surface, exactly like `menu-item-ui`'s own gh#1563 shape). This closes the gap PR #1569 itself flagged as a rejected/deferred follow-up once `menu-item-ui` converged onto `description`: `action-item-ui` became the corpus's remaining sole `subtitle` outlier. **Now (additive):** both names work — `[description]` wins outright when present (no warning — this is intentional forward-compatible spelling, not a fallback); `[subtitle]` resolves with a one-time `console.warn` per class when it's the only one set; a post-mount `[subtitle]` update keeps mirroring into `[description]` until `[description]` is authored directly, at which point it wins permanently. **At the `0.9.0` cut:** `[subtitle]` stops resolving. Migration (mechanical, at the cut): `git grep -l '<action-item-ui\b' | xargs perl -pi -e 's/(<action-item-ui\b[^>]*\b)subtitle=/\1description=/g'`. See [§ Upcoming — `action-item-ui[description]` ADR-0063 convergence](#upcoming--action-item-uidescription-adr-0063-convergence-090-gh1571). **Rejected/deferred:** the 0.9.0 breaking removal itself — same "no breaking rename in a patch" standing ruling as every sibling entry above.
89
+ - **Shipped in `0.8.43` (ADR-0063 convergence — `action-item-ui[description]`, gh#1571/gh#1617)** — **BREAKING.** `action-item-ui[subtitle]` prop is removed — `[description]` is the sole prop now (the `subtitle` **slot** is unchanged, exactly like `menu-item-ui`'s own gh#1563 shape). Closes the gap PR #1569 flagged as a follow-up once `menu-item-ui` converged onto `description`. See [§ Shipped in `0.8.43` — `action-item-ui[description]` ADR-0063 convergence](#upcoming--action-item-uidescription-adr-0063-convergence-090-gh1571).
90
+
91
+ - **Shipped in `0.8.43` (three 0.8.41-era deprecated components removed — `toggle-group-ui`/`toggle-option-ui`, `progress-row-ui`, `datetime-picker-ui`, gh#1617)** — **BREAKING.** Each shipped its `status: deprecated` soft-deprecation additively in `0.8.41` (its own entry below); all three are now removed outright per the same operator ruling (gh#1562, IDR-0004 deviation). None of the three tags register as custom elements anymore. Migrate: `<toggle-group-ui value>` + `<toggle-option-ui>` children → `<segmented-ui multiple value>` + `<segment-ui>` children (`<toggle-group-ui single>` → plain `<segmented-ui>`, no `[multiple]`); `<progress-row-ui label value meta>` → `<progress-ui label value meta>` (mechanical tag rename); `<datetime-picker-ui>` → `<calendar-picker-ui precision="minute">`. See [§ Shipped in `0.8.43` — three 0.8.41-era deprecated components removed](#shipped-in-0843--three-0841-era-deprecated-components-removed-toggle-group-uitoggle-option-ui-progress-row-ui-datetime-picker-ui-gh1617).
90
92
 
91
93
  Live demos and per-component docs at [ui-kit.exe.xyz/site/](https://ui-kit.exe.xyz/site/). The `adia-ui-migration` skill (in `.agents/skills/`) automates most of the mechanical sweeps in this guide.
92
94
 
@@ -751,9 +753,9 @@ finding, [gh#1363](https://github.com/adiahealth/gen-ui-kit/issues/1363).
751
753
  | `<input-ui type="search">` | `<search-ui>` (built-in magnifying-glass icon, clear button, debounced `search` event) |
752
754
  | `<input-ui type="date">` | `<calendar-picker-ui>` (single-date, day granularity) |
753
755
  | `<input-ui type="month">` / `type="week"` | `<calendar-picker-ui>` — no dedicated month/week-granularity primitive exists in the catalog; day granularity is the closest routed primitive |
754
- | `<input-ui type="datetime-local">` | `<datetime-picker-ui>` |
756
+ | `<input-ui type="datetime-local">` | `<calendar-picker-ui precision="minute">` (`<datetime-picker-ui>` was a thin compat alias, cut in 0.8.43, gh#1617) |
755
757
  | `<input-ui type="time">` | `<time-picker-ui>` |
756
- | `<input-ui type="color">` | `<color-input-ui>` (compact form-row swatch + popover) — or `<color-picker-ui>` directly for a full-surface editor (Tokens-Studio-style canvas) |
758
+ | `<input-ui type="color">` | `<color-input-ui>` (compact form-row swatch + popover) — or `<color-area-ui>` directly for a full-surface editor (Tokens-Studio-style canvas; `<color-picker-ui>` was likewise cut in 0.8.43, gh#1617) |
757
759
  | `<input-ui>` (no type, or `text`/`email`/`password`/`number`/`tel`/`url`) | unchanged |
758
760
 
759
761
  The routed primitives are NOT drop-in attribute-compatible with
@@ -1656,12 +1658,13 @@ npm run check
1656
1658
 
1657
1659
  ---
1658
1660
 
1659
- ## Upcoming — ADR-0063 attribute-grammar addendum (chart no-*, chart-legend[interactive], pane[edge], color-area-ui, menu-item[description], 0.9.0, gh#1377/gh#1563)
1661
+ ## Shipped in `0.8.43` — ADR-0063 attribute-grammar addendum (chart no-*, chart-legend[interactive], pane[edge], color-area-ui, menu-item[description], gh#1377/gh#1563/gh#1617)
1660
1662
 
1661
- **Shipped additively in `0.8.42`; BREAKING removal deferred to the `0.9.0`
1662
- cut** per the same 2026-08-14 standing ruling gh#1560's `data-grid`/
1663
- `data-resize` rename wave follows: a breaking rename never ships in a
1664
- patch. [ADR-0063](../../docs/ops/adr/adr-0063-attribute-grammar-addendum.md)
1663
+ **BREAKING.** The additive dual-read compat shims shipped in `0.8.42`
1664
+ (previous entry below); this cut removes the deprecated old spellings per
1665
+ the operator ruling recorded on gh#1562 (IDR-0004 deviation) that lifted
1666
+ all 0.9.0-parked breaking cuts onto `0.8.43`.
1667
+ [ADR-0063](../../docs/ops/adr/adr-0063-attribute-grammar-addendum.md)
1665
1668
  ratified six decisions from the catalog-regularity audit
1666
1669
  ([gh#1363](https://github.com/adiahealth/gen-ui-kit/issues/1363)); this
1667
1670
  entry covers the five identifiers gh#1563's own build scope named. (The
@@ -1670,42 +1673,36 @@ convergence — and the `alert`/`card`/`drilldown`/`noodles` decision-2
1670
1673
  items ship under their own separately-scoped follow-up tickets, not
1671
1674
  this one.)
1672
1675
 
1673
- ### What changed (additive, 0.8.42)
1676
+ ### What changed (BREAKING, 0.8.43)
1674
1677
 
1675
- | Component | Old (deprecated, still works) | New (canonical) | Shape |
1678
+ | Component | Old (removed) | New (sole spelling) | Shape |
1676
1679
  |---|---|---|---|
1677
1680
  | `<chart-ui>` | `[hide-average]` | `[no-average]` | straight rename, same polarity |
1678
1681
  | `<chart-ui>` | `[hide-grid]` | `[no-grid]` | straight rename, same polarity |
1679
1682
  | `<chart-ui>` | `[hide-values]` | `[no-values]` | straight rename, same polarity |
1680
- | `<chart-legend-ui>` | `[static]` (opt-out) | `[interactive]` (opt-in) | polarity flip — **default NOT yet flipped**, see below |
1683
+ | `<chart-legend-ui>` | `[static]` (opt-out) | `[interactive]` (opt-in) | polarity flip — **default still NOT flipped**, see below |
1681
1684
  | `<pane-ui>` | `[side]` | `[edge]` | straight rename, same type/default/enum (`drawer-ui[side]` is untouched — different component, different vocabulary) |
1682
1685
  | `<menu-item-ui>` | `[subtitle]` prop | `[description]` prop | straight rename — the `subtitle` **slot** is a separate surface, deliberately left unrenamed |
1683
- | `<color-picker-ui>` (tag) | `color-picker-ui` / `ColorPicker` / `UIColorPicker` | `color-area-ui` / `ColorArea` / `UIColorArea` | tag/component/class rename (B11, picker-naming convention) — old tag is now a thin `UIColorArea` subclass, `status: deprecated` |
1684
-
1685
- Every renamed attribute dual-reads: **new name wins** when both are
1686
- present (no warning this is intentional forward-compatible spelling,
1687
- not a fallback); the **old name resolves** with a one-time
1688
- `console.warn` per class when it's the only one set; neither present
1689
- keeps today's default. `<color-picker-ui>` keeps rendering/behaving
1690
- identically it inherits every prop, event, and token from
1691
- `<color-area-ui>` verbatim (mirrors the `<datetime-picker-ui>`
1692
- `<calendar-picker-ui>` alias shape from
1693
- [gh#1372](https://github.com/adiahealth/gen-ui-kit/issues/1372)).
1694
- `<color-input-ui>`'s own `composes:` list and internal substrate
1695
- references move to `<color-area-ui>`; `<color-input-ui>`'s own tag/name
1696
- is unaffected (it was already correctly *not* named `-picker` despite
1697
- playing the outer trigger+popover composite role).
1698
-
1699
- **`chart-legend-ui[interactive]`'s default is deliberately NOT flipped
1700
- in this release.** `[interactive]` defaults `true` — a `<chart-legend-ui>`
1701
- naming neither `[static]` nor `[interactive]` renders exactly as it
1702
- does today (interactive `<button>`-role rows). The ADR's own
1703
- "default-inversion" consumer-scan requirement — every `<chart-legend-ui>`
1704
- tag, with or without either attribute, reviewed for whether omission
1705
- was relying on the old default — is the 0.9.0 cut's own prerequisite,
1706
- not this one's.
1707
-
1708
- ### Migration (mechanical, recommended now / required at the 0.9.0 cut)
1686
+ | `<color-picker-ui>` (tag) | `color-picker-ui` / `ColorPicker` / `UIColorPicker` | `color-area-ui` / `ColorArea` / `UIColorArea` | tag/component/class removed outright (B11, picker-naming convention) — `color-area-ui` is the sole tag now |
1687
+
1688
+ The old names/tag no longer resolve: `[hide-average]`/`[hide-grid]`/
1689
+ `[hide-values]` are inert attributes on `<chart-ui>` (no property, no
1690
+ dual-read); `<chart-legend-ui>`'s `[static]` is likewise inert;
1691
+ `<pane-ui>`'s `[side]` is inert; `<menu-item-ui>`'s `[subtitle]` PROP is
1692
+ inert (the `subtitle` **slot** is unchanged); and `<color-picker-ui>` no
1693
+ longer registers as a custom element at all `<color-area-ui>` is the
1694
+ sole tag, class, and catalog identity.
1695
+
1696
+ **`chart-legend-ui[interactive]`'s default is still NOT flipped in this
1697
+ release.** `[interactive]` defaults `true` a `<chart-legend-ui>` naming
1698
+ neither attribute renders exactly as it does today (interactive
1699
+ `<button>`-role rows). The ADR's own "default-inversion" consumer-scan
1700
+ requirement every `<chart-legend-ui>` tag, with or without the
1701
+ attribute, reviewed for whether omission was relying on the old default —
1702
+ remains open and is out of this ticket's scope (gh#1617); it ships under
1703
+ its own separately-scoped follow-up.
1704
+
1705
+ ### Migration (mechanical already applied repo-wide in gh#1617)
1709
1706
 
1710
1707
  ```bash
1711
1708
  git grep -l 'hide-average\|hide-grid\|hide-values' -- packages apps playgrounds site site-a2ui \
@@ -1721,12 +1718,13 @@ git grep -rl 'color-picker-ui\|UIColorPicker' -- packages apps playgrounds site
1721
1718
  | xargs perl -pi -e 's/color-picker-ui/color-area-ui/g; s/UIColorPicker/UIColorArea/g'
1722
1719
  ```
1723
1720
 
1724
- Every `<chart-legend-ui>` tag additionally needs a manual (not
1725
- mechanical) review pass: add `[interactive]` explicitly wherever the
1726
- page relied on the current "interactive by default" behavior, ahead of
1727
- the 0.9.0 default-inversion.
1721
+ Every `<chart-legend-ui>` tag still needs a manual (not mechanical)
1722
+ review pass: add `[interactive]` explicitly wherever the page relied on
1723
+ the current "interactive by default" behavior, ahead of the still-open
1724
+ default-inversion follow-up.
1728
1725
 
1729
- **Find every affected consumer site:**
1726
+ **Find every remaining consumer site (external consumers upgrading from
1727
+ pre-0.8.42):**
1730
1728
 
1731
1729
  ```bash
1732
1730
  npm run qa:contract-migration-scan -- --roots packages,apps,playgrounds,site,site-a2ui \
@@ -1740,24 +1738,19 @@ scanner's own default) — `site-a2ui/` is a separate top-level directory
1740
1738
  the default roots miss entirely (ADR-0063's own consumer-scan
1741
1739
  mechanism section explains why).
1742
1740
 
1743
- ### Rejected / deferred (explicitly out of gh#1563's scope)
1741
+ ### Rejected / deferred (explicitly out of gh#1617's scope)
1744
1742
 
1745
- - `action-item-ui[subtitle]` — once `menu-item-ui` converges onto
1746
- `description`, `action-item-ui` becomes the corpus's new sole
1747
- `subtitle` outlier (the same shape of defect ADR-0063 just fixed for
1748
- menu-item). Flagged as a discovered follow-up candidate for a human
1749
- ticketing decision — not fixed in this dispatch.
1750
1743
  - `segmented-ui[multiple]`'s comma-separated value encoding — sanctioned
1751
1744
  as-is (operator ruling, gh#1563, 2026-08-17).
1752
- - `toggle-group-ui[value]`'s comma-string violationtracked by
1753
- gh#1363's own `toggle-group`/`segmented` consolidation candidate, not
1754
- duplicated here.
1745
+ - `chart-legend-ui[interactive]`'s default-inversion to `false` the
1746
+ ADR's own consumer-scan requirement is still unmet; ships under its own
1747
+ separately-scoped follow-up, not this ticket.
1755
1748
  - `drilldown-ui[static]` → `[no-slide-transition]`, `alert-ui[dismissible]`
1756
1749
  retirement, `card-ui[outline]` retirement,
1757
1750
  `agent-reasoning-ui[status="done"]` → `"completed"`, and
1758
1751
  `noodles-ui[port-size]`/`[show-ports]` duplicate-entry cleanup — all
1759
1752
  real ADR-0063 decisions, each its own separately-scoped follow-up
1760
- build, not part of gh#1563's five-item scope.
1753
+ build, not part of this ticket's scope.
1761
1754
  - `menu-item-ui`'s `subtitle` **slot** (distinct from the prop) — left
1762
1755
  unrenamed by design; renaming a slot is a different, unscoped surface.
1763
1756
 
@@ -1772,43 +1765,38 @@ npm run check
1772
1765
 
1773
1766
  ---
1774
1767
 
1775
- ## Upcoming — `action-item-ui[description]` ADR-0063 convergence (0.9.0, gh#1571)
1768
+ ## Shipped in `0.8.43` — `action-item-ui[description]` ADR-0063 convergence (gh#1571/gh#1617)
1776
1769
 
1777
- **Shipped additively; BREAKING removal deferred to the `0.9.0` cut** per
1778
- the same 2026-08-14 standing ruling gh#1560's `data-grid`/`data-resize`
1779
- rename wave and gh#1563's ADR-0063 addendum both follow: a breaking rename
1780
- never ships in a patch. This closes the gap [PR
1781
- #1569](https://github.com/adiahealth/gen-ui-kit/pull/1569) itself flagged
1782
- under its own "Rejected/deferred" section: once `<menu-item-ui>` converged
1783
- its `subtitle` prop onto `description` ([ADR-0063](../../docs/ops/adr/adr-0063-attribute-grammar-addendum.md),
1770
+ **BREAKING.** The additive dual-read compat shim shipped ahead of this cut
1771
+ (previous entry below); this cut removes the deprecated `[subtitle]` prop
1772
+ per the operator ruling recorded on gh#1562 (IDR-0004 deviation) that
1773
+ lifted all 0.9.0-parked breaking cuts onto `0.8.43`. This closes the gap
1774
+ [PR #1569](https://github.com/adiahealth/gen-ui-kit/pull/1569) itself
1775
+ flagged under its own "Rejected/deferred" section: once `<menu-item-ui>`
1776
+ converged its `subtitle` prop onto `description`
1777
+ ([ADR-0063](../../docs/ops/adr/adr-0063-attribute-grammar-addendum.md),
1784
1778
  gh#1563), `<action-item-ui>` became the corpus's remaining sole `subtitle`
1785
1779
  outlier — the same shape of defect ADR-0063 fixed for menu-item.
1786
1780
 
1787
- ### What changed (additive)
1781
+ ### What changed (BREAKING, 0.8.43)
1788
1782
 
1789
- | Component | Old (deprecated, still works) | New (canonical) | Shape |
1783
+ | Component | Old (removed) | New (sole spelling) | Shape |
1790
1784
  |---|---|---|---|
1791
1785
  | `<action-item-ui>` | `[subtitle]` prop | `[description]` prop | straight rename — the `subtitle` **slot** is a separate surface, deliberately left unrenamed |
1792
1786
 
1793
- `[description]` wins outright when present (no warning this is
1794
- intentional forward-compatible spelling, not a fallback); `[subtitle]`
1795
- resolves with a one-time `console.warn` per class when it's the only one
1796
- set; neither present keeps today's default (empty string, no rendered
1797
- subtitle row). Unlike `menu-item-ui`'s own gh#1563 shim (which only
1798
- resolves once, at `connected()`), `action-item-ui`'s shim re-resolves on
1799
- every render until `[description]` is authored directly, so a post-mount
1800
- `[subtitle]` attribute update keeps propagating exactly as it did before
1801
- this shim existed — once `[description]` is set directly (by attribute or
1802
- property), it wins permanently and further `[subtitle]` churn is ignored.
1787
+ `[description]` is now the only prop`[subtitle]` no longer resolves,
1788
+ mirrors, or warns (it is an inert attribute; the `subtitle` **slot** is
1789
+ unaffected and still renders custom content the same way it always did).
1803
1790
 
1804
- ### Migration (mechanical, recommended now / required at the 0.9.0 cut)
1791
+ ### Migration (mechanical already applied repo-wide in gh#1617)
1805
1792
 
1806
1793
  ```bash
1807
1794
  git grep -l '<action-item-ui\b' -- packages apps playgrounds site site-a2ui \
1808
1795
  | xargs perl -pi -e 's/(<action-item-ui\b[^>]*\b)subtitle=/\1description=/g'
1809
1796
  ```
1810
1797
 
1811
- **Find every affected consumer site:**
1798
+ **Find every remaining consumer site (external consumers upgrading from
1799
+ pre-0.8.43):**
1812
1800
 
1813
1801
  ```bash
1814
1802
  npm run qa:contract-migration-scan -- --roots packages,apps,playgrounds,site,site-a2ui \
@@ -1819,9 +1807,6 @@ rg -nU '<action-item-ui\b[^>]*\bsubtitle=' \
1819
1807
 
1820
1808
  ### Rejected / deferred
1821
1809
 
1822
- - The 0.9.0 breaking removal itself — deferred under the same "no breaking
1823
- rename in a patch" 2026-08-14 standing ruling every sibling rename-wave
1824
- entry in this guide follows.
1825
1810
  - `action-item-ui`'s `subtitle` **slot** (distinct from the prop) — left
1826
1811
  unrenamed by design, same as `menu-item-ui`'s own gh#1563 shape;
1827
1812
  renaming a slot is a different, unscoped surface.
@@ -1837,6 +1822,71 @@ npm run check
1837
1822
 
1838
1823
  ---
1839
1824
 
1825
+ ## Shipped in `0.8.43` — three 0.8.41-era deprecated components removed (toggle-group-ui/toggle-option-ui, progress-row-ui, datetime-picker-ui, gh#1617)
1826
+
1827
+ **BREAKING.** These three components shipped their `status: deprecated`
1828
+ soft-deprecation additively in `0.8.41` (each entry above) — behavior
1829
+ unchanged, a one-time `console.warn`, kept fully working. This cut removes
1830
+ them outright, per the operator ruling recorded on gh#1562 (IDR-0004
1831
+ deviation) that lifted all 0.9.0-parked breaking cuts onto `0.8.43`. Each
1832
+ alias's successor shipped ≥1 release before `0.8.43` (`0.8.41`, with
1833
+ `0.8.42` released in between) — the maturity guard gh#1617 verified
1834
+ against CHANGELOG/git history before cutting.
1835
+
1836
+ ### What changed (BREAKING, 0.8.43)
1837
+
1838
+ | Removed component | Successor | Migration |
1839
+ |---|---|---|
1840
+ | `<toggle-group-ui>` + `<toggle-option-ui>` | `<segmented-ui multiple>` + `<segment-ui>` | `<toggle-group-ui value="…">` + `<toggle-option-ui>` children → `<segmented-ui multiple value="…">` + `<segment-ui>` children (identical comma-separated `value` encoding; `text`/`icon`/`disabled` map directly). `<toggle-group-ui single value="…">` → `<segmented-ui value="…">` (no `[multiple]`) |
1841
+ | `<progress-row-ui>` | `<progress-ui label meta>` | `<progress-row-ui label="…" value="…" meta="…">` → `<progress-ui label="…" value="…" meta="…">` (mechanical tag rename, identical attribute names). `variant` (color-family prop) has no successor — recolor via `--progress-fill` |
1842
+ | `<datetime-picker-ui>` | `<calendar-picker-ui precision="minute">` | `<datetime-picker-ui>` → `<calendar-picker-ui precision="minute">` (or `precision="second"`) |
1843
+
1844
+ None of the three tags register as custom elements anymore — mounting
1845
+ one is inert markup (no upgrade, no shadow/light DOM stamped). The A2UI
1846
+ catalog identities `ToggleGroup`, `ToggleOption`, `ProgressRow`, and
1847
+ `DatetimePicker` are removed from `registry.js`; generation should never
1848
+ emit them.
1849
+
1850
+ **Behavioral gap carried over from the `0.8.41` entry:** `<toggle-group-ui
1851
+ single>`'s clear-on-reclick has no `<segmented-ui>` equivalent — see the
1852
+ `0.8.41` entry above for the capture-phase workaround if a migrated
1853
+ consumer relied on it.
1854
+
1855
+ ### Migration (mechanical)
1856
+
1857
+ ```bash
1858
+ git grep -l '<toggle-group-ui\|<toggle-option-ui' -- packages apps playgrounds site site-a2ui \
1859
+ -g '!*CHANGELOG*.md' -g '!**/dist/**' -g '!*.examples.md' -g '!*MIGRATION*' -g '!.claude/docs/**'
1860
+ # Rewrite by hand — this is a tag + structural rename, not an attribute
1861
+ # rename: parent AND child tags change, and `single` mode maps to
1862
+ # segmented-ui's OWN single-select (absence of [multiple]), not a prop.
1863
+
1864
+ git grep -l '<progress-row-ui\b' -- packages apps playgrounds site site-a2ui \
1865
+ | xargs perl -pi -e 's/<progress-row-ui\b/<progress-ui/g; s/<\/progress-row-ui>/<\/progress-ui>/g'
1866
+
1867
+ git grep -l '<datetime-picker-ui\b' -- packages apps playgrounds site site-a2ui \
1868
+ | xargs perl -pi -e 's/<datetime-picker-ui(\s|>)/<calendar-picker-ui precision="minute"\1/g; s/<\/datetime-picker-ui>/<\/calendar-picker-ui>/g'
1869
+ ```
1870
+
1871
+ **Find every remaining consumer site (external consumers upgrading from
1872
+ pre-0.8.43):**
1873
+
1874
+ ```bash
1875
+ rg -nU '<toggle-group-ui[^>]*>|<toggle-option-ui[^>]*>|<progress-row-ui[^>]*>|<datetime-picker-ui[^>]*>' \
1876
+ -g '!*CHANGELOG*.md' -g '!**/dist/**' -g '!*.examples.md' -g '!*MIGRATION*' -g '!.claude/docs/**'
1877
+ ```
1878
+
1879
+ A hit means a broken page — none of these three tags register anymore.
1880
+
1881
+ ### Verify
1882
+
1883
+ ```bash
1884
+ node scripts/build/components.mjs --verify
1885
+ npm run check
1886
+ ```
1887
+
1888
+ ---
1889
+
1840
1890
  ## Migrating to `@adia-ai/*@v0.8.23` (2026-07-30)
1841
1891
 
1842
1892
  - **Removed: the `--a-font` alias** (pre-ADR-0035 name, DEPRECATED since the 0.8.x line). Any surviving `font-family: var(--a-font)` goes invalid-at-computed-value-time → `inherit` → UA **serif** — the visible symptom is Times-faced labels on an otherwise-correct page.
package/USAGE.md CHANGED
@@ -1219,7 +1219,7 @@ For a compact swatch-and-popover authoring shape:
1219
1219
  </popover-ui>
1220
1220
  ```
1221
1221
 
1222
- The popover handles focus management + click-outside dismiss; the button-ui exposes the right ARIA semantics. `<color-area-ui>` fires `change` events that bubble through the popover — listen on the popover host. (`<color-area-ui>` is the ADR-0063/gh#1563 rename of `<color-picker-ui>`, which still works as a deprecated alias — this recipe is exactly what `<color-input-ui>` canonicalizes.)
1222
+ The popover handles focus management + click-outside dismiss; the button-ui exposes the right ARIA semantics. `<color-area-ui>` fires `change` events that bubble through the popover — listen on the popover host. (`<color-area-ui>` is the ADR-0063/gh#1563 rename of `<color-picker-ui>`; the old tag was cut in 0.8.43, gh#1617 — this recipe is exactly what `<color-input-ui>` canonicalizes.)
1223
1223
 
1224
1224
  ### §221g — `[data-scheme]` ancestor opt-in for color scheme
1225
1225
 
package/color/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @adia-ai/web-components/color — color-space conversion + gamut utilities
3
- * shared between primitives (color-picker, swatch, contrast-badge) and
3
+ * shared between primitives (color-area, swatch, contrast-badge) and
4
4
  * available to consumers as a standalone subpath.
5
5
  *
6
6
  * §301 (v0.5.12, FEEDBACK-29 re-bucket from v0.6.0). Pure functions; no
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://adiaui.dev/a2ui/v0_9/components/ActionItem.json",
4
4
  "title": "ActionItem",
5
- "description": "Child of <action-list-ui>. One actionable row — icon + label + optional\ndescription, forwards activation to the parent action-list. Row contract\nconverges on <menu-item-ui>: icon/text/description/value/variant/disabled\nprops and icon/text/subtitle/trailing slot overrides (#1363 C5).\n(`subtitle` is a deprecated alias for `description` ADR-0063, gh#1571.)",
5
+ "description": "Child of <action-list-ui>. One actionable row — icon + label + optional\ndescription, forwards activation to the parent action-list. Row contract\nconverges on <menu-item-ui>: icon/text/description/value/variant/disabled\nprops and icon/text/subtitle/trailing slot overrides (#1363 C5). (The\ndeprecated `subtitle` prop alias for `description` was cut in 0.8.43 —\nADR-0063, gh#1571/gh#1617.)",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -14,7 +14,7 @@
14
14
  ],
15
15
  "properties": {
16
16
  "description": {
17
- "description": "Optional secondary description line rendered under the label. Canonical spelling (ADR-0063, gh#1571) replacing `subtitle` — converges action-item onto the same spelling <menu-item-ui> adopted under gh#1563.",
17
+ "description": "Optional secondary description line rendered under the label. Canonical spelling (ADR-0063, gh#1571) replacing `subtitle` — converges action-item onto the same spelling <menu-item-ui> adopted under gh#1563. The deprecated `subtitle` prop alias was cut in 0.8.43 (gh#1617).",
18
18
  "type": "string",
19
19
  "default": ""
20
20
  },
@@ -30,11 +30,6 @@
30
30
  "description": "Leading icon name (Phosphor).",
31
31
  "type": "string"
32
32
  },
33
- "subtitle": {
34
- "description": "DEPRECATED (ADR-0063, gh#1571) — use `description` instead. Same type/default/rendered position; kept working as a dual-read compat shim (one-time console.warn when it's the name that resolves). Removed in 0.9.0. (The `subtitle` SLOT below is a separate surface, deliberately left unrenamed in this pass — see its own description.)",
35
- "type": "string",
36
- "default": ""
37
- },
38
33
  "text": {
39
34
  "description": "Action label.",
40
35
  "type": "string"
@@ -85,7 +80,7 @@
85
80
  "description": "Override the [icon] glyph with a custom slotted element (custom icon-ui, image, avatar). Mutually exclusive with the [icon] attribute — slot child wins."
86
81
  },
87
82
  "subtitle": {
88
- "description": "Custom secondary-line content override; falls through to the [description] prop (or its deprecated [subtitle] alias ADR-0063, gh#1571) if not slotted. The slot's own name is unchanged by that rename — this is a distinct, deliberately-unrenamed surface."
83
+ "description": "Custom secondary-line content override; falls through to the [description] prop if not slotted (ADR-0063, gh#1571 — the deprecated [subtitle] prop alias was cut in 0.8.43, gh#1617). The slot's own name is unchanged by that rename — this is a distinct, deliberately-unrenamed surface."
89
84
  },
90
85
  "text": {
91
86
  "description": "Custom label content; falls through to [text] prop if not slotted."
@@ -19,8 +19,9 @@ description: |-
19
19
  Child of <action-list-ui>. One actionable row — icon + label + optional
20
20
  description, forwards activation to the parent action-list. Row contract
21
21
  converges on <menu-item-ui>: icon/text/description/value/variant/disabled
22
- props and icon/text/subtitle/trailing slot overrides (#1363 C5).
23
- (`subtitle` is a deprecated alias for `description` ADR-0063, gh#1571.)
22
+ props and icon/text/subtitle/trailing slot overrides (#1363 C5). (The
23
+ deprecated `subtitle` prop alias for `description` was cut in 0.8.43 —
24
+ ADR-0063, gh#1571/gh#1617.)
24
25
 
25
26
  props:
26
27
  icon:
@@ -29,21 +30,13 @@ props:
29
30
  text:
30
31
  description: Action label.
31
32
  type: string
32
- subtitle:
33
- description: >-
34
- DEPRECATED (ADR-0063, gh#1571) — use `description` instead. Same
35
- type/default/rendered position; kept working as a dual-read compat
36
- shim (one-time console.warn when it's the name that resolves).
37
- Removed in 0.9.0. (The `subtitle` SLOT below is a separate surface,
38
- deliberately left unrenamed in this pass — see its own description.)
39
- type: string
40
- default: ''
41
33
  description:
42
34
  description: >-
43
35
  Optional secondary description line rendered under the label.
44
36
  Canonical spelling (ADR-0063, gh#1571) replacing `subtitle` —
45
37
  converges action-item onto the same spelling <menu-item-ui> adopted
46
- under gh#1563.
38
+ under gh#1563. The deprecated `subtitle` prop alias was cut in
39
+ 0.8.43 (gh#1617).
47
40
  type: string
48
41
  default: ''
49
42
  value:
@@ -70,9 +63,10 @@ slots:
70
63
  subtitle:
71
64
  description: >-
72
65
  Custom secondary-line content override; falls through to the
73
- [description] prop (or its deprecated [subtitle] aliasADR-0063,
74
- gh#1571) if not slotted. The slot's own name is unchanged by that
75
- rename — this is a distinct, deliberately-unrenamed surface.
66
+ [description] prop if not slotted (ADR-0063, gh#1571the
67
+ deprecated [subtitle] prop alias was cut in 0.8.43, gh#1617). The
68
+ slot's own name is unchanged by that rename — this is a distinct,
69
+ deliberately-unrenamed surface.
76
70
  trailing:
77
71
  description: >-
78
72
  Trailing element pinned to the far edge (shortcut hint, badge, caret).
@@ -108,5 +102,5 @@ a2ui:
108
102
  reason: 'Converged with <menu-item-ui>''s danger-variant guidance (#1363 C5).'
109
103
  - rule: 'Prefer [icon]/[text]/[description] props over slotted markup; use slot="icon"/"text"/"subtitle"/"trailing" only for custom markup (e.g. a slotted <kbd> shortcut hint).'
110
104
  reason: 'Row-contract convergence with <menu-item-ui> (#1363 C5).'
111
- - rule: 'NOTE (ADR-0063, gh#1571): [subtitle] is now a deprecated alias for [description] kept as a dual-read compat shim (new-name precedence, one-time console.warn), removed at the 0.9.0 cut.'
105
+ - rule: 'NOTE (ADR-0063, gh#1571): the deprecated [subtitle] prop alias for [description] was cut in 0.8.43 (gh#1617) [description] is the sole prop now.'
112
106
  reason: 'Convergence with <menu-item-ui>''s own subtitle -> description rename (gh#1563).'