@adia-ai/web-components 0.8.41 → 0.8.42
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.
- package/CHANGELOG.md +21 -0
- package/MIGRATION.md +187 -0
- package/USAGE.md +4 -4
- package/components/action-list/action-item.a2ui.json +8 -3
- package/components/action-list/action-item.yaml +25 -7
- package/components/action-list/action-list.class.js +68 -6
- package/components/action-list/action-list.d.ts +3 -1
- package/components/chart/chart.a2ui.json +18 -3
- package/components/chart/chart.class.js +58 -16
- package/components/chart/chart.d.ts +9 -3
- package/components/chart/chart.yaml +35 -3
- package/components/chart-legend/chart-legend.a2ui.json +6 -1
- package/components/chart-legend/chart-legend.class.js +59 -6
- package/components/chart-legend/chart-legend.css +5 -2
- package/components/chart-legend/chart-legend.d.ts +3 -1
- package/components/chart-legend/chart-legend.yaml +15 -1
- package/components/color-area/color-area.a2ui.json +148 -0
- package/components/color-area/color-area.class.js +657 -0
- package/components/color-area/color-area.css +188 -0
- package/components/color-area/color-area.d.ts +66 -0
- package/components/color-area/color-area.examples.md +19 -0
- package/components/color-area/color-area.js +17 -0
- package/components/color-area/color-area.yaml +183 -0
- package/components/color-input/color-input.a2ui.json +5 -5
- package/components/color-input/color-input.class.js +9 -6
- package/components/color-input/color-input.css +1 -1
- package/components/color-input/color-input.js +2 -2
- package/components/color-input/color-input.yaml +14 -12
- package/components/color-picker/color-picker.a2ui.json +15 -12
- package/components/color-picker/color-picker.class.js +24 -633
- package/components/color-picker/color-picker.css +14 -182
- package/components/color-picker/color-picker.yaml +41 -41
- package/components/description-list/description-list.a2ui.json +1 -1
- package/components/description-list/description-list.css +1 -1
- package/components/description-list/description-list.d.ts +1 -1
- package/components/description-list/description-list.yaml +1 -1
- package/components/field/field.a2ui.json +1 -1
- package/components/field/field.class.js +4 -1
- package/components/field/field.yaml +1 -1
- package/components/index.js +1 -0
- package/components/integration-card/integration-card.examples.md +2 -1
- package/components/menu/menu-item.a2ui.json +8 -3
- package/components/menu/menu-item.yaml +24 -3
- package/components/menu/menu.class.js +34 -6
- package/components/menu/menu.d.ts +3 -1
- package/components/pane/pane.a2ui.json +11 -1
- package/components/pane/pane.class.js +32 -3
- package/components/pane/pane.css +15 -10
- package/components/pane/pane.d.ts +10 -7
- package/components/pane/pane.yaml +15 -1
- package/components/swatch/swatch.yaml +1 -1
- package/components/table-toolbar/table-toolbar.class.js +15 -3
- package/core/icons.js +5 -0
- package/custom-elements.json +191 -16
- package/dist/theme-provider.min.js +1 -1
- package/dist/web-components.min.css +1 -1
- package/dist/web-components.min.js +89 -89
- package/dist/web-components.sheet.js +1 -1
- package/index.d.ts +12 -1
- package/package.json +1 -1
- package/patterns/admin-shell/admin-shell.examples.html +2 -2
- package/patterns/form-system/form-system.examples.html +1 -1
- package/styles/components.css +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog — @adia-ai/web-components
|
|
2
2
|
|
|
3
|
+
## [0.8.42] — 2026-08-17
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- **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.
|
|
7
|
+
- **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.
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
- **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.
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- **`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).
|
|
14
|
+
|
|
15
|
+
### Maintenance
|
|
16
|
+
- ADR-0069 Class-R derived artifacts re-derived on main by the new `derived-resync` job (PR #1568).
|
|
17
|
+
- Demo-attribute sweep touched `traits/view-transition`'s examples (one dead attribute dropped, gh#1576 family, PR #1584) — no trait API change.
|
|
18
|
+
- **`components/` touched in this release window** (62 file(s), e.g. `chart-legend/chart-legend.a2ui.json`) — carried by the entries above.
|
|
19
|
+
- **`core/` touched in this release window** (1 file(s), e.g. `core/icons.js`) — carried by the entries above.
|
|
20
|
+
- **`dist/` bundles rebuilt** in this cut's window (4 file(s)) — regenerated from the source changes described above, not independent edits.
|
|
21
|
+
- **`patterns/` touched in this release window** (2 file(s), e.g. `admin-shell/admin-shell.examples.html`) — carried by the entries above.
|
|
22
|
+
- **`styles/` touched in this release window** (1 file(s), e.g. `styles/components.css`) — carried by the entries above.
|
|
23
|
+
|
|
3
24
|
## [0.8.41] — 2026-08-17
|
|
4
25
|
|
|
5
26
|
### Added
|
package/MIGRATION.md
CHANGED
|
@@ -82,6 +82,12 @@ 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.
|
|
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).
|
|
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.
|
|
90
|
+
|
|
85
91
|
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
92
|
|
|
87
93
|
---
|
|
@@ -1650,6 +1656,187 @@ npm run check
|
|
|
1650
1656
|
|
|
1651
1657
|
---
|
|
1652
1658
|
|
|
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)
|
|
1660
|
+
|
|
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)
|
|
1665
|
+
ratified six decisions from the catalog-regularity audit
|
|
1666
|
+
([gh#1363](https://github.com/adiahealth/gen-ui-kit/issues/1363)); this
|
|
1667
|
+
entry covers the five identifiers gh#1563's own build scope named. (The
|
|
1668
|
+
sixth — `agent-reasoning-ui[status]`'s `done`→`completed` stage-terminal
|
|
1669
|
+
convergence — and the `alert`/`card`/`drilldown`/`noodles` decision-2
|
|
1670
|
+
items ship under their own separately-scoped follow-up tickets, not
|
|
1671
|
+
this one.)
|
|
1672
|
+
|
|
1673
|
+
### What changed (additive, 0.8.42)
|
|
1674
|
+
|
|
1675
|
+
| Component | Old (deprecated, still works) | New (canonical) | Shape |
|
|
1676
|
+
|---|---|---|---|
|
|
1677
|
+
| `<chart-ui>` | `[hide-average]` | `[no-average]` | straight rename, same polarity |
|
|
1678
|
+
| `<chart-ui>` | `[hide-grid]` | `[no-grid]` | straight rename, same polarity |
|
|
1679
|
+
| `<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 |
|
|
1681
|
+
| `<pane-ui>` | `[side]` | `[edge]` | straight rename, same type/default/enum (`drawer-ui[side]` is untouched — different component, different vocabulary) |
|
|
1682
|
+
| `<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)
|
|
1709
|
+
|
|
1710
|
+
```bash
|
|
1711
|
+
git grep -l 'hide-average\|hide-grid\|hide-values' -- packages apps playgrounds site site-a2ui \
|
|
1712
|
+
| 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'
|
|
1713
|
+
|
|
1714
|
+
git grep -l '<pane-ui\b' -- packages apps playgrounds site site-a2ui \
|
|
1715
|
+
| xargs perl -pi -e 's/(<pane-ui\b[^>]*\b)side=/\1edge=/g'
|
|
1716
|
+
|
|
1717
|
+
git grep -l '<menu-item-ui\b' -- packages apps playgrounds site site-a2ui \
|
|
1718
|
+
| xargs perl -pi -e 's/(<menu-item-ui\b[^>]*\b)subtitle=/\1description=/g'
|
|
1719
|
+
|
|
1720
|
+
git grep -rl 'color-picker-ui\|UIColorPicker' -- packages apps playgrounds site site-a2ui \
|
|
1721
|
+
| xargs perl -pi -e 's/color-picker-ui/color-area-ui/g; s/UIColorPicker/UIColorArea/g'
|
|
1722
|
+
```
|
|
1723
|
+
|
|
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.
|
|
1728
|
+
|
|
1729
|
+
**Find every affected consumer site:**
|
|
1730
|
+
|
|
1731
|
+
```bash
|
|
1732
|
+
npm run qa:contract-migration-scan -- --roots packages,apps,playgrounds,site,site-a2ui \
|
|
1733
|
+
--base <pre-upgrade-ref> --head <post-upgrade-ref>
|
|
1734
|
+
rg -nU 'hide-average|hide-grid|hide-values|<pane-ui\b[^>]*\bside=|<menu-item-ui\b[^>]*\bsubtitle=|color-picker-ui|UIColorPicker' \
|
|
1735
|
+
-g '!**/dist/**' -g '!**/*.a2ui.json' -g '!docs/adr/**'
|
|
1736
|
+
```
|
|
1737
|
+
|
|
1738
|
+
`--roots packages,apps,playgrounds,site,site-a2ui` is required (not the
|
|
1739
|
+
scanner's own default) — `site-a2ui/` is a separate top-level directory
|
|
1740
|
+
the default roots miss entirely (ADR-0063's own consumer-scan
|
|
1741
|
+
mechanism section explains why).
|
|
1742
|
+
|
|
1743
|
+
### Rejected / deferred (explicitly out of gh#1563's scope)
|
|
1744
|
+
|
|
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
|
+
- `segmented-ui[multiple]`'s comma-separated value encoding — sanctioned
|
|
1751
|
+
as-is (operator ruling, gh#1563, 2026-08-17).
|
|
1752
|
+
- `toggle-group-ui[value]`'s comma-string violation — tracked by
|
|
1753
|
+
gh#1363's own `toggle-group`/`segmented` consolidation candidate, not
|
|
1754
|
+
duplicated here.
|
|
1755
|
+
- `drilldown-ui[static]` → `[no-slide-transition]`, `alert-ui[dismissible]`
|
|
1756
|
+
retirement, `card-ui[outline]` retirement,
|
|
1757
|
+
`agent-reasoning-ui[status="done"]` → `"completed"`, and
|
|
1758
|
+
`noodles-ui[port-size]`/`[show-ports]` duplicate-entry cleanup — all
|
|
1759
|
+
real ADR-0063 decisions, each its own separately-scoped follow-up
|
|
1760
|
+
build, not part of gh#1563's five-item scope.
|
|
1761
|
+
- `menu-item-ui`'s `subtitle` **slot** (distinct from the prop) — left
|
|
1762
|
+
unrenamed by design; renaming a slot is a different, unscoped surface.
|
|
1763
|
+
|
|
1764
|
+
### Verify
|
|
1765
|
+
|
|
1766
|
+
```bash
|
|
1767
|
+
npm run qa:contract-migration-scan -- --roots packages,apps,playgrounds,site,site-a2ui \
|
|
1768
|
+
--base <pre-upgrade-ref> --head <post-upgrade-ref>
|
|
1769
|
+
node scripts/build/components.mjs --verify
|
|
1770
|
+
npm run check
|
|
1771
|
+
```
|
|
1772
|
+
|
|
1773
|
+
---
|
|
1774
|
+
|
|
1775
|
+
## Upcoming — `action-item-ui[description]` ADR-0063 convergence (0.9.0, gh#1571)
|
|
1776
|
+
|
|
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),
|
|
1784
|
+
gh#1563), `<action-item-ui>` became the corpus's remaining sole `subtitle`
|
|
1785
|
+
outlier — the same shape of defect ADR-0063 fixed for menu-item.
|
|
1786
|
+
|
|
1787
|
+
### What changed (additive)
|
|
1788
|
+
|
|
1789
|
+
| Component | Old (deprecated, still works) | New (canonical) | Shape |
|
|
1790
|
+
|---|---|---|---|
|
|
1791
|
+
| `<action-item-ui>` | `[subtitle]` prop | `[description]` prop | straight rename — the `subtitle` **slot** is a separate surface, deliberately left unrenamed |
|
|
1792
|
+
|
|
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.
|
|
1803
|
+
|
|
1804
|
+
### Migration (mechanical, recommended now / required at the 0.9.0 cut)
|
|
1805
|
+
|
|
1806
|
+
```bash
|
|
1807
|
+
git grep -l '<action-item-ui\b' -- packages apps playgrounds site site-a2ui \
|
|
1808
|
+
| xargs perl -pi -e 's/(<action-item-ui\b[^>]*\b)subtitle=/\1description=/g'
|
|
1809
|
+
```
|
|
1810
|
+
|
|
1811
|
+
**Find every affected consumer site:**
|
|
1812
|
+
|
|
1813
|
+
```bash
|
|
1814
|
+
npm run qa:contract-migration-scan -- --roots packages,apps,playgrounds,site,site-a2ui \
|
|
1815
|
+
--base <pre-upgrade-ref> --head <post-upgrade-ref>
|
|
1816
|
+
rg -nU '<action-item-ui\b[^>]*\bsubtitle=' \
|
|
1817
|
+
-g '!**/dist/**' -g '!**/*.a2ui.json' -g '!docs/adr/**'
|
|
1818
|
+
```
|
|
1819
|
+
|
|
1820
|
+
### Rejected / deferred
|
|
1821
|
+
|
|
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
|
+
- `action-item-ui`'s `subtitle` **slot** (distinct from the prop) — left
|
|
1826
|
+
unrenamed by design, same as `menu-item-ui`'s own gh#1563 shape;
|
|
1827
|
+
renaming a slot is a different, unscoped surface.
|
|
1828
|
+
|
|
1829
|
+
### Verify
|
|
1830
|
+
|
|
1831
|
+
```bash
|
|
1832
|
+
npm run qa:contract-migration-scan -- --roots packages,apps,playgrounds,site,site-a2ui \
|
|
1833
|
+
--base <pre-upgrade-ref> --head <post-upgrade-ref>
|
|
1834
|
+
node scripts/build/components.mjs --verify
|
|
1835
|
+
npm run check
|
|
1836
|
+
```
|
|
1837
|
+
|
|
1838
|
+
---
|
|
1839
|
+
|
|
1653
1840
|
## Migrating to `@adia-ai/*@v0.8.23` (2026-07-30)
|
|
1654
1841
|
|
|
1655
1842
|
- **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-
|
|
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-
|
|
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-
|
|
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-
|
|
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.)
|
|
1223
1223
|
|
|
1224
1224
|
### §221g — `[data-scheme]` ancestor opt-in for color scheme
|
|
1225
1225
|
|
|
@@ -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\
|
|
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.)",
|
|
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.",
|
|
18
|
+
"type": "string",
|
|
19
|
+
"default": ""
|
|
20
|
+
},
|
|
16
21
|
"component": {
|
|
17
22
|
"const": "ActionItem"
|
|
18
23
|
},
|
|
@@ -26,7 +31,7 @@
|
|
|
26
31
|
"type": "string"
|
|
27
32
|
},
|
|
28
33
|
"subtitle": {
|
|
29
|
-
"description": "
|
|
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.)",
|
|
30
35
|
"type": "string",
|
|
31
36
|
"default": ""
|
|
32
37
|
},
|
|
@@ -80,7 +85,7 @@
|
|
|
80
85
|
"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
86
|
},
|
|
82
87
|
"subtitle": {
|
|
83
|
-
"description": "Custom secondary-line content override; falls through to [
|
|
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."
|
|
84
89
|
},
|
|
85
90
|
"text": {
|
|
86
91
|
"description": "Custom label content; falls through to [text] prop if not slotted."
|
|
@@ -17,9 +17,10 @@ category: navigation
|
|
|
17
17
|
version: 1
|
|
18
18
|
description: |-
|
|
19
19
|
Child of <action-list-ui>. One actionable row — icon + label + optional
|
|
20
|
-
|
|
21
|
-
converges on <menu-item-ui>: icon/text/
|
|
20
|
+
description, forwards activation to the parent action-list. Row contract
|
|
21
|
+
converges on <menu-item-ui>: icon/text/description/value/variant/disabled
|
|
22
22
|
props and icon/text/subtitle/trailing slot overrides (#1363 C5).
|
|
23
|
+
(`subtitle` is a deprecated alias for `description` — ADR-0063, gh#1571.)
|
|
23
24
|
|
|
24
25
|
props:
|
|
25
26
|
icon:
|
|
@@ -29,7 +30,20 @@ props:
|
|
|
29
30
|
description: Action label.
|
|
30
31
|
type: string
|
|
31
32
|
subtitle:
|
|
32
|
-
description:
|
|
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
|
+
description:
|
|
42
|
+
description: >-
|
|
43
|
+
Optional secondary description line rendered under the label.
|
|
44
|
+
Canonical spelling (ADR-0063, gh#1571) replacing `subtitle` —
|
|
45
|
+
converges action-item onto the same spelling <menu-item-ui> adopted
|
|
46
|
+
under gh#1563.
|
|
33
47
|
type: string
|
|
34
48
|
default: ''
|
|
35
49
|
value:
|
|
@@ -55,8 +69,10 @@ slots:
|
|
|
55
69
|
description: Custom label content; falls through to [text] prop if not slotted.
|
|
56
70
|
subtitle:
|
|
57
71
|
description: >-
|
|
58
|
-
Custom secondary-line content override; falls through to
|
|
59
|
-
prop
|
|
72
|
+
Custom secondary-line content override; falls through to the
|
|
73
|
+
[description] prop (or its deprecated [subtitle] alias — ADR-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.
|
|
60
76
|
trailing:
|
|
61
77
|
description: >-
|
|
62
78
|
Trailing element pinned to the far edge (shortcut hint, badge, caret).
|
|
@@ -82,7 +98,7 @@ a2ui:
|
|
|
82
98
|
allowedParents:
|
|
83
99
|
- ActionList
|
|
84
100
|
rules:
|
|
85
|
-
- rule: 'Child of <action-list-ui> — one inline-action row with icon + label + optional
|
|
101
|
+
- rule: 'Child of <action-list-ui> — one inline-action row with icon + label + optional description + optional trailing shortcut/badge.'
|
|
86
102
|
reason: 'Action-list cluster contract.'
|
|
87
103
|
- rule: 'Different from <menu-item-ui>: action-items live inline in content surfaces; menu-items live inside <menu-ui> popovers.'
|
|
88
104
|
reason: 'Context boundary.'
|
|
@@ -90,5 +106,7 @@ a2ui:
|
|
|
90
106
|
reason: 'Different intent — actions vs navigation.'
|
|
91
107
|
- 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
108
|
reason: 'Converged with <menu-item-ui>''s danger-variant guidance (#1363 C5).'
|
|
93
|
-
- rule: 'Prefer [icon]/[text]/[
|
|
109
|
+
- 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
110
|
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.'
|
|
112
|
+
reason: 'Convergence with <menu-item-ui>''s own subtitle -> description rename (gh#1563).'
|
|
@@ -94,7 +94,14 @@ 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
|
+
// ADR-0063 (gh#1571) — `subtitle` is DEPRECATED (action-item was the
|
|
98
|
+
// corpus's remaining `subtitle` outlier once <menu-item-ui> converged
|
|
99
|
+
// under gh#1563); `description` is canonical. `subtitle` stays declared
|
|
100
|
+
// (dual-read compat, additive). The `subtitle` SLOT (a separate
|
|
101
|
+
// surface — see action-item.yaml) is deliberately unchanged; only the
|
|
102
|
+
// PROP renames.
|
|
97
103
|
subtitle: { type: String, default: '', reflect: true },
|
|
104
|
+
description: { type: String, default: '', reflect: true },
|
|
98
105
|
value: { type: String, default: '', reflect: true },
|
|
99
106
|
variant: { type: String, default: 'default', reflect: true },
|
|
100
107
|
disabled: { type: Boolean, default: false, reflect: true },
|
|
@@ -102,6 +109,51 @@ export class UIActionItem extends UIElement {
|
|
|
102
109
|
|
|
103
110
|
static template = () => null;
|
|
104
111
|
|
|
112
|
+
// ADR-0063 (gh#1571) one-shot-per-class deprecation warn for [subtitle].
|
|
113
|
+
static #warnedSubtitle = false;
|
|
114
|
+
|
|
115
|
+
// Guards + tracks the [subtitle] -> [description] compat mirror (below).
|
|
116
|
+
// action-item-ui (unlike menu-item-ui) has pre-existing tests that set
|
|
117
|
+
// [subtitle] AFTER mount and expect the rendered row to keep tracking it
|
|
118
|
+
// (gh#1374) — a resolve-once-at-connect shim (menu-item-ui's own shape)
|
|
119
|
+
// would silently stop mirroring once `description` picks up its first
|
|
120
|
+
// reflected value. `#mirroring` suppresses the authored-flag while WE
|
|
121
|
+
// write `this.description` ourselves; `#descriptionAuthored` latches
|
|
122
|
+
// true the moment a REAL (non-mirrored) `description` attribute shows
|
|
123
|
+
// up, so [description] wins permanently from that point on, even
|
|
124
|
+
// across later [subtitle] attribute churn.
|
|
125
|
+
#mirroring = false;
|
|
126
|
+
#descriptionAuthored = false;
|
|
127
|
+
|
|
128
|
+
attributeChangedCallback(name, oldVal, val) {
|
|
129
|
+
if (name === 'description' && !this.#mirroring) this.#descriptionAuthored = true;
|
|
130
|
+
super.attributeChangedCallback(name, oldVal, val);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// ADR-0063 (gh#1571) compat shim. New-name precedence: once [description]
|
|
134
|
+
// has ever been authored directly, it wins outright and [subtitle] is
|
|
135
|
+
// ignored from then on. Until then, [subtitle] mirrors into [description]
|
|
136
|
+
// on every resolve (initial connect AND every subsequent render), so a
|
|
137
|
+
// post-mount [subtitle] update keeps propagating exactly like it did
|
|
138
|
+
// before this shim existed.
|
|
139
|
+
#resolveSubtitleCompat() {
|
|
140
|
+
if (this.#descriptionAuthored) return;
|
|
141
|
+
const mirrored = this.hasAttribute('subtitle') ? this.subtitle : '';
|
|
142
|
+
if (this.description === mirrored) return;
|
|
143
|
+
this.#mirroring = true;
|
|
144
|
+
this.description = mirrored;
|
|
145
|
+
this.#mirroring = false;
|
|
146
|
+
if (mirrored && !UIActionItem.#warnedSubtitle) {
|
|
147
|
+
UIActionItem.#warnedSubtitle = true;
|
|
148
|
+
// eslint-disable-next-line no-console
|
|
149
|
+
console.warn(
|
|
150
|
+
'[AdiaUI] <action-item-ui [subtitle]> is deprecated — use ' +
|
|
151
|
+
'[description] instead (ADR-0063, gh#1571). Kept working as-is; ' +
|
|
152
|
+
'no behavior change.',
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
105
157
|
// Set when connected()/render() stamped this fallback child from a prop —
|
|
106
158
|
// never touch a consumer-authored slot="icon"/"text"/"subtitle" child
|
|
107
159
|
// (ADR-0010, slot content is source of truth). Mirrors menu-item-ui's
|
|
@@ -118,6 +170,10 @@ export class UIActionItem extends UIElement {
|
|
|
118
170
|
}
|
|
119
171
|
|
|
120
172
|
connected() {
|
|
173
|
+
// ADR-0063 (gh#1571) compat shim — resolve BEFORE #stamp() reads
|
|
174
|
+
// `this.description`, so there's no wrong-then-right flash.
|
|
175
|
+
this.#resolveSubtitleCompat();
|
|
176
|
+
|
|
121
177
|
// Adopt-or-stamp (gh#753): a consumer-authored role survives connect —
|
|
122
178
|
// only stamp "listitem" when the host has no author-set role at all.
|
|
123
179
|
if (!this.hasAttribute('role')) this.setAttribute('role', 'listitem');
|
|
@@ -143,10 +199,10 @@ export class UIActionItem extends UIElement {
|
|
|
143
199
|
this.appendChild(span);
|
|
144
200
|
}
|
|
145
201
|
|
|
146
|
-
if (this.
|
|
202
|
+
if (this.description && !this.#ownChild('[slot="subtitle"]')) {
|
|
147
203
|
const sub = this.#stampMark(document.createElement('span'));
|
|
148
204
|
sub.setAttribute('slot', 'subtitle');
|
|
149
|
-
sub.textContent = this.
|
|
205
|
+
sub.textContent = this.description;
|
|
150
206
|
this.appendChild(sub);
|
|
151
207
|
}
|
|
152
208
|
}
|
|
@@ -162,6 +218,11 @@ export class UIActionItem extends UIElement {
|
|
|
162
218
|
}
|
|
163
219
|
|
|
164
220
|
render() {
|
|
221
|
+
// ADR-0063 (gh#1571) compat shim — re-resolve on every render so a
|
|
222
|
+
// post-mount [subtitle] update keeps mirroring into [description]
|
|
223
|
+
// until an author sets [description] directly (see #resolveSubtitleCompat).
|
|
224
|
+
this.#resolveSubtitleCompat();
|
|
225
|
+
|
|
165
226
|
// Sync icon — only touch elements we stamped.
|
|
166
227
|
const iconEl = this.#ownChild('[slot="icon"]');
|
|
167
228
|
if (this.icon) {
|
|
@@ -181,15 +242,16 @@ export class UIActionItem extends UIElement {
|
|
|
181
242
|
const textEl = this.#ownChild('[slot="text"]');
|
|
182
243
|
if (this.#wasStamped(textEl)) textEl.textContent = this.text;
|
|
183
244
|
|
|
184
|
-
// Sync subtitle
|
|
245
|
+
// Sync subtitle (backed by the `description` prop — ADR-0063, gh#1571)
|
|
246
|
+
// — only touch elements we stamped.
|
|
185
247
|
const subEl = this.#ownChild('[slot="subtitle"]');
|
|
186
|
-
if (this.
|
|
248
|
+
if (this.description) {
|
|
187
249
|
if (subEl) {
|
|
188
|
-
if (this.#wasStamped(subEl)) subEl.textContent = this.
|
|
250
|
+
if (this.#wasStamped(subEl)) subEl.textContent = this.description;
|
|
189
251
|
} else {
|
|
190
252
|
const sub = this.#stampMark(document.createElement('span'));
|
|
191
253
|
sub.setAttribute('slot', 'subtitle');
|
|
192
|
-
sub.textContent = this.
|
|
254
|
+
sub.textContent = this.description;
|
|
193
255
|
this.appendChild(sub);
|
|
194
256
|
}
|
|
195
257
|
} else if (this.#wasStamped(subEl)) {
|
|
@@ -34,11 +34,13 @@ 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. */
|
|
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
|
-
/**
|
|
43
|
+
/** 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.) */
|
|
42
44
|
subtitle: string;
|
|
43
45
|
/** Action label. */
|
|
44
46
|
text: string;
|
|
@@ -88,17 +88,17 @@
|
|
|
88
88
|
"default": "abbr"
|
|
89
89
|
},
|
|
90
90
|
"hideAverage": {
|
|
91
|
-
"description": "
|
|
91
|
+
"description": "DEPRECATED (ADR-0063, gh#1563) — use `noAverage` instead. Same meaning, same default; kept working as a dual-read compat shim (one- time console.warn when it's the name that resolves). Removed in 0.9.0.",
|
|
92
92
|
"type": "boolean",
|
|
93
93
|
"default": false
|
|
94
94
|
},
|
|
95
95
|
"hideGrid": {
|
|
96
|
-
"description": "
|
|
96
|
+
"description": "DEPRECATED (ADR-0063, gh#1563) — use `noGrid` instead. Same meaning, same default; kept working as a dual-read compat shim (one-time console.warn when it's the name that resolves). Removed in 0.9.0.",
|
|
97
97
|
"type": "boolean",
|
|
98
98
|
"default": false
|
|
99
99
|
},
|
|
100
100
|
"hideValues": {
|
|
101
|
-
"description": "
|
|
101
|
+
"description": "DEPRECATED (ADR-0063, gh#1563) — use `noValues` instead. Same meaning, same default; kept working as a dual-read compat shim (one- time console.warn when it's the name that resolves). Removed in 0.9.0.",
|
|
102
102
|
"type": "boolean",
|
|
103
103
|
"default": false
|
|
104
104
|
},
|
|
@@ -107,6 +107,21 @@
|
|
|
107
107
|
"type": "boolean",
|
|
108
108
|
"default": false
|
|
109
109
|
},
|
|
110
|
+
"noAverage": {
|
|
111
|
+
"description": "When true, suppress the overlaid average line. Canonical spelling (ADR-0063, gh#1563) replacing `hideAverage`.",
|
|
112
|
+
"type": "boolean",
|
|
113
|
+
"default": false
|
|
114
|
+
},
|
|
115
|
+
"noGrid": {
|
|
116
|
+
"description": "Hide gridlines. Canonical spelling (ADR-0063, gh#1563) replacing `hideGrid`.",
|
|
117
|
+
"type": "boolean",
|
|
118
|
+
"default": false
|
|
119
|
+
},
|
|
120
|
+
"noValues": {
|
|
121
|
+
"description": "Hide value labels. Canonical spelling (ADR-0063, gh#1563) replacing `hideValues`.",
|
|
122
|
+
"type": "boolean",
|
|
123
|
+
"default": false
|
|
124
|
+
},
|
|
110
125
|
"seriesEmphasis": {
|
|
111
126
|
"description": "Multi-line only. Names one series key (matching a `y` key) to render at full strength — area fill + full-opacity line. Every other series drops its area fill and renders line-only at --chart-deemphasized-opacity. Empty (default) applies full treatment to every series, unchanged from pre-gh#561 behavior.",
|
|
112
127
|
"type": "string",
|