@adia-ai/web-components 0.8.41 → 0.8.43

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 (134) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/MIGRATION.md +240 -3
  3. package/USAGE.md +4 -4
  4. package/color/index.js +1 -1
  5. package/components/action-list/action-item.a2ui.json +7 -7
  6. package/components/action-list/action-item.yaml +21 -9
  7. package/components/action-list/action-list.class.js +13 -7
  8. package/components/action-list/action-list.d.ts +2 -2
  9. package/components/button/button.yaml +1 -1
  10. package/components/calendar-picker/calendar-picker.a2ui.json +1 -1
  11. package/components/calendar-picker/calendar-picker.class.js +2 -3
  12. package/components/calendar-picker/calendar-picker.css +16 -18
  13. package/components/calendar-picker/calendar-picker.yaml +2 -2
  14. package/components/card/card.css +3 -3
  15. package/components/chart/chart.a2ui.json +8 -8
  16. package/components/chart/chart.class.js +21 -19
  17. package/components/chart/chart.d.ts +6 -6
  18. package/components/chart/chart.yaml +16 -9
  19. package/components/chart-legend/chart-legend.a2ui.json +7 -11
  20. package/components/chart-legend/chart-legend.class.js +17 -8
  21. package/components/chart-legend/chart-legend.css +5 -2
  22. package/components/chart-legend/chart-legend.d.ts +2 -2
  23. package/components/chart-legend/chart-legend.yaml +12 -8
  24. package/components/check/check.css +9 -0
  25. package/components/{color-picker/color-picker.a2ui.json → color-area/color-area.a2ui.json} +15 -12
  26. package/components/{color-picker/color-picker.class.js → color-area/color-area.class.js} +10 -8
  27. package/components/color-area/color-area.css +185 -0
  28. package/components/color-area/color-area.d.ts +66 -0
  29. package/components/color-area/color-area.examples.md +19 -0
  30. package/components/color-area/color-area.js +17 -0
  31. package/components/{color-picker/color-picker.yaml → color-area/color-area.yaml} +17 -9
  32. package/components/color-input/color-input.a2ui.json +5 -5
  33. package/components/color-input/color-input.class.js +9 -6
  34. package/components/color-input/color-input.css +1 -1
  35. package/components/color-input/color-input.js +2 -2
  36. package/components/color-input/color-input.yaml +14 -12
  37. package/components/description-list/description-list.a2ui.json +1 -1
  38. package/components/description-list/description-list.css +1 -1
  39. package/components/description-list/description-list.d.ts +1 -1
  40. package/components/description-list/description-list.yaml +1 -1
  41. package/components/drilldown/drilldown.a2ui.json +3 -0
  42. package/components/drilldown/drilldown.css +8 -1
  43. package/components/drilldown/drilldown.yaml +2 -0
  44. package/components/field/field.a2ui.json +1 -1
  45. package/components/field/field.class.js +5 -2
  46. package/components/field/field.yaml +1 -1
  47. package/components/index.js +1 -4
  48. package/components/input/input.a2ui.json +4 -4
  49. package/components/input/input.class.js +8 -0
  50. package/components/input/input.css +6 -0
  51. package/components/input/input.yaml +11 -8
  52. package/components/integration-card/integration-card.examples.md +2 -1
  53. package/components/menu/menu-item.a2ui.json +7 -7
  54. package/components/menu/menu-item.yaml +20 -7
  55. package/components/menu/menu.class.js +13 -7
  56. package/components/menu/menu.d.ts +2 -2
  57. package/components/pane/pane.a2ui.json +11 -11
  58. package/components/pane/pane.class.js +8 -4
  59. package/components/pane/pane.css +15 -10
  60. package/components/pane/pane.d.ts +10 -9
  61. package/components/pane/pane.yaml +9 -7
  62. package/components/progress/progress.a2ui.json +1 -1
  63. package/components/progress/progress.class.js +2 -2
  64. package/components/progress/progress.d.ts +1 -1
  65. package/components/progress/progress.yaml +2 -2
  66. package/components/radio/radio.css +7 -0
  67. package/components/search/search.css +10 -1
  68. package/components/segment/segment.a2ui.json +1 -2
  69. package/components/segment/segment.css +10 -0
  70. package/components/segment/segment.yaml +1 -2
  71. package/components/segmented/segmented.a2ui.json +1 -3
  72. package/components/segmented/segmented.class.js +2 -2
  73. package/components/segmented/segmented.yaml +2 -4
  74. package/components/select/select.css +6 -0
  75. package/components/step-progress/step-progress.yaml +1 -1
  76. package/components/swatch/swatch.yaml +1 -1
  77. package/components/switch/switch.css +8 -0
  78. package/components/table-toolbar/table-toolbar.a2ui.json +42 -1
  79. package/components/table-toolbar/table-toolbar.class.js +166 -14
  80. package/components/table-toolbar/table-toolbar.css +46 -0
  81. package/components/table-toolbar/table-toolbar.d.ts +13 -1
  82. package/components/table-toolbar/table-toolbar.yaml +104 -14
  83. package/components/textarea/textarea.css +4 -0
  84. package/components/time-picker/time-picker.yaml +3 -2
  85. package/components/tree/tree.yaml +1 -1
  86. package/components/upload/upload.class.js +16 -0
  87. package/components/upload/upload.d.ts +7 -0
  88. package/components/upload/upload.yaml +7 -3
  89. package/core/icons.js +3 -1
  90. package/custom-elements.json +147 -468
  91. package/dist/host.min.css +1 -1
  92. package/dist/host.sheet.js +1 -1
  93. package/dist/theme-provider.min.js +1 -1
  94. package/dist/web-components.min.css +1 -1
  95. package/dist/web-components.min.js +88 -85
  96. package/dist/web-components.sheet.js +1 -1
  97. package/index.d.ts +9 -13
  98. package/package.json +1 -1
  99. package/patterns/admin-shell/admin-shell.examples.html +2 -2
  100. package/patterns/chart-in-card/chart-in-card.examples.html +10 -10
  101. package/patterns/conversion-funnel/conversion-funnel.html +2 -2
  102. package/patterns/editor-shell/editor-shell.examples.html +3 -3
  103. package/patterns/form-system/form-system.examples.html +1 -1
  104. package/styles/colors/semantics/features.css +8 -1
  105. package/styles/components.css +1 -4
  106. package/traits/arrow-grid-nav/arrow-grid-nav.js +1 -1
  107. package/traits/resize-observer/resize-observer.js +1 -1
  108. package/components/color-picker/color-picker.css +0 -182
  109. package/components/color-picker/color-picker.d.ts +0 -99
  110. package/components/color-picker/color-picker.examples.md +0 -19
  111. package/components/color-picker/color-picker.js +0 -17
  112. package/components/datetime-picker/datetime-picker.a2ui.json +0 -256
  113. package/components/datetime-picker/datetime-picker.class.js +0 -58
  114. package/components/datetime-picker/datetime-picker.css +0 -11
  115. package/components/datetime-picker/datetime-picker.d.ts +0 -87
  116. package/components/datetime-picker/datetime-picker.examples.md +0 -25
  117. package/components/datetime-picker/datetime-picker.js +0 -17
  118. package/components/datetime-picker/datetime-picker.yaml +0 -254
  119. package/components/progress-row/progress-row.a2ui.json +0 -107
  120. package/components/progress-row/progress-row.class.js +0 -118
  121. package/components/progress-row/progress-row.css +0 -60
  122. package/components/progress-row/progress-row.d.ts +0 -24
  123. package/components/progress-row/progress-row.examples.md +0 -7
  124. package/components/progress-row/progress-row.js +0 -17
  125. package/components/progress-row/progress-row.yaml +0 -85
  126. package/components/toggle-group/toggle-group.a2ui.json +0 -148
  127. package/components/toggle-group/toggle-group.class.js +0 -195
  128. package/components/toggle-group/toggle-group.css +0 -127
  129. package/components/toggle-group/toggle-group.d.ts +0 -50
  130. package/components/toggle-group/toggle-group.examples.md +0 -33
  131. package/components/toggle-group/toggle-group.js +0 -18
  132. package/components/toggle-group/toggle-group.yaml +0 -135
  133. package/components/toggle-group/toggle-option.a2ui.json +0 -86
  134. package/components/toggle-group/toggle-option.yaml +0 -75
