@adia-ai/a2ui 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.
@@ -17,11 +17,12 @@
17
17
  - Set variant="contained" for a bounded per-item surface (background, border, radius, and an open-state divider) — the composition to reach for when nesting inside <card-ui>. Default variant="flat" (no chrome) suits settings pages and FAQ blocks sitting on the page canvas.
18
18
 
19
19
  ## ActionItem
20
- - Child of <action-list-ui> — one inline-action row with icon + label + optional subtitle + optional trailing shortcut/badge.
20
+ - Child of <action-list-ui> — one inline-action row with icon + label + optional description + optional trailing shortcut/badge.
21
21
  - Different from <menu-item-ui>: action-items live inline in content surfaces; menu-items live inside <menu-ui> popovers.
22
22
  - For navigation entries (route-changing) use <nav-item-ui> instead.
23
23
  - Use [variant="danger"] exclusively for destructive/irreversible actions (Delete, Remove). Pair danger items with an explicit confirm flow when the action cannot be undone.
24
- - 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).
24
+ - 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).
25
+ - 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.
25
26
 
26
27
  ## ActionList
27
28
  - Hosts <action-item-ui> children as a vertical command list inline in content surfaces.
@@ -132,7 +133,7 @@
132
133
  - Canonical clickable affordance — text + optional icon. Variant attribute sets primary/secondary/ghost/destructive intent.
133
134
  - Do not repeat the icon's glyph in text=. Icon provides the symbol; text= carries only the words.
134
135
  - For navigation (route-change) use <nav-item-ui> or anchor; button-ui is for actions only.
135
- - 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).
136
+ - 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).
136
137
 
137
138
  ## CalendarGrid
138
139
  - Use <CalendarGrid> only as a substrate primitive composed inside a higher-level component (date-range picker, datetime picker, custom date affordance). For a full single-date input, use <CalendarPicker> — it adds a trigger button, popover surface, and form-association.
@@ -166,7 +167,7 @@
166
167
  ## ChartLegend
167
168
  - Standalone legend primitive — a row of <badge-ui>+<swatch-ui> chips that are keyboard-focusable and click-toggleable.
168
169
  - Pairs with <chart-ui> via [for] id-ref (auto-bidirectional series toggling) or via items= for standalone use.
169
- - position attribute (top|bottom|left|right) places legend relative to its chart; static= disables interactivity.
170
+ - position attribute (top|bottom|left|right) places legend relative to its chart; interactive="false" disables interactivity.
170
171
 
171
172
  ## Chart
172
173
  - Declarative SVG chart supporting 18 types via the type attribute (bar, line, pie, donut, radar, area, ...).
@@ -201,18 +202,19 @@
201
202
  - Pair with <row-ui> for horizontal layouts; both share the same gap-token contract.
202
203
  - Set align/justify attributes for cross-axis / main-axis alignment; default is start/start.
203
204
 
204
- ## ColorInput
205
- - Use <color-input-ui> for any form-row color field — it canonicalizes the popover + button + color-picker recipe and is the only form-bearing color primitive. Do not hand-roll the composition; reach for color-input-ui directly.
206
- - Set [format="oklch"] when the persisted value feeds CSS tokens or perceptual math; [format="hex"] for legacy / design-tool interop. Event detail (`change` / `input`) carries BOTH `hex` and `oklch` views regardless of [format], plus parsed `{l, c, h}` channel scalars.
207
- - For brand-palette constraints, set [maxChroma] / [minL] / [maxL] / [hueDriftMax] (with [baseHue]) on the host — they forward to the inner <color-picker-ui> and clamp generation. Useful for Tokens-Studio-style guarded color generation.
208
- - Use <color-picker-ui> DIRECTLY (no color-input-ui wrapper) only for full-surface editors where the picker IS the page (e.g. Tokens Studio main canvas). For inline form-row use, always reach for <color-input-ui>.
209
- - Per ADR-0027 (cross-primitive composition imports), consumer pages MUST explicitly import <button-ui>, <popover-ui>, and <color-picker-ui> before <color-input-ui>. The primitive composes them but does NOT auto-register them.
210
-
211
- ## ColorPicker
205
+ ## ColorArea
212
206
  - OKLCH-native color picker with 2D color area + H/C/L sliders. Form-associated; emits OKLCH color strings.
213
207
  - For simple color swatches (read-only display) use <swatch-ui>; for hex/rgb text input use <color-input-ui>.
