@adia-ai/web-components 0.7.27 → 0.8.0

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 (166) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/components/accordion/accordion.css +13 -4
  3. package/components/action-list/action-list.css +3 -3
  4. package/components/agent-artifact/agent-artifact.css +4 -4
  5. package/components/agent-questions/agent-questions.css +8 -8
  6. package/components/agent-reasoning/agent-reasoning.css +6 -6
  7. package/components/agent-trace/agent-trace.css +4 -4
  8. package/components/agent-trace/agent-trace.js +1 -1
  9. package/components/alert/alert.css +16 -16
  10. package/components/avatar/avatar.css +3 -3
  11. package/components/badge/badge.css +32 -32
  12. package/components/blockquote/blockquote.css +1 -1
  13. package/components/breadcrumb/breadcrumb.css +2 -2
  14. package/components/button/button.css +14 -14
  15. package/components/calendar-grid/calendar-grid.a2ui.json +3 -3
  16. package/components/calendar-grid/calendar-grid.css +10 -10
  17. package/components/calendar-grid/calendar-grid.yaml +3 -3
  18. package/components/calendar-picker/calendar-picker.css +11 -11
  19. package/components/canvas/canvas.css +2 -2
  20. package/components/card/card.css +15 -15
  21. package/components/chart/chart.a2ui.json +1 -1
  22. package/components/chart/chart.css +23 -23
  23. package/components/chart/chart.yaml +2 -0
  24. package/components/chart-legend/chart-legend.css +2 -2
  25. package/components/chat-thread/chat-input.css +6 -6
  26. package/components/chat-thread/chat-thread.css +7 -7
  27. package/components/check/check.css +4 -4
  28. package/components/code/code-editor.js +1 -1
  29. package/components/code/code.css +45 -22
  30. package/components/color-picker/color-picker.css +4 -4
  31. package/components/combobox/combobox.css +6 -6
  32. package/components/command/command.class.js +14 -3
  33. package/components/command/command.css +4 -4
  34. package/components/context-menu/context-menu.css +2 -2
  35. package/components/date-range-picker/date-range-picker.a2ui.json +3 -3
  36. package/components/date-range-picker/date-range-picker.css +8 -8
  37. package/components/date-range-picker/date-range-picker.yaml +3 -3
  38. package/components/datetime-picker/datetime-picker.css +6 -6
  39. package/components/demo-toggle/demo-toggle.css +4 -4
  40. package/components/description-list/description-list.css +1 -1
  41. package/components/display-field/display-field.css +2 -2
  42. package/components/divider/divider.css +1 -1
  43. package/components/drawer/drawer.css +7 -7
  44. package/components/embed/embed.css +1 -1
  45. package/components/empty-state/empty-state.css +5 -5
  46. package/components/feed/feed.css +7 -7
  47. package/components/field/field.css +2 -2
  48. package/components/heatmap/heatmap.css +8 -8
  49. package/components/inline-edit/inline-edit.a2ui.json +1 -1
  50. package/components/inline-edit/inline-edit.css +3 -3
  51. package/components/inline-edit/inline-edit.yaml +1 -1
  52. package/components/inline-message/inline-message.css +4 -4
  53. package/components/input/input.css +1 -1
  54. package/components/inspector/inspector.css +1 -1
  55. package/components/integration-card/integration-card.css +3 -3
  56. package/components/kbd/kbd.a2ui.json +4 -0
  57. package/components/kbd/kbd.css +2 -2
  58. package/components/kbd/kbd.d.ts +2 -0
  59. package/components/kbd/kbd.yaml +5 -0
  60. package/components/link/link.css +2 -2
  61. package/components/list/list.css +10 -10
  62. package/components/list-window/list-window.css +2 -2
  63. package/components/mark/mark.css +9 -9
  64. package/components/menu/menu.css +9 -9
  65. package/components/modal/modal.css +4 -4
  66. package/components/nav/nav.css +1 -1
  67. package/components/nav-group/nav-group.css +7 -16
  68. package/components/nav-item/nav-item.css +1 -1
  69. package/components/noodles/noodles.a2ui.json +1 -1
  70. package/components/noodles/noodles.css +3 -3
  71. package/components/noodles/noodles.d.ts +1 -1
  72. package/components/noodles/noodles.yaml +1 -1
  73. package/components/option-card/option-card.css +11 -11
  74. package/components/otp-input/otp-input.css +1 -1
  75. package/components/page/page.css +2 -2
  76. package/components/pane/pane.css +5 -5
  77. package/components/password-strength/password-strength.css +1 -1
  78. package/components/pipeline-status/pipeline-status.css +9 -9
  79. package/components/popover/popover.css +2 -2
  80. package/components/preview/preview.css +14 -3
  81. package/components/progress/progress.a2ui.json +1 -1
  82. package/components/progress/progress.css +1 -1
  83. package/components/progress/progress.d.ts +1 -1
  84. package/components/progress/progress.yaml +1 -1
  85. package/components/progress-row/progress-row.css +2 -2
  86. package/components/radio/radio.css +4 -4
  87. package/components/range/range.css +2 -2
  88. package/components/rating/rating.css +2 -2
  89. package/components/richtext/richtext.class.js +4 -0
  90. package/components/richtext/richtext.css +5 -5
  91. package/components/richtext/richtext.yaml +1 -0
  92. package/components/row/row.css +1 -1
  93. package/components/select/select.css +8 -8
  94. package/components/skip-nav/skip-nav.a2ui.json +2 -2
  95. package/components/skip-nav/skip-nav.css +3 -3
  96. package/components/skip-nav/skip-nav.yaml +2 -2
  97. package/components/slider/slider.css +5 -5
  98. package/components/spinner/spinner.css +2 -2
  99. package/components/spinner/spinner.test.js +4 -2
  100. package/components/stat/stat.css +1 -1
  101. package/components/step-progress/step-progress.a2ui.json +1 -1
  102. package/components/step-progress/step-progress.class.js +1 -1
  103. package/components/step-progress/step-progress.css +2 -2
  104. package/components/step-progress/step-progress.d.ts +1 -1
  105. package/components/step-progress/step-progress.yaml +1 -1
  106. package/components/stepper/stepper.css +22 -22
  107. package/components/stream/stream.css +2 -2
  108. package/components/swatch/swatch.class.js +1 -1
  109. package/components/swatch/swatch.css +11 -11
  110. package/components/swiper/swiper.css +5 -5
  111. package/components/switch/switch.css +5 -5
  112. package/components/table/cell-types.js +32 -3
  113. package/components/table/table.a2ui.json +1 -1
  114. package/components/table/table.css +16 -11
  115. package/components/table/table.test.js +37 -0
  116. package/components/table/table.yaml +2 -0
  117. package/components/table-toolbar/table-toolbar.css +8 -8
  118. package/components/tabs/tabs.css +5 -5
  119. package/components/tag/tag.css +41 -29
  120. package/components/tag/tag.test.js +22 -29
  121. package/components/tags-input/tags-input.a2ui.json +1 -1
  122. package/components/tags-input/tags-input.css +3 -3
  123. package/components/tags-input/tags-input.yaml +5 -3
  124. package/components/text/text.css +4 -4
  125. package/components/textarea/textarea.css +1 -1
  126. package/components/time-picker/time-picker.css +2 -2
  127. package/components/timeline/timeline.css +31 -31
  128. package/components/toast/toast.css +19 -19
  129. package/components/toc/toc.a2ui.json +1 -1
  130. package/components/toc/toc.css +3 -3
  131. package/components/toc/toc.yaml +1 -1
  132. package/components/toggle-group/toggle-group.css +3 -3
  133. package/components/toolbar/toolbar.css +3 -3
  134. package/components/tooltip/tooltip.css +9 -9
  135. package/components/tour/tour.css +3 -3
  136. package/components/tree/tree.css +2 -2
  137. package/components/upload/upload.css +7 -7
  138. package/core/markdown.js +1 -1
  139. package/dist/host.min.css +1 -1
  140. package/dist/host.sheet.js +1 -1
  141. package/dist/theme-provider.min.js +7 -7
  142. package/dist/themes.min.css +1 -1
  143. package/dist/themes.sheet.js +1 -1
  144. package/dist/web-components.min.css +1 -1
  145. package/dist/web-components.min.js +62 -62
  146. package/dist/web-components.sheet.js +1 -1
  147. package/package.json +3 -3
  148. package/styles/api/text.css +1 -1
  149. package/styles/colors/bridges/material-bridge.css +30 -0
  150. package/styles/colors/index.css +19 -1
  151. package/styles/colors/material-static.css +771 -0
  152. package/styles/colors/parameters.css +40 -4
  153. package/styles/colors/primitives-primary.css +89 -0
  154. package/styles/colors/primitives-secondary.css +89 -0
  155. package/styles/colors/primitives-tertiary.css +89 -0
  156. package/styles/colors/primitives.css +3 -1
  157. package/styles/colors/scrims.css +19 -180
  158. package/styles/colors/semantics/aliases.css +25 -11
  159. package/styles/colors/semantics/buckets.css +28 -12
  160. package/styles/colors/semantics/core.css +323 -202
  161. package/styles/colors/semantics/data-viz.css +13 -13
  162. package/styles/colors/semantics/features.css +31 -13
  163. package/styles/colors/surfaces.css +41 -31
  164. package/styles/resets.css +15 -1
  165. package/styles/themes.css +15 -15
  166. package/styles/colors/primitives-accent.css +0 -89
