@adia-ai/web-components 0.8.39 → 0.8.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/MIGRATION.md +240 -0
  3. package/components/agent-artifact/agent-artifact.css +1 -1
  4. package/components/agent-reasoning/agent-reasoning.css +2 -2
  5. package/components/agent-trace/agent-trace.css +3 -3
  6. package/components/alert/alert.css +1 -1
  7. package/components/avatar/avatar.css +1 -1
  8. package/components/badge/badge.css +1 -1
  9. package/components/button/button.css +6 -5
  10. package/components/calendar-picker/calendar-picker.css +1 -1
  11. package/components/card/card.css +3 -3
  12. package/components/chart/chart.a2ui.json +5 -5
  13. package/components/chart/chart.class.js +4 -4
  14. package/components/chart/chart.css +6 -6
  15. package/components/chart/chart.d.ts +2 -2
  16. package/components/chart/chart.yaml +3 -2
  17. package/components/chat-thread/chat-thread.css +1 -1
  18. package/components/code/code.css +6 -6
  19. package/components/combobox/combobox.css +2 -2
  20. package/components/command/command.css +3 -3
  21. package/components/date-range-picker/date-range-picker.css +1 -1
  22. package/components/datetime-picker/datetime-picker.css +1 -1
  23. package/components/description-list/description-list.css +2 -2
  24. package/components/display-field/display-field.css +3 -3
  25. package/components/divider/divider.css +1 -1
  26. package/components/drawer/drawer.css +2 -2
  27. package/components/drilldown/drilldown.css +2 -2
  28. package/components/empty-state/empty-state.css +2 -2
  29. package/components/field/field.css +1 -1
  30. package/components/heatmap/heatmap.css +2 -2
  31. package/components/inline-message/inline-message.css +1 -1
  32. package/components/input/input.css +5 -4
  33. package/components/integration-card/integration-card.css +4 -4
  34. package/components/kbd/kbd.css +1 -1
  35. package/components/list/list.css +2 -2
  36. package/components/nav/nav.css +2 -2
  37. package/components/nav-group/nav-group.css +3 -3
  38. package/components/nav-item/nav-item.css +2 -2
  39. package/components/option-card/option-card.css +1 -1
  40. package/components/otp-input/otp-input.css +1 -1
  41. package/components/page/page.css +2 -2
  42. package/components/pagination/pagination.css +1 -1
  43. package/components/pane/pane.css +1 -1
  44. package/components/progress-row/progress-row.css +2 -2
  45. package/components/qr-code/qr-code.a2ui.json +10 -10
  46. package/components/qr-code/qr-code.class.js +3 -3
  47. package/components/qr-code/qr-code.d.ts +10 -7
  48. package/components/qr-code/qr-code.yaml +13 -9
  49. package/components/range/range.css +1 -1
  50. package/components/rating/rating.css +1 -1
  51. package/components/richtext/richtext.css +3 -3
  52. package/components/segment/segment.css +5 -4
  53. package/components/select/select.css +3 -3
  54. package/components/spinner/spinner.css +1 -1
  55. package/components/stat/stat.css +3 -3
  56. package/components/step-progress/step-progress.css +1 -1
  57. package/components/stepper/stepper.css +2 -2
  58. package/components/swatch/swatch.css +2 -2
  59. package/components/table/table.a2ui.json +0 -10
  60. package/components/table/table.class.js +4 -4
  61. package/components/table/table.css +6 -9
  62. package/components/table/table.d.ts +0 -2
  63. package/components/table/table.yaml +0 -9
  64. package/components/table-toolbar/table-toolbar.css +1 -1
  65. package/components/tabs/tabs.css +1 -1
  66. package/components/tag/tag.css +2 -2
  67. package/components/tags-input/tags-input.css +1 -1
  68. package/components/textarea/textarea.css +1 -1
  69. package/components/time-picker/time-picker.css +1 -1
  70. package/components/timeline/timeline.css +4 -4
  71. package/components/toc/toc.css +1 -1
  72. package/components/toggle-group/toggle-group.class.js +3 -11
  73. package/components/toggle-group/toggle-group.css +1 -3
  74. package/components/toggle-group/toggle-group.d.ts +1 -2
  75. package/components/toggle-group/toggle-group.yaml +1 -4
  76. package/components/toggle-group/toggle-option.a2ui.json +1 -1
  77. package/components/toggle-group/toggle-option.yaml +2 -6
  78. package/components/tooltip/tooltip.css +1 -1
  79. package/components/tour/tour.css +2 -2
  80. package/components/tree/tree.css +1 -1
  81. package/custom-elements.json +7 -15
  82. package/dist/host.min.css +1 -1
  83. package/dist/host.sheet.js +1 -1
  84. package/dist/theme-provider.min.js +1 -1
  85. package/dist/web-components.min.css +1 -1
  86. package/dist/web-components.min.js +89 -89
  87. package/dist/web-components.sheet.js +1 -1
  88. package/package.json +1 -1
  89. package/styles/type/scale.css +6 -7
