@adia-ai/a2ui 0.8.42 → 0.8.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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\ndescription, forwards activation to the parent action-list. Row contract\nconverges on <menu-item-ui>: icon/text/description/value/variant/disabled\nprops and icon/text/subtitle/trailing slot overrides (#1363 C5).\n(`subtitle` is a deprecated alias for `description` ADR-0063, gh#1571.)",
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
  {
@@ -428,7 +428,7 @@
428
428
  ],
429
429
  "properties": {
430
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.",
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
432
  "type": "string",
433
433
  "default": ""
434
434
  },
@@ -444,11 +444,6 @@
444
444
  "description": "Leading icon name (Phosphor).",
445
445
  "type": "string"
446
446
  },
447
- "subtitle": {
448
- "description": "DEPRECATED (ADR-0063, gh#1571) — use `description` instead. Same type/default/rendered position; kept working as a dual-read compat shim (one-time console.warn when it's the name that resolves). Removed in 0.9.0. (The `subtitle` SLOT below is a separate surface, deliberately left unrenamed in this pass — see its own description.)",
449
- "type": "string",
450
- "default": ""
451
- },
452
447
  "text": {
453
448
  "description": "Action label.",
454
449
  "type": "string"
@@ -499,7 +494,7 @@
499
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."
500
495
  },
501
496
  "subtitle": {
502
- "description": "Custom secondary-line content override; falls through to the [description] prop (or its deprecated [subtitle] alias ADR-0063, gh#1571) if not slotted. The slot's own name is unchanged by that rename — this is a distinct, deliberately-unrenamed surface."
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."
503
498
  },
504
499
  "text": {
505
500
  "description": "Custom label content; falls through to [text] prop if not slotted."
@@ -5129,7 +5124,7 @@
5129
5124
  },
5130
5125
  "CalendarPicker": {
5131
5126
  "title": "CalendarPicker",
5132
- "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.",
5133
5128
  "type": "object",
5134
5129
  "allOf": [
5135
5130
  {
@@ -5866,41 +5861,36 @@
5866
5861
  ],
5867
5862
  "default": "abbr"
5868
5863
  },
5869
- "hideAverage": {
5870
- "description": "DEPRECATED (ADR-0063, gh#1563) — use `noAverage` instead. Same meaning, same default; kept working as a dual-read compat shim (one- time console.warn when it's the name that resolves). Removed in 0.9.0.",
5871
- "type": "boolean",
5872
- "default": false
5873
- },
5874
- "hideGrid": {
5875
- "description": "DEPRECATED (ADR-0063, gh#1563) — use `noGrid` instead. Same meaning, same default; kept working as a dual-read compat shim (one-time console.warn when it's the name that resolves). Removed in 0.9.0.",
5876
- "type": "boolean",
5877
- "default": false
5878
- },
5879
- "hideValues": {
5880
- "description": "DEPRECATED (ADR-0063, gh#1563) — use `noValues` instead. Same meaning, same default; kept working as a dual-read compat shim (one- time console.warn when it's the name that resolves). Removed in 0.9.0.",
5881
- "type": "boolean",
5882
- "default": false
5883
- },
5884
5864
  "loading": {
5885
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).",
5886
5866
  "type": "boolean",
5887
5867
  "default": false
5888
5868
  },
5889
5869
  "noAverage": {
5890
- "description": "When true, suppress the overlaid average line. Canonical spelling (ADR-0063, gh#1563) replacing `hideAverage`.",
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).",
5891
5871
  "type": "boolean",
5892
5872
  "default": false
5893
5873
  },
5894
5874
  "noGrid": {
5895
- "description": "Hide gridlines. Canonical spelling (ADR-0063, gh#1563) replacing `hideGrid`.",
5875
+ "description": "Hide gridlines. Canonical spelling (ADR-0063, gh#1563) the deprecated `hideGrid` dual-read shim was cut in 0.8.43 (gh#1617).",
5896
5876
  "type": "boolean",
5897
5877
  "default": false
5898
5878
  },
5899
5879
  "noValues": {
5900
- "description": "Hide value labels. Canonical spelling (ADR-0063, gh#1563) replacing `hideValues`.",
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).",
5901
5881
  "type": "boolean",
5902
5882
  "default": false
5903
5883
  },
5884
+ "ratio": {
5885
+ "description": "Chart 2.0 aspect-ratio bucket (ADR-0074). Unset (default) auto-snaps to the nearest of the three studied ratios by comparing the chart's own live box aspect against two midpoint boundaries (5:4 between 3:2/1:1, 4:5 between 1:1/2:3) — never interpolated; the resolved bucket reflects onto the host as `data-ratio-resolved`. Setting `ratio` explicitly pins that bucket regardless of the box's actual aspect, overriding the auto-snap. Orthogonal to `size` (overall scale) and `type`/`color` (ADR-0064's family axis) — this attribute lands the grammar + snap plumbing only; per-type studied renderings per bucket are later waves (gh#1624 plan steps 2-4).",
5886
+ "type": "string",
5887
+ "enum": [
5888
+ "3:2",
5889
+ "1:1",
5890
+ "2:3"
5891
+ ],
5892
+ "default": ""
5893
+ },
5904
5894
  "seriesEmphasis": {
5905
5895
  "description": "Multi-line only. Names one series key (matching a `y` key) to render at full strength — area fill + full-opacity line. Every other series drops its area fill and renders line-only at --chart-deemphasized-opacity. Empty (default) applies full treatment to every series, unchanged from pre-gh#561 behavior.",
5906
5896
  "type": "string",
@@ -5930,6 +5920,22 @@
5930
5920
  "description": "Y-axis key(s), comma-separated for multi-series",
5931
5921
  "type": "string",
5932
5922
  "default": ""
5923
+ },
5924
+ "yMax": {
5925
+ "description": "Pins the value-axis domain ceiling for cartesian types (bar, line, area, scatter, multi-line, stacked-bar, grouped-bar, composed). Unset (default, null) keeps today's auto-scale ceiling (the data max). Pairs with `yMin` to pin the full domain; either may be set alone. N/A for radial/part-to-whole types — see `yMin` (gh#1690). A datum outside the pinned domain is CLAMPED to the nearest edge for rendering (the value label/tooltip still shows the real value) rather than escaping the plot box.",
5926
+ "type": [
5927
+ "number",
5928
+ "null"
5929
+ ],
5930
+ "default": null
5931
+ },
5932
+ "yMin": {
5933
+ "description": "Pins the value-axis domain floor for cartesian types (bar, line, area, scatter, multi-line, stacked-bar, grouped-bar, composed). Unset (default, null) already floors a positive series at 0 (the pre-1690 behavior, unchanged) — a migrating d3 consumer's own \"pin the floor to 0\" habit is the built-in default, not something to configure. Pin `y-min` explicitly for three OTHER cases: (1) zooming a narrow window — e.g. `y-min=\"0.9\" y-max=\"1\"` magnifies a percent series clustered near 92-95%, which reads flatter against the full auto-scaled [0,1] domain; (2) a mixed-sign series, where the unpinned floor never goes below 0 and negative values clip at the axis; (3) aligning two charts to one shared scale for a fair comparison. N/A for radial/part-to-whole types (pie, donut, radar, radial-bar, gauge, funnel, treemap, sankey, segments, sparkline) — those never read a shared linear value axis, so this prop is a no-op there (gh#1690). A datum outside the pinned domain is CLAMPED to the nearest edge for rendering (the value label/tooltip still shows the real value) rather than escaping the plot box.",
5934
+ "type": [
5935
+ "number",
5936
+ "null"
5937
+ ],
5938
+ "default": null
5933
5939
  }
5934
5940
  },
5935
5941
  "required": [
@@ -6162,7 +6168,7 @@
6162
6168
  ],