@@ -274,7 +274,7 @@ select-ui [slot="listbox"] {
274
274
  padding: var(--a-space-1);
275
275
  border: 1px solid var(--a-ui-border);
276
276
  border-radius: var(--a-radius);
277
- background: var(--a-canvas-bright);
277
+ background: var(--md-sys-color-neutral-surface-bright);
278
278
  box-shadow: var(--a-shadow-lg);
279
279
  max-height: 15rem;
280
280
  overflow-y: auto;
@@ -356,7 +356,7 @@ select-ui [role="option"] img[data-option-avatar] {
356
356
  /* Separator */
357
357
  select-ui [data-separator] {
358
358
  height: 1px;
359
- background: var(--a-border-subtle);
359
+ background: var(--md-sys-color-neutral-outline-variant);
360
360
  margin: var(--a-space-1) 0;
361
361
  border: none;
362
362
  }
@@ -402,7 +402,7 @@ select-ui [role="group"] [slot="group-label"] {
402
402
 
403
403
  /* Divider between groups — enabled by <select-ui divider>. */
404
404
  select-ui[divider] [role="group"] + [role="group"] {
405
- border-top: 1px solid var(--a-border-subtle);
405
+ border-top: 1px solid var(--md-sys-color-neutral-outline-variant);
406
406
  margin-top: var(--a-space-1);
407
407
  padding-top: var(--a-space-1);
408
408
  }
@@ -426,7 +426,7 @@ select-ui [slot="listbox"] [data-select-all] {
426
426
  align-items: center;
427
427
  justify-content: flex-end;
428
428
  padding: var(--a-space-1);
429
- border-bottom: 1px solid var(--a-border-subtle);
429
+ border-bottom: 1px solid var(--md-sys-color-neutral-outline-variant);
430
430
  margin-bottom: var(--a-space-1);
431
431
  }
432
432
  select-ui [slot="listbox"] [data-select-all-btn] {
@@ -435,7 +435,7 @@ select-ui [slot="listbox"] [data-select-all-btn] {
435
435
  border: none;
436
436
  font: inherit;
437
437
  font-size: var(--a-ui-xs);
438
- color: var(--a-accent);
438
+ color: var(--md-sys-color-primary);
439
439
  cursor: pointer;
440
440
  padding: var(--a-space-1) var(--a-space-2);
441
441
  border-radius: var(--a-radius-sm);
@@ -460,7 +460,7 @@ select-ui [role="option"][data-multi-option] [data-checkbox] {
460
460
  height: 1rem;
461
461
  border: 1px solid var(--a-ui-border);
462
462
  border-radius: var(--a-radius-sm);
463
- background: var(--a-canvas-bright);
463
+ background: var(--md-sys-color-neutral-surface-bright);
464
464
  margin-inline-end: 0; /* row gap already provides spacing */
465
465
  transition:
466
466
  background var(--a-duration-fast) var(--a-easing),
@@ -476,8 +476,8 @@ select-ui [role="option"][data-multi-option] [data-checkbox] icon-ui {
476
476
  transition: color var(--a-duration-fast) var(--a-easing);
477
477
  }
478
478
  select-ui [role="option"][data-multi-option][aria-selected="true"] [data-checkbox] {
479
- background: var(--a-accent);
480
- border-color: var(--a-accent);
479
+ background: var(--md-sys-color-primary);
480
+ border-color: var(--md-sys-color-primary);
481
481
  }
482
482
  select-ui [role="option"][data-multi-option][aria-selected="true"] [data-checkbox] icon-ui {
483
483
  color: var(--a-chrome-light);
@@ -79,11 +79,11 @@
79
79
  "tokens": {
80
80
  "--skip-nav-bg": {
81
81
  "description": "Background of the visible (focused) skip link.",
82
- "default": "var(--a-accent-bg)"
82
+ "default": "var(--a-primary-bg)"
83
83
  },
84
84
  "--skip-nav-fg": {
85
85
  "description": "Foreground of the visible (focused) skip link.",
86
- "default": "var(--a-accent-fg)"
86
+ "default": "var(--md-sys-color-primary-on-primary)"
87
87
  }
88
88
  },
89
89
  "traits": [],
@@ -1,7 +1,7 @@
1
1
  @scope (skip-nav-ui) {
2
2
  :where(:scope) {
3
- --skip-nav-bg: var(--a-accent-bg);
4
- --skip-nav-fg: var(--a-accent-fg);
3
+ --skip-nav-bg: var(--a-primary-bg);
4
+ --skip-nav-fg: var(--md-sys-color-primary-on-primary);
5
5
  }
6
6
 
7
7
  /* Host renders nothing in flow — pure behavioral wrapper. The inner
@@ -48,7 +48,7 @@
48
48
  overflow: visible;
49
49
  clip: auto;
50
50
  clip-path: none;
51
- outline: 2px solid var(--a-accent-bg);
51
+ outline: 2px solid var(--a-primary-bg);
52
52
  outline-offset: 2px;
53
53
  }
54
54
  }
@@ -36,10 +36,10 @@ traits: []
36
36
  tokens:
37
37
  --skip-nav-bg:
38
38
  description: Background of the visible (focused) skip link.
39
- default: var(--a-accent-bg)
39
+ default: var(--a-primary-bg)
40
40
  --skip-nav-fg:
41
41
  description: Foreground of the visible (focused) skip link.
42
- default: var(--a-accent-fg)
42
+ default: var(--md-sys-color-primary-on-primary)
43
43
  a2ui:
44
44
  rules:
45
45
  - rule: 'Place as the FIRST focusable element on the page — inside <body> before any nav / shell chrome. Otherwise keyboard users still tab through the nav before hitting the skip link.'
@@ -95,8 +95,8 @@
95
95
  --slider-track-bg: var(--a-bg-muted);
96
96
  --slider-fill-bg: var(--a-primary-bg);
97
97
  --slider-thumb-bg: var(--a-chrome-light);
98
- --slider-fill-bg-disabled: var(--a-canvas-1-scrim);
99
- --slider-thumb-bg-disabled: var(--a-canvas-2-scrim);
98
+ --slider-fill-bg-disabled: var(--md-sys-color-neutral-scrim-weaker);
99
+ --slider-thumb-bg-disabled: var(--md-sys-color-neutral-scrim-weak);
100
100
 
101
101
  /* ── Typography ── */
102
102
  --slider-font-size: var(--a-ui-size);
@@ -134,7 +134,7 @@
134
134
  }
135
135
 
136
136
  [slot="label"] {
137
- color: var(--a-fg-subtle);
137
+ color: var(--md-sys-color-neutral-on-surface-variant);
138
138
  }
139
139
 
140
140
  [slot="readout"] {
@@ -144,7 +144,7 @@
144
144
  }
145
145
 
146
146
  [slot="value"] {
147
- color: var(--a-fg);
147
+ color: var(--md-sys-color-neutral-on-surface);
148
148
  font-weight: var(--slider-value-weight);
149
149
  font-variant-numeric: tabular-nums;
150
150
  }
@@ -286,7 +286,7 @@
286
286
  }
287
287
  :scope[dual] [slot="value-lower"],
288
288
  :scope[dual] [slot="value-upper"] {
289
- color: var(--a-fg);
289
+ color: var(--md-sys-color-neutral-on-surface);
290
290
  font-weight: var(--slider-value-weight);
291
291
  font-variant-numeric: tabular-nums;
292
292
  }
@@ -45,8 +45,8 @@
45
45
 
46
46
  /* ── Tones (override --spinner-color token) ────────────────────── */
47
47
  :scope[tone="current"] { --spinner-color: currentColor; }
48
- :scope[tone="subtle"] { --spinner-color: var(--a-fg-subtle); }
49
- :scope[tone="accent"] { --spinner-color: var(--a-accent-strong); }
48
+ :scope[tone="subtle"] { --spinner-color: var(--md-sys-color-neutral-on-surface-variant); }
49
+ :scope[tone="accent"] { --spinner-color: var(--a-primary-strong); }
50
50
  :scope[tone="inverse"] { --spinner-color: var(--a-chrome-light); }
51
51
 
52
52
  /* ── Variant: ARC (default) — rotating quarter-circle border ───── */
@@ -191,8 +191,10 @@ describe('spinner-ui — CSS source contract', () => {
191
191
  });
192
192
 
193
193
  it('tone="subtle" / "accent" / "inverse" set --spinner-color via semantic tokens', () => {
194
- expect(SPINNER_CSS).toMatch(/:scope\[tone="subtle"\][^}]*--spinner-color:\s*var\(--a-fg-subtle\)/);
195
- expect(SPINNER_CSS).toMatch(/:scope\[tone="accent"\][^}]*--spinner-color:\s*var\(--a-accent-strong\)/);
194
+ // subtle reads the Material on-surface-variant role since the
195
+ // static-token migration (material-color-bridge-contract.md).
196
+ expect(SPINNER_CSS).toMatch(/:scope\[tone="subtle"\][^}]*--spinner-color:\s*var\(--md-sys-color-neutral-on-surface-variant\)/);
197
+ expect(SPINNER_CSS).toMatch(/:scope\[tone="accent"\][^}]*--spinner-color:\s*var\(--a-primary-strong\)/);
196
198
  expect(SPINNER_CSS).toMatch(/:scope\[tone="inverse"\][^}]*--spinner-color:\s*var\(--a-chrome-light\)/);
197
199
  });
198
200
 
@@ -6,7 +6,7 @@
6
6
  --stat-value-weight: var(--a-weight-bold);
7
7
  --stat-value-fg: var(--a-fg-strong);
8
8
  --stat-label-size: var(--a-ui-size);
9
- --stat-label-fg: var(--a-fg);
9
+ --stat-label-fg: var(--md-sys-color-neutral-on-surface);
10
10
  --stat-change-size: var(--a-ui-size);
11
11
  --stat-up-fg: var(--a-success-bg);
12
12
  --stat-down-fg: var(--a-danger-bg);
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://adiaui.dev/a2ui/v0_9/components/StepProgress.json",
4
4
  "title": "StepProgress",
5
- "description": "Discrete-dash step-progress indicator. One <span> dash per step in\n[total]; the first [value] dashes are filled with --a-accent. Used\nin multi-step flows (registration, onboarding, wizards). Replaces\nthe bespoke `[data-onb-progress]` + `[data-reg-progress]` markup\nthat lived in onboarding.css + registration.css with a single\nprimitive.\n",
5
+ "description": "Discrete-dash step-progress indicator. One <span> dash per step in\n[total]; the first [value] dashes are filled with --md-sys-color-primary. Used\nin multi-step flows (registration, onboarding, wizards). Replaces\nthe bespoke `[data-onb-progress]` + `[data-reg-progress]` markup\nthat lived in onboarding.css + registration.css with a single\nprimitive.\n",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -18,7 +18,7 @@
18
18
  *
19
19
  * Discrete-dash step progress indicator. One dash per step in the
20
20
  * total; the first `value` dashes carry [data-active] and paint with
21
- * --a-accent. Used in registration + onboarding flows; replaces the
21
+ * --a-primary. Used in registration + onboarding flows; replaces the
22
22
  * bespoke `[data-onb-progress]` / `[data-reg-progress]` markup.
23
23
  *
24
24
  * Primitive shape (per ROADMAP § Done):
@@ -9,8 +9,8 @@
9
9
  --step-progress-track-gap: var(--a-space-1);
10
10
  --step-progress-dash-h: 4px;
11
11
  --step-progress-dash-radius: var(--a-radius-full);
12
- --step-progress-dash-bg: var(--a-border-subtle);
13
- --step-progress-dash-bg-active: var(--a-accent);
12
+ --step-progress-dash-bg: var(--md-sys-color-neutral-outline-variant);
13
+ --step-progress-dash-bg-active: var(--md-sys-color-primary);
14
14
  --step-progress-caption-fg: var(--a-fg-muted);
15
15
  --step-progress-caption-size: var(--a-ui-sm);
16
16
 
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * `<step-progress-ui>` — Discrete-dash step-progress indicator. One <span> dash per step in
3
- [total]; the first [value] dashes are filled with --a-accent. Used
3
+ [total]; the first [value] dashes are filled with --md-sys-color-primary. Used
4
4
  in multi-step flows (registration, onboarding, wizards). Replaces
5
5
  the bespoke `[data-onb-progress]` + `[data-reg-progress]` markup
6
6
  that lived in onboarding.css + registration.css with a single
@@ -7,7 +7,7 @@ category: feedback
7
7
  version: 1
8
8
  description: |
9
9
  Discrete-dash step-progress indicator. One <span> dash per step in
10
- [total]; the first [value] dashes are filled with --a-accent. Used
10
+ [total]; the first [value] dashes are filled with --md-sys-color-primary. Used
11
11
  in multi-step flows (registration, onboarding, wizards). Replaces
12
12
  the bespoke `[data-onb-progress]` + `[data-reg-progress]` markup
13
13
  that lived in onboarding.css + registration.css with a single
@@ -13,23 +13,23 @@
13
13
  :where(:scope) {
14
14
  /* ── Circle ── */
15
15
  --stepper-size: 2rem;
16
- --stepper-bg: var(--a-bg);
17
- --stepper-border: var(--a-border);
16
+ --stepper-bg: var(--md-sys-color-neutral-background);
17
+ --stepper-border: var(--md-sys-color-neutral-outline);
18
18
  --stepper-fg: var(--a-fg-muted);
19
19
  --stepper-font: var(--a-ui-sm);
20
20
  --stepper-weight: var(--a-weight-medium);
21
21
  --stepper-border-size: 2px;
22
22
 
23
- --stepper-bg-active: var(--a-bg);
24
- --stepper-border-active: var(--a-accent);
25
- --stepper-fg-active: var(--a-accent);
23
+ --stepper-bg-active: var(--md-sys-color-neutral-background);
24
+ --stepper-border-active: var(--md-sys-color-primary);
25
+ --stepper-fg-active: var(--md-sys-color-primary);
26
26
 
27
- --stepper-bg-done: var(--a-accent);
28
- --stepper-border-done: var(--a-accent);
29
- --stepper-fg-done: var(--a-accent-fg);
27
+ --stepper-bg-done: var(--md-sys-color-primary);
28
+ --stepper-border-done: var(--md-sys-color-primary);
29
+ --stepper-fg-done: var(--md-sys-color-primary-on-primary);
30
30
 
31
- --stepper-line: var(--a-border-subtle);
32
- --stepper-line-done: var(--a-accent);
31
+ --stepper-line: var(--md-sys-color-neutral-outline-variant);
32
+ --stepper-line-done: var(--md-sys-color-primary);
33
33
  --stepper-line-size: 2px;
34
34
 
35
35
  /* ── Layout ──
@@ -69,23 +69,23 @@
69
69
  co-located item legitimately reads parent tokens (the same
70
70
  scope pattern as menu-item-ui inside menu-ui's popover). */
71
71
  --stepper-item-size: var(--stepper-size, 2rem);
72
- --stepper-item-bg: var(--stepper-bg, var(--a-bg));
73
- --stepper-item-border: var(--stepper-border, var(--a-border));
72
+ --stepper-item-bg: var(--stepper-bg, var(--md-sys-color-neutral-background));
73
+ --stepper-item-border: var(--stepper-border, var(--md-sys-color-neutral-outline));
74
74
  --stepper-item-fg: var(--stepper-fg, var(--a-fg-muted));
75
75
  --stepper-item-font: var(--stepper-font, var(--a-ui-sm));
76
76
  --stepper-item-weight: var(--stepper-weight, var(--a-weight-medium));
77
77
  --stepper-item-border-size: var(--stepper-border-size, 2px);
78
78
 
79
- --stepper-item-bg-active: var(--stepper-bg-active, var(--a-bg));
80
- --stepper-item-border-active: var(--stepper-border-active, var(--a-accent));
81
- --stepper-item-fg-active: var(--stepper-fg-active, var(--a-accent));
79
+ --stepper-item-bg-active: var(--stepper-bg-active, var(--md-sys-color-neutral-background));
80
+ --stepper-item-border-active: var(--stepper-border-active, var(--md-sys-color-primary));
81
+ --stepper-item-fg-active: var(--stepper-fg-active, var(--md-sys-color-primary));
82
82
 
83
- --stepper-item-bg-done: var(--stepper-bg-done, var(--a-accent));
84
- --stepper-item-border-done: var(--stepper-border-done, var(--a-accent));
85
- --stepper-item-fg-done: var(--stepper-fg-done, var(--a-accent-fg));
83
+ --stepper-item-bg-done: var(--stepper-bg-done, var(--md-sys-color-primary));
84
+ --stepper-item-border-done: var(--stepper-border-done, var(--md-sys-color-primary));
85
+ --stepper-item-fg-done: var(--stepper-fg-done, var(--md-sys-color-primary-on-primary));
86
86
 
87
- --stepper-item-line: var(--stepper-line, var(--a-border-subtle));
88
- --stepper-item-line-done: var(--stepper-line-done, var(--a-accent));
87
+ --stepper-item-line: var(--stepper-line, var(--md-sys-color-neutral-outline-variant));
88
+ --stepper-item-line-done: var(--stepper-line-done, var(--md-sys-color-primary));
89
89
  --stepper-item-line-size: var(--stepper-line-size, 2px);
90
90
 
91
91
  --stepper-item-radius-full: var(--a-radius-full);
@@ -98,9 +98,9 @@
98
98
 
99
99
  --stepper-item-label-weight: var(--a-weight-medium);
100
100
  --stepper-item-label-size: var(--a-ui-size);
101
- --stepper-item-label-fg: var(--a-fg);
101
+ --stepper-item-label-fg: var(--md-sys-color-neutral-on-surface);
102
102
  --stepper-item-pending-fg: var(--a-fg-muted);
103
- --stepper-item-desc-fg: var(--a-fg-subtle);
103
+ --stepper-item-desc-fg: var(--md-sys-color-neutral-on-surface-variant);
104
104
  --stepper-item-desc-size: var(--a-ui-sm);
105
105
 
106
106
  --stepper-item-icon-size: 0.625rem;
@@ -1,10 +1,10 @@
1
1
  @scope (stream-ui) {
2
2
  :where(:scope) {
3
- --stream-fg: var(--a-fg);
3
+ --stream-fg: var(--md-sys-color-neutral-on-surface);
4
4
  --stream-font-size: var(--a-body-size);
5
5
  --stream-font-family: var(--a-font-family);
6
6
  --stream-leading: var(--a-body-leading);
7
- --stream-cursor-color: var(--a-accent-bg);
7
+ --stream-cursor-color: var(--a-primary-bg);
8
8
  --stream-blink-duration: 0.6s;
9
9
  }
10
10
 
@@ -540,7 +540,7 @@ export class UISwatch extends UIElement {
540
540
  }
541
541
  // Resolve the actual rendered color. For var(...) refs the inline
542
542
  // [color] attr is what was set; we read from computed style so that
543
- // CSS-resolved tokens (e.g. var(--a-accent)) get their final value.
543
+ // CSS-resolved tokens (e.g. var(--md-sys-color-primary)) get their final value.
544
544
  const probe = this.color || getComputedStyle(this).getPropertyValue('--swatch-color').trim();
545
545
  if (probe === this.#lastColorForContrast) return;
546
546
  this.#lastColorForContrast = probe;
@@ -18,7 +18,7 @@
18
18
  <swatch-ui> still renders something visible; consumers usually set
19
19
  --swatch-color via [color] attr or inline style. */
20
20
  --swatch-color: var(--a-data-0);
21
- --swatch-label-fg: var(--a-fg-subtle);
21
+ --swatch-label-fg: var(--md-sys-color-neutral-on-surface-variant);
22
22
 
23
23
  /* ── Shape ── */
24
24
  --swatch-radius-block: var(--a-radius-sm);
@@ -32,7 +32,7 @@
32
32
  --swatch-label-step-size: 10px;
33
33
  --swatch-label-step-mt: 4px;
34
34
  --swatch-detail-size: var(--a-ui-xs);
35
- --swatch-detail-fg: var(--a-fg-subtle);
35
+ --swatch-detail-fg: var(--md-sys-color-neutral-on-surface-variant);
36
36
 
37
37
  /* ── Badge ── */
38
38
  --swatch-badge-size: var(--a-ui-xs);
@@ -44,11 +44,11 @@
44
44
  /* ── Copy button ── */
45
45
  --swatch-copy-size: var(--a-space-3);
46
46
  --swatch-copy-fg: var(--a-fg-muted);
47
- --swatch-copy-fg-ok: var(--a-success);
48
- --swatch-copy-fg-fail: var(--a-warning);
47
+ --swatch-copy-fg-ok: var(--md-sys-color-success);
48
+ --swatch-copy-fg-fail: var(--md-sys-color-warning);
49
49
 
50
50
  /* ── Selectable ring ── */
51
- --swatch-select-ring: var(--a-accent);
51
+ --swatch-select-ring: var(--md-sys-color-primary);
52
52
  --swatch-select-ring-width: 2px;
53
53
  }
54
54
 
@@ -238,17 +238,17 @@
238
238
  font-size: var(--swatch-badge-size);
239
239
  line-height: 1;
240
240
  border-radius: var(--swatch-badge-radius);
241
- box-shadow: 0 0 0 1px color-mix(in oklab, var(--a-border-subtle) 60%, transparent);
241
+ box-shadow: 0 0 0 1px color-mix(in oklab, var(--md-sys-color-neutral-outline-variant) 60%, transparent);
242
242
  }
243
243
 
244
244
  /* Make sure the badge has a positioning context — the tile holds it. */
245
245
  :scope { position: relative; }
246
246
 
247
247
  /* Badge variants — symbol color encodes semantic */
248
- :scope > [data-badge] > [data-badge-variant="out-of-gamut"] { color: var(--a-warning); }
249
- :scope > [data-badge] > [data-badge-variant="p3-only"] { color: var(--a-info); }
250
- :scope > [data-badge] > [data-badge-variant="apca-pass"] { color: var(--a-success); }
251
- :scope > [data-badge] > [data-badge-variant="apca-fail"] { color: var(--a-danger); }
248
+ :scope > [data-badge] > [data-badge-variant="out-of-gamut"] { color: var(--md-sys-color-warning); }
249
+ :scope > [data-badge] > [data-badge-variant="p3-only"] { color: var(--md-sys-color-info); }
250
+ :scope > [data-badge] > [data-badge-variant="apca-pass"] { color: var(--md-sys-color-success); }
251
+ :scope > [data-badge] > [data-badge-variant="apca-fail"] { color: var(--md-sys-color-danger); }
252
252
 
253
253
  /* ═══════ Auto-contrast label color ═══════
254
254
  When [auto-contrast] is set, JS computes the swatch's OKLab L and
@@ -303,7 +303,7 @@
303
303
  border-radius: var(--a-radius-xs);
304
304
  transition: color var(--a-duration-fast) var(--a-easing-out), background var(--a-duration-fast) var(--a-easing-out);
305
305
  }
306
- :scope > [data-copy]:hover { color: var(--a-fg); background: var(--a-bg-muted); }
306
+ :scope > [data-copy]:hover { color: var(--md-sys-color-neutral-on-surface); background: var(--a-bg-muted); }
307
307
  :scope > [data-copy]:focus-visible {
308
308
  outline: var(--swatch-select-ring-width) solid var(--swatch-select-ring);
309
309
  outline-offset: 1px;
@@ -34,8 +34,8 @@
34
34
  the row. The hitbox stays at 1rem; only the visible circle grows. */
35
35
  --swiper-dot-size-active: calc(var(--swiper-dot-size) + var(--a-space-1));
36
36
  --swiper-dot-gap: var(--a-space-2);
37
- --swiper-dot-bg: var(--a-border);
38
- --swiper-dot-bg-active: var(--a-fg);
37
+ --swiper-dot-bg: var(--md-sys-color-neutral-outline);
38
+ --swiper-dot-bg-active: var(--md-sys-color-neutral-on-surface);
39
39
  --swiper-dot-radius: var(--a-radius-full);
40
40
 
41
41
  /* ── Host vertical rhythm ── */
@@ -52,7 +52,7 @@
52
52
  --swiper-btn-size: 3rem;
53
53
  --swiper-btn-bg: transparent;
54
54
  --swiper-btn-bg-hover: var(--a-bg-muted);
55
- --swiper-btn-fg: var(--a-fg);
55
+ --swiper-btn-fg: var(--md-sys-color-neutral-on-surface);
56
56
  --swiper-btn-radius: var(--a-radius-full);
57
57
  --swiper-btn-shadow: none;
58
58
  --swiper-btn-offset: var(--a-space-2);
@@ -245,7 +245,7 @@
245
245
  :scope[chrome="toolbar"] > [data-swiper-head] > [data-swiper-label] {
246
246
  font-size: var(--a-ui-md);
247
247
  font-weight: var(--a-weight-semibold);
248
- color: var(--a-fg);
248
+ color: var(--md-sys-color-neutral-on-surface);
249
249
  }
250
250
 
251
251
  :scope[chrome="toolbar"] > [data-swiper-head] > [data-swiper-paddles] {
@@ -255,7 +255,7 @@
255
255
 
256
256
  :scope[chrome="toolbar"] > [data-swiper-foot] > [data-swiper-counter] {
257
257
  font-size: var(--a-ui-sm);
258
- color: var(--a-fg-subtle);
258
+ color: var(--md-sys-color-neutral-on-surface-variant);
259
259
  font-variant-numeric: tabular-nums;
260
260
  }
261
261
 
@@ -29,8 +29,8 @@ switch-ui[checked] [slot="thumb"] {
29
29
 
30
30
  /* ── Colors ── */
31
31
  --switch-track-bg-hover: var(--a-bg-muted);
32
- --switch-track-bg-checked-hover: var(--a-primary-hover);
33
- --switch-track-border-checked-hover: var(--a-primary-hover);
32
+ --switch-track-bg-checked-hover: var(--md-sys-color-primary-hover);
33
+ --switch-track-border-checked-hover: var(--md-sys-color-primary-hover);
34
34
  --switch-thumb-shadow: var(--a-shadow-sm);
35
35
 
36
36
  /* ── Transition ── */
@@ -45,11 +45,11 @@ switch-ui[checked] [slot="thumb"] {
45
45
  --switch-track-width: calc(var(--a-toggle-size) * 1.8);
46
46
  --switch-track-bg: var(--a-ui-bg);
47
47
  --switch-track-border: var(--a-ui-border);
48
- --switch-track-border-hover: var(--a-fg-subtle);
48
+ --switch-track-border-hover: var(--md-sys-color-neutral-on-surface-variant);
49
49
 
50
50
  /* ── Track: checked ── */
51
- --switch-track-bg-checked: var(--a-primary);
52
- --switch-track-border-checked: var(--a-primary);
51
+ --switch-track-bg-checked: var(--md-sys-color-primary);
52
+ --switch-track-border-checked: var(--md-sys-color-primary);
53
53
 
54
54
  /* ── Thumb ── (derived from track; inset accounts for border + visual gap) */
55
55
  --switch-thumb-inset: 2px;
@@ -1,5 +1,7 @@
1
1
  // cell-types.js - Built-in cell type registry for table-ui
2
2
 
3
+ import { inline } from '../../core/markdown.js';
4
+
3
5
  const cellTypes = {};
4
6
 
5
7
  function registerCellType(name, config) {
@@ -216,7 +218,7 @@ registerCellType('link', {
216
218
  if (!el) {
217
219
  cell.textContent = '';
218
220
  el = document.createElement('a');
219
- el.style.color = 'var(--table-accent, var(--a-primary))';
221
+ el.style.color = 'var(--table-accent, var(--md-sys-color-primary))';
220
222
  el.style.textDecoration = 'none';
221
223
  cell.appendChild(el);
222
224
  }
@@ -233,7 +235,34 @@ registerCellType('link', {
233
235
  sortFn: 'alphanumeric',
234
236
  });
235
237
 
236
- // 11. progress
238
+ // 11. markdown — TKT-0008: cells with inline `code`/**bold**/*italic*/
239
+ // [link](href) content the docs-transpiler couldn't express as a plain
240
+ // string (table.yaml {columns,data} contract carries plain values; this
241
+ // is the one escape hatch for INLINE-safe rich text, reusing the same
242
+ // inline() converter core/markdown.js already round-trips against
243
+ // scripts/build/lib/docs-transpiler.mjs's convertInline() — the two are
244
+ // paired encode/decode halves of one contract, not independent parsers).
245
+ // Block-level content (nested tables, component tags, colspan/rowspan)
246
+ // stays out of scope; those still fall back to the preserved-HTML Code
247
+ // panel synthesizeTable already emits.
248
+ registerCellType('markdown', {
249
+ render(value, row, cell) {
250
+ let s = cell.firstElementChild;
251
+ if (!s || s.tagName !== 'SPAN') {
252
+ cell.replaceChildren();
253
+ s = cell.appendChild(document.createElement('span'));
254
+ }
255
+ s.innerHTML = inline(String(value ?? ''));
256
+ cell.title = s.textContent;
257
+ },
258
+ format(value) {
259
+ return String(value ?? '');
260
+ },
261
+ align: 'left',
262
+ sortFn: 'alphanumeric',
263
+ });
264
+
265
+ // 12. progress
237
266
  registerCellType('progress', {
238
267
  render(value, row, cell) {
239
268
  let wrapper = cell.querySelector('row-ui');
@@ -262,7 +291,7 @@ registerCellType('progress', {
262
291
  sortFn: 'numeric',
263
292
  });
264
293
 
265
- // 12. actions
294
+ // 13. actions
266
295
  registerCellType('actions', {
267
296
  render(value, row, cell, meta) {
268
297
  const actions = meta?.actions || [];
@@ -22,7 +22,7 @@
22
22
  },
23
23
  "data": {
24
24
  "description": "Row records. Array of plain objects keyed to columns[].key.",
25
- "$ref": "common_types.json#/$defs/DynamicStringList"
25
+ "$ref": "common_types.json#/$defs/DynamicObjectList"
26
26
  },
27
27
  "density": {
28
28
  "description": "Controls cell padding and row height. 'compact' for dense data, 'standard' for default spacing, 'comfortable' for spacious rows.",
@@ -9,23 +9,28 @@
9
9
  --table-heading-fg: var(--a-fg-muted);
10
10
  --table-heading-bg: transparent;
11
11
 
12
- --table-fg: var(--a-fg);
12
+ --table-fg: var(--md-sys-color-neutral-on-surface);
13
13
  --table-fg-hover: var(--a-fg-strong);
14
14
  --table-fg-secondary: var(--a-fg-muted);
15
- --table-border: var(--a-border-subtle);
16
- --table-border-strong: var(--a-border);
15
+ --table-border: var(--md-sys-color-neutral-outline-variant);
16
+ --table-border-strong: var(--md-sys-color-neutral-outline);
17
17
  --table-py: var(--a-space-3);
18
18
  --table-px: var(--a-space-4);
19
19
 
20
20
  --table-row-bg: transparent;
21
- --table-row-bg-hover: var(--a-bg-hover);
21
+ /* container-low, not the generic --a-bg-hover state-layer token
22
+ (TKT-0020) — --a-bg-hover / --md-sys-color-neutral-hover is tuned
23
+ for small interactive targets (buttons); the same tone across a
24
+ full-width row reads too heavy. container-low is the lighter,
25
+ large-surface-appropriate tint. */
26
+ --table-row-bg-hover: var(--md-sys-color-neutral-container-low);
22
27
  --table-row-bg-selected: var(--a-bg-selected);
23
28
  --table-row-bg-striped: var(--a-bg-subtle);
24
29
 
25
30
  --table-sort-fg: var(--a-fg-muted);
26
- --table-accent: var(--a-primary);
31
+ --table-accent: var(--md-sys-color-primary);
27
32
  --table-fg-disabled: var(--a-ui-text-disabled);
28
- --table-bg: var(--a-bg);
33
+ --table-bg: var(--md-sys-color-neutral-background);
29
34
  /* No default rounding — table-ui composes inside card-ui / drawer-ui
30
35
  which own the surface rounding; doubly-rounded corners (table inside
31
36
  card) look broken. Override per-instance via `--table-radius: …` if
@@ -40,7 +45,7 @@
40
45
  /* ── Filter popover ── */
41
46
  --table-filter-bg: var(--a-canvas);
42
47
  --table-filter-fg: var(--a-canvas-text);
43
- --table-filter-border: var(--a-border);
48
+ --table-filter-border: var(--md-sys-color-neutral-outline);
44
49
  --table-filter-radius: var(--a-radius-md);
45
50
  --table-filter-inset: var(--a-space-2);
46
51
  --table-filter-gap: var(--a-space-1);
@@ -50,11 +55,11 @@
50
55
  --table-filter-input-radius: var(--a-radius-sm);
51
56
  --table-filter-input-size: var(--a-ui-tiny);
52
57
  --table-filter-btn-px: var(--a-space-1);
53
- --table-filter-clear-fg: var(--a-accent);
58
+ --table-filter-clear-fg: var(--md-sys-color-primary);
54
59
 
55
60
  /* ── Chips / filter bar ── */
56
61
  --table-chip-bar-bg: var(--a-canvas-subtle);
57
- --table-chip-bar-border: var(--a-border);
62
+ --table-chip-bar-border: var(--md-sys-color-neutral-outline);
58
63
  --table-chip-bar-gap: var(--a-space-1);
59
64
  --table-chip-bar-py: var(--a-space-1);
60
65
  --table-chip-bar-px: var(--a-space-2);
@@ -62,7 +67,7 @@
62
67
 
63
68
  /* ── Detail / expansion row ── */
64
69
  --table-detail-bg: var(--a-canvas-subtle);
65
- --table-detail-border: var(--a-border);
70
+ --table-detail-border: var(--md-sys-color-neutral-outline);
66
71
  --table-detail-py: var(--a-space-3);
67
72
  --table-detail-px: var(--a-space-4);
68
73
 
@@ -71,7 +76,7 @@
71
76
  --table-pinned-shadow: var(--a-chrome-shadow-soft);
72
77
 
73
78
  /* ── Aggregation row ── */
74
- --table-agg-border: var(--a-border);
79
+ --table-agg-border: var(--md-sys-color-neutral-outline);
75
80
  --table-agg-size: var(--a-ui-tiny);
76
81
  --table-agg-py: var(--a-space-2);
77
82
  --table-agg-px: var(--a-space-3);