@@ -32,7 +32,7 @@ rating-ui:hover [data-rating-symbol] {
32
32
  gap: var(--rating-gap);
33
33
  cursor: pointer;
34
34
  user-select: none;
35
- line-height: 1;
35
+ line-height: var(--a-font-leading-none);
36
36
  }
37
37
 
38
38
  :scope[readonly],
@@ -164,7 +164,7 @@
164
164
  font-weight: var(--richtext-h4-weight);
165
165
  color: var(--richtext-fg-muted);
166
166
  text-transform: uppercase;
167
- letter-spacing: 0.04em;
167
+ letter-spacing: var(--a-font-tracking-wide);
168
168
  margin: var(--richtext-h4-margin-top) 0 var(--richtext-h4-margin-bottom);
169
169
  }
170
170
 
@@ -173,7 +173,7 @@
173
173
  font-weight: var(--richtext-h4-weight);
174
174
  color: var(--richtext-fg-muted);
175
175
  text-transform: uppercase;
176
- letter-spacing: 0.06em;
176
+ letter-spacing: var(--a-font-tracking-wider);
177
177
  margin: var(--richtext-h4-margin-top) 0 var(--richtext-h4-margin-bottom);
178
178
  }
179
179
 
@@ -212,7 +212,7 @@
212
212
  padding: var(--richtext-pre-inset);
213
213
  overflow-x: auto;
214
214
  font-size: var(--richtext-code-size);
215
- line-height: 1.5;
215
+ line-height: var(--a-font-leading-relaxed);
216
216
  margin: var(--richtext-pre-my) 0;
217
217
  }
218
218
 
@@ -23,9 +23,10 @@ segment-ui[selected] {
23
23
  `line-height: 1` is deliberate, but the label's ::after clips to its
24
24
  own line box, so inheriting 1 makes half-leading negative and shears
25
25
  descenders (g/j/p/q/y, parentheses) by ~0.93px at the default size —
26
- gh#906. Snug (1.3) contains the font's content box at every [size];
27
- mirrors --button-label-line-height. */
28
- --segment-label-line-height: var(--a-leading-snug);
26
+ gh#906. Normal (1.35) contains the font's content box at every
27
+ [size]; mirrors --button-label-line-height. Value-nearest migration
28
+ from the retired --a-leading-snug (1.3) — ADR-0052. */
29
+ --segment-label-line-height: var(--a-font-leading-normal);
29
30
 
30
31
  /* ── Colors ── */
31
32
  --segment-fg: var(--a-ui-text-subtle);
@@ -60,7 +61,7 @@ segment-ui[selected] {
60
61
  font-family: var(--segment-font-family);
61
62
  font-size: var(--segment-font-size);
62
63
  font-weight: var(--segment-font-weight);
63
- line-height: 1;
64
+ line-height: var(--a-font-leading-none);
64
65
  color: var(--segment-fg);
65
66
  white-space: nowrap;
66
67
  overflow: hidden;
@@ -91,7 +91,7 @@
91
91
  border: 1px solid var(--select-border);
92
92
  border-radius: var(--select-radius);
93
93
  background: var(--select-bg);
94
- line-height: 1;
94
+ line-height: var(--a-font-leading-none);
95
95
  cursor: pointer;
96
96
  /* Match every property the hover / focus / invalid states change. */
97
97
  transition:
@@ -130,7 +130,7 @@
130
130
  display: inline-flex;
131
131
  align-items: center;
132
132
  flex-shrink: 0;
133
- line-height: 1;
133
+ line-height: var(--a-font-leading-none);
134
134
  --a-icon-size: var(--select-font-size);
135
135
  color: var(--select-fg-muted);
136
136
  }
@@ -414,7 +414,7 @@ select-ui [role="group"] [slot="group-label"] {
414
414
  font-weight: var(--a-ui-weight);
415
415
  color: var(--select-fg-muted);
416
416
  text-transform: uppercase;
417
- letter-spacing: 0.05em;
417
+ letter-spacing: var(--a-font-tracking-wide);
418
418
  white-space: nowrap;
419
419
  }
420
420
 
@@ -178,7 +178,7 @@
178
178
  align-items: center;
179
179
  justify-content: center;
180
180
  font: inherit;
181
- line-height: 1;
181
+ line-height: var(--a-font-leading-none);
182
182
  text-align: center;
183
183
  color: currentColor;
184
184
  }