6163
6169
  "properties": {
6164
6170
  "items": {
6165
- "description": "JSON array of {key, label, slot?, pct?} legend items. Takes precedence over [for] when both are provided.",
6171
+ "description": "JSON array of {key, label, slot?, pct?, deemphasized?} legend items. Takes precedence over [for] when both are provided. `deemphasized` (REQ-R-007) mutes the row's swatch/label to the same muted-neutral tier chart-ui's own internal legend uses for a de-emphasized series (e.g. `composed@1:1`'s secondary line) — mirrored automatically from a `[for]`-bound chart's own `.legendData`, or settable explicitly here.",
6166
6172
  "type": "string",
6167
6173
  "default": ""
6168
6174
  },
@@ -6175,7 +6181,7 @@
6175
6181
  "default": ""
6176
6182
  },
6177
6183
  "interactive": {
6178
- "description": "Canonical opt-in spelling (ADR-0063, gh#1563) replacing `static`'s opt-out polarity. Rows are interactive <button>-role badges by default — this default stays `true` in 0.8.42 (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).",
6184
+ "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).",
6179
6185
  "type": "boolean",
6180
6186
  "default": true
6181
6187
  },
@@ -6189,7 +6195,7 @@
6189
6195
  "default": "hide"
6190
6196
  },
6191
6197
  "position": {
6192
- "description": "Layout hint — drives flex-direction. Actual placement follows DOM order.",
6198
+ "description": "Layout hint — drives flex-direction. Actual placement follows DOM order. Superseded by a resolved `ratio` bucket (below) whenever one is in effect; this is the pre-ADR-0074 fallback for a legend with neither an explicit `ratio` nor a `[for]`-bound chart.",
6193
6199
  "type": "string",
6194
6200
  "enum": [
6195
6201
  "top",
@@ -6199,6 +6205,16 @@
6199
6205
  ],
6200
6206
  "default": "bottom"
6201
6207
  },
6208
+ "ratio": {
6209
+ "description": "Chart 2.0 legend layout bucket (ADR-0074, gh#1624 plan step 5, REQ-R-005): 3:2 renders a horizontal row, 1:1 a wrapped 2-column grid, 2:3 a vertical stacked list. An explicit value PINS the bucket regardless of any bound chart. Unset (default) auto-mirrors the `[for]`-bound chart's own resolved `data-ratio-resolved` bucket — the legend never runs its own container-query classification, since its own box is typically a thin strip with no studied aspect of its own. With neither a pin nor a bound chart, no bucket resolves and `position`'s flex-direction rules apply unchanged. The resolved bucket reflects read-only onto the host as `data-ratio-resolved`, mirroring chart-ui's own convention.",
6210
+ "type": "string",
6211
+ "enum": [
6212
+ "3:2",
6213
+ "1:1",
6214
+ "2:3"
6215
+ ],
6216
+ "default": ""
6217
+ },
6202
6218
  "shape": {
6203
6219
  "description": "Swatch shape. Maps to badge-ui's icon for dot/square variants.",
6204
6220
  "type": "string",
@@ -6209,11 +6225,6 @@
6209
6225
  "dashed"
6210
6226
  ],
6211
6227
  "default": "dot"
6212
- },
6213
- "static": {
6214
- "description": "DEPRECATED (ADR-0063, gh#1563) — use `interactive` instead. When set (and `interactive` is absent), rows are non-interactive <span>s (no click, no toggle). Kept working as a dual-read compat shim (one-time console.warn when it's the name that resolves). Removed in 0.9.0.",
6215
- "type": "boolean",
6216
- "default": false
6217
6228
  }
6218
6229
  },
6219
6230
  "required": [
@@ -6229,7 +6240,7 @@
6229
6240
  ],