package/CHANGELOG.md CHANGED
@@ -1,5 +1,40 @@
1
1
  # Changelog — @adia-ai/web-components
2
2
 
3
+ ## [0.8.43] — 2026-08-18
4
+
5
+ ### Removed
6
+ - **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.
7
+ - **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.
8
+ - **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.
9
+
10
+ ### Maintenance
11
+ - **`core/` touched in this release window** (1 file(s), e.g. `core/icons.js`) — carried by the entries above.
12
+ - **`dist/` bundles rebuilt** in this cut's window (6 file(s)) — regenerated from the source changes described above, not independent edits.
13
+ - **`patterns/` touched in this release window** (3 file(s), e.g. `chart-in-card/chart-in-card.examples.html`) — carried by the entries above.
14
+ - **`styles/` touched in this release window** (2 file(s), e.g. `semantics/features.css`) — carried by the entries above.
15
+ - **`traits/` touched in this release window** (2 file(s), e.g. `arrow-grid-nav/arrow-grid-nav.js`) — carried by the entries above.
16
+
17
+ ## [0.8.42] — 2026-08-17
18
+
19
+ ### Added
20
+ - **ADR-0063 `0.8.42` compat shims (gh#1562 wave, PR #1569).** Dual-read/alias shims easing the planned 0.9.0 renames: chart `no-*` boolean axes, `chart-legend-ui[interactive]`, `pane-ui[edge]`, the `color-area-ui` alias, and `menu-item-ui[description]`. Old names keep working this cut; the breaking removals ride 0.9.0 per the migration guide.
21
+ - **Rename-wave W1 compat shims (gh#1560, PR #1565).** `data-sidebar-resize` / `data-layout-grid` are dual-read alongside the legacy `data-resize` / `data-grid` stamps.
22
+
23
+ ### Changed
24
+ - **Rename-wave W2 (gh#1561, PR #1567).** In-repo consumers, demos, and docs migrate to the new `data-sidebar-resize` / `data-layout-grid` names; the W1 shims keep external consumers working.
25
+
26
+ ### Fixed
27
+ - **`table-toolbar`** falls back to the column key when a column label is whitespace-only, and hides the title cluster when it has nothing to show (PR #1573, gh#1571 family).
28
+
29
+ ### Maintenance
30
+ - ADR-0069 Class-R derived artifacts re-derived on main by the new `derived-resync` job (PR #1568).
31
+ - Demo-attribute sweep touched `traits/view-transition`'s examples (one dead attribute dropped, gh#1576 family, PR #1584) — no trait API change.
32
+ - **`components/` touched in this release window** (62 file(s), e.g. `chart-legend/chart-legend.a2ui.json`) — carried by the entries above.
33
+ - **`core/` touched in this release window** (1 file(s), e.g. `core/icons.js`) — carried by the entries above.
34
+ - **`dist/` bundles rebuilt** in this cut's window (4 file(s)) — regenerated from the source changes described above, not independent edits.
35
+ - **`patterns/` touched in this release window** (2 file(s), e.g. `admin-shell/admin-shell.examples.html`) — carried by the entries above.
36
+ - **`styles/` touched in this release window** (1 file(s), e.g. `styles/components.css`) — carried by the entries above.
37
+
3
38
  ## [0.8.41] — 2026-08-17
4
39
 
5
40
  ### 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,6 +82,14 @@ 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
+ - **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
+
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
+
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).
92
+
85
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.
86
94
 
87
95
  ---
@@ -745,9 +753,9 @@ finding, [gh#1363](https://github.com/adiahealth/gen-ui-kit/issues/1363).
745
753
  | `<input-ui type="search">` | `<search-ui>` (built-in magnifying-glass icon, clear button, debounced `search` event) |
746
754
  | `<input-ui type="date">` | `<calendar-picker-ui>` (single-date, day granularity) |
747
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 |
748
- | `<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) |
749
757
  | `<input-ui type="time">` | `<time-picker-ui>` |
750
- | `<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) |
751
759
  | `<input-ui>` (no type, or `text`/`email`/`password`/`number`/`tel`/`url`) | unchanged |
752
760
 
753
761
  The routed primitives are NOT drop-in attribute-compatible with
@@ -1650,6 +1658,235 @@ npm run check
1650
1658
 
1651
1659
  ---
1652
1660
 
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)
1662
+
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)
1668
+ ratified six decisions from the catalog-regularity audit
1669
+ ([gh#1363](https://github.com/adiahealth/gen-ui-kit/issues/1363)); this
1670
+ entry covers the five identifiers gh#1563's own build scope named. (The
1671
+ sixth — `agent-reasoning-ui[status]`'s `done`→`completed` stage-terminal
1672
+ convergence — and the `alert`/`card`/`drilldown`/`noodles` decision-2
1673
+ items ship under their own separately-scoped follow-up tickets, not
1674
+ this one.)
1675
+
1676
+ ### What changed (BREAKING, 0.8.43)
1677
+
1678
+ | Component | Old (removed) | New (sole spelling) | Shape |
1679
+ |---|---|---|---|
1680
+ | `<chart-ui>` | `[hide-average]` | `[no-average]` | straight rename, same polarity |
1681
+ | `<chart-ui>` | `[hide-grid]` | `[no-grid]` | straight rename, same polarity |
1682
+ | `<chart-ui>` | `[hide-values]` | `[no-values]` | straight rename, same polarity |
1683
+ | `<chart-legend-ui>` | `[static]` (opt-out) | `[interactive]` (opt-in) | polarity flip — **default still NOT flipped**, see below |
1684
+ | `<pane-ui>` | `[side]` | `[edge]` | straight rename, same type/default/enum (`drawer-ui[side]` is untouched — different component, different vocabulary) |
1685
+ | `<menu-item-ui>` | `[subtitle]` prop | `[description]` prop | straight rename — the `subtitle` **slot** is a separate surface, deliberately left unrenamed |
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)
1706
+
1707
+ ```bash
1708
+ git grep -l 'hide-average\|hide-grid\|hide-values' -- packages apps playgrounds site site-a2ui \
1709
+ | 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'
1710
+
1711
+ git grep -l '<pane-ui\b' -- packages apps playgrounds site site-a2ui \
1712
+ | xargs perl -pi -e 's/(<pane-ui\b[^>]*\b)side=/\1edge=/g'
1713
+
1714
+ git grep -l '<menu-item-ui\b' -- packages apps playgrounds site site-a2ui \
1715
+ | xargs perl -pi -e 's/(<menu-item-ui\b[^>]*\b)subtitle=/\1description=/g'
1716
+
1717
+ git grep -rl 'color-picker-ui\|UIColorPicker' -- packages apps playgrounds site site-a2ui \
1718
+ | xargs perl -pi -e 's/color-picker-ui/color-area-ui/g; s/UIColorPicker/UIColorArea/g'
1719
+ ```
1720
+
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.
1725
+
1726
+ **Find every remaining consumer site (external consumers upgrading from
1727
+ pre-0.8.42):**
1728
+
1729
+ ```bash
1730
+ npm run qa:contract-migration-scan -- --roots packages,apps,playgrounds,site,site-a2ui \
1731
+ --base <pre-upgrade-ref> --head <post-upgrade-ref>
1732
+ rg -nU 'hide-average|hide-grid|hide-values|<pane-ui\b[^>]*\bside=|<menu-item-ui\b[^>]*\bsubtitle=|color-picker-ui|UIColorPicker' \
1733
+ -g '!**/dist/**' -g '!**/*.a2ui.json' -g '!docs/adr/**'
1734
+ ```
1735
+
1736
+ `--roots packages,apps,playgrounds,site,site-a2ui` is required (not the
1737
+ scanner's own default) — `site-a2ui/` is a separate top-level directory
1738
+ the default roots miss entirely (ADR-0063's own consumer-scan
1739
+ mechanism section explains why).
1740
+
1741
+ ### Rejected / deferred (explicitly out of gh#1617's scope)
1742
+
1743
+ - `segmented-ui[multiple]`'s comma-separated value encoding — sanctioned
1744
+ as-is (operator ruling, gh#1563, 2026-08-17).
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.
1748
+ - `drilldown-ui[static]` → `[no-slide-transition]`, `alert-ui[dismissible]`
1749
+ retirement, `card-ui[outline]` retirement,
1750
+ `agent-reasoning-ui[status="done"]` → `"completed"`, and
1751
+ `noodles-ui[port-size]`/`[show-ports]` duplicate-entry cleanup — all
1752
+ real ADR-0063 decisions, each its own separately-scoped follow-up
1753
+ build, not part of this ticket's scope.
1754
+ - `menu-item-ui`'s `subtitle` **slot** (distinct from the prop) — left
1755
+ unrenamed by design; renaming a slot is a different, unscoped surface.
1756
+
1757
+ ### Verify
1758
+
1759
+ ```bash
1760
+ npm run qa:contract-migration-scan -- --roots packages,apps,playgrounds,site,site-a2ui \
1761
+ --base <pre-upgrade-ref> --head <post-upgrade-ref>
1762
+ node scripts/build/components.mjs --verify
1763
+ npm run check
1764
+ ```
1765
+
1766
+ ---
1767
+
1768
+ ## Shipped in `0.8.43` — `action-item-ui[description]` ADR-0063 convergence (gh#1571/gh#1617)
1769
+
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),
1778
+ gh#1563), `<action-item-ui>` became the corpus's remaining sole `subtitle`
1779
+ outlier — the same shape of defect ADR-0063 fixed for menu-item.
1780
+
1781
+ ### What changed (BREAKING, 0.8.43)
1782
+
1783
+ | Component | Old (removed) | New (sole spelling) | Shape |
1784
+ |---|---|---|---|
1785
+ | `<action-item-ui>` | `[subtitle]` prop | `[description]` prop | straight rename — the `subtitle` **slot** is a separate surface, deliberately left unrenamed |
1786
+
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).
1790
+
1791
+ ### Migration (mechanical — already applied repo-wide in gh#1617)
1792
+
1793
+ ```bash
1794
+ git grep -l '<action-item-ui\b' -- packages apps playgrounds site site-a2ui \
1795
+ | xargs perl -pi -e 's/(<action-item-ui\b[^>]*\b)subtitle=/\1description=/g'
1796
+ ```
1797
+
1798
+ **Find every remaining consumer site (external consumers upgrading from
1799
+ pre-0.8.43):**
1800
+
1801
+ ```bash
1802
+ npm run qa:contract-migration-scan -- --roots packages,apps,playgrounds,site,site-a2ui \
1803
+ --base <pre-upgrade-ref> --head <post-upgrade-ref>
1804
+ rg -nU '<action-item-ui\b[^>]*\bsubtitle=' \
1805
+ -g '!**/dist/**' -g '!**/*.a2ui.json' -g '!docs/adr/**'
1806
+ ```
1807
+
1808
+ ### Rejected / deferred
1809
+
1810
+ - `action-item-ui`'s `subtitle` **slot** (distinct from the prop) — left
1811
+ unrenamed by design, same as `menu-item-ui`'s own gh#1563 shape;
1812
+ renaming a slot is a different, unscoped surface.
1813
+
1814
+ ### Verify
1815
+
1816
+ ```bash
1817
+ npm run qa:contract-migration-scan -- --roots packages,apps,playgrounds,site,site-a2ui \
1818
+ --base <pre-upgrade-ref> --head <post-upgrade-ref>
1819
+ node scripts/build/components.mjs --verify
1820
+ npm run check
1821
+ ```
1822
+
1823
+ ---
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
+
1653
1890
  ## Migrating to `@adia-ai/*@v0.8.23` (2026-07-30)
1654
1891
 
1655
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
@@ -437,7 +437,7 @@ Some primitives emit named events beyond `change`/`input`:
437
437
  - `<select-ui>` — emits `action` for option-callbacks with `detail.action`
438
438
  - `<search-ui>` — emits `search` after debounce with `detail.value`
439
439
  - `<chat-composer>` — emits `composer-submit` on Enter with `detail.value`
440
- - `<color-picker-ui>` — emits `input` + `change` with rich detail (`{ value, l, c, h, hex, oklch }`)
440
+ - `<color-area-ui>` — emits `input` + `change` with rich detail (`{ value, l, c, h, hex, oklch }`)
441
441
 
442
442
  Each primitive's yaml lists its complete event surface. Live demos at `https://ui-kit.exe.xyz/site/components/<name>`.
443
443
 
@@ -1208,18 +1208,18 @@ When a custom `[slot="header"]` carries action buttons (Copy / Download / Edit),
1208
1208
 
1209
1209
  §206 (v0.5.7) added the `[slot="action"]` / `[slot="actions"]` / `[data-no-toggle]` exclusion list to the toggle-cascade.
1210
1210
 
1211
- ### §221f — `<color-picker-ui>` inline pattern
1211
+ ### §221f — `<color-area-ui>` inline pattern
1212
1212
 
1213
1213
  For a compact swatch-and-popover authoring shape:
1214
1214
 
1215
1215
  ```html
1216
1216
  <popover-ui trigger="click" placement="bottom-start">
1217
1217
  <button-ui slot="trigger" text="" icon="palette" aria-label="Pick a color"></button-ui>
1218
- <color-picker-ui slot="content" value="oklch(0.7 0.15 220)" alpha="off"></color-picker-ui>
1218
+ <color-area-ui slot="content" value="oklch(0.7 0.15 220)" alpha="off"></color-area-ui>
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-picker-ui>` fires `change` events that bubble through the popover — listen on the popover host.
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\nsubtitle, forwards activation to the parent action-list. Row contract\nconverges on <menu-item-ui>: icon/text/subtitle/value/variant/disabled\nprops and icon/text/subtitle/trailing slot overrides (#1363 C5).",
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
  {
@@ -13,6 +13,11 @@
13
13
  }
14
14
  ],
15
15
  "properties": {
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. The deprecated `subtitle` prop alias was cut in 0.8.43 (gh#1617).",
18
+ "type": "string",
19
+ "default": ""
20
+ },
16
21
  "component": {
17
22
  "const": "ActionItem"
18
23
  },
@@ -25,11 +30,6 @@
25
30
  "description": "Leading icon name (Phosphor).",
26
31
  "type": "string"
27
32
  },
28
- "subtitle": {
29
- "description": "Optional secondary description line rendered under the label.",
30
- "type": "string",
31
- "default": ""
32
- },
33
33
  "text": {
34
34
  "description": "Action label.",
35
35
  "type": "string"
@@ -80,7 +80,7 @@
80
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."
81
81
  },
82
82
  "subtitle": {
83
- "description": "Custom secondary-line content override; falls through to [subtitle] prop if not slotted."
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."
84
84
  },
85
85
  "text": {
86
86
  "description": "Custom label content; falls through to [text] prop if not slotted."
@@ -17,9 +17,11 @@ category: navigation
17
17
  version: 1
18
18
  description: |-
19
19
  Child of <action-list-ui>. One actionable row — icon + label + optional
20
- subtitle, forwards activation to the parent action-list. Row contract
21
- converges on <menu-item-ui>: icon/text/subtitle/value/variant/disabled
22
- props and icon/text/subtitle/trailing slot overrides (#1363 C5).
20
+ description, forwards activation to the parent action-list. Row contract
21
+ converges on <menu-item-ui>: icon/text/description/value/variant/disabled
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.)
23
25
 
24
26
  props:
25
27
  icon:
@@ -28,8 +30,13 @@ props:
28
30
  text:
29
31
  description: Action label.
30
32
  type: string
31
- subtitle:
32
- description: Optional secondary description line rendered under the label.
33
+ description:
34
+ description: >-
35
+ Optional secondary description line rendered under the label.
36
+ Canonical spelling (ADR-0063, gh#1571) replacing `subtitle` —
37
+ converges action-item onto the same spelling <menu-item-ui> adopted
38
+ under gh#1563. The deprecated `subtitle` prop alias was cut in
39
+ 0.8.43 (gh#1617).
33
40
  type: string
34
41
  default: ''
35
42
  value:
@@ -55,8 +62,11 @@ slots:
55
62
  description: Custom label content; falls through to [text] prop if not slotted.
56
63
  subtitle:
57
64
  description: >-
58
- Custom secondary-line content override; falls through to [subtitle]
59
- prop if not slotted.
65
+ Custom secondary-line content override; falls through to the
66
+ [description] prop if not slotted (ADR-0063, gh#1571 — the
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.
60
70
  trailing:
61
71
  description: >-
62
72
  Trailing element pinned to the far edge (shortcut hint, badge, caret).
@@ -82,7 +92,7 @@ a2ui:
82
92
  allowedParents:
83
93
  - ActionList
84
94
  rules:
85
- - rule: 'Child of <action-list-ui> — one inline-action row with icon + label + optional subtitle + optional trailing shortcut/badge.'
95
+ - rule: 'Child of <action-list-ui> — one inline-action row with icon + label + optional description + optional trailing shortcut/badge.'
86
96
  reason: 'Action-list cluster contract.'
87
97
  - rule: 'Different from <menu-item-ui>: action-items live inline in content surfaces; menu-items live inside <menu-ui> popovers.'
88
98
  reason: 'Context boundary.'
@@ -90,5 +100,7 @@ a2ui:
90
100
  reason: 'Different intent — actions vs navigation.'
91
101
  - rule: 'Use [variant="danger"] exclusively for destructive/irreversible actions (Delete, Remove). Pair danger items with an explicit confirm flow when the action cannot be undone.'
92
102
  reason: 'Converged with <menu-item-ui>''s danger-variant guidance (#1363 C5).'
93
- - rule: 'Prefer [icon]/[text]/[subtitle] props over slotted markup; use slot="icon"/"text"/"subtitle"/"trailing" only for custom markup (e.g. a slotted <kbd> shortcut hint).'
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).'
94
104
  reason: 'Row-contract convergence with <menu-item-ui> (#1363 C5).'
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.'
106
+ reason: 'Convergence with <menu-item-ui>''s own subtitle -> description rename (gh#1563).'
@@ -94,7 +94,12 @@ export class UIActionItem extends UIElement {
94
94
  static properties = {
95
95
  icon: { type: String, default: '', reflect: true },
96
96
  text: { type: String, default: '', reflect: true },
97
- subtitle: { type: String, default: '', reflect: true },
97
+ // ADR-0063 (gh#1571) `description` is canonical (action-item was
98
+ // the corpus's remaining `subtitle` outlier once <menu-item-ui>
99
+ // converged under gh#1563); the deprecated `subtitle` PROP dual-read
100
+ // shim was cut in 0.8.43 (gh#1617). The `subtitle` SLOT (a separate
101
+ // surface — see action-item.yaml) is unchanged.
102
+ description: { type: String, default: '', reflect: true },
98
103
  value: { type: String, default: '', reflect: true },
99
104
  variant: { type: String, default: 'default', reflect: true },
100
105
  disabled: { type: Boolean, default: false, reflect: true },
@@ -143,10 +148,10 @@ export class UIActionItem extends UIElement {
143
148
  this.appendChild(span);
144
149
  }
145
150
 
146
- if (this.subtitle && !this.#ownChild('[slot="subtitle"]')) {
151
+ if (this.description && !this.#ownChild('[slot="subtitle"]')) {
147
152
  const sub = this.#stampMark(document.createElement('span'));
148
153
  sub.setAttribute('slot', 'subtitle');
149
- sub.textContent = this.subtitle;
154
+ sub.textContent = this.description;
150
155
  this.appendChild(sub);
151
156
  }
152
157
  }
@@ -181,15 +186,16 @@ export class UIActionItem extends UIElement {
181
186
  const textEl = this.#ownChild('[slot="text"]');
182
187
  if (this.#wasStamped(textEl)) textEl.textContent = this.text;
183
188
 
184
- // Sync subtitle only touch elements we stamped.
189
+ // Sync subtitle (backed by the `description` prop — ADR-0063, gh#1571)
190
+ // — only touch elements we stamped.
185
191
  const subEl = this.#ownChild('[slot="subtitle"]');
186
- if (this.subtitle) {
192
+ if (this.description) {
187
193
  if (subEl) {
188
- if (this.#wasStamped(subEl)) subEl.textContent = this.subtitle;
194
+ if (this.#wasStamped(subEl)) subEl.textContent = this.description;
189
195
  } else {
190
196
  const sub = this.#stampMark(document.createElement('span'));
191
197
  sub.setAttribute('slot', 'subtitle');
192
- sub.textContent = this.subtitle;
198
+ sub.textContent = this.description;
193
199
  this.appendChild(sub);
194
200
  }
195
201
  } else if (this.#wasStamped(subEl)) {
@@ -34,12 +34,12 @@ export class UIActionList extends UIElement {
34
34
  }
35
35
 
36
36
  export class UIActionItem extends UIElement {
37
+ /** 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). */
38
+ description: string;
37
39
  /** Disables click + keyboard activation; aria-disabled is set. */
38
40
  disabled: boolean;
39
41
  /** Leading icon name (Phosphor). */
40
42
  icon: string;
41
- /** Optional secondary description line rendered under the label. */
42
- subtitle: string;
43
43
  /** Action label. */
44
44
  text: string;
45
45
  /** Identifier passed to the action-list change/activate handlers. */
@@ -165,7 +165,7 @@ a2ui:
165
165
  reason: 'Per existing slot.discipline rule — visual redundancy guard.'
166
166
  - rule: 'For navigation (route-change) use <nav-item-ui> or anchor; button-ui is for actions only.'
167
167
  reason: 'Action vs navigation semantics.'
168
- - rule: 'For toggleable on/off state use <switch-ui>; for multi-select clusters use <segmented-ui multiple> + <segment-ui> (gh#1369 — <toggle-group-ui>/<toggle-option-ui> are deprecated).'
168
+ - rule: 'For toggleable on/off state use <switch-ui>; for multi-select clusters use <segmented-ui multiple> + <segment-ui> (<toggle-group-ui>/<toggle-option-ui> were cut in 0.8.43, gh#1617, gh#1369).'
169
169
  reason: 'Stateless action vs stateful toggle.'
170
170
  anti_patterns:
171
171
  - description: >-
@@ -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/CalendarPicker.json",
4
4
  "title": "CalendarPicker",
5
- "description": "Date (and, per `[precision]`, date+time) picker with trigger button and popover panel. Form-associated input emitting an ISO date (or, when `precision` is `minute`/`second`, ISO datetime) string via change events; supports min/max and disabled-date masks. Use for single-date or single-datetime input in forms; for date ranges use <date-range-picker-ui> instead of composing two calendar-picker instances. gh#1372 (#1363 C3c) folded <datetime-picker-ui>'s surface into this widened `precision` axis — see the deprecated <datetime-picker-ui> alias.",
5
+ "description": "Date (and, per `[precision]`, date+time) picker with trigger button and popover panel. Form-associated input emitting an ISO date (or, when `precision` is `minute`/`second`, ISO datetime) string via change events; supports min/max and disabled-date masks. Use for single-date or single-datetime input in forms; for date ranges use <date-range-picker-ui> instead of composing two calendar-picker instances. gh#1372 (#1363 C3c) folded <datetime-picker-ui>'s surface into this widened `precision` axis — that thin alias component was cut in 0.8.43 (gh#1617); this is the sole tag now.",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -25,9 +25,8 @@
25
25
  * `"minute"`/`"second"` additionally composes `<divider-ui>` +
26
26
  * `<time-picker-ui>` as a second pane, `value` becomes a full ISO 8601
27
27
  * datetime string, and `hour-cycle`/`step`/`locale` become active — the same
28
- * contract `<datetime-picker-ui>` shipped, which is now a deprecated thin
29
- * alias subclass (see datetime-picker.class.js) mapping onto this class with
30
- * `precision="minute"` by default. Per ADR-0027, the consumer must
28
+ * contract `<datetime-picker-ui>` shipped; that thin alias subclass was cut
29
+ * in 0.8.43 (gh#1617) — this is the sole tag now. Per ADR-0027, the consumer must
31
30
  * explicitly import every composed primitive (see `composes:` in
32
31
  * calendar-picker.yaml) — this class doesn't auto-import them.
33
32
  *