@@ -171,7 +171,7 @@
171
171
  grid-area: label;
172
172
  font-size: var(--stat-label-size);
173
173
  color: var(--stat-label-fg);
174
- line-height: 1.4;
174
+ line-height: var(--a-font-leading-normal);
175
175
  min-width: 0;
176
176
  overflow: hidden;
177
177
  text-overflow: ellipsis;
@@ -185,7 +185,7 @@
185
185
  align-items: center;
186
186
  gap: 0.25em;
187
187
  font-size: var(--stat-change-size);
188
- line-height: 1;
188
+ line-height: var(--a-font-leading-none);
189
189
  justify-self: start;
190
190
  }
191
191
 
@@ -195,7 +195,7 @@
195
195
  font-size: var(--stat-value-size);
196
196
  font-weight: var(--stat-value-weight);
197
197
  color: var(--stat-value-fg);
198
- line-height: 1.2;
198
+ line-height: var(--a-font-leading-snug);
199
199
  min-width: 0;
200
200
  overflow: hidden;
201
201
  text-overflow: ellipsis;
@@ -46,7 +46,7 @@
46
46
  [slot="caption"] {
47
47
  color: var(--step-progress-caption-fg);
48
48
  font-size: var(--step-progress-caption-size);
49
- line-height: 1.4;
49
+ line-height: var(--a-font-leading-normal);
50
50
  }
51
51
 
52
52
  [slot="caption"][hidden] {
@@ -236,7 +236,7 @@
236
236
  display: block;
237
237
  font-weight: var(--stepper-item-label-weight);
238
238
  font-size: var(--stepper-item-label-size);
239
- line-height: 1.4;
239
+ line-height: var(--a-font-leading-normal);
240
240
  color: var(--stepper-item-label-fg);
241
241
  min-width: 0;
242
242
  overflow-wrap: break-word;
@@ -247,7 +247,7 @@
247
247
  margin-top: var(--stepper-item-offset-xs);
248
248
  color: var(--stepper-item-desc-fg);
249
249
  font-size: var(--stepper-item-desc-size);
250
- line-height: 1.5;
250
+ line-height: var(--a-font-leading-relaxed);
251
251
  }
252
252
 
253
253
  :scope [slot]:empty {
@@ -63,7 +63,7 @@
63
63
  min-width: 0;
64
64
  color: var(--swatch-label-fg);
65
65
  font-size: var(--swatch-label-size);
66
- line-height: 1.2;
66
+ line-height: var(--a-font-leading-snug);
67
67
  vertical-align: baseline;
68
68
  }
69
69
 
@@ -238,7 +238,7 @@
238
238
  background: var(--swatch-badge-bg);
239
239
  color: var(--swatch-badge-fg);
240
240
  font-size: var(--swatch-badge-size);
241
- line-height: 1;
241
+ line-height: var(--a-font-leading-none);
242
242
  border-radius: var(--swatch-badge-radius);
243
243
  box-shadow: 0 0 0 1px color-mix(in oklab, var(--md-sys-color-neutral-outline-variant) 60%, transparent);
244
244
  }
@@ -24,16 +24,6 @@
24
24
  "description": "JS property (set programmatically — `el.data = [...]`) — row records, an array of plain objects keyed to columns[].key. May also be supplied declaratively as a JSON-array `data=\"[…]\"` attribute, hydrated once at connect (gh#288) — the same pattern chart-ui's `data` attribute uses. Custom accessor on the element class, not a reflected attribute.",
25
25
  "$ref": "common_types.json#/$defs/DynamicObjectList"
26
26
  },