208
+ - Renamed from <color-picker-ui> (ADR-0063, gh#1563); the old tag was cut in 0.8.43 (gh#1617) — ColorArea is the sole tag now.
214
209
  - Output format defaults to oklch(); set format= to override (hex, rgb, hsl).
215
210
 
211
+ ## ColorInput
212
+ - Use <color-input-ui> for any form-row color field — it canonicalizes the popover + button + color-area recipe and is the only form-bearing color primitive. Do not hand-roll the composition; reach for color-input-ui directly.
213
+ - Set [format="oklch"] when the persisted value feeds CSS tokens or perceptual math; [format="hex"] for legacy / design-tool interop. Event detail (`change` / `input`) carries BOTH `hex` and `oklch` views regardless of [format], plus parsed `{l, c, h}` channel scalars.
214
+ - For brand-palette constraints, set [maxChroma] / [minL] / [maxL] / [hueDriftMax] (with [baseHue]) on the host — they forward to the inner <color-area-ui> and clamp generation. Useful for Tokens-Studio-style guarded color generation.
215
+ - Use <color-area-ui> DIRECTLY (no color-input-ui wrapper) only for full-surface editors where the picker IS the page (e.g. Tokens Studio main canvas). For inline form-row use, always reach for <color-input-ui>.
216
+ - Per ADR-0027 (cross-primitive composition imports), consumer pages MUST explicitly import <button-ui>, <popover-ui>, and <color-area-ui> before <color-input-ui>. The primitive composes them but does NOT auto-register them.
217
+
216
218
  ## Combobox
217
219
  - Use <combobox-ui> for typeahead-filterable single-select with a constrained-choice value model. `value` MUST be one of `options[].value` unless `[free-text]` is set. For ≤ 4 options, use <segmented-ui> or <radio-ui> instead.
218
220
  - For free-form text entry with suggestions, use <autocomplete-input-ui> (SPEC-035) — combobox is constrained-choice. For button-first dropdowns where the trigger should be closed by default, use <select-ui searchable>.
@@ -238,12 +240,6 @@
238
240
  - presets array entries each require both `label` (string) and `range` (`{from, to}`). Empty preset arrays are valid (rail renders empty).
239
241
  - Use DateRangePicker for date ranges. Do NOT compose two adjacent `<calendar-picker-ui>` instances + JS synchronization — that is the pattern this primitive replaces.
240
242
 
241
- ## DatetimePicker
242
- - DEPRECATED — prefer `{"component": "CalendarPicker", "precision": "minute"}` (or `"second"`) over `{"component": "DatetimePicker"}`. Both render and behave identically; DatetimePicker is a thin compatibility alias.
243
- - `DatetimePicker.value` MUST be ISO 8601 datetime (`YYYY-MM-DDTHH:mm` or `YYYY-MM-DDTHH:mm:ss`) OR empty string. Date-only or time-only strings fire `invalid`.
244
- - `min` and `max` MUST be parseable ISO 8601 datetimes if non-empty. If `value` falls outside, `invalid` fires and the value does not commit.
245
- - Per ADR-0025 NEVER wrap a native `<input type="datetime-local">` — the calendar pane + time pane composition + ElementInternals together provide form participation.
246
-
247
243
  ## DemoToggle
248
244
  - Demo-page-only — toggles between live and code views in component documentation surfaces.
249
245
  - Do not use in apps/ — restrict to packages/web-components/components/*/<name>.html demo pages and docs surfaces.
@@ -374,7 +370,7 @@
374
370
  - Form participation is implicit via UIFormElement. Set [name] for FormData submission; [required] / [disabled] / [readonly] reflect; listen for `change` (blur or Enter commit) and `input` (per keystroke). `submit` event fires when Enter commits the value (used by <chat-composer>'s `composer-submit` forwarding).
375
371
  - For numeric input use [type="number"] with [min] [max] [step] [precision] [prefix] / [suffix] — this stamps a contenteditable surface + <button-ui> / <icon-ui> stepper column with ARIA spinbutton semantics. Read `el.valueAsNumber` for the parsed Number. Never substitute a native <input type="number">.
376
372
  - Inside <chat-composer>, the canonical inner input is <chat-input-ui> (chat variant subclass — adds the send button + model picker + paste-to-attach plumbing). The plain <input-ui> primitive ALSO fires a bubbling `submit` event on Enter (unconditional, no opt-in attribute); <chat-input-ui> simply builds on that semantic.
377
- - input-ui's `type` enum covers only the modes it actually implements — text/email/password/number/tel/url (gh#1363 B10). Never set [type] to an HTML5 value input-ui doesn't render — route date/time/color/search intents to the owning primitive instead: CalendarPicker, DatetimePicker, TimePicker, ColorInput (or ColorPicker directly), Search. See anti_patterns.
373
+ - input-ui's `type` enum covers only the modes it actually implements — text/email/password/number/tel/url (gh#1363 B10). Never set [type] to an HTML5 value input-ui doesn't render — route date/time/color/search intents to the owning primitive instead: CalendarPicker (precision="minute" for datetime-local), TimePicker, ColorInput (or ColorArea directly), Search. See anti_patterns.
378
374
 
379
375
  ## Inspector
380
376
  - Developer-tools pane for A2UI runtime state — composes <tabs-ui> + <code-ui> internally.
@@ -447,7 +443,7 @@
447
443
  - Use [variant="danger"] exclusively for destructive / irreversible actions (Delete, Remove). "Sign out" is NOT danger. Pair danger items with an explicit confirm flow (<modal-ui> destructive-confirm pattern) when the action cannot be undone.
448
444
  - Set [disabled] (not [hidden]) when an action is contextually unavailable — disabled items remain visible for affordance discoverability but skip roving focus + don't fire `action`.
449
445
  - Prefer [icon] + [text] props over slotted markup for consistency. Use slot="icon" / slot="text" only when you need custom markup (e.g. <avatar-ui slot="icon">, <kbd slot="trailing"> shortcut hint).
450
- - <action-item-ui> (child of <action-list-ui>) shares this row contract (icon/text/subtitle/value/variant/disabled props, icon/text/subtitle/ trailing slot overrides) for inline, non-popover command rows — use it instead when the surface isn't a <menu-ui> popover (#1363 C5).
446
+ - <action-item-ui> (child of <action-list-ui>) shares this row contract (icon/text/description/value/variant/disabled props, icon/text/ subtitle/trailing slot overrides) for inline, non-popover command rows — use it instead when the surface isn't a <menu-ui> popover (#1363 C5). Both components' deprecated `subtitle` PROP aliases for `description` were cut in 0.8.43 (ADR-0063, gh#1563/gh#1571, gh#1617); the `subtitle` SLOT on both is unchanged.
451
447
 
452
448
  ## MenuLabel
453
449
  - <menu-label-ui> MUST be a direct child of <menu-ui>; like menu-item-ui and menu-divider-ui it is hoisted into the top-layer popover via <menu-ui>'s direct-descendant query — a label nested elsewhere renders outside the popover.
@@ -527,10 +523,10 @@
527
523
  - Page-number range auto-truncates with ellipsis for high counts; set siblings= to control visible window size.
528
524
 
529
525
  ## Pane
530
- - pane-ui is a resizable / collapsible content panel. As a standalone primitive (no [side] attribute), it carries its own four-sided chrome and a right-edge resize grabber. As a horizontal-sibling child of a layout container (set [side="leading"] or [side="trailing"]), the chrome and grabber move to the inner edge so adjacent panes share a single seam.
526
+ - pane-ui is a resizable / collapsible content panel. As a standalone primitive (no [edge] attribute), it carries its own four-sided chrome and a right-edge resize grabber. As a horizontal-sibling child of a layout container (set [edge="leading"] or [edge="trailing"]), the chrome and grabber move to the inner edge so adjacent panes share a single seam.
531
527
  - Wrapped by <editor-sidebar slot="leading|trailing"> inside <editor-shell>, and by <admin-sidebar slot="leading|trailing"> inside <admin-shell>. The bespoke sidebar owns [collapsed] / [resizing] reflected state + localStorage persistence; the inner pane-ui owns the physical drag. Don't reimplement drag in the bespoke sidebar — delegate to <pane-ui resizable>.
532
528
  - Inner shape inside a pane-ui is the conventional <header> + <section> + optional <footer> slot pattern. Headers carry [slot="action"] button clusters; sections hold the navigator tree, inspector form rows, or other primary content.
533
- - For a standalone resizable two-pane layout (no shell), nest panes directly inside a flex row — both with [side]-typed chrome — and the resize handle will live on the seam between them. For a non-resizable summary pane (a fixed-width detail rail), drop [resizable] and pane-ui collapses to a static container.
529
+ - For a standalone resizable two-pane layout (no shell), nest panes directly inside a flex row — both with [edge]-typed chrome — and the resize handle will live on the seam between them. For a non-resizable summary pane (a fixed-width detail rail), drop [resizable] and pane-ui collapses to a static container.
534
530
 
535
531
  ## PasswordStrength
536
532
  - Pair with <input-ui type=password> via a JS listener (input.addEventListener('input', e => meter.value = e.target.value)). The meter does NOT participate in form data — it is a display indicator.
@@ -555,10 +551,6 @@
555
551
  - Author the slotted markup as plain AdiaUI HTML with attributes only — no inline `style=`, no `<script>` wiring. If a sample needs inline styles to look right, the component is missing an attribute; fix the component, not the demo.
556
552
  - Side-by-side ([layout="split"]) is the default. Set [layout="stack"] for wide self-framing examples (a full card / shell / table reads cramped at half width). Use [code-first] when the code is the teaching point and the render is confirmation.
557
553
 
558
- ## ProgressRow
559
- - DEPRECATED — do not generate ProgressRow. Set `label` (and optional `meta`) directly on <progress-ui> instead; label present activates the identical row layout.
560
- - For standalone progress bars without a row context use <progress-ui> directly (no `label`).
561
-
562
554
  ## Progress
563
555
  - Use for in-progress task feedback with known or indeterminate state. Value < 0 = indeterminate animation.
564
556
  - For labeled task lists (multiple progress bars with row labels, e.g. storage/capacity breakdowns), set `label` (and optional `meta`) directly on <progress-ui> — no separate component needed.
@@ -619,12 +611,12 @@
619
611
 
620
612
  ## Segment
621
613
  - Child of <segmented-ui> — one selectable option button; the parent's [multiple] axis decides single- or multi-select, segment-ui itself is unchanged either way.
622
- - <toggle-option-ui> (deprecated, gh#1369) is the same concept — use segment-ui inside <segmented-ui multiple> instead.
614
+ - <toggle-option-ui> (cut in 0.8.43, gh#1617, gh#1369) was the same concept — use segment-ui inside <segmented-ui multiple> instead.
623
615
  - Selected state managed by the parent <segmented-ui> — it syncs the selected attribute onto every child whose value is in its own value (single value, or the [multiple] comma-separated set); do not set selected directly on segment.
624
616
 
625
617
  ## Segmented
626
618
  - Single-select by default. Hosts <segment-ui> children; exactly one selected at a time.
627
- - For multi-select (filter chips, multi-flag toggles, day-of-week pickers), set [multiple] instead of using a separate component — value becomes a comma-separated set of selected segment values. <toggle-group-ui>/<toggle-option-ui> are deprecated; use <segmented-ui multiple> + <segment-ui> instead (gh#1369, #1363 C1).
619
+ - For multi-select (filter chips, multi-flag toggles, day-of-week pickers), set [multiple] instead of using a separate component — value becomes a comma-separated set of selected segment values. <toggle-group-ui>/<toggle-option-ui> were cut in 0.8.43 (gh#1617); use <segmented-ui multiple> + <segment-ui> instead (gh#1369, #1363 C1).
628
620
  - Use for view-mode switches (grid/list, light/dark) or short filter sets (3-5 options); for longer sets use <tabs-ui> or <select-ui multiple>.
629
621
 
630
622
  ## Select
@@ -671,7 +663,7 @@
671
663
  ## StepProgress
672
664
  - Compact step indicator — N dots/segments showing current step out of total.
673
665
  - Different from <stepper-ui> (labeled, expanded) — step-progress is dense and label-free.
674
- - For multi-task progress bars (multiple labeled rows) use a stack of <progress-ui> with `label` set (absorbed the row layout from the now-deprecated progress-row-ui).
666
+ - For multi-task progress bars (multiple labeled rows) use a stack of <progress-ui> with `label` set (absorbed the row layout from progress-row-ui, which was cut in 0.8.43, gh#1617).
675
667
 
676
668
  ## StepperItem
677
669
  - Child of <stepper-ui> — one numbered step with label + complete/current/upcoming state.
@@ -693,7 +685,7 @@
693
685
  - For static (post-stream) display use <text-ui> or <richtext-ui>; stream-ui assumes live token feed.
694
686
 
695
687
  ## Swatch
696
- - Use to display a single color sample with optional label. For interactive color picking use <color-picker-ui>.
688
+ - Use to display a single color sample with optional label. For interactive color picking use <color-area-ui>.
697
689
  - Inside design-token displays or palette grids; not for general decoration.
698
690
  - Color value accepts hex, rgb, hsl, or oklch; oklch preferred for AdiaUI token alignment.
699
691
 
@@ -712,7 +704,8 @@
712
704
  - All four affordances (search, filter, sort, columns) default ON. Opt out individually via [no-search] / [no-filter] / [no-sort] / [no-columns]. The previous [searchable] / [filterable] attributes are deprecated — do NOT emit them.
713
705
  - Place the toolbar ABOVE the <card-ui> containing the table-ui, or use [variant="card"] when standing alone outside a card-ui parent (the variant wraps the toolbar in card-style chrome).
714
706
  - Use slot="action" (or [slot="actions"]) for trailing primary buttons (Invite, Export, +New). Use [text] / [count] props for the left cluster, or slotted [slot="title"] / [slot="count"] when content is markup (a <span> + <badge-ui>, etc.).
715
- - Listen for toolbar events (`search`, `filter-change`, `sort-change`, `columns-change`) only to mirror state to URL / persistence / analytics. The toolbar already wires its changes into the bound table — you don't need to manually update the table.
707
+ - Listen for toolbar events (`search`, `filter-change`, `sort-change`, `columns-change`, `page-size-change`) only to mirror state to URL / persistence / analytics. The toolbar already wires its changes into the bound table — you don't need to manually update the table.
708
+ - Use [slot="scope"] for a leading scope/view switcher (an org's teams, a saved view) rendered before [text]/[count]. Use [range-start] / [range-end] / [range-total] together for a "Showing X–Y of N" summary — it renders independently of, and alongside, [text]/[count], never in place of them. Use [page-size] + [page-size-options] for a rows-per-page select; it applies directly to the bound table's [paginate] prop the same way filter/sort/columns changes apply directly to the target.
716
709
 
717
710
  ## Table
718
711
  - Canonical composition: wrap <table-ui> in <card-ui><section bleed> for edge-to-edge tables. The [bleed] removes section padding so columns span the full card width (see apps/saas/members, billing, admin-dashboard).
@@ -776,7 +769,7 @@
776
769
  - `step` is in seconds. 60 = minute precision (default); 900 = 15-minute precision (meeting-time common); 1 = second precision (requires `precision="second"`).
777
770
  - `precision="second"` exposes the seconds segment AND emits `HH:mm:ss`. Default `precision="minute"` emits `HH:mm`.
778
771
  - `hour-cycle` overrides locale-derived behavior. Set explicitly (`h12` / `h23`) when the surface needs a specific cycle (cron editors, log queries, system surfaces).
779
- - For datetime selection use `<datetime-picker-ui>` (SPEC-038) — it composes this primitive as its time pane.
772
+ - For datetime selection use `<calendar-picker-ui precision="minute">` (SPEC-038; the former `<datetime-picker-ui>` thin alias was cut in 0.8.43, gh#1617) — it composes this primitive as its time pane.
780
773
 
781
774
  ## TimelineItem
782
775
  - Child of <timeline-ui> — one chronological event with timestamp + content + optional icon dot.
@@ -800,17 +793,6 @@
800
793
  - Headings missing an [id] receive an auto-generated slug from their text content. Existing ids are preserved.
801
794
  - Smooth-scroll on click is handled by the global `scroll-behavior: smooth` in resets.css (gated by prefers-reduced-motion). Do NOT add per-toc-ui smooth-scroll JS — the global wins.
802
795
 
803
- ## ToggleGroup
804
- - DEPRECATED (gh#1369, #1363 C1) — generate <segmented-ui multiple> + <segment-ui> children instead when [single] is false/absent (the default, multi-select). When [single] is true, generate plain <segmented-ui> (no [multiple]) instead — single-select toggle-group maps to segmented's own single-select mode, not the multiple axis; note segmented-ui single-select never clears on re-click (toggle-group[single] does). Same comma-separated value encoding either way; toggle-group is kept working for existing consumers but should not appear in new generated output.
805
- - Multi-select button cluster — hosts <toggle-option-ui> children, each independently toggleable.
806
- - Use for filter chips, multi-flag toggles, day-of-week pickers; for binary on/off use <switch-ui>.
807
- - Sets the child <toggle-option-ui>'s declared [selected] prop to reflect the group value (ADR-0056) — do not author [selected] directly in generated markup; author the group's value instead.
808
-
809
- ## ToggleOption
810
- - DEPRECATED (gh#1369, #1363 C1) — generate <segment-ui> instead, as a child of <segmented-ui multiple> (or plain <segmented-ui>, no [multiple], if the parent toggle-group had [single] — see toggle-group.yaml). toggle-option is kept working for existing consumers but should not appear in new generated output.
811
- - Child of <toggle-group-ui> — one independently-toggleable button in a multi-select cluster.
812
- - Selected state exposed via its own declared [selected] reflected prop, set by the parent <toggle-group-ui> (ADR-0056) — mirrors <segment-ui>'s convention. Do not set [selected] directly; drive the group's value instead.
813
-
814
796
  ## ToggleScheme
815
797
  - Place toggle-scheme-ui in the shell topbar's trailing action cluster — slot="action" inside <admin-topbar slot="header"> of <admin-content>. It is a persistent, app-wide preference control; never put it in a sidebar footer / <admin-statusbar>, which hosts user-account items only.
816
798
  - Stores user override in localStorage and writes color-scheme inline-style to the target; falls back to prefers-color-scheme if no override is set.
@@ -854,7 +836,7 @@
854
836
 
855
837
  ## Tree
856
838
  - Use <tree-ui> only when data is hierarchical with arbitrary nesting AND a single selected node is meaningful. For flat lists use <list-ui>; for flat sidebar navigation use <nav-ui>; for one-level collapsible groups use <accordion-ui>.
857
- - Canonical mount: inside <editor-sidebar slot="leading"> → <pane-ui side="leading" resizable> → <section> → <tree-ui id="…"> as the structure / navigator pane of the three-pane editor shell. Pair with a <header> in the same pane (e.g. "Structure", "Layers", "Files").
839
+ - Canonical mount: inside <editor-sidebar slot="leading"> → <pane-ui edge="leading" resizable> → <section> → <tree-ui id="…"> as the structure / navigator pane of the three-pane editor shell. Pair with a <header> in the same pane (e.g. "Structure", "Layers", "Files").
858
840
  - Direct children of <tree-ui> MUST be <tree-item-ui>. No other element types in the default slot. <tree-ui> manages single-selection across the whole subtree and implements WAI-ARIA tree-view keyboard navigation (Arrow keys, Enter / Space, Home / End).
859
841
  - Listen for `tree-select` on the <tree-ui>, NOT on individual rows — selection is managed by the parent and bubbles once. Detail = {item, text, value, ctrlKey, metaKey, shiftKey}.
860
842
  - Per ADR-0027, <tree-ui> composes <icon-ui> (for carets) but does NOT auto-import its children. Consumer pages must explicitly import both <tree-ui> and <tree-item-ui>.
@@ -863,6 +845,7 @@
863
845
  - File-upload input with drop zone + browse button. Form-associated; emits file-list change events.
864
846
  - Multiple attribute enables multi-file selection; accept= constrains file types.
865
847
  - compact renders an icon-only trigger (no drop-zone chrome) — use in toolbars/dense rows; label becomes the trigger's aria-label. Programmatic triggering goes through the public .open() method, never the internal [data-dropzone] part.
848
+ - A consumer's own Clear/Reset action empties the selection through the public .clear() method — it also runs automatically on native form reset.
866
849
  - For agent chat attachments use <chat-composer-ui>'s built-in upload affordance instead.
867
850
 
868
851
  ## VisuallyHidden
@@ -1186,7 +1169,7 @@ inside <grid-ui>; reach for the page composite only when search
1186
1169
  - admin-shell takes bespoke admin-* children only. The canonical composition is <admin-topbar> + <admin-sidebar slot="leading"> + <admin-content> + <admin-sidebar slot="trailing"> + <admin-command> + optional <admin-statusbar>. The shell's CSS grid reads child tag selectors to place them.
1187
1170
  - Don't nest col-ui / row-ui or generic layout primitives directly inside admin-shell — app-shell.css handles grid layout based on bespoke child tags. Generic layout goes inside <admin-content> or inside <admin-page-body>.
1188
1171
  - Click forwarding patterns — [data-sidebar-toggle="<name>"] on a button forwards to <admin-sidebar[slot="<name>"]>.toggle(); [data-command-trigger] on a button forwards to <admin-command>.show(). The shell doesn't need to know about the buttons; the bespoke children own the behavior.
1189
- - Legacy data-attribute shapes were retired in v0.4.0 per ADR-0024. Do not author <aside data-sidebar>, <dialog data-command>, [data-resize], <aside-ui slot=>, <span data-spacer>, or <div data-actions> inside admin-shell.
1172
+ - Legacy data-attribute shapes were retired in v0.4.0 per ADR-0024. Do not author <aside data-sidebar>, <dialog data-command>, [data-sidebar-resize], <aside-ui slot=>, <span data-spacer>, or <div data-actions> inside admin-shell.
1190
1173
 
1191
1174
  ## AdminSidebar
1192
1175
  - admin-sidebar is the bespoke replacement for legacy <aside data-sidebar>. Use slot="leading" or slot="trailing" to position. Add resizable + collapsible attributes to opt in to interactive behaviors.
@@ -1,14 +1,14 @@
1
1
  {
2
- "catalogId": "adia.tiers@0.8.41",
2
+ "catalogId": "adia.tiers@0.8.43",
3
3
  "description": "Tier index of the AdiaUI catalog contract (ADR-0050). L0-L4 ladder; every tier-N entry is a declared composition of tier-(N-1) entries. L1 `composes` edges speak A2UI component TYPE names — the R-C7 catalogs’ `components` keys (genui-system SPEC R-C13). Derived — regenerate with `npm run build:catalog-tiers`, never hand-edit.",
4
4
  "extends": {
5
5
  "catalogId": "adia.base",
6
- "version": "0.8.41"
6
+ "version": "0.8.43"
7
7
  },
8
8
  "tiers": {
9
9
  "L0": {
10
10
  "composesTier": null,
11
- "count": 193,
11
+ "count": 189,
12
12
  "entries": {
13
13
  "A2UIRoot": {
14
14
  "category": "container",
@@ -352,17 +352,17 @@
352
352
  "origin": "primitive",
353
353
  "tag": "col-ui"
354
354
  },
355
- "ColorInput": {
355
+ "ColorArea": {
356
356
  "category": "input",
357
357
  "composes": [],
358
358
  "origin": "primitive",
359
- "tag": "color-input-ui"
359
+ "tag": "color-area-ui"
360
360
  },
361
- "ColorPicker": {
361
+ "ColorInput": {
362
362
  "category": "input",
363
363
  "composes": [],
364
364
  "origin": "primitive",
365
- "tag": "color-picker-ui"
365
+ "tag": "color-input-ui"
366
366
  },
367
367
  "Combobox": {
368
368
  "category": "input",
@@ -406,12 +406,6 @@
406
406
  "origin": "module",
407
407
  "tag": "date-range-selector-ui"
408
408
  },
409
- "DatetimePicker": {
410
- "category": "input",
411
- "composes": [],
412
- "origin": "primitive",
413
- "tag": "datetime-picker-ui"
414
- },
415
409
  "DemoToggle": {
416
410
  "category": "container",
417
411
  "composes": [],
@@ -820,12 +814,6 @@
820
814
  "origin": "primitive",
821
815
  "tag": "progress-ui"
822
816
  },
823
- "ProgressRow": {
824
- "category": "feedback",
825
- "composes": [],
826
- "origin": "primitive",
827
- "tag": "progress-row-ui"
828
- },
829
817
  "QRCode": {
830
818
  "category": "display",
831
819
  "composes": [],
@@ -1090,18 +1078,6 @@
1090
1078
  "origin": "primitive",
1091
1079
  "tag": "toast-ui"
1092
1080
  },
1093
- "ToggleGroup": {
1094
- "category": "navigation",
1095
- "composes": [],
1096
- "origin": "primitive",
1097
- "tag": "toggle-group-ui"
1098
- },
1099
- "ToggleOption": {
1100
- "category": "form",
1101
- "composes": [],
1102
- "origin": "primitive",
1103
- "tag": "toggle-option-ui"
1104
- },
1105
1081
  "ToggleScheme": {
1106
1082
  "category": "action",
1107
1083
  "composes": [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adia-ai/a2ui",
3
- "version": "0.8.41",
3
+ "version": "0.8.43",
4
4
  "description": "The A2UI protocol — runtime (renderer, registry, streams, surface manifest, wiring primitives, dockable base classes) plus protocol-side validation. Framework-agnostic and dependency-free; pairs with any A2UI-conformant component set. Folded from @adia-ai/a2ui-runtime + the protocol half of @adia-ai/a2ui-validator (ADR-0048).",
5
5
  "type": "module",
6
6
  "exports": {
package/prop-apply.js CHANGED
@@ -25,7 +25,16 @@
25
25
 
26
26
  // Props components read as a JS property (array/object), never a markup
27
27
  // string — see #JS_PROPS in renderer.js (kept in sync; this IS that set now).
28
- const JS_PROPS = new Set(['data', 'columns', 'options', 'itemRenderer', 'textContent']);
28
+ // gh#1615 `pageSizeOptions` (table-toolbar-ui) is the same dynamic
29
+ // array-typed-prop shape as `data`/`columns` (a JSON-array attribute for
30
+ // static HTML, a real JS array for the property setter): omitting it here
31
+ // sent `String([10,25,50,100])` — `"10,25,50,100"`, Array.prototype.toString
32
+ // joining with commas and no brackets — through the generic setAttribute
33
+ // branch below, which table-toolbar-ui's own JSON.parse hydration then
34
+ // silently rejected (caught by its own try/catch), leaving the page-size
35
+ // select hidden with no error. Caught rendering table-toolbar-ui's own
36
+ // docs-site demo through this exact runtime.
37
+ const JS_PROPS = new Set(['data', 'columns', 'options', 'itemRenderer', 'textContent', 'pageSizeOptions']);
29
38
 
30
39
  // Tags where `el.textContent = value` is safe — pure text-bearing leaves.
31
40
  // On a container, textContent would wipe slotted + appended children.
package/registry.js CHANGED
@@ -32,9 +32,11 @@ export const registry = new Map([
32
32
  ['Avatar', 'avatar-ui'],
33
33
  ['AvatarGroup', 'avatar-group-ui'],
34
34
  ['Progress', 'progress-ui'],
35
- ['ProgressRow', 'progress-row-ui'],
35
+ // ProgressRow/progress-row-ui cut in 0.8.43 (gh#1617, gh#1373) — absorbed
36
+ // into Progress/progress-ui's own label/meta props.
36
37
  ['DateRangePicker', 'date-range-picker-ui'],
37
- ['DatetimePicker', 'datetime-picker-ui'],
38
+ // DatetimePicker/datetime-picker-ui cut in 0.8.43 (gh#1617, gh#1372) —
39
+ // folded into CalendarPicker/calendar-picker-ui's precision axis.
38
40
  ['CalendarGrid', 'calendar-grid-ui'],
39
41
  ['CalendarPicker', 'calendar-picker-ui'],
40
42
  ['Combobox', 'combobox-ui'],
@@ -65,7 +67,9 @@ export const registry = new Map([
65
67
  ['RadioGroup', 'radio-group-ui'],
66
68
  ['DateTimeInput', 'calendar-picker-ui'],
67
69
  ['CalendarPicker', 'calendar-picker-ui'],
68
- ['ColorPicker', 'color-picker-ui'],
70
+ ['ColorArea', 'color-area-ui'],
71
+ // ColorPicker/color-picker-ui cut in 0.8.43 (gh#1617, ADR-0063) — the
72
+ // component was a thin compat alias of ColorArea/color-area-ui.
69
73
  // Search deprecated — use Input type="search" prefix="magnifying-glass"
70
74
  ['Upload', 'upload-ui'],
71
75
  ['OtpInput', 'otp-input-ui'],
@@ -124,7 +128,9 @@ export const registry = new Map([
124
128
  ['Pagination', 'pagination-ui'],
125
129
  ['SegmentedControl', 'segmented-ui'],
126
130
  ['Segment', 'segment-ui'],
127
- ['ToggleGroup', 'toggle-group-ui'],
131
+ // ToggleGroup/toggle-group-ui + ToggleOption/toggle-option-ui cut in
132
+ // 0.8.43 (gh#1617, gh#1369) — superseded by SegmentedControl[multiple]
133
+ // + Segment.
128
134
 
129
135
  // Utility
130
136
  ['Command', 'command-ui'],
@@ -187,7 +193,7 @@ export const registry = new Map([
187
193
  ['segment-ui', 'segment-ui'],
188
194
  ['command-ui', 'command-ui'],
189
195
  ['calendar-picker-ui', 'calendar-picker-ui'],
190
- ['color-picker-ui', 'color-picker-ui'],
196
+ ['color-area-ui', 'color-area-ui'],
191
197
  ['kbd-ui', 'kbd-ui'],
192
198
  ['toolbar-ui', 'toolbar-ui'],
193
199
  ['otp-input-ui', 'otp-input-ui'],
@@ -344,7 +350,6 @@ export const registry = new Map([
344
350
  // surfaces above (GenRoot, SimpleShell, ThemePanel).
345
351
  ['ThemeProvider', 'theme-provider'],
346
352
  ['TimePicker', 'time-picker-ui'],
347
- ['ToggleOption', 'toggle-option-ui'],
348
353
  ['ToggleScheme', 'toggle-scheme-ui'],
349
354
  ['Tree', 'tree-ui'],
350
355
  ['TreeItem', 'tree-item-ui'],
@@ -559,7 +559,7 @@ function checkComponentsHaveRenderableContent(components) {
559
559
  'CheckBox', 'Check', 'Toggle', 'Switch', 'Radio',
560
560
  'Select', 'ChoicePicker', 'Slider', 'Range', 'Rating',
561
561
  'Search', 'OtpInput', 'CalendarPicker', 'DateTimeInput',
562
- 'ColorPicker', 'Upload',
562
+ 'ColorArea', 'Upload',
563
563
  ]);
564
564
  // Content-bearing props that satisfy the "renderable" requirement.
565
565
  const CONTENT_PROPS = ['label', 'placeholder', 'text', 'aria-label',
@@ -849,7 +849,7 @@ function checkIntentAlignment(components, intent) {
849
849
  'carousel': ['Swiper'],
850
850
  'swiper': ['Swiper'],
851
851
  'calendar': ['CalendarPicker'],
852
- 'color picker': ['ColorPicker'],
852
+ 'color picker': ['ColorArea'],
853
853
  'otp': ['OtpInput'],
854
854
  'code': ['Code'],
855
855
  'image': ['Image'],