@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.
@@ -416,7 +416,7 @@
416
416
  },
417
417
  "ActionItem": {
418
418
  "title": "ActionItem",
419
- "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).",
419
+ "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.)",
420
420
  "type": "object",
421
421
  "allOf": [
422
422
  {
@@ -427,6 +427,11 @@
427
427
  }
428
428
  ],
429
429
  "properties": {
430
+ "description": {
431
+ "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).",
432
+ "type": "string",
433
+ "default": ""
434
+ },
430
435
  "component": {
431
436
  "const": "ActionItem"
432
437
  },
@@ -439,11 +444,6 @@
439
444
  "description": "Leading icon name (Phosphor).",
440
445
  "type": "string"
441
446
  },
442
- "subtitle": {
443
- "description": "Optional secondary description line rendered under the label.",
444
- "type": "string",
445
- "default": ""
446
- },
447
447
  "text": {
448
448
  "description": "Action label.",
449
449
  "type": "string"
@@ -494,7 +494,7 @@
494
494
  "description": "Override the [icon] glyph with a custom slotted element (custom icon-ui, image, avatar). Mutually exclusive with the [icon] attribute — slot child wins."
495
495
  },
496
496
  "subtitle": {
497
- "description": "Custom secondary-line content override; falls through to [subtitle] prop if not slotted."
497
+ "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."
498
498
  },
499
499
  "text": {
500
500
  "description": "Custom label content; falls through to [text] prop if not slotted."
@@ -1781,7 +1781,7 @@
1781
1781
  },
1782
1782
  "AdminShell": {
1783
1783
  "title": "AdminShell",
1784
- "description": "Behavior-only application shell. Canonical authoring shape uses\ncluster-namespaced bespoke children — <admin-topbar> at the top,\n<admin-sidebar slot=\"leading|trailing\"> rails, <admin-content> for\nthe main content region, <admin-command> for the Cmd+K palette, and\noptional <admin-statusbar> at the bottom. The shell wires sidebar\ntoggle forwarding, command-palette triggers, and the ResizeObserver\nthat drives responsive sidebar collapse; each bespoke child owns\nits own resize / collapse / open state-as-attribute semantics per\nADR-0023.\n\nLegacy data-attribute shapes (<aside data-sidebar>, <dialog\ndata-command>, [data-resize], <aside-ui slot=>, <span data-spacer>,\n<div data-actions>) were RETIRED in v0.4.0 per ADR-0024 and are no\nlonger recognized. Consumers must use the bespoke vocabulary.\n",
1784
+ "description": "Behavior-only application shell. Canonical authoring shape uses\ncluster-namespaced bespoke children — <admin-topbar> at the top,\n<admin-sidebar slot=\"leading|trailing\"> rails, <admin-content> for\nthe main content region, <admin-command> for the Cmd+K palette, and\noptional <admin-statusbar> at the bottom. The shell wires sidebar\ntoggle forwarding, command-palette triggers, and the ResizeObserver\nthat drives responsive sidebar collapse; each bespoke child owns\nits own resize / collapse / open state-as-attribute semantics per\nADR-0023.\n\nLegacy data-attribute shapes (<aside data-sidebar>, <dialog\ndata-command>, [data-sidebar-resize], <aside-ui slot=>, <span data-spacer>,\n<div data-actions>) were RETIRED in v0.4.0 per ADR-0024 and are no\nlonger recognized. Consumers must use the bespoke vocabulary.\n",
1785
1785
  "type": "object",
1786
1786
  "allOf": [
1787
1787
  {
@@ -1934,7 +1934,7 @@
1934
1934
  "default": ""
1935
1935
  },
1936
1936
  "resizable": {
1937
- "description": "Opts in to drag-to-resize behavior. Author supplies a child\n[data-resize] element as the drag handle.\n",
1937
+ "description": "Opts in to drag-to-resize behavior. Author supplies a child\n[data-sidebar-resize] element as the drag handle.\n",
1938
1938
  "type": "boolean",
1939
1939
  "default": false
1940
1940
  },
@@ -5124,7 +5124,7 @@
5124
5124
  },
5125
5125
  "CalendarPicker": {
5126
5126
  "title": "CalendarPicker",
5127
- "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.",
5127
+ "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.",
5128
5128
  "type": "object",
5129
5129
  "allOf": [
5130
5130
  {
@@ -5861,23 +5861,23 @@
5861
5861
  ],
5862
5862
  "default": "abbr"
5863
5863
  },
5864
- "hideAverage": {
5865
- "description": "When true, suppress the overlaid average line",
5864
+ "loading": {
5865
+ "description": "Show a skeleton placeholder instead of the chart body. Set to true while data is being fetched; clear once data arrives. Preserves the element's aspect-ratio dimensions so the skeleton occupies the same space the chart will fill. Parity with stat-ui[loading] and table-ui[loading] (§FB-12, v0.6.27).",
5866
5866
  "type": "boolean",
5867
5867
  "default": false
5868
5868
  },
5869
- "hideGrid": {
5870
- "description": "Hide gridlines",
5869
+ "noAverage": {
5870
+ "description": "When true, suppress the overlaid average line. Canonical spelling (ADR-0063, gh#1563) — the deprecated `hideAverage` dual-read shim was cut in 0.8.43 (gh#1617).",
5871
5871
  "type": "boolean",
5872
5872
  "default": false
5873
5873
  },
5874
- "hideValues": {
5875
- "description": "Hide value labels",
5874
+ "noGrid": {
5875
+ "description": "Hide gridlines. Canonical spelling (ADR-0063, gh#1563) — the deprecated `hideGrid` dual-read shim was cut in 0.8.43 (gh#1617).",
5876
5876
  "type": "boolean",
5877
5877
  "default": false
5878
5878
  },
5879
- "loading": {
5880
- "description": "Show a skeleton placeholder instead of the chart body. Set to true while data is being fetched; clear once data arrives. Preserves the element's aspect-ratio dimensions so the skeleton occupies the same space the chart will fill. Parity with stat-ui[loading] and table-ui[loading] (§FB-12, v0.6.27).",
5879
+ "noValues": {
5880
+ "description": "Hide value labels. Canonical spelling (ADR-0063, gh#1563) the deprecated `hideValues` dual-read shim was cut in 0.8.43 (gh#1617).",
5881
5881
  "type": "boolean",
5882
5882
  "default": false
5883
5883
  },
@@ -6154,6 +6154,11 @@
6154
6154
  "type": "string",
6155
6155
  "default": ""
6156
6156
  },
6157
+ "interactive": {
6158
+ "description": "Canonical opt-in spelling (ADR-0063, gh#1563) — the deprecated `static` opt-out alias was cut in 0.8.43 (gh#1617). Rows are interactive <button>-role badges by default — this default stays `true` (deliberately NOT flipped yet; the 0.9.0 cut inverts it to `false` after a full consumer scan of every `<chart-legend-ui>` tag per the ADR).",
6159
+ "type": "boolean",
6160
+ "default": true
6161
+ },
6157
6162
  "onToggle": {
6158
6163
  "description": "Series-toggle mode emitted via the `toggle` event. `hide` removes the series from the render; `opacity` fades it. Wired via [for] on chart-ui.",
6159
6164
  "type": "string",
@@ -6184,11 +6189,6 @@
6184
6189
  "dashed"
6185
6190
  ],
6186
6191
  "default": "dot"
6187
- },
6188
- "static": {
6189
- "description": "When set, rows are non-interactive <span>s (no click, no toggle).",
6190
- "type": "boolean",
6191
- "default": false
6192
6192
  }
6193
6193
  },
6194
6194
  "required": [
@@ -6204,7 +6204,7 @@
6204
6204
  ],
6205
6205
  "events": {
6206
6206
  "toggle": {
6207
- "description": "Fires on row click (non-static). Detail: {key, active, mode}. `active` is the new state (true=visible). Consumers (or chart-ui via [for]) wire this to series visibility.",
6207
+ "description": "Fires on row click when interactive. Detail: {key, active, mode}. `active` is the new state (true=visible). Consumers (or chart-ui via [for]) wire this to series visibility.",
6208
6208
  "detail": {
6209
6209
  "active": {
6210
6210
  "description": "New visibility state (true = visible).",
@@ -6261,12 +6261,8 @@
6261
6261
  "name": "idle"
6262
6262
  },
6263
6263
  {
6264
- "description": "Rows are <button>s. Default unless [static].",
6264
+ "description": "Rows are <button>s (the default). When false, rows are <span>s — no click handler, no toggle affordance.",
6265
6265
  "name": "interactive"
6266
- },
6267
- {
6268
- "description": "Rows are <span>s. No click handler, no toggle affordance.",
6269
- "name": "static"
6270
6266
  }
6271
6267
  ],
6272
6268
  "status": "stable",
@@ -6895,7 +6891,7 @@
6895
6891
  "default": ""
6896
6892
  },
6897
6893
  "resizable": {
6898
- "description": "Opts in to drag-to-resize behavior. Author supplies a child\n[data-resize] element as the drag handle.\n",
6894
+ "description": "Opts in to drag-to-resize behavior. Author supplies a child\n[data-sidebar-resize] element as the drag handle.\n",
6899
6895
  "type": "boolean",
6900
6896
  "default": false
6901
6897
  },
@@ -7668,9 +7664,155 @@
7668
7664
  "version": 1
7669
7665
  }
7670
7666
  },
7667
+ "ColorArea": {
7668
+ "title": "ColorArea",
7669
+ "description": "OKLCH-native color picker with 2D area and H/C/L sliders. Form-associated input emitting OKLCH color strings; canonical color authoring surface in the AdiaUI token system. Use for color input in design tools or theming UIs; for simple color swatches use <swatch-ui> or <color-input-ui> instead. Renamed from `<color-picker-ui>` (ADR-0063, gh#1563 — `-picker` is reserved for the outer trigger + popover composite shape; this is the inline substrate, mirroring <calendar-grid-ui>'s naming precedent). `<color-picker-ui>` was cut in 0.8.43 (gh#1617) — this is the sole tag now.",
7670
+ "type": "object",
7671
+ "allOf": [
7672
+ {
7673
+ "$ref": "#/$defs/ComponentCommon"
7674
+ },
7675
+ {
7676
+ "$ref": "#/$defs/CatalogComponentCommon"
7677
+ }
7678
+ ],
7679
+ "properties": {
7680
+ "baseHue": {
7681
+ "description": "Reference hue (degrees) for the [hue-drift-max] constraint. Default\nNaN — falls back to the picker's hue at first commit so the consumer\ncan pre-seed the picker and constrain drift from that initial value.\n",
7682
+ "type": "number",
7683
+ "default": "NaN"
7684
+ },
7685
+ "component": {
7686
+ "const": "ColorArea"
7687
+ },
7688
+ "disabled": {
7689
+ "description": "Disables all interaction",
7690
+ "type": "boolean",
7691
+ "default": false
7692
+ },
7693
+ "format": {
7694
+ "description": "Output format for the value property",
7695
+ "type": "string",
7696
+ "enum": [
7697
+ "hex",
7698
+ "oklch"
7699
+ ],
7700
+ "default": "hex"
7701
+ },
7702
+ "hueDriftMax": {
7703
+ "description": "Generation constraint — maximum allowed signed-shortest-path hue\ndeviation (degrees) from [base-hue] (or the first-committed hue\nif [base-hue] is unset). Default NaN (no constraint). Wrap-aware\nso a drift of 350 degrees resolves as -10.\n",
7704
+ "type": "number",
7705
+ "default": "NaN"
7706
+ },
7707
+ "maxChroma": {
7708
+ "description": "Generation constraint (v0.4.9 §99h, FEEDBACK-02 #7) — clamp the\nOKLCH chroma channel to at most this value before commit. Out-of-\nbound mutations round-trip to the nearest in-bound equivalent +\nfire `constraint-clamp`. Default Infinity (no constraint).\n",
7709
+ "type": "number",
7710
+ "default": "Infinity"
7711
+ },
7712
+ "maxL": {
7713
+ "description": "Generation constraint — clamp OKLCH lightness to at most this value (0..1). Default 1 (no constraint).",
7714
+ "type": "number",
7715
+ "default": 1
7716
+ },
7717
+ "minL": {
7718
+ "description": "Generation constraint — clamp OKLCH lightness to at least this value (0..1). Default 0 (no constraint).",
7719
+ "type": "number",
7720
+ "default": 0
7721
+ },
7722
+ "name": {
7723
+ "description": "Form field name",
7724
+ "type": "string",
7725
+ "default": ""
7726
+ },
7727
+ "value": {
7728
+ "description": "Current color as hex string",
7729
+ "type": "string",
7730
+ "default": "#3b82f6"
7731
+ }
7732
+ },
7733
+ "required": [
7734
+ "component"
7735
+ ],
7736
+ "unevaluatedProperties": false,
7737
+ "x-adiaui": {
7738
+ "anti_patterns": [],
7739
+ "category": "input",
7740
+ "composes": [
7741
+ "slider-ui"
7742
+ ],
7743
+ "events": {
7744
+ "change": {
7745
+ "description": "Fired on every color change"
7746
+ },
7747
+ "constraint-clamp": {
7748
+ "description": "Fired immediately before `change` / `input` when one or more\nconsumer-declared constraints (max-chroma / max-l / min-l /\nhue-drift-max) clamped a channel away from the user-requested\nvalue. detail.clamps is an array of axis-specific clamp records.\n",
7749
+ "detail": {
7750
+ "clamps": {
7751
+ "description": "Array of `{ axis, requested, clamped, reason }` objects. axis is\none of \"l\" / \"c\" / \"h\". reason names the triggering constraint\nprop. Empty arrays are never emitted.\n",
7752
+ "type": "array"
7753
+ }
7754
+ }
7755
+ },
7756
+ "input": {
7757
+ "description": "Fired during continuous interaction (drag)"
7758
+ }
7759
+ },
7760
+ "examples": [
7761
+ {
7762
+ "description": "Color picker card with a color picker component for selecting colors with swatches.",
7763
+ "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Card\",\n \"children\": [\n \"sec\"\n ]\n },\n {\n \"id\": \"sec\",\n \"component\": \"Section\",\n \"children\": [\n \"cp\"\n ]\n },\n {\n \"id\": \"cp\",\n \"component\": \"ColorArea\",\n \"value\": \"#6366f1\"\n }\n]",
7764
+ "name": "color-area-demo"
7765
+ },
7766
+ {
7767
+ "description": "Color picker with swatch selection in a card.",
7768
+ "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Card\",\n \"children\": [\n \"sec\"\n ]\n },\n {\n \"id\": \"sec\",\n \"component\": \"Section\",\n \"children\": [\n \"cp\"\n ]\n },\n {\n \"id\": \"cp\",\n \"component\": \"ColorArea\",\n \"value\": \"#3b82f6\"\n }\n]",
7769
+ "name": "color-area-panel"
7770
+ }
7771
+ ],
7772
+ "keywords": [
7773
+ "colorarea",
7774
+ "color-area",
7775
+ "colorpicker",
7776
+ "color-picker",
7777
+ "color",
7778
+ "picker"
7779
+ ],
7780
+ "name": "UIColorArea",
7781
+ "parts": {},
7782
+ "related": [
7783
+ "grid",
7784
+ "button"
7785
+ ],
7786
+ "slots": {},
7787
+ "states": [
7788
+ {
7789
+ "description": "Default, ready for interaction.",
7790
+ "name": "idle"
7791
+ },
7792
+ {
7793
+ "description": "Non-interactive; dimmed.",
7794
+ "attribute": "disabled",
7795
+ "name": "disabled"
7796
+ }
7797
+ ],
7798
+ "status": "stable",
7799
+ "synonyms": {
7800
+ "color-area": [
7801
+ "color-canvas",
7802
+ "color-surface",
7803
+ "swatch-picker",
7804
+ "color-picker"
7805
+ ]
7806
+ },
7807
+ "tag": "color-area-ui",
7808
+ "tokens": {},
7809
+ "traits": [],
7810
+ "version": 1
7811
+ }
7812
+ },
7671
7813
  "ColorInput": {
7672
7814
  "title": "ColorInput",
7673
- "description": "Compact form-bearing color input — opens a popover-anchored\n`<color-picker-ui>` from an inline swatch button. §302 (v0.5.12,\nFEEDBACK-29 re-bucket from v0.6.0). Canonicalizes the USAGE.md §221f\nOption B recipe (popover + button + color-picker) into a single\nform-associated tag for inline form contexts (settings drawer \"source\ncolor\" field, swatch-row inline-edit, etc.).",
7815
+ "description": "Compact form-bearing color input — opens a popover-anchored\n`<color-area-ui>` from an inline swatch button. §302 (v0.5.12,\nFEEDBACK-29 re-bucket from v0.6.0). Canonicalizes the USAGE.md §221f\nOption B recipe (popover + button + color-area) into a single\nform-associated tag for inline form contexts (settings drawer \"source\ncolor\" field, swatch-row inline-edit, etc.). Composes `<color-area-ui>`\n(ADR-0063, gh#1563 — renamed from `<color-picker-ui>`, cut in 0.8.43,\ngh#1617); `color-input-ui`'s own tag/name is unaffected.",
7674
7816
  "type": "object",
7675
7817
  "allOf": [
7676
7818
  {
@@ -7709,7 +7851,7 @@
7709
7851
  "default": "NaN"
7710
7852
  },
7711
7853
  "maxChroma": {
7712
- "description": "Generation constraint forwarded to the inner `<color-picker-ui>` (v0.5.13\n§-TBD, FB-33 §1). Clamp the OKLCH chroma channel to at most this value.\nDefault Infinity (no constraint).\n",
7854
+ "description": "Generation constraint forwarded to the inner `<color-area-ui>` (v0.5.13\n§-TBD, FB-33 §1). Clamp the OKLCH chroma channel to at most this value.\nDefault Infinity (no constraint).\n",
7713
7855
  "type": "number",
7714
7856
  "default": "Infinity"
7715
7857
  },
@@ -7734,7 +7876,7 @@
7734
7876
  "default": false
7735
7877
  },
7736
7878
  "placement": {
7737
- "description": "Popover placement relative to the trigger. Default `bottom` centers the color-picker panel under the swatch button (ADR-0034 Rule 2 — panel wider than trigger).",
7879
+ "description": "Popover placement relative to the trigger. Default `bottom` centers the color-area panel under the swatch button (ADR-0034 Rule 2 — panel wider than trigger).",
7738
7880
  "type": "string",
7739
7881
  "enum": [
7740
7882
  "top",
@@ -7764,7 +7906,7 @@
7764
7906
  "composes": [
7765
7907
  "button-ui",
7766
7908
  "popover-ui",
7767
- "color-picker-ui"
7909
+ "color-area-ui"
7768
7910
  ],
7769
7911
  "events": {
7770
7912
  "change": {
@@ -7845,7 +7987,7 @@
7845
7987
  "name": "UIColorInput",
7846
7988
  "parts": {},
7847
7989
  "related": [
7848
- "color-picker",
7990
+ "color-area",
7849
7991
  "popover",
7850
7992
  "button",
7851
7993
  "swatch"
@@ -7886,9 +8028,9 @@
7886
8028
  "version": 1
7887
8029
  }
7888
8030
  },
7889
- "ColorPicker": {
7890
- "title": "ColorPicker",
7891
- "description": "OKLCH-native color picker with 2D area and H/C/L sliders. Form-associated input emitting OKLCH color strings; canonical color authoring surface in the AdiaUI token system. Use for color input in design tools or theming UIs; for simple color swatches use <swatch-ui> or <color-input-ui> instead.",
8031
+ "Combobox": {
8032
+ "title": "Combobox",
8033
+ "description": "Typeahead-filterable single-select primitive the constrained-choice\ncombobox per WAI-APG \"Combobox With List Autocomplete (manual\nselection)\". The committed value MUST come from the options list\nunless `[free-text]` is set. Distinct from `<select-ui searchable>`\n(button-first dropdown) and `<autocomplete-input-ui>` (free-form).\nForm-bearing via UIFormElement: `[name]`, `[value]`, `[required]`,\n`[disabled]`, fires `change`. Options via native `<option>` /\n`<optgroup>` children OR programmatic `.options` array.\n",
7892
8034
  "type": "object",
7893
8035
  "allOf": [
7894
8036
  {
@@ -7899,238 +8041,95 @@
7899
8041
  }
7900
8042
  ],
7901
8043
  "properties": {
7902
- "baseHue": {
7903
- "description": "Reference hue (degrees) for the [hue-drift-max] constraint. Default\nNaN falls back to the picker's hue at first commit so the consumer\ncan pre-seed the picker and constrain drift from that initial value.\n",
7904
- "type": "number",
7905
- "default": "NaN"
8044
+ "required": {
8045
+ "description": "Marks the field as required for form validation",
8046
+ "type": "boolean",
8047
+ "default": false
8048
+ },
8049
+ "clearable": {
8050
+ "description": "Renders an `x` clear button when value is set",
8051
+ "type": "boolean",
8052
+ "default": false
7906
8053
  },
7907
8054
  "component": {
7908
- "const": "ColorPicker"
8055
+ "const": "Combobox"
8056
+ },
8057
+ "creatable": {
8058
+ "description": "Implies `[free-text]`; on Enter with unmatched typed text fires a\n`create` event with detail.value so the consumer can run a\nbackend create-then-refresh-options flow.",
8059
+ "type": "boolean",
8060
+ "default": false
7909
8061
  },
7910
8062
  "disabled": {
7911
- "description": "Disables all interaction",
8063
+ "description": "Disables interaction and dims the control",
7912
8064
  "type": "boolean",
7913
8065
  "default": false
7914
8066
  },
7915
- "format": {
7916
- "description": "Output format for the value property",
8067
+ "error": {
8068
+ "description": "Validation error message",
8069
+ "type": "string",
8070
+ "default": ""
8071
+ },
8072
+ "filter-mode": {
8073
+ "description": "Client-side filter algorithm.",
7917
8074
  "type": "string",
7918
8075
  "enum": [
7919
- "hex",
7920
- "oklch"
8076
+ "substring",
8077
+ "prefix",
8078
+ "fuzzy"
7921
8079
  ],
7922
- "default": "hex"
8080
+ "default": "substring"
7923
8081
  },
7924
- "hueDriftMax": {
7925
- "description": "Generation constraint maximum allowed signed-shortest-path hue\ndeviation (degrees) from [base-hue] (or the first-committed hue\nif [base-hue] is unset). Default NaN (no constraint). Wrap-aware\nso a drift of 350 degrees resolves as -10.\n",
7926
- "type": "number",
7927
- "default": "NaN"
8082
+ "free-text": {
8083
+ "description": "Allow typed text not in the options list. Blurs the distinction\nwith <autocomplete-input-ui>; prefer the dedicated primitive\nunless the value model truly needs both modes (tag-with-suggestions,\nemail-with-recent-recipients).",
8084
+ "type": "boolean",
8085
+ "default": false
7928
8086
  },
7929
- "maxChroma": {
7930
- "description": "Generation constraint (v0.4.9 §99h, FEEDBACK-02 #7) — clamp the\nOKLCH chroma channel to at most this value before commit. Out-of-\nbound mutations round-trip to the nearest in-bound equivalent +\nfire `constraint-clamp`. Default Infinity (no constraint).\n",
7931
- "type": "number",
7932
- "default": "Infinity"
8087
+ "highlight-match": {
8088
+ "description": "Wraps the matched substring in `<mark>` inside option labels",
8089
+ "type": "boolean",
8090
+ "default": true
7933
8091
  },
7934
- "maxL": {
7935
- "description": "Generation constraint clamp OKLCH lightness to at most this value (0..1). Default 1 (no constraint).",
8092
+ "hint": {
8093
+ "description": "Caption text below the field; wires `aria-describedby` on the host\nso screen readers announce it as a description.",
8094
+ "type": "string",
8095
+ "default": ""
8096
+ },
8097
+ "label": {
8098
+ "description": "Inline label rendered above the field. Wrap with <field-ui> for\nproper `<label for>` association in form-row compositions.",
8099
+ "type": "string",
8100
+ "default": ""
8101
+ },
8102
+ "loading": {
8103
+ "description": "Shows a loading spinner inside the popover; consumer drives async fetch",
8104
+ "type": "boolean",
8105
+ "default": false
8106
+ },
8107
+ "max-options": {
8108
+ "description": "Cap on rendered options. Overflow shows a \"scroll for more\" hint",
7936
8109
  "type": "number",
7937
- "default": 1
8110
+ "default": 100
7938
8111
  },
7939
- "minL": {
7940
- "description": "Generation constraintclamp OKLCH lightness to at least this value (0..1). Default 0 (no constraint).",
8112
+ "max-visible-items": {
8113
+ "description": "How many option rows are visible before the listbox scrolls the menu height hugs N rows instead of growing to the 18rem fallback. Distinct from max-options (the render cap). 0 disables.",
7941
8114
  "type": "number",
7942
- "default": 0
8115
+ "default": 10
7943
8116
  },
7944
8117
  "name": {
7945
- "description": "Form field name",
8118
+ "description": "Form control name for form data submission",
7946
8119
  "type": "string",
7947
8120
  "default": ""
7948
8121
  },
7949
- "value": {
7950
- "description": "Current color as hex string",
7951
- "type": "string",
7952
- "default": "#3b82f6"
7953
- }
7954
- },
7955
- "required": [
7956
- "component"
7957
- ],
7958
- "unevaluatedProperties": false,
7959
- "x-adiaui": {
7960
- "anti_patterns": [],
7961
- "category": "input",
7962
- "composes": [
7963
- "slider-ui"
7964
- ],
7965
- "events": {
7966
- "change": {
7967
- "description": "Fired on every color change"
7968
- },
7969
- "constraint-clamp": {
7970
- "description": "Fired immediately before `change` / `input` when one or more\nconsumer-declared constraints (max-chroma / max-l / min-l /\nhue-drift-max) clamped a channel away from the user-requested\nvalue. detail.clamps is an array of axis-specific clamp records.\n",
7971
- "detail": {
7972
- "clamps": {
7973
- "description": "Array of `{ axis, requested, clamped, reason }` objects. axis is\none of \"l\" / \"c\" / \"h\". reason names the triggering constraint\nprop. Empty arrays are never emitted.\n",
7974
- "type": "array"
7975
- }
7976
- }
7977
- },
7978
- "input": {
7979
- "description": "Fired during continuous interaction (drag)"
7980
- }
7981
- },
7982
- "examples": [
7983
- {
7984
- "description": "Color picker card with a color picker component for selecting colors with swatches.",
7985
- "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Card\",\n \"children\": [\n \"sec\"\n ]\n },\n {\n \"id\": \"sec\",\n \"component\": \"Section\",\n \"children\": [\n \"cp\"\n ]\n },\n {\n \"id\": \"cp\",\n \"component\": \"ColorPicker\",\n \"value\": \"#6366f1\"\n }\n]",
7986
- "name": "color-picker-demo"
7987
- },
7988
- {
7989
- "description": "Color picker with swatch selection in a card.",
7990
- "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Card\",\n \"children\": [\n \"sec\"\n ]\n },\n {\n \"id\": \"sec\",\n \"component\": \"Section\",\n \"children\": [\n \"cp\"\n ]\n },\n {\n \"id\": \"cp\",\n \"component\": \"ColorPicker\",\n \"value\": \"#3b82f6\"\n }\n]",
7991
- "name": "color-picker-panel"
7992
- }
7993
- ],
7994
- "keywords": [
7995
- "colorpicker",
7996
- "color-picker",
7997
- "color",
7998
- "picker"
7999
- ],
8000
- "name": "UIColorPicker",
8001
- "parts": {},
8002
- "related": [
8003
- "grid",
8004
- "button"
8005
- ],
8006
- "slots": {},
8007
- "states": [
8008
- {
8009
- "description": "Default, ready for interaction.",
8010
- "name": "idle"
8011
- },
8012
- {
8013
- "description": "Non-interactive; dimmed.",
8014
- "attribute": "disabled",
8015
- "name": "disabled"
8016
- }
8017
- ],
8018
- "status": "stable",
8019
- "synonyms": {
8020
- "color-picker": [
8021
- "color-canvas",
8022
- "color-surface",
8023
- "swatch-picker"
8024
- ]
8025
- },
8026
- "tag": "color-picker-ui",
8027
- "tokens": {},
8028
- "traits": [],
8029
- "version": 1
8030
- }
8031
- },
8032
- "Combobox": {
8033
- "title": "Combobox",
8034
- "description": "Typeahead-filterable single-select primitive — the constrained-choice\ncombobox per WAI-APG \"Combobox With List Autocomplete (manual\nselection)\". The committed value MUST come from the options list\nunless `[free-text]` is set. Distinct from `<select-ui searchable>`\n(button-first dropdown) and `<autocomplete-input-ui>` (free-form).\nForm-bearing via UIFormElement: `[name]`, `[value]`, `[required]`,\n`[disabled]`, fires `change`. Options via native `<option>` /\n`<optgroup>` children OR programmatic `.options` array.\n",
8035
- "type": "object",
8036
- "allOf": [
8037
- {
8038
- "$ref": "#/$defs/ComponentCommon"
8039
- },
8040
- {
8041
- "$ref": "#/$defs/CatalogComponentCommon"
8042
- }
8043
- ],
8044
- "properties": {
8045
- "required": {
8046
- "description": "Marks the field as required for form validation",
8047
- "type": "boolean",
8048
- "default": false
8049
- },
8050
- "clearable": {
8051
- "description": "Renders an `x` clear button when value is set",
8052
- "type": "boolean",
8053
- "default": false
8054
- },
8055
- "component": {
8056
- "const": "Combobox"
8057
- },
8058
- "creatable": {
8059
- "description": "Implies `[free-text]`; on Enter with unmatched typed text fires a\n`create` event with detail.value so the consumer can run a\nbackend create-then-refresh-options flow.",
8060
- "type": "boolean",
8061
- "default": false
8062
- },
8063
- "disabled": {
8064
- "description": "Disables interaction and dims the control",
8065
- "type": "boolean",
8066
- "default": false
8067
- },
8068
- "error": {
8069
- "description": "Validation error message",
8070
- "type": "string",
8071
- "default": ""
8072
- },
8073
- "filter-mode": {
8074
- "description": "Client-side filter algorithm.",
8075
- "type": "string",
8076
- "enum": [
8077
- "substring",
8078
- "prefix",
8079
- "fuzzy"
8080
- ],
8081
- "default": "substring"
8082
- },
8083
- "free-text": {
8084
- "description": "Allow typed text not in the options list. Blurs the distinction\nwith <autocomplete-input-ui>; prefer the dedicated primitive\nunless the value model truly needs both modes (tag-with-suggestions,\nemail-with-recent-recipients).",
8085
- "type": "boolean",
8086
- "default": false
8087
- },
8088
- "highlight-match": {
8089
- "description": "Wraps the matched substring in `<mark>` inside option labels",
8090
- "type": "boolean",
8091
- "default": true
8092
- },
8093
- "hint": {
8094
- "description": "Caption text below the field; wires `aria-describedby` on the host\nso screen readers announce it as a description.",
8095
- "type": "string",
8096
- "default": ""
8097
- },
8098
- "label": {
8099
- "description": "Inline label rendered above the field. Wrap with <field-ui> for\nproper `<label for>` association in form-row compositions.",
8100
- "type": "string",
8101
- "default": ""
8102
- },
8103
- "loading": {
8104
- "description": "Shows a loading spinner inside the popover; consumer drives async fetch",
8105
- "type": "boolean",
8106
- "default": false
8107
- },
8108
- "max-options": {
8109
- "description": "Cap on rendered options. Overflow shows a \"scroll for more\" hint",
8110
- "type": "number",
8111
- "default": 100
8112
- },
8113
- "max-visible-items": {
8114
- "description": "How many option rows are visible before the listbox scrolls — the menu height hugs N rows instead of growing to the 18rem fallback. Distinct from max-options (the render cap). 0 disables.",
8115
- "type": "number",
8116
- "default": 10
8117
- },
8118
- "name": {
8119
- "description": "Form control name for form data submission",
8120
- "type": "string",
8121
- "default": ""
8122
- },
8123
- "open": {
8124
- "description": "Reflects popover open / closed state",
8125
- "type": "boolean",
8126
- "default": false
8127
- },
8128
- "options": {
8129
- "description": "Programmatic option list. Array of {value, label, disabled?, group?} or grouped {label, options:[…]}. Alternative to declarative <option> / <optgroup> children.",
8130
- "$ref": "#/$defs/DynamicObjectList"
8131
- },
8132
- "placeholder": {
8133
- "description": "Placeholder text in the input when value is empty",
8122
+ "open": {
8123
+ "description": "Reflects popover open / closed state",
8124
+ "type": "boolean",
8125
+ "default": false
8126
+ },
8127
+ "options": {
8128
+ "description": "Programmatic option list. Array of {value, label, disabled?, group?} or grouped {label, options:[…]}. Alternative to declarative <option> / <optgroup> children.",
8129
+ "$ref": "#/$defs/DynamicObjectList"
8130
+ },
8131
+ "placeholder": {
8132
+ "description": "Placeholder text in the input when value is empty",
8134
8133
  "type": "string",
8135
8134
  "default": "Select..."
8136
8135
  },
@@ -9810,260 +9809,6 @@
9810
9809
  "version": 1
9811
9810
  }
9812
9811
  },
9813
- "DatetimePicker": {
9814
- "title": "DatetimePicker",
9815
- "description": "DEPRECATED (gh#1372, #1363 C3c) — folded into <calendar-picker-ui>'s widened `precision` axis. `<datetime-picker-ui>` is now a thin `UICalendarPicker` subclass (see datetime-picker.class.js) rather than an independent implementation: `precision` defaults to `\"minute\"` (not `\"date\"`) and `placeholder` defaults to `\"Select date and time\"`; every other prop/event/token is inherited unchanged from <calendar-picker-ui>. Existing markup keeps working, but new markup should reach for `<calendar-picker-ui precision=\"minute\">` (or `precision=\"second\"`) directly. See <calendar-picker-ui> for the full contract.",
9816
- "type": "object",
9817
- "allOf": [
9818
- {
9819
- "$ref": "#/$defs/ComponentCommon"
9820
- },
9821
- {
9822
- "$ref": "#/$defs/CatalogComponentCommon"
9823
- }
9824
- ],
9825
- "properties": {
9826
- "required": {
9827
- "description": "Required for validation when inside a `<form>`.",
9828
- "type": "boolean",
9829
- "default": false
9830
- },
9831
- "component": {
9832
- "const": "DatetimePicker"
9833
- },
9834
- "disabled": {
9835
- "description": "Block all interaction. Trigger remains rendered but does not open the popover.",
9836
- "type": "boolean",
9837
- "default": false
9838
- },
9839
- "format": {
9840
- "description": "Trigger button date format. `short`: `Jan 1, 2026 14:30`; `long`: `January 1, 2026 14:30`; `iso`: full ISO string.",
9841
- "type": "string",
9842
- "enum": [
9843
- "short",
9844
- "long",
9845
- "iso"
9846
- ],
9847
- "default": "short"
9848
- },
9849
- "hourcycle": {
9850
- "description": "Hour cycle for the time pane. Empty (default) derives from the\ndocument locale. `h12` forces a 12-hour cycle with an AM/PM\n(meridiem) segment; `h23` forces 24-hour cycle.\n",
9851
- "type": "string",
9852
- "enum": [
9853
- "",
9854
- "h12",
9855
- "h23"
9856
- ],
9857
- "default": ""
9858
- },
9859
- "locale": {
9860
- "description": "BCP-47 locale tag used to derive hour-cycle when `hour-cycle` is empty. Falls back to `<html lang>` then to browser default.",
9861
- "type": "string",
9862
- "default": ""
9863
- },
9864
- "max": {
9865
- "description": "Latest selectable ISO 8601 datetime (inclusive). Days after are disabled in the calendar pane; times after are rejected by the time pane on the same day.",
9866
- "type": "string",
9867
- "default": ""
9868
- },
9869
- "min": {
9870
- "description": "Earliest selectable ISO 8601 datetime (inclusive). Days before are disabled in the calendar pane; times before are rejected by the time pane on the same day.",
9871
- "type": "string",
9872
- "default": ""
9873
- },
9874
- "name": {
9875
- "description": "Form field name. The ISO 8601 datetime is submitted under this key when the picker is inside a `<form>`.",
9876
- "type": "string",
9877
- "default": ""
9878
- },
9879
- "open": {
9880
- "description": "Whether the popover is currently open.",
9881
- "type": "boolean",
9882
- "default": false
9883
- },
9884
- "placeholder": {
9885
- "description": "Text shown in the trigger when the value is empty. Defaults to \"Select date and time\" HERE (vs. \"Select date...\" on the base `<calendar-picker-ui>`).",
9886
- "type": "string",
9887
- "default": "Select date and time"
9888
- },
9889
- "placement": {
9890
- "description": "Popover placement relative to the trigger. Default `bottom` centers the calendar+time panel under the trigger (ADR-0034 Rule 2 — ~600px panel >> trigger).",
9891
- "type": "string",
9892
- "enum": [
9893
- "top",
9894
- "bottom",
9895
- "left",
9896
- "right",
9897
- "top-start",
9898
- "top-end",
9899
- "bottom-start",
9900
- "bottom-end"
9901
- ],
9902
- "default": "bottom"
9903
- },
9904
- "precision": {
9905
- "description": "Time-pane precision. `minute` (default HERE — `date` on the base `<calendar-picker-ui>`) emits `HH:mm`; `second` exposes the seconds segment and emits `HH:mm:ss`; `date` drops the time pane entirely (identical to the base class's own default).",
9906
- "type": "string",
9907
- "enum": [
9908
- "date",
9909
- "minute",
9910
- "second"
9911
- ],
9912
- "default": "minute"
9913
- },
9914
- "readonly": {
9915
- "description": "Block edits; allow keyboard navigation for screen-reader inspection.",
9916
- "type": "boolean",
9917
- "default": false
9918
- },
9919
- "step": {
9920
- "description": "Per-Arrow-keypress increment in seconds for the time pane. 60 = minute precision (default), 900 = 15-minute, 1 = second precision.",
9921
- "type": "number",
9922
- "default": 60
9923
- },
9924
- "value": {
9925
- "description": "Current value as ISO 8601 datetime (\"YYYY-MM-DDTHH:mm\" or \"YYYY-MM-DDTHH:mm:ss\"). Empty when no value selected.",
9926
- "$ref": "#/$defs/DynamicString"
9927
- }
9928
- },
9929
- "required": [
9930
- "component"
9931
- ],
9932
- "unevaluatedProperties": false,
9933
- "x-adiaui": {
9934
- "anti_patterns": [
9935
- {
9936
- "fix": "{\"component\": \"DatetimePicker\", \"value\": \"2026-05-24T00:00\"}\n",
9937
- "why": "`value` is a date-only string — no time component. The contract requires\na full ISO 8601 datetime including the `T` and time segment.\n",
9938
- "wrong": "{\"component\": \"DatetimePicker\", \"value\": \"2026-05-24\"}\n"
9939
- },
9940
- {
9941
- "fix": "{\"component\": \"CalendarPicker\", \"precision\": \"minute\", \"name\": \"appointment\"}\n",
9942
- "why": "DatetimePicker is deprecated (gh#1372) — new generation should reach\nfor CalendarPicker's widened precision axis instead.\n",
9943
- "wrong": "{\"component\": \"DatetimePicker\", \"name\": \"appointment\"}\n"
9944
- }
9945
- ],
9946
- "category": "input",
9947
- "composes": [
9948
- "calendar-grid-ui",
9949
- "time-picker-ui",
9950
- "divider-ui"
9951
- ],
9952
- "events": {
9953
- "change": {
9954
- "description": "Fired when the value commits (date picked + time edited, OR Apply clicked in explicit-commit mode).",
9955
- "detail": {
9956
- "value": "string"
9957
- }
9958
- },
9959
- "close": {
9960
- "description": "Popover closed (without commit, or after commit).",
9961
- "detail": {
9962
- "reason": "string"
9963
- }
9964
- },
9965
- "input": {
9966
- "description": "Fired during partial selection (date picked but time still pending, or vice versa).",
9967
- "detail": {
9968
- "value": "string"
9969
- }
9970
- },
9971
- "invalid": {
9972
- "description": "A constraint failed (out of range, parse error).",
9973
- "detail": {
9974
- "reason": "string",
9975
- "value": "string"
9976
- }
9977
- },
9978
- "open": {
9979
- "description": "Popover opened (user clicked the trigger or pressed Enter / Space).",
9980
- "detail": {
9981
- "trigger": "string"
9982
- }
9983
- }
9984
- },
9985
- "examples": [
9986
- {
9987
- "description": "Form-field-wrapped picker with min/max bounds. Prefer the CalendarPicker[precision] form for NEW markup — see calendar-picker-ui's own \"datetime-picker\" example.",
9988
- "a2ui": "[\n {\n \"id\": \"field\",\n \"component\": \"Field\",\n \"label\": \"Appointment\",\n \"children\": [\"dt\"]\n },\n {\n \"id\": \"dt\",\n \"component\": \"DatetimePicker\",\n \"name\": \"appointment\",\n \"min\": \"2026-01-01T00:00\",\n \"max\": \"2026-12-31T23:59\"\n }\n]\n",
9989
- "name": "canonical"
9990
- }
9991
- ],
9992
- "keywords": [
9993
- "datetimepicker",
9994
- "datetime-picker",
9995
- "datetime",
9996
- "date-time",
9997
- "dateandtime",
9998
- "appointment",
9999
- "schedule",
10000
- "timestamp"
10001
- ],
10002
- "name": "UIDatetimePicker",
10003
- "parts": {},
10004
- "related": [
10005
- "calendar-picker",
10006
- "time-picker",
10007
- "date-range-picker",
10008
- "popover",
10009
- "field",
10010
- "button"
10011
- ],
10012
- "slots": {
10013
- "footer": {
10014
- "description": "Optional Apply / Cancel buttons for explicit-commit flows. Spans both panes below the calendar + time area."
10015
- },
10016
- "trigger": {
10017
- "description": "Custom trigger replacement. When omitted, a default trigger is stamped (a plain clickable span, per the base `<calendar-picker-ui>` — NOT the old standalone datetime-picker's `<button-ui>` trigger; see the Consequences note below)."
10018
- }
10019
- },
10020
- "states": [
10021
- {
10022
- "description": "Closed, no pending selection.",
10023
- "name": "idle"
10024
- },
10025
- {
10026
- "description": "Popover open.",
10027
- "attribute": "open",
10028
- "name": "open"
10029
- },
10030
- {
10031
- "description": "Non-interactive; dimmed.",
10032
- "attribute": "disabled",
10033
- "name": "disabled"
10034
- },
10035
- {
10036
- "description": "Read-only; trigger keyboard-focusable but popover does not open.",
10037
- "attribute": "readonly",
10038
- "name": "readonly"
10039
- }
10040
- ],
10041
- "status": "deprecated",
10042
- "synonyms": {
10043
- "appointment": [
10044
- "datetime",
10045
- "meeting",
10046
- "schedule"
10047
- ],
10048
- "datetime": [
10049
- "date-time",
10050
- "timestamp",
10051
- "appointment",
10052
- "schedule"
10053
- ],
10054
- "tags": [
10055
- "DateTimePicker",
10056
- "DateTimeInput",
10057
- "DatetimeInput",
10058
- "Timestamp"
10059
- ]
10060
- },
10061
- "tag": "datetime-picker-ui",
10062
- "tokens": {},
10063
- "traits": [],
10064
- "version": 2
10065
- }
10066
- },
10067
9812
  "DemoToggle": {
10068
9813
  "title": "DemoToggle",
10069
9814
  "description": "Side-by-side comparison primitive — header bar with a switch + two child slots (\"on\" / \"off\"); toggling the switch swaps which slot is visible. Used on trait detail pages to show \"with trait\" vs \"without trait\" on the same chrome. data-mode=\"overlay\" stacks the slots on the same coordinates so layout never shifts.",
@@ -10235,7 +9980,7 @@
10235
9980
  "$ref": "#/$defs/DynamicStringList"
10236
9981
  },
10237
9982
  "align": {
10238
- "description": "Alignment for inline layout. `start` (default): term and value pack to the term column edge. `between`: term left, value right-aligned with `text-align: end`. `stretch`: value fills the remaining track width (e.g. for a `<slider-ui>` / `<select-ui>` / `<color-picker-ui>` as `<dd>` that should span the full row). Sets `justify-self: stretch` and `width: 100%` on `dd` so block-level form controls inside reach the column edge rather than shrink-wrapping to content.\n",
9983
+ "description": "Alignment for inline layout. `start` (default): term and value pack to the term column edge. `between`: term left, value right-aligned with `text-align: end`. `stretch`: value fills the remaining track width (e.g. for a `<slider-ui>` / `<select-ui>` / `<color-area-ui>` as `<dd>` that should span the full row). Sets `justify-self: stretch` and `width: 100%` on `dd` so block-level form controls inside reach the column edge rather than shrink-wrapping to content.\n",
10239
9984
  "type": "string",
10240
9985
  "enum": [
10241
9986
  "start",
@@ -11057,6 +10802,9 @@
11057
10802
  "--drilldown-row-px": {
11058
10803
  "description": "Inline padding of each row."
11059
10804
  },
10805
+ "--drilldown-row-py": {
10806
+ "description": "Block padding of each row (grows a row past --drilldown-row-height once content, e.g. a two-line label+meta row, exceeds it)."
10807
+ },
11060
10808
  "--drilldown-row-radius": {
11061
10809
  "description": "Border radius of each row."
11062
10810
  }
@@ -12321,7 +12069,7 @@
12321
12069
  ],
12322
12070
  "slots": {
12323
12071
  "default": {
12324
- "description": "The form control — a WIDE control like input-ui, select-ui, textarea-ui, slider-ui, range-ui, calendar-picker-ui, color-picker-ui, upload-ui, otp-input-ui. Auto-id'd for the label's [for] binding.\nDO NOT wrap small self-labeling widgets here. check-ui, switch-ui, radio-ui, toggle-ui all carry their own [label] attribute that renders inline next to the control — wrapping them in field-ui produces broken layouts (settings-row `justify-self: end` rule pushes the control to the trailing edge, away from the label that field-ui stamps; the widget's own label then renders again on the right, creating a doubled / right-justified affordance). See anti_patterns below for the canonical alternatives."
12072
+ "description": "The form control — a WIDE control like input-ui, select-ui, textarea-ui, slider-ui, range-ui, calendar-picker-ui, color-area-ui, upload-ui, otp-input-ui. Auto-id'd for the label's [for] binding.\nDO NOT wrap small self-labeling widgets here. check-ui, switch-ui, radio-ui, toggle-ui all carry their own [label] attribute that renders inline next to the control — wrapping them in field-ui produces broken layouts (settings-row `justify-self: end` rule pushes the control to the trailing edge, away from the label that field-ui stamps; the widget's own label then renders again on the right, creating a doubled / right-justified affordance). See anti_patterns below for the canonical alternatives."
12325
12073
  },
12326
12074
  "action": {
12327
12075
  "description": "Button adjacent to the control for inline actions (clear, reset, help popover)."
@@ -13988,7 +13736,7 @@
13988
13736
  ],
13989
13737
  "properties": {
13990
13738
  "type": {
13991
- "description": "Input type. `password` wraps a native `<input>` for disc masking; `number` renders a contenteditable + stepper buttons (no native input). `text`/`email`/`tel`/`url` use plain contenteditable. input-ui does NOT implement date/time/color/search affordances — those HTML5 type values render as a plain contenteditable with no calendar, clock, swatch, or search affordance (first-pass-VALID against this enum historically, but functionally broken generation output). Use the owning primitive instead — CalendarPicker for date (+ month/week, no dedicated granularity primitive exists), DatetimePicker for datetime-local, TimePicker for time, ColorInput/ColorPicker for color, Search for search. See anti_patterns.",
13739
+ "description": "Input type. `password` wraps a native `<input>` for disc masking; `number` renders a contenteditable + stepper buttons (no native input). `text`/`email`/`tel`/`url` use plain contenteditable. input-ui does NOT implement date/time/color/search affordances — those HTML5 type values render as a plain contenteditable with no calendar, clock, swatch, or search affordance (first-pass-VALID against this enum historically, but functionally broken generation output). Use the owning primitive instead — CalendarPicker for date (+ month/week, no dedicated granularity primitive exists), CalendarPicker precision=\"minute\" for datetime-local, TimePicker for time, ColorInput/ColorArea for color, Search for search. See anti_patterns.",
13992
13740
  "type": "string",
13993
13741
  "enum": [
13994
13742
  "text",
@@ -14139,8 +13887,8 @@
14139
13887
  "wrong": "{\"component\": \"Input\", \"type\": \"date\"}\n"
14140
13888
  },
14141
13889
  {
14142
- "fix": "{\"component\": \"DatetimePicker\"}\n",
14143
- "why": "Same gap as \"date\" — no native datetime picker rendered. Use\nDatetimePicker for combined date + time input.\n",
13890
+ "fix": "{\"component\": \"CalendarPicker\", \"precision\": \"minute\"}\n",
13891
+ "why": "Same gap as \"date\" — no native datetime picker rendered. Use\nCalendarPicker with precision=\"minute\" for combined date + time\ninput (DatetimePicker was a deprecated thin alias, cut in 0.8.43,\ngh#1617 — CalendarPicker is the sole tag now).\n",
14144
13892
  "wrong": "{\"component\": \"Input\", \"type\": \"datetime-local\"}\n"
14145
13893
  },
14146
13894
  {
@@ -14160,7 +13908,7 @@
14160
13908
  },
14161
13909
  {
14162
13910
  "fix": "{\"component\": \"ColorInput\"}\n",
14163
- "why": "No native color swatch/picker rendered — just a plain text\nsurface. Use ColorInput for a compact form-bearing swatch +\npopover, or ColorPicker directly for the full OKLCH picker\nsurface.\n",
13911
+ "why": "No native color swatch/picker rendered — just a plain text\nsurface. Use ColorInput for a compact form-bearing swatch +\npopover, or ColorArea directly for the full OKLCH picker surface\n(ColorPicker was a deprecated thin alias, cut in 0.8.43, gh#1617 —\nColorArea is the sole tag now).\n",
14164
13912
  "wrong": "{\"component\": \"Input\", \"type\": \"color\"}\n"
14165
13913
  },
14166
13914
  {
@@ -16873,7 +16621,7 @@
16873
16621
  },
16874
16622
  "MenuItem": {
16875
16623
  "title": "MenuItem",
16876
- "description": "Child of `<menu-ui>`. One actionable row inside a menu, with optional leading icon + label + subtitle + value.",
16624
+ "description": "Child of `<menu-ui>`. One actionable row inside a menu, with optional leading icon + label + description + value. (The deprecated `subtitle` prop alias for `description` was cut in 0.8.43 — ADR-0063, gh#1563/gh#1617.)",
16877
16625
  "type": "object",
16878
16626
  "allOf": [
16879
16627
  {
@@ -16884,6 +16632,11 @@
16884
16632
  }
16885
16633
  ],
16886
16634
  "properties": {
16635
+ "description": {
16636
+ "description": "Optional secondary description line rendered under the label. Canonical spelling (ADR-0063, gh#1563) replacing `subtitle` — converges menu-item onto the ~20-component corpus majority that already names this concept `description`. The deprecated `subtitle` prop alias was cut in 0.8.43 (gh#1617).",
16637
+ "type": "string",
16638
+ "default": ""
16639
+ },
16887
16640
  "component": {
16888
16641
  "const": "MenuItem"
16889
16642
  },
@@ -16897,11 +16650,6 @@
16897
16650
  "type": "string",
16898
16651
  "default": ""
16899
16652
  },
16900
- "subtitle": {
16901
- "description": "Optional secondary description line rendered under the label.",
16902
- "type": "string",
16903
- "default": ""
16904
- },
16905
16653
  "text": {
16906
16654
  "description": "Item label text.",
16907
16655
  "type": "string",
@@ -16952,7 +16700,7 @@
16952
16700
  "description": "Custom leading element override; falls through to `[icon]` prop if not slotted."
16953
16701
  },
16954
16702
  "subtitle": {
16955
- "description": "Custom secondary-line content override; falls through to `[subtitle]` prop if not slotted."
16703
+ "description": "Custom secondary-line content override; falls through to the `[description]` prop if not slotted (ADR-0063, gh#1563 — 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."
16956
16704
  },
16957
16705
  "text": {
16958
16706
  "description": "Custom label content; falls through to `[text]` prop if not slotted."
@@ -19129,7 +18877,7 @@
19129
18877
  },
19130
18878
  "Pane": {
19131
18879
  "title": "Pane",
19132
- "description": "Collapsible, resizable content panel — drag-resize handle on the\ninner edge when [side=\"leading\"] / [side=\"trailing\"], [resizable]\nopt-in. Used standalone for resizable two-pane layouts, or wrapped\nby <editor-sidebar> / <admin-sidebar> which DELEGATE drag to the\ninner pane-ui rather than reimplementing it. See pane.yaml's\na2ui.rules for the full composition contract.\n",
18880
+ "description": "Collapsible, resizable content panel — drag-resize handle on the\ninner edge when [edge=\"leading\"] / [edge=\"trailing\"], [resizable]\nopt-in. Used standalone for resizable two-pane layouts, or wrapped\nby <editor-sidebar> / <admin-sidebar> which DELEGATE drag to the\ninner pane-ui rather than reimplementing it. See pane.yaml's\na2ui.rules for the full composition contract.\n",
19133
18881
  "type": "object",
19134
18882
  "allOf": [
19135
18883
  {
@@ -19148,6 +18896,16 @@
19148
18896
  "component": {
19149
18897
  "const": "Pane"
19150
18898
  },
18899
+ "edge": {
18900
+ "description": "Opts a pane into horizontal-sibling chrome: suppresses the default\nfour-sided border and moves the resize grabber to the inner edge\n(right edge for `leading`, left edge for `trailing`). Also flips the\nresize-drag direction so `trailing` panes grow when dragged leftward.\nUnset keeps the pane-intrinsic chrome (full border, right-edge\ngrabber when resizable). Canonical spelling (ADR-0063, gh#1563) — the\ndeprecated `side` dual-read alias was cut in 0.8.43 (gh#1617).\n",
18901
+ "type": "string",
18902
+ "enum": [
18903
+ "",
18904
+ "leading",
18905
+ "trailing"
18906
+ ],
18907
+ "default": ""
18908
+ },
19151
18909
  "maxWidth": {
19152
18910
  "description": "Component property: maxWidth.",
19153
18911
  "type": "number",
@@ -19162,16 +18920,6 @@
19162
18920
  "description": "Component property: resizable.",
19163
18921
  "type": "boolean",
19164
18922
  "default": false
19165
- },
19166
- "side": {
19167
- "description": "Opts a pane into horizontal-sibling chrome: suppresses the default\nfour-sided border and moves the resize grabber to the inner edge\n(right edge for `leading`, left edge for `trailing`). Also flips the\nresize-drag direction so `trailing` panes grow when dragged leftward.\nUnset keeps the pane-intrinsic chrome (full border, right-edge\ngrabber when resizable).\n",
19168
- "type": "string",
19169
- "enum": [
19170
- "",
19171
- "leading",
19172
- "trailing"
19173
- ],
19174
- "default": ""
19175
18923
  }
19176
18924
  },
19177
18925
  "required": [
@@ -20726,7 +20474,7 @@
20726
20474
  },
20727
20475
  "Progress": {
20728
20476
  "title": "Progress",
20729
- "description": "Linear progress bar indicator. Value < 0 marks indeterminate state showing animated activity instead of a fill. Bar-only — for circular loading indicators use <spinner-ui> instead (the former `variant=\"spinner\"` render mode was retired; spinner-ui owns circular). Set `label` for a labeled task-list row (label + bar + optional `meta` text in one row, e.g. storage quotas, capacity breakdowns) — absorbed <progress-row-ui>'s row layout directly; that component is now a deprecated alias. Omit `label` for a standalone bar (global loading indicators); for percent-complete inline displays use <stat-ui> instead.",
20477
+ "description": "Linear progress bar indicator. Value < 0 marks indeterminate state showing animated activity instead of a fill. Bar-only — for circular loading indicators use <spinner-ui> instead (the former `variant=\"spinner\"` render mode was retired; spinner-ui owns circular). Set `label` for a labeled task-list row (label + bar + optional `meta` text in one row, e.g. storage quotas, capacity breakdowns) — absorbed <progress-row-ui>'s row layout directly; that component was cut in 0.8.43 (gh#1617). Omit `label` for a standalone bar (global loading indicators); for percent-complete inline displays use <stat-ui> instead.",
20730
20478
  "type": "object",
20731
20479
  "allOf": [
20732
20480
  {
@@ -20902,138 +20650,33 @@
20902
20650
  "progress",
20903
20651
  "tracker"
20904
20652
  ],
20905
- "tags": [
20906
- "LoadingIndicator"
20907
- ],
20908
- "timeline": [
20909
- "social",
20910
- "post",
20911
- "activity",
20912
- "team",
20913
- "progress"
20914
- ],
20915
- "wizard": [
20916
- "wizard",
20917
- "step",
20918
- "progress",
20919
- "tracker",
20920
- "onboarding"
20921
- ],
20922
- "workflow": [
20923
- "kanban",
20924
- "board",
20925
- "project",
20926
- "wizard",
20927
- "progress",
20928
- "step"
20929
- ]
20930
- },
20931
- "tag": "progress-ui",
20932
- "tokens": {},
20933
- "traits": [],
20934
- "version": 1
20935
- }
20936
- },
20937
- "ProgressRow": {
20938
- "title": "ProgressRow",
20939
- "description": "DEPRECATED (gh#1363 C4) — absorbed into <progress-ui>: set `label` (and optional `meta`) directly on <progress-ui> instead, which activates the identical row layout in place. progress-row-ui keeps working (still composes <progress-ui> internally, unchanged behavior) for existing back-compat markup, but is no longer taught or generated for new work. Was: inline labeled progress row with label, progress bar, and meta text — storage quotas, capacity breakdowns, usage indicators.",
20940
- "type": "object",
20941
- "allOf": [
20942
- {
20943
- "$ref": "#/$defs/ComponentCommon"
20944
- },
20945
- {
20946
- "$ref": "#/$defs/CatalogComponentCommon"
20947
- }
20948
- ],
20949
- "properties": {
20950
- "component": {
20951
- "const": "ProgressRow"
20952
- },
20953
- "label": {
20954
- "description": "Left-hand label text",
20955
- "type": "string",
20956
- "default": ""
20957
- },
20958
- "meta": {
20959
- "description": "Right-hand meta text (e.g. '32 GB', '4.2k / 10k')",
20960
- "type": "string",
20961
- "default": ""
20962
- },
20963
- "value": {
20964
- "description": "Progress value 0-100 (null = indeterminate; legacy -1 accepted for back-compat)",
20965
- "type": [
20966
- "number",
20967
- "null"
20968
- ],
20969
- "default": null
20970
- },
20971
- "variant": {
20972
- "description": "Color variant for the progress fill",
20973
- "type": "string",
20974
- "enum": [
20975
- "default",
20976
- "success",
20977
- "warning",
20978
- "danger"
20653
+ "tags": [
20654
+ "LoadingIndicator"
20979
20655
  ],
20980
- "default": "default"
20981
- }
20982
- },
20983
- "required": [
20984
- "component"
20985
- ],
20986
- "unevaluatedProperties": false,
20987
- "x-adiaui": {
20988
- "anti_patterns": [
20989
- {
20990
- "fix": "{\"component\": \"Progress\", \"label\": \"CPU\", \"value\": 92}\n",
20991
- "why": "ProgressRow is deprecated — its row layout was absorbed\ninto Progress directly.\n",
20992
- "wrong": "{\"component\": \"ProgressRow\", \"label\": \"CPU\", \"value\": 92}\n"
20993
- }
20994
- ],
20995
- "category": "feedback",
20996
- "composes": [
20997
- "progress-ui"
20998
- ],
20999
- "events": {},
21000
- "examples": [],
21001
- "keywords": [
21002
- "progressrow",
21003
- "progress-row",
21004
- "progress",
21005
- "row"
21006
- ],
21007
- "name": "UIProgressRow",
21008
- "parts": {},
21009
- "related": [
21010
- "Progress",
21011
- "StepProgress",
21012
- "List"
21013
- ],
21014
- "slots": {
21015
- "label": {
21016
- "description": "Label region — control label."
21017
- },
21018
- "meta": {
21019
- "description": "Child content region for the `meta` slot."
21020
- }
21021
- },
21022
- "states": [
21023
- {
21024
- "description": "Default, ready for interaction.",
21025
- "name": "idle"
21026
- }
21027
- ],
21028
- "status": "deprecated",
21029
- "synonyms": {
21030
- "progress-row": [
21031
- "task-row",
21032
- "progress-line",
21033
- "labeled-progress"
20656
+ "timeline": [
20657
+ "social",
20658
+ "post",
20659
+ "activity",
20660
+ "team",
20661
+ "progress"
20662
+ ],
20663
+ "wizard": [
20664
+ "wizard",
20665
+ "step",
20666
+ "progress",
20667
+ "tracker",
20668
+ "onboarding"
20669
+ ],
20670
+ "workflow": [
20671
+ "kanban",
20672
+ "board",
20673
+ "project",
20674
+ "wizard",
20675
+ "progress",
20676
+ "step"
21034
20677
  ]
21035
20678
  },
21036
- "tag": "progress-row-ui",
20679
+ "tag": "progress-ui",
21037
20680
  "tokens": {},
21038
20681
  "traits": [],
21039
20682
  "version": 1
@@ -22515,8 +22158,7 @@
22515
22158
  "name": "UISegment",
22516
22159
  "parts": {},
22517
22160
  "related": [
22518
- "segmented-control",
22519
- "ToggleOption"
22161
+ "segmented-control"
22520
22162
  ],
22521
22163
  "slots": {},
22522
22164
  "states": [
@@ -22571,7 +22213,7 @@
22571
22213
  "const": "Segmented"
22572
22214
  },
22573
22215
  "multiple": {
22574
- "description": "Enables multi-select — value becomes a comma-separated set, the sliding indicator is suppressed (each selected segment carries its own background instead), and Space/Enter toggles a focused segment instead of arrow-move selecting it. Positive polarity, matching select-ui[multiple]. Absorbs the role of the deprecated <toggle-group-ui> + <toggle-option-ui> pair (gh#1369, #1363 C1). Unlike <toggle-group-ui single>, re-clicking an already-selected segment does NOT clear the selection — segmented-ui's single-select is standard radiogroup semantics (always exactly one selected once a value is set).",
22216
+ "description": "Enables multi-select — value becomes a comma-separated set, the sliding indicator is suppressed (each selected segment carries its own background instead), and Space/Enter toggles a focused segment instead of arrow-move selecting it. Positive polarity, matching select-ui[multiple]. Absorbs the role of the <toggle-group-ui> + <toggle-option-ui> pair (gh#1369, #1363 C1) — those components were cut in 0.8.43 (gh#1617). Unlike the former <toggle-group-ui single>, re-clicking an already-selected segment does NOT clear the selection — segmented-ui's single-select is standard radiogroup semantics (always exactly one selected once a value is set).",
22575
22217
  "type": "boolean",
22576
22218
  "default": false
22577
22219
  },
@@ -22630,8 +22272,6 @@
22630
22272
  },
22631
22273
  "related": [
22632
22274
  "Segment",
22633
- "ToggleGroup",
22634
- "ToggleOption",
22635
22275
  "Tabs",
22636
22276
  "Radio"
22637
22277
  ],
@@ -26031,7 +25671,7 @@
26031
25671
  },
26032
25672
  "TableToolbar": {
26033
25673
  "title": "TableToolbar",
26034
- "description": "Header / companion bar for a sibling table-ui. Renders title + count badge, filter / sort / columns popovers, and a search input — all wired to the target table via an [for] id-ref. Modeled on chart-legend-ui's [for] binding pattern. Drop next to (or above) any table-ui to add the standard data-grid toolbar without re-implementing search, filter, sort, or column visibility. Filter rows auto-pick a primitive per column: ≤ 50 distinct values → multi- select (searchable when ≥ 12 options), id-like keys → free-text contains. The column descriptor's `filter` field overrides the auto-detect: `'select'` forces multi-select even on high-cardinality columns; `'text'` forces a contains input even on small enums.",
25674
+ "description": "Header / companion bar for a sibling table-ui. Renders an optional leading [slot=\"scope\"] region, title + count badge, an optional \"Showing X–Y of N\" range summary, filter / sort / columns popovers, a search input, an optional page-size select, and a trailing [slot=\"actions\"] region — all wired to the target table via an [for] id-ref. Modeled on chart-legend-ui's [for] binding pattern. Drop next to (or above) any table-ui to add the standard data-grid toolbar without re-implementing search, filter, sort, column visibility, or pagination summary/page-size. Filter rows auto-pick a primitive per column: ≤ 50 distinct values → multi-select (searchable when ≥ 12 options), id-like keys → free-text contains. The column descriptor's `filter` field overrides the auto-detect: `'select'` forces multi-select even on high-cardinality columns; `'text'` forces a contains input even on small enums.",
26035
25675
  "type": "object",
26036
25676
  "allOf": [
26037
25677
  {
@@ -26075,11 +25715,35 @@
26075
25715
  "type": "boolean",
26076
25716
  "default": false
26077
25717
  },
25718
+ "pageSize": {
25719
+ "description": "Current rows-per-page value, shown as the selected option in the page-size select. Falls back to the first entry of pageSizeOptions when unset (0) or not present among the options. Applied directly to the bound table's own [paginate] prop (rows-per-page), the same way filter/sort/columns changes are applied to the target — mirror this prop only to reflect state to URL / persistence / analytics.",
25720
+ "type": "number",
25721
+ "default": 0
25722
+ },
25723
+ "pageSizeOptions": {
25724
+ "description": "Rows-per-page choices rendered as `<option>`s in the page-size select (e.g. `[10, 25, 50, 100]`). JS property (`.pageSizeOptions = [...]`), or a declarative JSON-array `page-size-options=\"[10,25,50]\"` attribute hydrated once at connect — the same dynamic-array pattern table-ui's own `columns`/`data` props use. Empty (the default) hides the page-size select entirely — additive opt-in, no footprint on existing consumers.",
25725
+ "$ref": "#/$defs/DynamicStringList"
25726
+ },
26078
25727
  "placeholder": {
26079
25728
  "description": "Placeholder text for the search input.",
26080
25729
  "type": "string",
26081
25730
  "default": "Search..."
26082
25731
  },
25732
+ "rangeEnd": {
25733
+ "description": "1-indexed last row number of the current page, for the range summary (e.g. `25` in \"Showing 1–25 of 320\"). See rangeStart.",
25734
+ "type": "number",
25735
+ "default": 0
25736
+ },
25737
+ "rangeStart": {
25738
+ "description": "1-indexed first row number of the current page, for the \"Showing X–Y of N\" range summary (e.g. `1` in \"Showing 1–25 of 320\"). Renders alongside — never in place of — [text]/[count]; the range summary is its own cluster, independent of the title cluster. All three of rangeStart/rangeEnd/rangeTotal must be set (> 0) for the summary to render; omit all three (the default) to opt out entirely.",
25739
+ "type": "number",
25740
+ "default": 0
25741
+ },
25742
+ "rangeTotal": {
25743
+ "description": "Total row count across all pages, for the range summary (e.g. `320` in \"Showing 1–25 of 320\"). Distinct from pagination-ui's `total` (total PAGES) — this is total ROWS; deliberately not spelled `total` to avoid that cross-sibling name collision (ADR-0063 B5). See rangeStart.",
25744
+ "type": "number",
25745
+ "default": 0
25746
+ },
26083
25747
  "text": {
26084
25748
  "description": "Title text shown on the left.",
26085
25749
  "type": "string",
@@ -26121,6 +25785,9 @@
26121
25785
  "filter-change": {
26122
25786
  "description": "Filter set changed. Detail: { filters }."
26123
25787
  },
25788
+ "page-size-change": {
25789
+ "description": "Page-size select changed. Detail: { pageSize }."
25790
+ },
26124
25791
  "search": {
26125
25792
  "description": "Debounced search query change. Detail: { value }."
26126
25793
  },
@@ -26133,6 +25800,11 @@
26133
25800
  "description": "Members table with filter/sort/columns/search wired to a sibling table-ui.",
26134
25801
  "a2ui": "[\n {\"id\": \"root\", \"component\": \"Column\", \"gap\": \"3\", \"children\": [\"bar\", \"card\"]},\n {\"id\": \"bar\", \"component\": \"TableToolbar\", \"for\": \"members\", \"text\": \"All Employees\", \"count\": \"32\"},\n {\"id\": \"card\", \"component\": \"Card\", \"children\": [\"sec\"]},\n {\"id\": \"sec\", \"component\": \"Section\", \"bleed\": true, \"children\": [\"tbl\"]},\n {\"id\": \"tbl\", \"component\": \"Table\", \"id\": \"members\", \"sortable\": true, \"raw\": true}\n]",
26135
25802
  "name": "members-toolbar"
25803
+ },
25804
+ {
25805
+ "description": "The ratified adiav2 list-page toolbar row (ADIA2-9123): scope menu, range summary, filter/columns triggers, page-size select, and a primary CTA — search and sort dropped per that contract.",
25806
+ "a2ui": "[\n {\"id\": \"root\", \"component\": \"Column\", \"gap\": \"3\", \"children\": [\"bar\", \"card\"]},\n {\"id\": \"bar\", \"component\": \"TableToolbar\", \"for\": \"accounts\", \"no-sort\": true, \"no-search\": true, \"range-start\": 1, \"range-end\": 25, \"range-total\": 320, \"page-size\": 25, \"page-size-options\": [10, 25, 50, 100]},\n {\"id\": \"card\", \"component\": \"Card\", \"children\": [\"sec\"]},\n {\"id\": \"sec\", \"component\": \"Section\", \"bleed\": true, \"children\": [\"tbl\"]},\n {\"id\": \"tbl\", \"component\": \"Table\", \"id\": \"accounts\", \"sortable\": true, \"raw\": true}\n]",
25807
+ "name": "adiav2-list-page-toolbar-row"
26136
25808
  }
26137
25809
  ],
26138
25810
  "keywords": [
@@ -26161,6 +25833,9 @@
26161
25833
  "slots": {
26162
25834
  "actions": {
26163
25835
  "description": "Trailing action area — primary buttons (e.g. \"New row\") rendered after the search input."
25836
+ },
25837
+ "scope": {
25838
+ "description": "Leading region rendered BEFORE the [text]/[count] title cluster — e.g. a scope/view-switcher menu (an org's teams, a saved view). Positioning is CSS by DOM order, mirroring how [slot=\"actions\"] is a real, author-fillable insertion point rather than template-stamped content."
26164
25839
  }
26165
25840
  },
26166
25841
  "states": [
@@ -26212,6 +25887,12 @@
26212
25887
  "--table-toolbar-radius": {
26213
25888
  "description": "Toolbar corner radius (variant=card)"
26214
25889
  },
25890
+ "--table-toolbar-summary-fg": {
25891
+ "description": "Range-summary (\"Showing X–Y of N\") text color"
25892
+ },
25893
+ "--table-toolbar-summary-size": {
25894
+ "description": "Range-summary font size"
25895
+ },
26215
25896
  "--table-toolbar-title-fg": {
26216
25897
  "description": "Title text color"
26217
25898
  },
@@ -28210,236 +27891,6 @@
28210
27891
  "version": 1
28211
27892
  }
28212
27893
  },
28213
- "ToggleGroup": {
28214
- "title": "ToggleGroup",
28215
- "description": "DEPRECATED (gh#1369) — use <segmented-ui multiple> + <segment-ui> instead. Multi-select button group (unlike <segmented-ui> which is single-select by default). Hosts <toggle-option-ui> children, each independently toggleable; emits change events with the active value set.",
28216
- "type": "object",
28217
- "allOf": [
28218
- {
28219
- "$ref": "#/$defs/ComponentCommon"
28220
- },
28221
- {
28222
- "$ref": "#/$defs/CatalogComponentCommon"
28223
- }
28224
- ],
28225
- "properties": {
28226
- "component": {
28227
- "const": "ToggleGroup"
28228
- },
28229
- "single": {
28230
- "description": "When true, restrict to one active option (single-select) — clicking the already-selected option again CLEARS it (empty value), unlike a native radiogroup. Migration (gh#1369): [single]=true maps to plain <segmented-ui> (no [multiple]) — note segmented-ui's single-select never clears on re-click, it's standard radiogroup semantics; the default (false, multi-select) maps to <segmented-ui multiple>.",
28231
- "type": "boolean",
28232
- "default": false
28233
- },
28234
- "value": {
28235
- "description": "Comma-separated selected values",
28236
- "type": "string",
28237
- "default": ""
28238
- }
28239
- },
28240
- "required": [
28241
- "component"
28242
- ],
28243
- "unevaluatedProperties": false,
28244
- "x-adiaui": {
28245
- "allowedChildren": [
28246
- "ToggleOption"
28247
- ],
28248
- "anti_patterns": [],
28249
- "category": "navigation",
28250
- "composes": [],
28251
- "events": {
28252
- "change": {
28253
- "description": "Fired when selection changes. detail: { value }",
28254
- "detail": {
28255
- "value": {
28256
- "description": "New toggle-group value.",
28257
- "type": "string"
28258
- }
28259
- }
28260
- }
28261
- },
28262
- "examples": [
28263
- {
28264
- "description": "Basic ToggleGroup usage",
28265
- "a2ui": "[\n {\n \"id\": \"root\",\n \"component\": \"Card\",\n \"children\": [\n \"sec\"\n ]\n },\n {\n \"id\": \"sec\",\n \"component\": \"Section\",\n \"children\": [\n \"comp\"\n ]\n },\n {\n \"id\": \"comp\",\n \"component\": \"ToggleGroup\",\n \"value\": \"\"\n }\n]",
28266
- "name": "basic-toggle-group"
28267
- }
28268
- ],
28269
- "keywords": [
28270
- "togglegroup",
28271
- "toggle-group",
28272
- "toggle",
28273
- "group"
28274
- ],
28275
- "name": "UIToggleGroup",
28276
- "parts": {},
28277
- "related": [
28278
- "ToggleOption",
28279
- "Segmented",
28280
- "Radio"
28281
- ],
28282
- "slots": {
28283
- "default": {
28284
- "description": "Default slot — primary child content."
28285
- }
28286
- },
28287
- "states": [
28288
- {
28289
- "description": "Default, ready for interaction.",
28290
- "name": "idle"
28291
- }
28292
- ],
28293
- "status": "deprecated",
28294
- "synonyms": {
28295
- "toggle-group": [
28296
- "segmented-control",
28297
- "option-group",
28298
- "toggle-set"
28299
- ]
28300
- },
28301
- "tag": "toggle-group-ui",
28302
- "tokens": {
28303
- "--toggle-group-border": {
28304
- "description": "Border color of the group container"
28305
- },
28306
- "--toggle-group-height": {
28307
- "description": "Height of the group container"
28308
- },
28309
- "--toggle-group-radius": {
28310
- "description": "Border radius of the group container"
28311
- },
28312
- "--toggle-option-bg-hover": {
28313
- "description": "Background color on hover"
28314
- },
28315
- "--toggle-option-border": {
28316
- "description": "Border color between adjacent options"
28317
- },
28318
- "--toggle-option-duration": {
28319
- "description": "Transition duration"
28320
- },
28321
- "--toggle-option-easing": {
28322
- "description": "Transition easing function"
28323
- },
28324
- "--toggle-option-fg": {
28325
- "description": "Default text color"
28326
- },
28327
- "--toggle-option-fg-disabled": {
28328
- "description": "Text color when disabled"
28329
- },
28330
- "--toggle-option-fg-hover": {
28331
- "description": "Text color on hover"
28332
- },
28333
- "--toggle-option-focus-ring": {
28334
- "description": "Focus ring box-shadow"
28335
- },
28336
- "--toggle-option-font-size": {
28337
- "description": "Font size for option text and icons"
28338
- },
28339
- "--toggle-option-gap": {
28340
- "description": "Gap between icon and text within an option"
28341
- },
28342
- "--toggle-option-height": {
28343
- "description": "Min-height of each option"
28344
- },
28345
- "--toggle-option-px": {
28346
- "description": "Horizontal padding of each option"
28347
- },
28348
- "--toggle-option-selected-bg": {
28349
- "description": "Background color when selected"
28350
- },
28351
- "--toggle-option-selected-fg": {
28352
- "description": "Text color when selected"
28353
- }
28354
- },
28355
- "traits": [],
28356
- "version": 1
28357
- }
28358
- },
28359
- "ToggleOption": {
28360
- "title": "ToggleOption",
28361
- "description": "DEPRECATED (gh#1369) — use `<segment-ui>` inside `<segmented-ui multiple>` instead. Child of `<toggle-group-ui>`. One toggleable option inside a single-select or multi-select group. Pressed state mirrors `value` against the parent's selection.",
28362
- "type": "object",
28363
- "allOf": [
28364
- {
28365
- "$ref": "#/$defs/ComponentCommon"
28366
- },
28367
- {
28368
- "$ref": "#/$defs/CatalogComponentCommon"
28369
- }
28370
- ],
28371
- "properties": {
28372
- "component": {
28373
- "const": "ToggleOption"
28374
- },
28375
- "disabled": {
28376
- "description": "Disabled state — blocks pointer + keyboard activation.",
28377
- "type": "boolean",
28378
- "default": false
28379
- },
28380
- "icon": {
28381
- "description": "Optional Phosphor icon name; renders as a leading icon.",
28382
- "type": "string",
28383
- "default": ""
28384
- },
28385
- "selected": {
28386
- "description": "Whether this option is currently selected. Managed by the parent\n<toggle-group-ui> container (ADR-0056) — don't set directly; the group's\n`value` is the single source of truth. Converges onto <segment-ui>'s\ndeclared reflected-prop mechanism.",
28387
- "type": "boolean",
28388
- "default": false
28389
- },
28390
- "text": {
28391
- "description": "Visible label text.",
28392
- "type": "string",
28393
- "default": ""
28394
- },
28395
- "value": {
28396
- "description": "Stable identifier matched against the parent group's `value`.",
28397
- "type": "string",
28398
- "default": ""
28399
- }
28400
- },
28401
- "required": [
28402
- "component"
28403
- ],
28404
- "unevaluatedProperties": false,
28405
- "x-adiaui": {
28406
- "allowedParents": [
28407
- "ToggleGroup"
28408
- ],
28409
- "anti_patterns": [],
28410
- "category": "form",
28411
- "composes": [],
28412
- "events": {},
28413
- "examples": [],
28414
- "keywords": [
28415
- "toggle-option",
28416
- "toggle-segment",
28417
- "option-toggle",
28418
- "segmented-option"
28419
- ],
28420
- "name": "UIToggleOption",
28421
- "parts": {},
28422
- "related": [
28423
- "ToggleGroup",
28424
- "Segment",
28425
- "Radio"
28426
- ],
28427
- "slots": {},
28428
- "states": [],
28429
- "status": "deprecated",
28430
- "synonyms": {
28431
- "toggle-option": [
28432
- "toggle-segment",
28433
- "option-button",
28434
- "segmented-option"
28435
- ]
28436
- },
28437
- "tag": "toggle-option-ui",
28438
- "tokens": {},
28439
- "traits": [],
28440
- "version": 1
28441
- }
28442
- },
28443
27894
  "ToggleScheme": {
28444
27895
  "title": "ToggleScheme",
28445
27896
  "description": "Icon-button primitive that toggles `color-scheme` between light and dark on a target element (default `:root`). Encapsulates the prefers-color-scheme initial-resolution, the inline-style write to the target, optional localStorage persistence (sharing the `adia-theme-` namespace with <theme-panel>), and the moon/sun icon swap. Replaces the hand-wired `<button-ui id=\"theme-toggle\">` + `applyScheme()` pattern previously duplicated across apps/genui, apps/construct-canvas, playgrounds/chat.",