27
- "density": {
28
- "description": "Controls cell padding and row height. 'compact' for dense data, 'standard' for default spacing, 'comfortable' for spacious rows.",
29
- "type": "string",
30
- "enum": [
31
- "compact",
32
- "standard",
33
- "comfortable"
34
- ],
35
- "default": "standard"
36
- },
37
27
  "expandable": {
38
28
  "description": "Enable row expansion",
39
29
  "type": "boolean",
@@ -21,8 +21,11 @@
21
21
  * sortable — enable column sorting on header click
22
22
  * selectable — enable row selection via checkboxes
23
23
  * striped — alternate row background
24
- * density — 'compact' | 'standard' | 'comfortable'
25
24
  * valign — 'center' (default) | 'top' — body-cell vertical alignment (gh#505)
25
+ *
26
+ * table-ui has no local `density` prop (ADR-0054) — it converges onto the
27
+ * ambient global [density="compact"|"spacious"] attribute; --table-py/-px
28
+ * already derive from --a-space-* steps, which --a-density scales.
26
29
  * paginate — rows per page (0 = no pagination)
27
30
  * loading — show loading overlay
28
31
  * search — global search filter string
@@ -118,7 +121,6 @@ export class UITable extends UIElement {
118
121
  frameless: { type: Boolean, default: false, reflect: true },
119
122
  wrap: { type: Boolean, default: false, reflect: true },
120
123
  raw: { type: Boolean, default: false, reflect: true },
121
- density: { type: String, default: 'standard', reflect: true },
122
124
  paginate: { type: Number, default: 0, reflect: true },
123
125
  loading: { type: Boolean, default: false, reflect: true },
124
126
  search: { type: String, default: '', reflect: true },
@@ -294,7 +296,6 @@ export class UITable extends UIElement {
294
296
  columnWidths: Object.fromEntries(this.#columnWidths),
295
297
  hiddenColumns: this.#columns.filter(c => c.hidden).map(c => c.key),
296
298
  page: this.#page,
297
- density: this.density,
298
299
  };
299
300
  }
300
301
 
@@ -319,7 +320,6 @@ export class UITable extends UIElement {
319
320
  }
320
321
  }
321
322
  if (state.page != null) this.#page = state.page;
322
- if (state.density) this.density = state.density;
323
323
  this.#requestRender();
324
324
  }
325
325
 
@@ -463,14 +463,11 @@
463
463
 
464
464
  /* ═══════ Density ═══════ */
465
465
 
466
- :scope[density="compact"] {
467
- --table-py: var(--a-space-1);
468
- --table-px: var(--a-space-2);
469
- }
470
-
471
- :scope[density="comfortable"] {
472
- --table-py: var(--a-space-4);
473
- }
466
+ /* No local override (ADR-0054 convergence) — --table-py/-px above already
467
+ derive from --a-space-* steps, which the ambient global
468
+ [density="compact"|"spacious"] attribute already scales via
469
+ --a-density. Do not reintroduce a component-local :scope[density=…]
470
+ block; that would re-shadow the global grammar (ADR-0053). */
474
471
 
475
472
  /* ═══════ Pinned cells ═══════ */
476
473
 
@@ -744,7 +741,7 @@
744
741
  grid-template-columns: subgrid;
745
742
  grid-column: 1 / -1;
746
743
  border-top: 2px solid var(--table-agg-border);
747
- font-weight: 600;
744
+ font-weight: var(--a-weight-semibold);
748
745
  font-size: var(--table-agg-size);
749
746
  color: var(--table-fg-secondary);
750
747
  }
@@ -90,8 +90,6 @@ export class UITable extends UIElement {
90
90
  columns: string;
91
91
  /** JS property (set programmatically — `el.data = [...]`) — row records, an array of plain objects keyed to columns[].key. May also be supplied declaratively as a JSON-array `data="[…]"` attribute, hydrated once at connect (gh#288) — the same pattern chart-ui's `data` attribute uses. Custom accessor on the element class, not a reflected attribute. */
92
92
  data: string;
93
- /** Controls cell padding and row height. 'compact' for dense data, 'standard' for default spacing, 'comfortable' for spacious rows. */
94
- density: 'compact' | 'standard' | 'comfortable';
95
93
  /** Enable row expansion */
96
94
  expandable: boolean;
97
95
  /** Drop the table's outer 1px perimeter and nothing else (gh#511) — row dividers are untouched (the perimeter is split onto its own --table-perimeter token, defaulting to --table-border). For card-composed tables: the card owns the frame, so the table's square perimeter otherwise renders a doubled edge (flush bleed) or a stray inner box (with content above). Standalone tables keep their chrome by default. Theming path without the attribute: set --table-perimeter to transparent per instance. Note: `<card-ui><section bleed>` already drops a direct-child table-ui's chrome automatically (card.css, gh#796) — `frameless`/`raw` on the instance still applies and is honored, but is no longer required just to avoid the doubled-edge look in that composition. */
@@ -36,15 +36,6 @@ props:
36
36
  type: object
37
37
  default: []
38
38
  dynamic: true # JS-set collection prop with a custom setter — deliberately not in static properties
39
- density:
40
- description: Controls cell padding and row height. 'compact' for dense data, 'standard' for default
41
- spacing, 'comfortable' for spacious rows.
42
- type: string
43
- default: standard
44
- enum:
45
- - compact
46
- - standard
47
- - comfortable
48
39
  expandable:
49
40
  description: Enable row expansion
50
41
  type: boolean
@@ -82,7 +82,7 @@
82
82
  font-size: var(--table-toolbar-title-size);
83
83
  font-weight: var(--table-toolbar-title-weight);
84
84
  color: var(--table-toolbar-title-fg);
85
- line-height: 1.2;
85
+ line-height: var(--a-font-leading-snug);
86
86
  }