6230
6241
  "events": {
6231
6242
  "toggle": {
6232
- "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.",
6243
+ "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.",
6233
6244
  "detail": {
6234
6245
  "active": {
6235
6246
  "description": "New visibility state (true = visible).",
@@ -6252,6 +6263,11 @@
6252
6263
  "a2ui": "[\n {\n \"id\": \"legend\", \"component\": \"ChartLegend\",\n \"shape\": \"dot\",\n \"items\": \"[{\\\"key\\\":\\\"revenue\\\",\\\"label\\\":\\\"Revenue\\\",\\\"slot\\\":0},{\\\"key\\\":\\\"users\\\",\\\"label\\\":\\\"Users\\\",\\\"slot\\\":1}]\"\n }\n]",
6253
6264
  "name": "standalone-with-items"
6254
6265
  },
6266
+ {
6267
+ "description": "Standalone legend pinned to the 1:1 (2-col grid) layout bucket.",
6268
+ "a2ui": "[\n {\n \"id\": \"legend\", \"component\": \"ChartLegend\",\n \"ratio\": \"1:1\",\n \"items\": \"[{\\\"key\\\":\\\"revenue\\\",\\\"label\\\":\\\"Revenue\\\",\\\"slot\\\":0},{\\\"key\\\":\\\"users\\\",\\\"label\\\":\\\"Users\\\",\\\"slot\\\":1},{\\\"key\\\":\\\"churn\\\",\\\"label\\\":\\\"Churn\\\",\\\"slot\\\":2},{\\\"key\\\":\\\"nps\\\",\\\"label\\\":\\\"NPS\\\",\\\"slot\\\":3}]\"\n }\n]",
6269
+ "name": "ratio-pinned-grid"
6270
+ },
6255
6271
  {
6256
6272
  "description": "Legend mirrors a named chart's series data.",
6257
6273
  "a2ui": "[\n {\n \"id\": \"root\", \"component\": \"Column\",\n \"children\": [\"chart\", \"legend\"]\n },\n {\n \"id\": \"chart\", \"component\": \"Chart\",\n \"type\": \"multi-line\", \"x\": \"month\", \"y\": \"revenue,users\"\n },\n {\n \"id\": \"legend\", \"component\": \"ChartLegend\",\n \"for\": \"chart\",\n \"shape\": \"line\",\n \"position\": \"bottom\"\n }\n]",
@@ -6286,12 +6302,8 @@
6286
6302
  "name": "idle"
6287
6303
  },
6288
6304
  {
6289
- "description": "Rows are <button>s. Default unless [static].",
6305
+ "description": "Rows are <button>s (the default). When false, rows are <span>s — no click handler, no toggle affordance.",
6290
6306
  "name": "interactive"
6291
- },
6292
- {
6293
- "description": "Rows are <span>s. No click handler, no toggle affordance.",
6294
- "name": "static"
6295
6307
  }
6296
6308
  ],
6297
6309
  "status": "stable",
@@ -7695,7 +7707,7 @@
7695
7707
  },
7696
7708
  "ColorArea": {
7697
7709
  "title": "ColorArea",
7698
- "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>` is now a thin deprecated alias subclassing this component.",
7710
+ "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.",
7699
7711
  "type": "object",
7700
7712
  "allOf": [
7701
7713
  {
@@ -7841,7 +7853,7 @@
7841
7853
  },
7842
7854
  "ColorInput": {
7843
7855
  "title": "ColorInput",
7844
- "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>`, which is now a\ndeprecated alias); `color-input-ui`'s own tag/name is unaffected.",
7856
+ "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.",
7845
7857
  "type": "object",
7846
7858
  "allOf": [
7847
7859
  {
@@ -8057,152 +8069,6 @@
8057
8069
  "version": 1
8058
8070
  }
8059
8071
  },
8060
- "ColorPicker": {
8061
- "title": "ColorPicker",
8062
- "description": "DEPRECATED (ADR-0063, gh#1563, gh#1377 B11) — `-picker` is reserved for the outer, trigger + popover, form-associated composite shape (`calendar-picker-ui` / `date-range-picker-ui` / `datetime-picker-ui` / `time-picker-ui`); `color-picker-ui` was the sole violator, playing `calendar-grid-ui`'s inline-substrate role under a `-picker` name. `<color-picker-ui>` is now a thin `UIColorArea` subclass (see color-picker.class.js) rather than an independent implementation — every prop/event/token is inherited unchanged from `<color-area-ui>`. Existing markup keeps working, but new markup should reach for `<color-area-ui>` directly. See `<color-area-ui>` for the full contract.",
8063
- "type": "object",
8064
- "allOf": [
8065
- {
8066
- "$ref": "#/$defs/ComponentCommon"
8067
- },
8068
- {
8069
- "$ref": "#/$defs/CatalogComponentCommon"
8070
- }
8071
- ],
8072
- "properties": {
8073
- "baseHue": {
8074
- "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",
8075
- "type": "number",
8076
- "default": "NaN"
8077
- },
8078
- "component": {
8079
- "const": "ColorPicker"
8080
- },
8081
- "disabled": {
8082
- "description": "Disables all interaction",
8083
- "type": "boolean",
8084
- "default": false
8085
- },
8086
- "format": {
8087
- "description": "Output format for the value property",
8088
- "type": "string",
8089
- "enum": [
8090
- "hex",
8091
- "oklch"
8092
- ],
8093
- "default": "hex"
8094
- },
8095
- "hueDriftMax": {
8096
- "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",
8097
- "type": "number",
8098
- "default": "NaN"
8099
- },
8100
- "maxChroma": {
8101
- "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",
8102
- "type": "number",
8103
- "default": "Infinity"
8104
- },
8105
- "maxL": {
8106
- "description": "Generation constraint — clamp OKLCH lightness to at most this value (0..1). Default 1 (no constraint).",
8107
- "type": "number",
8108
- "default": 1
8109
- },
8110
- "minL": {
8111
- "description": "Generation constraint — clamp OKLCH lightness to at least this value (0..1). Default 0 (no constraint).",
8112
- "type": "number",
8113
- "default": 0
8114
- },
8115
- "name": {
8116
- "description": "Form field name",
8117
- "type": "string",
8118
- "default": ""
8119
- },
8120
- "value": {
8121
- "description": "Current color as hex string",
8122
- "type": "string",
8123
- "default": "#3b82f6"
8124
- }
8125
- },
8126
- "required": [
8127
- "component"
8128
- ],
8129
- "unevaluatedProperties": false,
8130
- "x-adiaui": {
8131
- "anti_patterns": [
8132
- {
8133
- "fix": "{\"component\": \"ColorArea\", \"name\": \"brand\"}\n",
8134
- "why": "ColorPicker is deprecated (ADR-0063, gh#1563) — new generation should\nreach for ColorArea instead.\n",
8135
- "wrong": "{\"component\": \"ColorPicker\", \"name\": \"brand\"}\n"
8136
- }
8137
- ],
8138
- "category": "input",
8139
- "composes": [
8140
- "slider-ui"
8141
- ],
8142
- "events": {
8143
- "change": {
8144
- "description": "Fired on every color change"
8145
- },
8146
- "constraint-clamp": {
8147
- "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",
8148
- "detail": {
8149
- "clamps": {
8150
- "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",
8151
- "type": "array"
8152
- }
8153
- }
8154
- },
8155
- "input": {
8156
- "description": "Fired during continuous interaction (drag)"
8157
- }
8158
- },
8159
- "examples": [
8160
- {
8161
- "description": "Deprecated tag — prefer ColorArea's own \"color-area-demo\" example for NEW markup.",
8162
- "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]",
8163
- "name": "color-picker-legacy"
8164
- }
8165
- ],
8166
- "keywords": [
8167
- "colorpicker",
8168
- "color-picker",
8169
- "color",
8170
- "picker"
8171
- ],
8172
- "name": "UIColorPicker",
8173
- "parts": {},
8174
- "related": [
8175
- "color-area",
8176
- "grid",
8177
- "button"
8178
- ],
8179
- "slots": {},
8180
- "states": [
8181
- {
8182
- "description": "Default, ready for interaction.",
8183
- "name": "idle"
8184
- },
8185
- {
8186
- "description": "Non-interactive; dimmed.",
8187
- "attribute": "disabled",
8188
- "name": "disabled"
8189
- }
8190
- ],
8191
- "status": "deprecated",
8192
- "synonyms": {
8193
- "color-picker": [
8194
- "color-canvas",
8195
- "color-surface",
8196
- "swatch-picker",
8197
- "color-area"
8198
- ]
8199
- },
8200
- "tag": "color-picker-ui",
8201
- "tokens": {},
8202
- "traits": [],
8203
- "version": 2
8204
- }
8205
- },
8206
8072
  "Combobox": {
8207
8073
  "title": "Combobox",
8208
8074
  "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",
@@ -8542,6 +8408,9 @@
8542
8408
  "--combobox-match-bg": {
8543
8409
  "description": "Background for `<mark>` spans that highlight matched substrings"
8544
8410
  },
8411
+ "--combobox-min-width": {
8412
+ "description": "Intrinsic min-width floor on the host (default `20ch`, matching input-ui's own `--input-min-width` UA-baseline derivation) so a combobox in a shrinking flex/grid cell doesn't crush to unusable width. Set to `0` to opt back into full collapse (gh#1633)."
8413
+ },
8545
8414
  "--combobox-option-bg-active": {
8546
8415
  "description": "Background for the currently active (arrow-navigated) option"
8547
8416
  },
@@ -9984,9 +9853,9 @@
9984
9853
  "version": 1
9985
9854
  }
9986
9855
  },
9987
- "DatetimePicker": {
9988
- "title": "DatetimePicker",
9989
- "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.",
9856
+ "DemoToggle": {
9857
+ "title": "DemoToggle",
9858
+ "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.",
9990
9859
  "type": "object",
9991
9860
  "allOf": [
9992
9861
  {
@@ -9997,289 +9866,35 @@
9997
9866
  }
9998
9867
  ],
9999
9868
  "properties": {
10000
- "required": {
10001
- "description": "Required for validation when inside a `<form>`.",
10002
- "type": "boolean",
10003
- "default": false
10004
- },
10005
9869
  "component": {
10006
- "const": "DatetimePicker"
10007
- },
10008
- "disabled": {
10009
- "description": "Block all interaction. Trigger remains rendered but does not open the popover.",
10010
- "type": "boolean",
10011
- "default": false
10012
- },
10013
- "format": {
10014
- "description": "Trigger button date format. `short`: `Jan 1, 2026 14:30`; `long`: `January 1, 2026 14:30`; `iso`: full ISO string.",
10015
- "type": "string",
10016
- "enum": [
10017
- "short",
10018
- "long",
10019
- "iso"
10020
- ],
10021
- "default": "short"
9870
+ "const": "DemoToggle"
10022
9871
  },
10023
- "hourcycle": {
10024
- "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",
9872
+ "initial": {
9873
+ "description": "Initial state when [state] is not set on connect (\"on\" | \"off\").",
10025
9874
  "type": "string",
10026
9875
  "enum": [
10027
- "",
10028
- "h12",
10029
- "h23"
9876
+ "on",
9877
+ "off"
10030
9878
  ],
10031
- "default": ""
10032
- },
10033
- "locale": {
10034
- "description": "BCP-47 locale tag used to derive hour-cycle when `hour-cycle` is empty. Falls back to `<html lang>` then to browser default.",
10035
- "type": "string",
10036
- "default": ""
10037
- },
10038
- "max": {
10039
- "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.",
10040
- "type": "string",
10041
- "default": ""
10042
- },
10043
- "min": {
10044
- "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.",
10045
- "type": "string",
10046
- "default": ""
9879
+ "default": "off"
10047
9880
  },
10048
- "name": {
10049
- "description": "Form field name. The ISO 8601 datetime is submitted under this key when the picker is inside a `<form>`.",
9881
+ "labelOff": {
9882
+ "description": "Header label rendered when state is \"off\".",
10050
9883
  "type": "string",
10051
- "default": ""
10052
- },
10053
- "open": {
10054
- "description": "Whether the popover is currently open.",
10055
- "type": "boolean",
10056
- "default": false
9884
+ "default": "Off"
10057
9885
  },
10058
- "placeholder": {
10059
- "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
+ "labelOn": {
9887
+ "description": "Header label rendered when state is \"on\".",
10060
9888
  "type": "string",
10061
- "default": "Select date and time"
9889
+ "default": "On"
10062
9890
  },
10063
- "placement": {
10064
- "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
+ "state": {
9892
+ "description": "Current toggle state (\"on\" | \"off\"). Reflected as data-state on the host.",
10065
9893
  "type": "string",
10066
9894
  "enum": [
10067
- "top",
10068
- "bottom",
10069
- "left",
10070
- "right",
10071
- "top-start",
10072
- "top-end",
10073
- "bottom-start",
10074
- "bottom-end"
10075
- ],
10076
- "default": "bottom"
10077
- },
10078
- "precision": {
10079
- "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).",
10080
- "type": "string",
10081
- "enum": [
10082
- "date",
10083
- "minute",
10084
- "second"
10085
- ],
10086
- "default": "minute"
10087
- },
10088
- "readonly": {
10089
- "description": "Block edits; allow keyboard navigation for screen-reader inspection.",
10090
- "type": "boolean",
10091
- "default": false
10092
- },
10093
- "step": {
10094
- "description": "Per-Arrow-keypress increment in seconds for the time pane. 60 = minute precision (default), 900 = 15-minute, 1 = second precision.",
10095
- "type": "number",
10096
- "default": 60
10097
- },
10098
- "value": {
10099
- "description": "Current value as ISO 8601 datetime (\"YYYY-MM-DDTHH:mm\" or \"YYYY-MM-DDTHH:mm:ss\"). Empty when no value selected.",
10100
- "$ref": "#/$defs/DynamicString"
10101
- }
10102
- },
10103
- "required": [
10104
- "component"
10105
- ],
10106
- "unevaluatedProperties": false,
10107
- "x-adiaui": {
10108
- "anti_patterns": [
10109
- {
10110
- "fix": "{\"component\": \"DatetimePicker\", \"value\": \"2026-05-24T00:00\"}\n",
10111
- "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",
10112
- "wrong": "{\"component\": \"DatetimePicker\", \"value\": \"2026-05-24\"}\n"
10113
- },
10114
- {
10115
- "fix": "{\"component\": \"CalendarPicker\", \"precision\": \"minute\", \"name\": \"appointment\"}\n",
10116
- "why": "DatetimePicker is deprecated (gh#1372) — new generation should reach\nfor CalendarPicker's widened precision axis instead.\n",
10117
- "wrong": "{\"component\": \"DatetimePicker\", \"name\": \"appointment\"}\n"
10118
- }
10119
- ],
10120
- "category": "input",
10121
- "composes": [
10122
- "calendar-grid-ui",
10123
- "time-picker-ui",
10124
- "divider-ui"
10125
- ],
10126
- "events": {
10127
- "change": {
10128
- "description": "Fired when the value commits (date picked + time edited, OR Apply clicked in explicit-commit mode).",
10129
- "detail": {
10130
- "value": "string"
10131
- }
10132
- },
10133
- "close": {
10134
- "description": "Popover closed (without commit, or after commit).",
10135
- "detail": {
10136
- "reason": "string"
10137
- }
10138
- },
10139
- "input": {
10140
- "description": "Fired during partial selection (date picked but time still pending, or vice versa).",
10141
- "detail": {
10142
- "value": "string"
10143
- }
10144
- },
10145
- "invalid": {
10146
- "description": "A constraint failed (out of range, parse error).",
10147
- "detail": {
10148
- "reason": "string",
10149
- "value": "string"
10150
- }
10151
- },
10152
- "open": {
10153
- "description": "Popover opened (user clicked the trigger or pressed Enter / Space).",
10154
- "detail": {
10155
- "trigger": "string"
10156
- }
10157
- }
10158
- },
10159
- "examples": [
10160
- {
10161
- "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.",
10162
- "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",
10163
- "name": "canonical"
10164
- }
10165
- ],
10166
- "keywords": [
10167
- "datetimepicker",
10168
- "datetime-picker",
10169
- "datetime",
10170
- "date-time",
10171
- "dateandtime",
10172
- "appointment",
10173
- "schedule",
10174
- "timestamp"
10175
- ],
10176
- "name": "UIDatetimePicker",
10177
- "parts": {},
10178
- "related": [
10179
- "calendar-picker",
10180
- "time-picker",
10181
- "date-range-picker",
10182
- "popover",
10183
- "field",
10184
- "button"
10185
- ],
10186
- "slots": {
10187
- "footer": {
10188
- "description": "Optional Apply / Cancel buttons for explicit-commit flows. Spans both panes below the calendar + time area."
10189
- },
10190
- "trigger": {
10191
- "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)."
10192
- }
10193
- },
10194
- "states": [
10195
- {
10196
- "description": "Closed, no pending selection.",
10197
- "name": "idle"
10198
- },
10199
- {
10200
- "description": "Popover open.",
10201
- "attribute": "open",
10202
- "name": "open"
10203
- },
10204
- {
10205
- "description": "Non-interactive; dimmed.",
10206
- "attribute": "disabled",
10207
- "name": "disabled"
10208
- },
10209
- {
10210
- "description": "Read-only; trigger keyboard-focusable but popover does not open.",
10211
- "attribute": "readonly",
10212
- "name": "readonly"
10213
- }
10214
- ],
10215
- "status": "deprecated",
10216
- "synonyms": {
10217
- "appointment": [
10218
- "datetime",
10219
- "meeting",
10220
- "schedule"
10221
- ],
10222
- "datetime": [
10223
- "date-time",
10224
- "timestamp",
10225
- "appointment",
10226
- "schedule"
10227
- ],
10228
- "tags": [
10229
- "DateTimePicker",
10230
- "DateTimeInput",
10231
- "DatetimeInput",
10232
- "Timestamp"
10233
- ]
10234
- },
10235
- "tag": "datetime-picker-ui",
10236
- "tokens": {},
10237
- "traits": [],
10238
- "version": 2
10239
- }
10240
- },
10241
- "DemoToggle": {
10242
- "title": "DemoToggle",
10243
- "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.",
10244
- "type": "object",
10245
- "allOf": [
10246
- {
10247
- "$ref": "#/$defs/ComponentCommon"
10248
- },
10249
- {
10250
- "$ref": "#/$defs/CatalogComponentCommon"
10251
- }
10252
- ],
10253
- "properties": {
10254
- "component": {
10255
- "const": "DemoToggle"
10256
- },
10257
- "initial": {
10258
- "description": "Initial state when [state] is not set on connect (\"on\" | \"off\").",
10259
- "type": "string",
10260
- "enum": [
10261
- "on",
10262
- "off"
10263
- ],
10264
- "default": "off"
10265
- },
10266
- "labelOff": {
10267
- "description": "Header label rendered when state is \"off\".",
10268
- "type": "string",
10269
- "default": "Off"
10270
- },
10271
- "labelOn": {
10272
- "description": "Header label rendered when state is \"on\".",
10273
- "type": "string",
10274
- "default": "On"
10275
- },
10276
- "state": {
10277
- "description": "Current toggle state (\"on\" | \"off\"). Reflected as data-state on the host.",
10278
- "type": "string",
10279
- "enum": [
10280
- "",
10281
- "on",
10282
- "off"
9895
+ "",
9896
+ "on",
9897
+ "off"
10283
9898
  ],
10284
9899
  "default": ""
10285
9900
  }
@@ -11231,6 +10846,9 @@
11231
10846
  "--drilldown-row-px": {
11232
10847
  "description": "Inline padding of each row."
11233
10848
  },
10849
+ "--drilldown-row-py": {
10850
+ "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)."
10851
+ },
11234
10852
  "--drilldown-row-radius": {
11235
10853
  "description": "Border radius of each row."
11236
10854
  }
@@ -13357,6 +12975,11 @@
13357
12975
  "component": {
13358
12976
  "const": "Heatmap"
13359
12977
  },
12978
+ "data": {
12979
+ "description": "Cell data as a JSON array of `{ r, c, v, label? }` objects, or set the `.data` property directly with an already-parsed array. Parsed on connect if the attribute is present and `.data` hasn't already been set programmatically.",
12980
+ "type": "string",
12981
+ "default": ""
12982
+ },
13360
12983
  "noLegend": {
13361
12984
  "description": "Hide the Less/More legend strip",
13362
12985
  "type": "boolean",
@@ -14162,7 +13785,7 @@
14162
13785
  ],
14163
13786
  "properties": {
14164
13787
  "type": {
14165
- "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.",
13788
+ "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.",
14166
13789
  "type": "string",
14167
13790
  "enum": [
14168
13791
  "text",
@@ -14313,8 +13936,8 @@
14313
13936
  "wrong": "{\"component\": \"Input\", \"type\": \"date\"}\n"
14314
13937
  },
14315
13938
  {
14316
- "fix": "{\"component\": \"DatetimePicker\"}\n",
14317
- "why": "Same gap as \"date\" — no native datetime picker rendered. Use\nDatetimePicker for combined date + time input.\n",
13939
+ "fix": "{\"component\": \"CalendarPicker\", \"precision\": \"minute\"}\n",
13940
+ "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 A2UI component now).\n",
14318
13941
  "wrong": "{\"component\": \"Input\", \"type\": \"datetime-local\"}\n"
14319
13942
  },
14320
13943
  {
@@ -14334,7 +13957,7 @@
14334
13957
  },
14335
13958
  {
14336
13959
  "fix": "{\"component\": \"ColorInput\"}\n",
14337
- "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",
13960
+ "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 A2UI component now).\n",
14338
13961
  "wrong": "{\"component\": \"Input\", \"type\": \"color\"}\n"
14339
13962
  },
14340
13963
  {
@@ -17047,7 +16670,7 @@
17047
16670
  },
17048
16671
  "MenuItem": {
17049
16672
  "title": "MenuItem",
17050
- "description": "Child of `<menu-ui>`. One actionable row inside a menu, with optional leading icon + label + description + value. (`subtitle` is a deprecated alias for `description` — ADR-0063, gh#1563.)",
16673
+ "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.)",
17051
16674
  "type": "object",
17052
16675
  "allOf": [
17053
16676
  {
@@ -17059,7 +16682,7 @@
17059
16682
  ],
17060
16683
  "properties": {
17061
16684
  "description": {
17062
- "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`.",
16685
+ "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).",
17063
16686
  "type": "string",
17064
16687
  "default": ""
17065
16688
  },
@@ -17076,11 +16699,6 @@
17076
16699
  "type": "string",
17077
16700
  "default": ""
17078
16701
  },
17079
- "subtitle": {
17080
- "description": "DEPRECATED (ADR-0063, gh#1563) — use `description` instead. Same type/default/rendered position; kept working as a dual-read compat shim (one-time console.warn when it's the name that resolves). Removed in 0.9.0. (The `subtitle` SLOT below is a separate surface, deliberately left unrenamed in this pass — see its own description.)",
17081
- "type": "string",
17082
- "default": ""
17083
- },
17084
16702
  "text": {
17085
16703
  "description": "Item label text.",
17086
16704
  "type": "string",
@@ -17131,7 +16749,7 @@
17131
16749
  "description": "Custom leading element override; falls through to `[icon]` prop if not slotted."
17132
16750
  },
17133
16751
  "subtitle": {
17134
- "description": "Custom secondary-line content override; falls through to the `[description]` prop (or its deprecated `[subtitle]` alias ADR-0063, gh#1563) if not slotted. The slot's own name is unchanged by that rename — this is a distinct, deliberately-unrenamed surface."
16752
+ "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."
17135
16753
  },
17136
16754
  "text": {
17137
16755
  "description": "Custom label content; falls through to `[text]` prop if not slotted."
@@ -17800,11 +17418,6 @@
17800
17418
  "type": "boolean",
17801
17419
  "default": false
17802
17420
  },
17803
- "port-size": {
17804
- "description": "Port indicator dot size in pixels",
17805
- "type": "number",
17806
- "default": 10
17807
- },
17808
17421
  "portSize": {
17809
17422
  "description": "Port indicator size",
17810
17423
  "type": "number",
@@ -17815,21 +17428,11 @@
17815
17428
  "type": "boolean",
17816
17429
  "default": false
17817
17430
  },
17818
- "show-ports": {
17819
- "description": "Show port indicator dots. Defaults to true when editable",
17820
- "type": "boolean",
17821
- "default": false
17822
- },
17823
17431
  "showPorts": {
17824
17432
  "description": "Show port indicators",
17825
17433
  "type": "boolean",
17826
17434
  "default": false
17827
17435
  },
17828
- "stroke-width": {
17829
- "description": "Stroke width in pixels",
17830
- "type": "number",
17831
- "default": 2
17832
- },
17833
17436
  "strokeWidth": {
17834
17437
  "description": "Line stroke width",
17835
17438
  "type": "number",
@@ -19308,7 +18911,7 @@
19308
18911
  },
19309
18912
  "Pane": {
19310
18913
  "title": "Pane",
19311
- "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",
18914
+ "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",
19312
18915
  "type": "object",
19313
18916
  "allOf": [
19314
18917
  {
@@ -19328,7 +18931,7 @@
19328
18931
  "const": "Pane"
19329
18932
  },
19330
18933
  "edge": {
19331
- "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)\nreplacing `side`.\n",
18934
+ "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",
19332
18935
  "type": "string",
19333
18936
  "enum": [
19334
18937
  "",
@@ -19351,16 +18954,6 @@
19351
18954
  "description": "Component property: resizable.",
19352
18955
  "type": "boolean",
19353
18956
  "default": false
19354
- },
19355
- "side": {
19356
- "description": "DEPRECATED (ADR-0063, gh#1563) — use `edge` instead. Same type/default/enum; kept working as a dual-read compat shim (one-time console.warn when it's the name that resolves). Removed in 0.9.0.",
19357
- "type": "string",
19358
- "enum": [
19359
- "",
19360
- "leading",
19361
- "trailing"
19362
- ],
19363
- "default": ""
19364
18957
  }
19365
18958
  },
19366
18959
  "required": [
@@ -20915,7 +20508,7 @@
20915
20508
  },
20916
20509
  "Progress": {
20917
20510
  "title": "Progress",
20918
- "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.",
20511
+ "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.",
20919
20512
  "type": "object",
20920
20513
  "allOf": [
20921
20514
  {
@@ -21123,111 +20716,6 @@
21123
20716
  "version": 1
21124
20717
  }
21125
20718
  },
21126
- "ProgressRow": {
21127
- "title": "ProgressRow",
21128
- "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.",
21129
- "type": "object",
21130
- "allOf": [
21131
- {
21132
- "$ref": "#/$defs/ComponentCommon"
21133
- },
21134
- {
21135
- "$ref": "#/$defs/CatalogComponentCommon"
21136
- }
21137
- ],
21138
- "properties": {
21139
- "component": {
21140
- "const": "ProgressRow"
21141
- },
21142
- "label": {
21143
- "description": "Left-hand label text",
21144
- "type": "string",
21145
- "default": ""
21146
- },
21147
- "meta": {
21148
- "description": "Right-hand meta text (e.g. '32 GB', '4.2k / 10k')",
21149
- "type": "string",
21150
- "default": ""
21151
- },
21152
- "value": {
21153
- "description": "Progress value 0-100 (null = indeterminate; legacy -1 accepted for back-compat)",
21154
- "type": [
21155
- "number",
21156
- "null"
21157
- ],
21158
- "default": null
21159
- },
21160
- "variant": {
21161
- "description": "Color variant for the progress fill",
21162
- "type": "string",
21163
- "enum": [
21164
- "default",
21165
- "success",
21166
- "warning",
21167
- "danger"
21168
- ],
21169
- "default": "default"
21170
- }
21171
- },
21172
- "required": [
21173
- "component"
21174
- ],
21175
- "unevaluatedProperties": false,
21176
- "x-adiaui": {
21177
- "anti_patterns": [
21178
- {
21179
- "fix": "{\"component\": \"Progress\", \"label\": \"CPU\", \"value\": 92}\n",
21180
- "why": "ProgressRow is deprecated — its row layout was absorbed\ninto Progress directly.\n",
21181
- "wrong": "{\"component\": \"ProgressRow\", \"label\": \"CPU\", \"value\": 92}\n"
21182
- }
21183
- ],
21184
- "category": "feedback",
21185
- "composes": [
21186
- "progress-ui"
21187
- ],
21188
- "events": {},
21189
- "examples": [],
21190
- "keywords": [
21191
- "progressrow",
21192
- "progress-row",
21193
- "progress",
21194
- "row"
21195
- ],
21196
- "name": "UIProgressRow",
21197
- "parts": {},
21198
- "related": [
21199
- "Progress",
21200
- "StepProgress",
21201
- "List"
21202
- ],
21203
- "slots": {
21204
- "label": {
21205
- "description": "Label region — control label."
21206
- },
21207
- "meta": {
21208
- "description": "Child content region for the `meta` slot."
21209
- }
21210
- },
21211
- "states": [
21212
- {
21213
- "description": "Default, ready for interaction.",
21214
- "name": "idle"
21215
- }
21216
- ],
21217
- "status": "deprecated",
21218
- "synonyms": {
21219
- "progress-row": [
21220
- "task-row",
21221
- "progress-line",
21222
- "labeled-progress"
21223
- ]
21224
- },
21225
- "tag": "progress-row-ui",
21226
- "tokens": {},
21227
- "traits": [],
21228
- "version": 1
21229
- }
21230
- },
21231
20719
  "QRCode": {
21232
20720
  "title": "QRCode",
21233
20721
  "description": "Inline QR code generator — renders a scannable code as inline SVG.\nTwo modes:\n\n**A. Auto-encode (default).** Set `[value]` to a string (URL, plain\ntext, share link, 2FA secret). The component encodes the data with\nthe built-in zero-deps QR encoder (byte mode, ECC level configurable,\nversions 1–10 up to ~150 byte chars) and renders an SVG.\n\n**B. Bring-your-own matrix.** Set `[matrix]` to a JSON string of a\n2-D 0/1 array (`[[1,0,1,...],[...],...]`). The component renders the\nsupplied matrix directly without invoking its own encoder. Use this\nwhen you need versions 11–40, kanji/alphanumeric mode, or any\nencoder feature beyond the built-in. When both `[value]` and\n`[matrix]` are set, the matrix wins (BYO override).\n\nOutput is a single `<svg>` with `viewBox=\"0 0 N N\"`. Crisp-edges\nrendering preserves the scannable cell boundaries at any size.\nSizing is controlled by the `[size]` prop (host CSS-pixel dimension);\ninternal cell size is computed from `size / (matrix-size + 2 ·\nquiet-zone)`. ARIA: `role=\"img\"` with `aria-label` (default \"QR code\"\nor the `[label]` prop).\n",
@@ -22704,8 +22192,7 @@
22704
22192
  "name": "UISegment",
22705
22193
  "parts": {},
22706
22194
  "related": [
22707
- "segmented-control",
22708
- "ToggleOption"
22195
+ "segmented-control"
22709
22196
  ],
22710
22197
  "slots": {},
22711
22198
  "states": [
@@ -22760,7 +22247,7 @@
22760
22247
  "const": "Segmented"
22761
22248
  },
22762
22249
  "multiple": {
22763
- "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).",
22250
+ "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).",
22764
22251
  "type": "boolean",
22765
22252
  "default": false
22766
22253
  },
@@ -22819,8 +22306,6 @@
22819
22306
  },
22820
22307
  "related": [
22821
22308
  "Segment",
22822
- "ToggleGroup",
22823
- "ToggleOption",
22824
22309
  "Tabs",
22825
22310
  "Radio"
22826
22311
  ],
@@ -23195,7 +22680,11 @@
23195
22680
  ]
23196
22681
  },
23197
22682
  "tag": "select-ui",
23198
- "tokens": {},
22683
+ "tokens": {
22684
+ "--select-min-width": {
22685
+ "description": "Intrinsic min-width floor on the host (default `20ch`, matching input-ui's own `--input-min-width` UA-baseline derivation) so a select in a shrinking flex/grid cell doesn't crush to unusable width. Set to `0` to opt back into full collapse (gh#1633)."
22686
+ }
22687
+ },
23199
22688
  "traits": [],
23200
22689
  "version": 1
23201
22690
  }
@@ -25483,8 +24972,13 @@
25483
24972
  }
25484
24973
  ],
25485
24974
  "properties": {
24975
+ "clickable-rows": {
24976
+ "description": "Renders body rows with `cursor: pointer`. `row-click` fires unconditionally whether or not a listener is attached, so the cursor can't be inferred from listener presence — set this explicitly when row-click behavior is wired up (master-detail, open-flyout, navigation) so rows read as actionable.",
24977
+ "type": "boolean",
24978
+ "default": false
24979
+ },
25486
24980
  "columns": {
25487
- "description": "Column definitions. Array of {key, label, type?, width?, minWidth?, maxWidth?, flex?, sortable?, resizable?, filterable?, pinned?, hidden?, wrap?, valign?, accessor?, format?, render?, sortFn?, filterType?, meta?}. `valign` ('top'|'center') overrides the host [valign] for that column's body cells only — header cells always stay centered. Alternative to declarative <col-def> children (<col-def valign=\"top\">); col-def also accepts `meta` as a JSON attribute (gh#925) — e.g. <col-def type=\"badge\" meta='{\"variants\":{\"Online\":\"success\"}}'> — so cell-type meta (badge variant maps, currency codes) is expressible in static HTML.",
24981
+ "description": "Column definitions. Array of {key, label, type?, width?, minWidth?, maxWidth?, flex?, sortable?, resizable?, filterable?, pinned?, hidden?, wrap?, valign?, accessor?, format?, render?, sortFn?, filterType?, meta?}. `valign` ('top'|'center') overrides the host [valign] for that column's body cells only — header cells always stay centered. Alternative to declarative <col-def> children (<col-def valign=\"top\">); col-def also accepts `meta` as a JSON attribute (gh#925) — e.g. <col-def type=\"badge\" meta='{\"variants\":{\"Online\":\"success\"}}'> — so cell-type meta (badge variant maps, currency codes) is expressible in static HTML. Truncation contract for `render` cells (gh#1681) — a `render(value, row, cell, dataIndex)` function's returned markup isn't guaranteed to be a bare <span>/<a> the way built-in cell types are, so single-line ellipsis truncation isn't automatic; set `data-truncate` on whichever rendered element (any tag, including a custom element) should single-line-ellipsis to opt it into the same contract built-in cells get for free. `[wrap]` (host) / `[data-wrap]` (per-column) override it back to multi-line, matching built-in cells.",
25488
24982
  "$ref": "#/$defs/DynamicStringList"
25489
24983
  },
25490
24984
  "component": {
@@ -26220,7 +25714,7 @@
26220
25714
  },
26221
25715
  "TableToolbar": {
26222
25716
  "title": "TableToolbar",
26223
- "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.",
25717
+ "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 [slot=\"actions-leading\"] region, 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.",
26224
25718
  "type": "object",
26225
25719
  "allOf": [
26226
25720
  {
@@ -26231,6 +25725,11 @@
26231
25725
  }
26232
25726
  ],
26233
25727
  "properties": {
25728
+ "chromeOnly": {
25729
+ "description": "Suppress all four native controls/search at once (filter, sort, columns, search) as additive sugar over noFilter/noSort/noColumns/ noSearch (ADR-0076, ADIA2-9123). Precedence is pure, absolute OR — while set, all four stay off regardless of any individual no-* attribute's own value, with no partial re-enable path; to re-enable one control, remove chrome-only entirely and set the other three no-* attributes explicitly instead. The four granular attributes are not deprecated or removed — they remain the independently-addressable shipped API; chrome-only never replaces them, it's a convenience preset on top.",
25730
+ "type": "boolean",
25731
+ "default": false
25732
+ },
26234
25733
  "component": {
26235
25734
  "const": "TableToolbar"
26236
25735
  },
@@ -26264,11 +25763,47 @@
26264
25763
  "type": "boolean",
26265
25764
  "default": false
26266
25765
  },
25766
+ "pageSize": {
25767
+ "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.",
25768
+ "type": "number",
25769
+ "default": 0
25770
+ },
25771
+ "pageSizeOptions": {
25772
+ "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.",
25773
+ "$ref": "#/$defs/DynamicStringList"
25774
+ },
26267
25775
  "placeholder": {
26268
25776
  "description": "Placeholder text for the search input.",
26269
25777
  "type": "string",
26270
25778
  "default": "Search..."
26271
25779
  },
25780
+ "rangeEnd": {
25781
+ "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.",
25782
+ "type": "number",
25783
+ "default": 0
25784
+ },
25785
+ "rangeStart": {
25786
+ "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.",
25787
+ "type": "number",
25788
+ "default": 0
25789
+ },
25790
+ "rangeTotal": {
25791
+ "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.",
25792
+ "type": "number",
25793
+ "default": 0
25794
+ },
25795
+ "stage": {
25796
+ "description": "Explicit compaction-stage override (ADR-0076). Unset (the default, empty string) means auto-snap: the toolbar's own inline-size container query picks the nearest stage from its live width against the three --table-toolbar-bp-* breakpoints, snapping discretely, never interpolating. Setting stage explicitly pins that stage's rendering regardless of the container's actual width — overriding the container query, mirroring chart-ui's ratio override shape. Primary use: visual-eval fixtures that need a deterministic stage without resizing a real container, and a consumer embedding the toolbar inside a known-narrow panel who wants to skip auto-detection entirely. All four stages' CSS is now live (ADR-0076): search-tight steps the search field down (step 2); icon-only drops control labels and compacts/hides the range summary (steps 3+4); overflow collapses Filter/Sort/Columns into one \"More\" trigger routed through the same menu-ui/menu-item-ui pattern used elsewhere in the corpus (step 5). The resolved stage — the pin if set, otherwise the live width classification — also reflects onto the host as `data-stage-resolved` (step 7, informational only, mirrors chart-ui's `data-ratio-resolved` convention — never drives table-toolbar's own rendering, which stays 100% CSS-driven).",
25797
+ "type": "string",
25798
+ "enum": [
25799
+ "",
25800
+ "full",
25801
+ "search-tight",
25802
+ "icon-only",
25803
+ "overflow"
25804
+ ],
25805
+ "default": ""
25806
+ },
26272
25807
  "text": {
26273
25808
  "description": "Title text shown on the left.",
26274
25809
  "type": "string",
@@ -26299,6 +25834,7 @@
26299
25834
  "field-ui",
26300
25835
  "select-ui",
26301
25836
  "input-ui",
25837
+ "menu-ui",
26302
25838
  "menu-item-ui",
26303
25839
  "icon-ui",
26304
25840
  "check-ui"
@@ -26310,6 +25846,9 @@
26310
25846
  "filter-change": {
26311
25847
  "description": "Filter set changed. Detail: { filters }."
26312
25848
  },
25849
+ "page-size-change": {
25850
+ "description": "Page-size select changed. Detail: { pageSize }."
25851
+ },
26313
25852
  "search": {
26314
25853
  "description": "Debounced search query change. Detail: { value }."
26315
25854
  },
@@ -26322,6 +25861,11 @@
26322
25861
  "description": "Members table with filter/sort/columns/search wired to a sibling table-ui.",
26323
25862
  "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]",
26324
25863
  "name": "members-toolbar"
25864
+ },
25865
+ {
25866
+ "description": "The ratified adiav2 list-page toolbar row (ADIA2-9123, gh#1649): scope menu, range summary, app-owned Filter/Columns triggers (their own filter drawer, not the native popovers — [no-filter]/[no-columns]/ [no-sort]/[no-search] drop the native affordances), page-size select, and a primary CTA — [slot=\"actions-leading\"] carries the Filter/Columns triggers so they land BEFORE the page-size select, while [slot=\"actions\"] carries the CTA so it lands after.",
25867
+ "a2ui": "[\n {\"id\": \"root\", \"component\": \"Column\", \"gap\": \"3\", \"children\": [\"bar\", \"card\"]},\n {\"id\": \"bar\", \"component\": \"TableToolbar\", \"for\": \"accounts\", \"no-filter\": true, \"no-sort\": true, \"no-columns\": true, \"no-search\": true, \"range-start\": 1, \"range-end\": 25, \"range-total\": 320, \"page-size\": 25, \"page-size-options\": [10, 25, 50, 100], \"children\": [\"btn-filter\", \"btn-columns\", \"btn-new\"]},\n {\"id\": \"btn-filter\", \"component\": \"Button\", \"text\": \"Filter\", \"variant\": \"ghost\", \"slot\": \"actions-leading\"},\n {\"id\": \"btn-columns\", \"component\": \"Button\", \"text\": \"Columns\", \"variant\": \"ghost\", \"slot\": \"actions-leading\"},\n {\"id\": \"btn-new\", \"component\": \"Button\", \"text\": \"New account\", \"variant\": \"primary\", \"slot\": \"actions\"},\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]",
25868
+ "name": "adiav2-list-page-toolbar-row"
26325
25869
  }
26326
25870
  ],
26327
25871
  "keywords": [
@@ -26349,7 +25893,16 @@
26349
25893
  ],
26350
25894
  "slots": {
26351
25895
  "actions": {
26352
- "description": "Trailing action area — primary buttons (e.g. \"New row\") rendered after the search input."
25896
+ "description": "Trailing action area — primary buttons (e.g. \"New row\") rendered after the search input, [slot=\"actions-leading\"], and the page-size select."
25897
+ },
25898
+ "actions-leading": {
25899
+ "description": "Region rendered AFTER the search input and BEFORE the native page-size select (gh#1649) — for app-owned trigger buttons (e.g. custom Filter / Columns triggers that open the consumer's own drawer instead of the native filter/columns popovers) that must land ahead of the page-size select rather than after it, unlike [slot=\"actions\"]. Same real-insertion-point pattern as [slot=\"scope\"] / [slot=\"actions\"] — positioning is CSS by DOM order, not a template stamp. Empty (the default) has zero footprint on existing consumers."
25900
+ },
25901
+ "empty": {
25902
+ "description": "Renders in place of the range-summary text — the same [data-summary] region — when [range-total] is EXPLICITLY present and equal to \"0\" (checked via hasAttribute, never the computed value alone, so an unset range-total during loading never flashes this content; ADR-0076, REQ-E-001). Mutually exclusive with a positive [range-total]: the normal \"Showing X-Y of N\" text always wins whenever range-total is a positive number. Empty (the default) preserves today's exact behavior — [data-summary] hides on a confirmed range-total=\"0\" exactly as before this slot existed. Plain author-supplied markup (text, an empty-state-ui composite, an icon+text pair) — table-toolbar does not template or constrain its shape. Naming matches chart-ui's own existing `empty` slot convention."
25903
+ },
25904
+ "scope": {
25905
+ "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."
26353
25906
  }
26354
25907
  },
26355
25908
  "states": [
@@ -26401,6 +25954,12 @@
26401
25954
  "--table-toolbar-radius": {
26402
25955
  "description": "Toolbar corner radius (variant=card)"
26403
25956
  },
25957
+ "--table-toolbar-summary-fg": {
25958
+ "description": "Range-summary (\"Showing X–Y of N\") text color"
25959
+ },
25960
+ "--table-toolbar-summary-size": {
25961
+ "description": "Range-summary font size"
25962
+ },
26404
25963
  "--table-toolbar-title-fg": {
26405
25964
  "description": "Title text color"
26406
25965
  },
@@ -27213,10 +26772,10 @@
27213
26772
  "deck": "Sub-title under a `title`. One-line lead, slightly larger than body. Use for the lead sentence after a title.",
27214
26773
  "display": "Top-level hero / brand display. Tallest visual rank. Use for page-level hero one-liners.",
27215
26774
  "heading": "Major page heading (visual rank H2). 16-18px / bold. Use for major sub-section dividers.",
27216
- "kicker": "Eyebrow text above a `title`. UPPERCASE + small + tracking. Use for content eyebrows (NOT form labels — use `label` for those).",
27217
- "label": "Form-control label (above an `<input-ui>` / `<select-ui>` etc). UI-sized + medium-weight. Use for field labels bound to form controls.",
26775
+ "kicker": "Eyebrow text above a `title`. UPPERCASE + small + tracking, mono font stack at regular (400) weight. Use for content eyebrows (NOT form labels — use `label` for those).",
26776
+ "label": "Form-control label (above an `<input-ui>` / `<select-ui>` etc). UI-sized, mono font stack at regular (400) weight. Use for field labels bound to form controls.",
27218
26777
  "metric": "Numeric KPI / big-number stat. Bold + large. Use for dashboard metric numbers.",
27219
- "section": "Inline form-group / navlist heading (visual rank H4). Small-cap. Use for form group labels, nav list headings.",
26778
+ "section": "Inline form-group / navlist heading (visual rank H4). Mono font stack at medium (500) weight, normal casing. Use for form group labels, nav list headings.",
27220
26779
  "subsection": "Sub-landmark within a section (visual rank H3). 14px / semibold. Use for card titles within a section."
27221
26780
  }
27222
26781
  },
@@ -28399,236 +27958,6 @@
28399
27958
  "version": 1
28400
27959
  }
28401
27960
  },
28402
- "ToggleGroup": {
28403
- "title": "ToggleGroup",
28404
- "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.",
28405
- "type": "object",
28406
- "allOf": [
28407
- {
28408
- "$ref": "#/$defs/ComponentCommon"
28409
- },
28410
- {
28411
- "$ref": "#/$defs/CatalogComponentCommon"
28412
- }
28413
- ],
28414
- "properties": {
28415
- "component": {
28416
- "const": "ToggleGroup"
28417
- },
28418
- "single": {
28419
- "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>.",
28420
- "type": "boolean",
28421
- "default": false
28422
- },
28423
- "value": {
28424
- "description": "Comma-separated selected values",
28425
- "type": "string",
28426
- "default": ""
28427
- }
28428
- },
28429
- "required": [
28430
- "component"
28431
- ],
28432
- "unevaluatedProperties": false,
28433
- "x-adiaui": {
28434
- "allowedChildren": [
28435
- "ToggleOption"
28436
- ],
28437
- "anti_patterns": [],
28438
- "category": "navigation",
28439
- "composes": [],
28440
- "events": {
28441
- "change": {
28442
- "description": "Fired when selection changes. detail: { value }",
28443
- "detail": {
28444
- "value": {
28445
- "description": "New toggle-group value.",
28446
- "type": "string"
28447
- }
28448
- }
28449
- }
28450
- },
28451
- "examples": [
28452
- {
28453
- "description": "Basic ToggleGroup usage",
28454
- "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]",
28455
- "name": "basic-toggle-group"
28456
- }
28457
- ],
28458
- "keywords": [
28459
- "togglegroup",
28460
- "toggle-group",
28461
- "toggle",
28462
- "group"
28463
- ],
28464
- "name": "UIToggleGroup",
28465
- "parts": {},
28466
- "related": [
28467
- "ToggleOption",
28468
- "Segmented",
28469
- "Radio"
28470
- ],
28471
- "slots": {
28472
- "default": {
28473
- "description": "Default slot — primary child content."
28474
- }
28475
- },
28476
- "states": [
28477
- {
28478
- "description": "Default, ready for interaction.",
28479
- "name": "idle"
28480
- }
28481
- ],
28482
- "status": "deprecated",
28483
- "synonyms": {
28484
- "toggle-group": [
28485
- "segmented-control",
28486
- "option-group",
28487
- "toggle-set"
28488
- ]
28489
- },
28490
- "tag": "toggle-group-ui",
28491
- "tokens": {
28492
- "--toggle-group-border": {
28493
- "description": "Border color of the group container"
28494
- },
28495
- "--toggle-group-height": {
28496
- "description": "Height of the group container"
28497
- },
28498
- "--toggle-group-radius": {
28499
- "description": "Border radius of the group container"
28500
- },
28501
- "--toggle-option-bg-hover": {
28502
- "description": "Background color on hover"
28503
- },
28504
- "--toggle-option-border": {
28505
- "description": "Border color between adjacent options"
28506
- },
28507
- "--toggle-option-duration": {
28508
- "description": "Transition duration"
28509
- },
28510
- "--toggle-option-easing": {
28511
- "description": "Transition easing function"
28512
- },
28513
- "--toggle-option-fg": {
28514
- "description": "Default text color"
28515
- },
28516
- "--toggle-option-fg-disabled": {
28517
- "description": "Text color when disabled"
28518
- },
28519
- "--toggle-option-fg-hover": {
28520
- "description": "Text color on hover"
28521
- },
28522
- "--toggle-option-focus-ring": {
28523
- "description": "Focus ring box-shadow"
28524
- },
28525
- "--toggle-option-font-size": {
28526
- "description": "Font size for option text and icons"
28527
- },
28528
- "--toggle-option-gap": {
28529
- "description": "Gap between icon and text within an option"
28530
- },
28531
- "--toggle-option-height": {
28532
- "description": "Min-height of each option"
28533
- },
28534
- "--toggle-option-px": {
28535
- "description": "Horizontal padding of each option"
28536
- },
28537
- "--toggle-option-selected-bg": {
28538
- "description": "Background color when selected"
28539
- },
28540
- "--toggle-option-selected-fg": {
28541
- "description": "Text color when selected"
28542
- }
28543
- },
28544
- "traits": [],
28545
- "version": 1
28546
- }
28547
- },
28548
- "ToggleOption": {
28549
- "title": "ToggleOption",
28550
- "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.",
28551
- "type": "object",
28552
- "allOf": [
28553
- {
28554
- "$ref": "#/$defs/ComponentCommon"
28555
- },
28556
- {
28557
- "$ref": "#/$defs/CatalogComponentCommon"
28558
- }
28559
- ],
28560
- "properties": {
28561
- "component": {
28562
- "const": "ToggleOption"
28563
- },
28564
- "disabled": {
28565
- "description": "Disabled state — blocks pointer + keyboard activation.",
28566
- "type": "boolean",
28567
- "default": false
28568
- },
28569
- "icon": {
28570
- "description": "Optional Phosphor icon name; renders as a leading icon.",
28571
- "type": "string",
28572
- "default": ""
28573
- },
28574
- "selected": {
28575
- "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.",
28576
- "type": "boolean",
28577
- "default": false
28578
- },
28579
- "text": {
28580
- "description": "Visible label text.",
28581
- "type": "string",
28582
- "default": ""
28583
- },
28584
- "value": {
28585
- "description": "Stable identifier matched against the parent group's `value`.",
28586
- "type": "string",
28587
- "default": ""
28588
- }
28589
- },
28590
- "required": [
28591
- "component"
28592
- ],
28593
- "unevaluatedProperties": false,
28594
- "x-adiaui": {
28595
- "allowedParents": [
28596
- "ToggleGroup"
28597
- ],
28598
- "anti_patterns": [],
28599
- "category": "form",
28600
- "composes": [],
28601
- "events": {},
28602
- "examples": [],
28603
- "keywords": [
28604
- "toggle-option",
28605
- "toggle-segment",
28606
- "option-toggle",
28607
- "segmented-option"
28608
- ],
28609
- "name": "UIToggleOption",
28610
- "parts": {},
28611
- "related": [
28612
- "ToggleGroup",
28613
- "Segment",
28614
- "Radio"
28615
- ],
28616
- "slots": {},
28617
- "states": [],
28618
- "status": "deprecated",
28619
- "synonyms": {
28620
- "toggle-option": [
28621
- "toggle-segment",
28622
- "option-button",
28623
- "segmented-option"
28624
- ]
28625
- },
28626
- "tag": "toggle-option-ui",
28627
- "tokens": {},
28628
- "traits": [],
28629
- "version": 1
28630
- }
28631
- },
28632
27961
  "ToggleScheme": {
28633
27962
  "title": "ToggleScheme",
28634
27963
  "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.",