87
87
 
88
88
  [data-count-badge][hidden] { display: none; }
@@ -138,7 +138,7 @@
138
138
  /* font-family floor — see segment.css rationale. */
139
139
  font-family: var(--tabs-font-family);
140
140
  font-size: var(--tabs-font-size);
141
- line-height: 1;
141
+ line-height: var(--a-font-leading-none);
142
142
  cursor: pointer;
143
143
  user-select: none;
144
144
  white-space: nowrap;
@@ -154,8 +154,8 @@ tag-ui[removable]:not([disabled]):hover {
154
154
  /* font-family floor — see segment.css rationale. */
155
155
  font-family: var(--tag-font-family);
156
156
  font-size: var(--tag-font);
157
- font-weight: 500;
158
- line-height: 1;
157
+ font-weight: var(--a-weight-medium);
158
+ line-height: var(--a-font-leading-none);
159
159
  color: var(--tag-fg);
160
160
  background: var(--tag-bg);
161
161
  white-space: nowrap;
@@ -109,7 +109,7 @@
109
109
  color: var(--tags-input-fg);
110
110
  font: inherit;
111
111
  font-size: var(--tags-input-font-size);
112
- line-height: 1.4;
112
+ line-height: var(--a-font-leading-normal);
113
113
  white-space: pre-wrap;
114
114
  overflow-wrap: anywhere;
115
115
  cursor: text;
@@ -75,7 +75,7 @@ textarea-ui:not([disabled]) [slot="text"]:hover {
75
75
  /* font-family floor — see segment.css rationale. */
76
76
  font-family: var(--textarea-font-family);
77
77
  font-size: var(--textarea-font-size);
78
- line-height: 1.5;
78
+ line-height: var(--a-font-leading-relaxed);
79
79
  white-space: pre-wrap;
80
80
  word-break: break-word;
81
81
  overflow-y: auto;
@@ -42,7 +42,7 @@
42
42
  font-family: var(--time-picker-font-family, var(--a-font-family-ui));
43
43
  font-size: var(--time-picker-font-size);
44
44
  font-variant-numeric: tabular-nums;
45
- line-height: 1.4;
45
+ line-height: var(--a-font-leading-normal);
46
46
  cursor: text;
47
47
  transition:
48
48
  border-color var(--time-picker-duration) var(--time-picker-easing),
@@ -309,7 +309,7 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
309
309
  font-weight: var(--timeline-item-label-weight);
310
310
  font-size: var(--timeline-item-label-size);
311
311
  color: var(--timeline-item-label-fg);
312
- line-height: 1.4;
312
+ line-height: var(--a-font-leading-normal);
313
313
  overflow-wrap: break-word;
314
314
  min-width: 0;
315
315
  }
@@ -323,7 +323,7 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
323
323
  grid-row: 2;
324
324
  color: var(--timeline-item-desc-fg);
325
325
  font-size: var(--timeline-item-desc-size);
326
- line-height: 1.5;
326
+ line-height: var(--a-font-leading-relaxed);
327
327
  margin-top: var(--a-space-0-5);
328
328
  }
329
329
 
@@ -333,7 +333,7 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
333
333
  color: var(--timeline-item-time-fg);
334
334
  font-size: var(--timeline-item-time-size);
335
335
  font-variant-numeric: tabular-nums;
336
- line-height: 1.4;
336
+ line-height: var(--a-font-leading-normal);
337
337
  white-space: nowrap;
338
338
  justify-self: end;
339
339
  }
@@ -356,7 +356,7 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
356
356
  gap: var(--a-space-0-5);
357
357
  color: var(--timeline-item-outcome-fg);
358
358
  font-size: var(--timeline-item-desc-size);
359
- line-height: 1.4;
359
+ line-height: var(--a-font-leading-relaxed);
360
360
  animation: tl-fade var(--timeline-item-duration) var(--timeline-item-easing);
361
361
  }
362
362
 
@@ -59,7 +59,7 @@
59
59
  padding-inline: var(--toc-padding-inline);
60
60
  text-decoration: none;
61
61
  color: inherit;
62
- line-height: 1.4;
62
+ line-height: var(--a-font-leading-normal);
63
63
  border-inline-start: 2px solid var(--toc-rule-inactive);
64
64
  transition:
65
65
  color var(--a-duration-fast) var(--a-easing),
@@ -34,11 +34,8 @@ import { UIElement } from '../../core/element.js';
34
34
  // truth. ADR-0056 (gh#1303): the child's current-state surface is the
35
35
  // declared, reflected `selected` prop below, converging onto <segment-ui>'s
36
36
  // mechanism (yaml → catalog → generative grammar) instead of a private
37
- // stamp. `toggle-group-ui` also stamps the legacy `data-selected` attribute
38
- // on the same element in parallel — DEPRECATED, kept only because external
39
- // CSS may already target it as an undocumented hook; its removal rides the
40
- // 0.9.0 breaking wave. Don't set `selected` directly on an option; drive
41
- // the group's `value` instead.
37
+ // stamp. Don't set `selected` directly on an option; drive the group's
38
+ // `value` instead.
42
39
 
43
40
  export class UIToggleOption extends UIElement {
44
41
  static properties = {
@@ -110,13 +107,8 @@ export class UIToggleGroup extends UIElement {
110
107
  const isSelected = selected.has(optVal);
111
108
  // ADR-0056 (gh#1303): `selected` is the declared, reflected mechanism —
112
109
  // converges onto <segment-ui>'s convention (opt's own render() stamps
113
- // aria-pressed from it). `data-selected` is stamped alongside it only
114
- // as a DEPRECATED parallel hook for pre-existing external CSS; it no
115
- // longer drives styling (toggle-group.css) and its removal rides the
116
- // 0.9.0 breaking wave.
110
+ // aria-pressed from it).
117
111
  opt.selected = isSelected;
118
- if (isSelected) opt.setAttribute('data-selected', '');
119
- else opt.removeAttribute('data-selected');
120
112
  }
121
113
  }
122
114
 
@@ -10,9 +10,7 @@ toggle-option-ui:not([disabled]):hover {
10
10
  }
11
11
 
12
12
  /* ADR-0056 (gh#1303): converged onto <segment-ui>'s declared, reflected
13
- [selected] prop, set by <toggle-group-ui> (toggle-group.class.js). The
14
- parent also stamps the legacy `data-selected` attribute in parallel —
15
- DEPRECATED, no longer styled here; removal rides the 0.9.0 breaking wave. */
13
+ [selected] prop, set by <toggle-group-ui> (toggle-group.class.js). */
16
14
  toggle-option-ui[selected] {
17
15
  --toggle-option-bg: var(--toggle-option-selected-bg);
18
16
  --toggle-option-fg: var(--toggle-option-selected-fg);
@@ -41,8 +41,7 @@ export class UIToggleOption extends UIElement {
41
41
  /** Whether this option is currently selected. Managed by the parent
42
42
  <toggle-group-ui> container (ADR-0056) — don't set directly; the group's
43
43
  `value` is the single source of truth. Converges onto <segment-ui>'s
44
- declared reflected-prop mechanism (was previously a private
45
- `data-selected` stamp with no declared API surface). */
44
+ declared reflected-prop mechanism. */
46
45
  selected: boolean;
47
46
  /** Visible label text. */
48
47
  text: string;
@@ -4,10 +4,7 @@
4
4
  # ADR-0056 (gh#1303): <toggle-option-ui>'s current-state surface converges
5
5
  # onto <segment-ui>'s declared, reflected `[selected]` prop (see
6
6
  # toggle-option.yaml). This container sets that prop, keeping `value` as the
7
- # single source of truth. It also stamps the legacy `data-selected`
8
- # attribute on each option in parallel — DEPRECATED (undocumented external
9
- # CSS may target it); its removal rides the 0.9.0 breaking wave, not this
10
- # change.
7
+ # single source of truth.
11
8
  $schema: ../../../../scripts/schemas/component.yaml.schema.json
12
9
  name: UIToggleGroup
13
10
  tag: toggle-group-ui
@@ -27,7 +27,7 @@
27
27
  "default": ""
28
28
  },
29
29
  "selected": {
30
- "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 (was previously a private\n`data-selected` stamp with no declared API surface).",
30
+ "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.",
31
31
  "type": "boolean",
32
32
  "default": false
33
33
  },
@@ -5,10 +5,7 @@
5
5
  # + is registered alongside UIToggleGroup.
6
6
  #
7
7
  # ADR-0056 (gh#1303): `selected` converges onto <segment-ui>'s declared,
8
- # parent-managed, reflected-prop convention. `<toggle-group-ui>` also stamps
9
- # the legacy `data-selected` attribute in parallel — DEPRECATED, kept only
10
- # because it was an undocumented hook external CSS may already target;
11
- # removal rides the 0.9.0 breaking wave (see toggle-group.yaml + CHANGELOG).
8
+ # parent-managed, reflected-prop convention.
12
9
 
13
10
  # Child component of <toggle-group-ui>. Surface only inside that parent.
14
11
  $schema: ../../../../scripts/schemas/component.yaml.schema.json
@@ -43,8 +40,7 @@ props:
43
40
  Whether this option is currently selected. Managed by the parent
44
41
  <toggle-group-ui> container (ADR-0056) — don't set directly; the group's
45
42
  `value` is the single source of truth. Converges onto <segment-ui>'s
46
- declared reflected-prop mechanism (was previously a private
47
- `data-selected` stamp with no declared API surface).
43
+ declared reflected-prop mechanism.
48
44
  type: boolean
49
45
  default: false
50
46
  reflect: true
@@ -30,7 +30,7 @@
30
30
  color: var(--md-sys-color-neutral-background);
31
31
  font-family: var(--a-font-family);
32
32
  font-size: var(--a-ui-sm);
33
- line-height: 1.4;
33
+ line-height: var(--a-font-leading-normal);
34
34
  border: none;
35
35
  border-radius: var(--a-radius-full);
36
36
  box-shadow: var(--a-shadow-sm);
@@ -112,14 +112,14 @@
112
112
  [data-tour-popover] [data-tour-title] {
113
113
  margin: 0;
114
114
  font-size: var(--a-text-lg);
115
- font-weight: 600;
115
+ font-weight: var(--a-weight-semibold);
116
116
  }
117
117
 
118
118
  [data-tour-popover] [data-tour-body] {
119
119
  margin: 0 0 var(--a-space-4);
120
120
  font-size: var(--a-ui-size);
121
121
  color: var(--md-sys-color-neutral-on-surface);
122
- line-height: 1.5;
122
+ line-height: var(--a-font-leading-relaxed);
123
123
  }
124
124
 
125
125
  [data-tour-popover] [data-tour-footer] {
@@ -141,7 +141,7 @@
141
141
  background: var(--tree-badge-bg, transparent);
142
142
  padding: 0 var(--tree-badge-px, var(--a-space-1));
143
143
  border-radius: var(--tree-badge-radius, var(--a-radius-sm));
144
- line-height: 1;
144
+ line-height: var(--a-font-leading-none);
145
145
  font-variant-numeric: tabular-nums;
146
146
  }
147
147
  [slot="badge"]:empty {
@@ -2028,12 +2028,12 @@
2028
2028
  "description": "Hide value labels"
2029
2029
  },
2030
2030
  {
2031
- "name": "radius",
2031
+ "name": "corner-radius",
2032
2032
  "type": {
2033
2033
  "text": "number"
2034
2034
  },
2035
2035
  "default": "null",
2036
- "description": "Bar corner radius (null = let CSS tokens decide)"
2036
+ "description": "Bar corner radius in px (null = let CSS tokens decide)"
2037
2037
  },
2038
2038
  {
2039
2039
  "name": "size",
@@ -7837,7 +7837,7 @@
7837
7837
  "declarations": [
7838
7838
  {
7839
7839
  "kind": "class",
7840
- "description": "Inline QR code generator — renders a scannable code as inline SVG. Two modes: **A. Auto-encode (default).** Set `[value]` to a string (URL, plain text, share link, 2FA secret). The component encodes the data with the built-in zero-deps QR encoder (byte mode, ECC level configurable, versions 1–10 up to ~150 byte chars) and renders an SVG. **B. Bring-your-own matrix.** Set `[matrix]` to a JSON string of a 2-D 0/1 array (`[[1,0,1,...],[...],...]`). The component renders the supplied matrix directly without invoking its own encoder. Use this when you need versions 11–40, kanji/alphanumeric mode, or any encoder feature beyond the built-in. When both `[value]` and `[matrix]` are set, the matrix wins (BYO override). Output is a single `<svg>` with `viewBox=\"0 0 N N\"`. Crisp-edges rendering preserves the scannable cell boundaries at any size. Sizing is controlled by the `[size]` prop (host CSS-pixel dimension); internal cell size is computed from `size / (matrix-size + 2 · margin)`. ARIA: `role=\"img\"` with `aria-label` (default \"QR code\" or the `[label]` prop).",
7840
+ "description": "Inline QR code generator — renders a scannable code as inline SVG. Two modes: **A. Auto-encode (default).** Set `[value]` to a string (URL, plain text, share link, 2FA secret). The component encodes the data with the built-in zero-deps QR encoder (byte mode, ECC level configurable, versions 1–10 up to ~150 byte chars) and renders an SVG. **B. Bring-your-own matrix.** Set `[matrix]` to a JSON string of a 2-D 0/1 array (`[[1,0,1,...],[...],...]`). The component renders the supplied matrix directly without invoking its own encoder. Use this when you need versions 11–40, kanji/alphanumeric mode, or any encoder feature beyond the built-in. When both `[value]` and `[matrix]` are set, the matrix wins (BYO override). Output is a single `<svg>` with `viewBox=\"0 0 N N\"`. Crisp-edges rendering preserves the scannable cell boundaries at any size. Sizing is controlled by the `[size]` prop (host CSS-pixel dimension); internal cell size is computed from `size / (matrix-size + 2 · quiet-zone)`. ARIA: `role=\"img\"` with `aria-label` (default \"QR code\" or the `[label]` prop).",
7841
7841
  "name": "UIQRCode",
7842
7842
  "tagName": "qr-code-ui",
7843
7843
  "superclass": {
@@ -7865,7 +7865,7 @@
7865
7865
  "text": "number"
7866
7866
  },
7867
7867
  "default": "200",
7868
- "description": "Host display size in CSS pixels (width and height; the SVG is always square). Default 200. Internal cell size is computed from this divided by `matrix-size + 2·margin`."
7868
+ "description": "Host display size in CSS pixels (width and height; the SVG is always square). Default 200. Internal cell size is computed from this divided by `matrix-size + 2·quiet-zone`."
7869
7869
  },
7870
7870
  {
7871
7871
  "name": "error-correction",
@@ -7876,12 +7876,12 @@
7876
7876
  "description": "Error-correction level (auto-encode mode only). `L` (7% recovery), `M` (15%, default), `Q` (25%), `H` (30%). Higher levels recover from more damage at the cost of QR-version size growth."
7877
7877
  },
7878
7878
  {
7879
- "name": "margin",
7879
+ "name": "quiet-zone",
7880
7880
  "type": {
7881
7881
  "text": "number"
7882
7882
  },
7883
7883
  "default": "4",
7884
- "description": "Quiet zone in cells around the QR pattern. QR spec requires a minimum 4-cell margin for reliable scanning; smaller values may not scan on some devices. Default `4`."
7884
+ "description": "Quiet zone in cells around the QR pattern. QR spec requires a minimum 4-cell quiet zone for reliable scanning; smaller values may not scan on some devices. Default `4`. (Renamed from `[margin]` — that name collided with the framework's global `[margin]` Scale attribute; `margin` on `qr-code-ui` now means the global spacing attribute, per ADR-0053.)"
7885
7885
  },
7886
7886
  {
7887
7887
  "name": "color",
@@ -10376,14 +10376,6 @@
10376
10376
  "default": "[]",
10377
10377
  "description": "JS property (set programmatically — `el.data = [...]`) — row records, an array of plain objects keyed to columns[].key. May also be supplied declaratively as a JSON-array `data=\"[…]\"` attribute, hydrated once at connect (gh#288) — the same pattern chart-ui's `data` attribute uses. Custom accessor on the element class, not a reflected attribute."
10378
10378
  },
10379
- {
10380
- "name": "density",
10381
- "type": {
10382
- "text": "string"
10383
- },
10384
- "default": "standard",
10385
- "description": "Controls cell padding and row height. 'compact' for dense data, 'standard' for default"
10386
- },
10387
10379
  {
10388
10380
  "name": "expandable",
10389
10381
  "type": {
@@ -11759,7 +11751,7 @@
11759
11751
  "text": "boolean"
11760
11752
  },
11761
11753
  "default": "false",
11762
- "description": "Whether this option is currently selected. Managed by the parent <toggle-group-ui> container (ADR-0056) — don't set directly; the group's `value` is the single source of truth. Converges onto <segment-ui>'s declared reflected-prop mechanism (was previously a private `data-selected` stamp with no declared API surface)."
11754
+ "description": "Whether this option is currently selected. Managed by the parent <toggle-group-ui> container (ADR-0056) — don't set directly; the group's `value` is the single source of truth. Converges onto <segment-ui>'s declared reflected-prop mechanism."
11763
11755
  }
11764
11756
  ]
11765
11757
  }