@adia-ai/web-components 0.7.28 → 0.8.1

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 (158) hide show
  1. package/CHANGELOG.md +29 -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.css +23 -23
  22. package/components/chart-legend/chart-legend.css +2 -2
  23. package/components/chat-thread/chat-input.css +6 -6
  24. package/components/chat-thread/chat-thread.css +7 -7
  25. package/components/check/check.css +4 -4
  26. package/components/code/code-editor.js +1 -1
  27. package/components/code/code.css +45 -22
  28. package/components/color-picker/color-picker.css +4 -4
  29. package/components/combobox/combobox.css +6 -6
  30. package/components/command/command.class.js +14 -3
  31. package/components/command/command.css +4 -4
  32. package/components/context-menu/context-menu.css +2 -2
  33. package/components/date-range-picker/date-range-picker.a2ui.json +3 -3
  34. package/components/date-range-picker/date-range-picker.css +8 -8
  35. package/components/date-range-picker/date-range-picker.yaml +3 -3
  36. package/components/datetime-picker/datetime-picker.css +6 -6
  37. package/components/demo-toggle/demo-toggle.css +4 -4
  38. package/components/description-list/description-list.css +1 -1
  39. package/components/display-field/display-field.css +2 -2
  40. package/components/divider/divider.css +1 -1
  41. package/components/drawer/drawer.css +7 -7
  42. package/components/embed/embed.css +1 -1
  43. package/components/empty-state/empty-state.css +5 -5
  44. package/components/feed/feed.css +7 -7
  45. package/components/field/field.css +2 -2
  46. package/components/heatmap/heatmap.css +8 -8
  47. package/components/inline-edit/inline-edit.a2ui.json +1 -1
  48. package/components/inline-edit/inline-edit.css +3 -3
  49. package/components/inline-edit/inline-edit.yaml +1 -1
  50. package/components/inline-message/inline-message.css +4 -4
  51. package/components/input/input.css +1 -1
  52. package/components/inspector/inspector.css +1 -1
  53. package/components/integration-card/integration-card.css +3 -3
  54. package/components/kbd/kbd.css +2 -2
  55. package/components/link/link.css +2 -2
  56. package/components/list/list.css +10 -10
  57. package/components/list-window/list-window.css +2 -2
  58. package/components/mark/mark.css +9 -9
  59. package/components/menu/menu.css +9 -9
  60. package/components/modal/modal.css +4 -4
  61. package/components/nav/nav.css +1 -1
  62. package/components/nav-group/nav-group.css +7 -16
  63. package/components/nav-item/nav-item.css +1 -1
  64. package/components/noodles/noodles.a2ui.json +1 -1
  65. package/components/noodles/noodles.css +3 -3
  66. package/components/noodles/noodles.d.ts +1 -1
  67. package/components/noodles/noodles.yaml +1 -1
  68. package/components/option-card/option-card.css +11 -11
  69. package/components/otp-input/otp-input.css +1 -1
  70. package/components/page/page.css +2 -2
  71. package/components/pane/pane.css +5 -5
  72. package/components/password-strength/password-strength.css +1 -1
  73. package/components/pipeline-status/pipeline-status.css +9 -9
  74. package/components/popover/popover.css +2 -2
  75. package/components/preview/preview.css +14 -3
  76. package/components/progress/progress.a2ui.json +1 -1
  77. package/components/progress/progress.css +1 -1
  78. package/components/progress/progress.d.ts +1 -1
  79. package/components/progress/progress.yaml +1 -1
  80. package/components/progress-row/progress-row.css +2 -2
  81. package/components/radio/radio.css +4 -4
  82. package/components/range/range.css +2 -2
  83. package/components/rating/rating.css +2 -2
  84. package/components/richtext/richtext.class.js +4 -0
  85. package/components/richtext/richtext.css +5 -5
  86. package/components/richtext/richtext.yaml +1 -0
  87. package/components/row/row.css +1 -1
  88. package/components/select/select.css +8 -8
  89. package/components/skip-nav/skip-nav.a2ui.json +2 -2
  90. package/components/skip-nav/skip-nav.css +3 -3
  91. package/components/skip-nav/skip-nav.yaml +2 -2
  92. package/components/slider/slider.css +5 -5
  93. package/components/spinner/spinner.css +2 -2
  94. package/components/spinner/spinner.test.js +4 -2
  95. package/components/stat/stat.css +1 -1
  96. package/components/step-progress/step-progress.a2ui.json +1 -1
  97. package/components/step-progress/step-progress.class.js +1 -1
  98. package/components/step-progress/step-progress.css +2 -2
  99. package/components/step-progress/step-progress.d.ts +1 -1
  100. package/components/step-progress/step-progress.yaml +1 -1
  101. package/components/stepper/stepper.css +22 -22
  102. package/components/stream/stream.css +2 -2
  103. package/components/swatch/swatch.class.js +1 -1
  104. package/components/swatch/swatch.css +11 -11
  105. package/components/swiper/swiper.css +5 -5
  106. package/components/switch/switch.css +5 -5
  107. package/components/table/cell-types.js +1 -1
  108. package/components/table/table.css +16 -11
  109. package/components/table-toolbar/table-toolbar.css +8 -8
  110. package/components/tabs/tabs.css +5 -5
  111. package/components/tag/tag.css +41 -29
  112. package/components/tag/tag.test.js +22 -29
  113. package/components/tags-input/tags-input.a2ui.json +2 -2
  114. package/components/tags-input/tags-input.class.js +93 -20
  115. package/components/tags-input/tags-input.css +3 -3
  116. package/components/tags-input/tags-input.test.js +109 -0
  117. package/components/tags-input/tags-input.yaml +18 -4
  118. package/components/text/text.css +4 -4
  119. package/components/textarea/textarea.css +1 -1
  120. package/components/time-picker/time-picker.css +2 -2
  121. package/components/timeline/timeline.css +31 -31
  122. package/components/toast/toast.css +19 -19
  123. package/components/toc/toc.a2ui.json +1 -1
  124. package/components/toc/toc.css +3 -3
  125. package/components/toc/toc.yaml +1 -1
  126. package/components/toggle-group/toggle-group.css +3 -3
  127. package/components/toolbar/toolbar.css +3 -3
  128. package/components/tooltip/tooltip.css +9 -9
  129. package/components/tour/tour.css +3 -3
  130. package/components/tree/tree.css +2 -2
  131. package/components/upload/upload.css +7 -7
  132. package/dist/host.min.css +1 -1
  133. package/dist/host.sheet.js +1 -1
  134. package/dist/theme-provider.min.js +7 -7
  135. package/dist/themes.min.css +1 -1
  136. package/dist/themes.sheet.js +1 -1
  137. package/dist/web-components.min.css +1 -1
  138. package/dist/web-components.min.js +41 -41
  139. package/dist/web-components.sheet.js +1 -1
  140. package/package.json +3 -3
  141. package/styles/api/text.css +1 -1
  142. package/styles/colors/bridges/material-bridge.css +30 -0
  143. package/styles/colors/index.css +19 -1
  144. package/styles/colors/material-static.css +771 -0
  145. package/styles/colors/parameters.css +40 -4
  146. package/styles/colors/primitives-primary.css +89 -0
  147. package/styles/colors/primitives-secondary.css +89 -0
  148. package/styles/colors/primitives-tertiary.css +89 -0
  149. package/styles/colors/primitives.css +3 -1
  150. package/styles/colors/scrims.css +19 -180
  151. package/styles/colors/semantics/aliases.css +25 -11
  152. package/styles/colors/semantics/buckets.css +28 -12
  153. package/styles/colors/semantics/core.css +330 -202
  154. package/styles/colors/semantics/data-viz.css +13 -13
  155. package/styles/colors/semantics/features.css +31 -13
  156. package/styles/colors/surfaces.css +41 -31
  157. package/styles/themes.css +15 -15
  158. package/styles/colors/primitives-accent.css +0 -89
@@ -7,7 +7,7 @@
7
7
  --calendar-picker-font-size: var(--a-ui-size);
8
8
  --calendar-picker-label-size: var(--a-label-size);
9
9
  --calendar-picker-label-fg: var(--a-label-color);
10
- --calendar-picker-label-fg-focus: var(--a-fg-subtle);
10
+ --calendar-picker-label-fg-focus: var(--md-sys-color-neutral-on-surface-variant);
11
11
 
12
12
  /* Trigger */
13
13
  --calendar-picker-trigger-height: var(--a-size);
@@ -29,7 +29,7 @@
29
29
 
30
30
  /* Popover */
31
31
  --calendar-picker-popover-bg: var(--a-bg-subtle);
32
- --calendar-picker-popover-border: var(--a-border-subtle);
32
+ --calendar-picker-popover-border: var(--md-sys-color-neutral-outline-variant);
33
33
  --calendar-picker-popover-radius: var(--a-radius-lg);
34
34
  --calendar-picker-popover-shadow: var(--a-shadow-lg);
35
35
  --calendar-picker-popover-padding: var(--a-space-2);
@@ -37,12 +37,12 @@
37
37
  7 columns at --a-size + inter-cell breathing + popover padding both
38
38
  sides (border-box). Matches calendar-grid-ui's width formula. */
39
39
  --calendar-picker-popover-width: calc(7 * var(--a-size) + 6 * var(--a-space-1) + 2 * var(--a-space-2));
40
- --calendar-picker-popover-fg: var(--a-fg);
40
+ --calendar-picker-popover-fg: var(--md-sys-color-neutral-on-surface);
41
41
 
42
42
  /* Header */
43
43
  --calendar-picker-header-gap: var(--a-space-1);
44
44
  --calendar-picker-header-mb: var(--a-space-2);
45
- --calendar-picker-title-fg: var(--a-fg);
45
+ --calendar-picker-title-fg: var(--md-sys-color-neutral-on-surface);
46
46
  --calendar-picker-title-size: var(--a-ui-size);
47
47
  --calendar-picker-title-weight: var(--a-weight-medium);
48
48
 
@@ -54,7 +54,7 @@
54
54
  --calendar-picker-nav-bg: transparent;
55
55
  --calendar-picker-nav-bg-hover: var(--a-bg-muted);
56
56
  --calendar-picker-nav-fg: var(--a-fg-muted);
57
- --calendar-picker-nav-fg-hover: var(--a-fg);
57
+ --calendar-picker-nav-fg-hover: var(--md-sys-color-neutral-on-surface);
58
58
  --calendar-picker-nav-icon-size: var(--a-caret-size);
59
59
 
60
60
  /* Weekday header — row height tracks the control height (one notch
@@ -73,15 +73,15 @@
73
73
  --calendar-picker-day-radius: var(--a-radius);
74
74
  --calendar-picker-day-font-size: var(--a-ui-size);
75
75
  --calendar-picker-day-bg: transparent;
76
- --calendar-picker-day-fg: var(--a-fg-subtle);
76
+ --calendar-picker-day-fg: var(--md-sys-color-neutral-on-surface-variant);
77
77
  --calendar-picker-day-bg-hover: var(--a-bg-hover);
78
- --calendar-picker-day-fg-hover: var(--a-fg);
79
- --calendar-picker-day-bg-selected-hover: var(--a-accent-bg-hover);
80
- --calendar-picker-day-bg-selected: var(--a-accent);
81
- --calendar-picker-day-fg-selected: var(--a-accent-fg);
78
+ --calendar-picker-day-fg-hover: var(--md-sys-color-neutral-on-surface);
79
+ --calendar-picker-day-bg-selected-hover: var(--a-primary-bg-hover);
80
+ --calendar-picker-day-bg-selected: var(--md-sys-color-primary);
81
+ --calendar-picker-day-fg-selected: var(--md-sys-color-primary-on-primary);
82
82
  --calendar-picker-day-fg-outside: var(--a-fg-muted);
83
83
  --calendar-picker-day-fg-disabled: var(--a-ui-text-disabled);
84
- --calendar-picker-day-today-border: var(--a-accent);
84
+ --calendar-picker-day-today-border: var(--md-sys-color-primary);
85
85
  --calendar-picker-day-today-dot-size: var(--a-space-0-5);
86
86
  --calendar-picker-day-today-dot-offset: var(--a-space-1);
87
87
  --calendar-picker-day-grid-gap: var(--a-space-px); /* 1px hairline between cells */
@@ -6,10 +6,10 @@
6
6
 
7
7
  :where(:scope) {
8
8
  --canvas-bg: var(--a-canvas-0);
9
- --canvas-fg: var(--a-fg);
9
+ --canvas-fg: var(--md-sys-color-neutral-on-surface);
10
10
  --canvas-font-family: var(--a-font-family);
11
11
  --canvas-inset: var(--a-space-2);
12
- --canvas-surface-bg: var(--a-bg);
12
+ --canvas-surface-bg: var(--md-sys-color-neutral-background);
13
13
  --canvas-surface-max: 56rem;
14
14
  }
15
15
 
@@ -20,20 +20,20 @@
20
20
  --card-description-size: var(--a-caption-size);
21
21
 
22
22
  /* ── Colors ── */
23
- --card-bg: var(--a-canvas-base);
24
- --card-bg-padded: var(--a-canvas-0-scrim);
25
- --card-fg: var(--a-fg);
23
+ --card-bg: var(--md-sys-color-neutral-surface);
24
+ --card-bg-padded: var(--md-sys-color-neutral-scrim-weakest);
25
+ --card-fg: var(--md-sys-color-neutral-on-surface);
26
26
  --card-heading-fg: var(--a-fg-strong);
27
- --card-description-fg: var(--a-fg-subtle);
28
- --card-border: 1px solid var(--a-border-subtle);
29
- --card-divider: var(--a-border-subtle);
27
+ --card-description-fg: var(--md-sys-color-neutral-on-surface-variant);
28
+ --card-border: 1px solid var(--md-sys-color-neutral-outline-variant);
29
+ --card-divider: var(--md-sys-color-neutral-outline-variant);
30
30
  --card-shadow: var(--a-shadow-sm);
31
31
 
32
32
  /* ── Loading ring ──
33
33
  The mask composition below uses an opaque source (masks are intensity-only,
34
34
  not theme-colored). `--a-chrome-light` is our theme-stable opaque white token.
35
35
  The visible ring color comes from the accent token. */
36
- --card-loading-ring: var(--a-accent-bg);
36
+ --card-loading-ring: var(--a-primary-bg);
37
37
  --card-loading-mask-color: var(--a-chrome-light);
38
38
 
39
39
  /* ── Elevation ── */
@@ -47,7 +47,7 @@
47
47
  --card-loading-easing: linear;
48
48
 
49
49
  /* ── Draggable ── */
50
- --card-drag-bg-active: var(--a-accent-muted);
50
+ --card-drag-bg-active: var(--md-sys-color-primary-container);
51
51
  }
52
52
 
53
53
  :scope {
@@ -71,7 +71,7 @@
71
71
  :scope[variant="outline"] {
72
72
  --card-bg: transparent;
73
73
  --card-shadow: none;
74
- --card-border: 1px solid var(--a-border);
74
+ --card-border: 1px solid var(--md-sys-color-neutral-outline);
75
75
  }
76
76
 
77
77
  :scope[variant="filled"] {
@@ -461,10 +461,10 @@
461
461
  brightest) per nesting depth; depths past brightest cap at brightest.
462
462
  :scope card-ui has specificity (0,1,1) which beats the
463
463
  :where(:scope) initializer (0,0,0) in each inner scope. */
464
- :scope card-ui { --card-bg: var(--a-canvas-base); --card-border: 1px solid var(--a-border); --a-radius: var(--a-radius-md); }
465
- :scope card-ui card-ui { --card-bg: var(--a-canvas-bright); --a-radius: var(--a-radius-sm); }
466
- :scope card-ui card-ui card-ui { --card-bg: var(--a-canvas-brighter); }
467
- :scope card-ui card-ui card-ui card-ui { --card-bg: var(--a-canvas-brightest); }
468
- :scope card-ui card-ui card-ui card-ui card-ui { --card-bg: var(--a-canvas-brightest); }
469
- :scope card-ui card-ui card-ui card-ui card-ui card-ui { --card-bg: var(--a-canvas-brightest); }
464
+ :scope card-ui { --card-bg: var(--md-sys-color-neutral-surface); --card-border: 1px solid var(--md-sys-color-neutral-outline); --a-radius: var(--a-radius-md); }
465
+ :scope card-ui card-ui { --card-bg: var(--md-sys-color-neutral-surface-bright); --a-radius: var(--a-radius-sm); }
466
+ :scope card-ui card-ui card-ui { --card-bg: var(--md-sys-color-neutral-surface-brighter); }
467
+ :scope card-ui card-ui card-ui card-ui { --card-bg: var(--md-sys-color-neutral-surface-brightest); }
468
+ :scope card-ui card-ui card-ui card-ui card-ui { --card-bg: var(--md-sys-color-neutral-surface-brightest); }
469
+ :scope card-ui card-ui card-ui card-ui card-ui card-ui { --card-bg: var(--md-sys-color-neutral-surface-brightest); }
470
470
  }
@@ -12,26 +12,26 @@
12
12
  and the chart inherits that value naturally. To register the
13
13
  default formally (and enable transitions), add an `@property` rule
14
14
  at `:root` in a global stylesheet. */
15
- --chart-fg: var(--a-fg);
16
- --chart-bar: var(--a-accent);
17
- --chart-bar-hover: var(--a-accent-bg-hover);
18
- --chart-line: var(--a-accent);
19
- --chart-dot: var(--a-accent);
20
- --chart-grid: var(--a-border-subtle);
15
+ --chart-fg: var(--md-sys-color-neutral-on-surface);
16
+ --chart-bar: var(--md-sys-color-primary);
17
+ --chart-bar-hover: var(--a-primary-bg-hover);
18
+ --chart-line: var(--md-sys-color-primary);
19
+ --chart-dot: var(--md-sys-color-primary);
20
+ --chart-grid: var(--md-sys-color-neutral-outline-variant);
21
21
  --chart-axis: var(--a-fg-muted);
22
- --chart-label: var(--a-fg-subtle);
23
- --chart-value: var(--a-fg);
24
- --chart-avg: var(--a-warning);
22
+ --chart-label: var(--md-sys-color-neutral-on-surface-variant);
23
+ --chart-value: var(--md-sys-color-neutral-on-surface);
24
+ --chart-avg: var(--md-sys-color-warning);
25
25
  --chart-area-opacity: 0.15;
26
26
  --chart-line-width: 2;
27
27
  --chart-radius: 4;
28
28
 
29
29
  /* Layout */
30
- --chart-border: var(--a-border-subtle);
30
+ --chart-border: var(--md-sys-color-neutral-outline-variant);
31
31
  --chart-space-sm: var(--a-space-1);
32
32
  --chart-space-md: var(--a-space-2);
33
33
  --chart-space-lg: var(--a-space-3);
34
- --chart-dot-stroke: var(--a-bg);
34
+ --chart-dot-stroke: var(--md-sys-color-neutral-background);
35
35
  --chart-max-height: 28rem;
36
36
 
37
37
  /* Legend */
@@ -457,7 +457,7 @@
457
457
  produce a solid-disc render. The inline `fill="none"` attribute on the
458
458
  SVG element loses to any CSS rule that names `fill`. */
459
459
  circle[data-radial-track] {
460
- stroke: var(--a-border-subtle);
460
+ stroke: var(--md-sys-color-neutral-outline-variant);
461
461
  fill: none;
462
462
  }
463
463
  circle[data-radial-bar] {
@@ -478,7 +478,7 @@
478
478
  /* ── Gauge ──
479
479
  Half-donut — track is faint backing, fill reads as primary accent. */
480
480
  :scope[type="gauge"] [data-radial-track] {
481
- fill: var(--a-border-subtle);
481
+ fill: var(--md-sys-color-neutral-outline-variant);
482
482
  stroke: none;
483
483
  }
484
484
  :scope[type="gauge"] [data-gauge-fill] {
@@ -572,7 +572,7 @@
572
572
  [data-sankey-node][data-slice="9"] { fill: var(--chart-9); }
573
573
 
574
574
  [data-sankey-link] {
575
- fill: var(--a-fg-subtle);
575
+ fill: var(--md-sys-color-neutral-on-surface-variant);
576
576
  opacity: 0.35;
577
577
  }
578
578
  [data-sankey-link]:hover {
@@ -646,17 +646,17 @@
646
646
  }
647
647
 
648
648
  :scope[color="info"] {
649
- --chart-bar: var(--a-info);
649
+ --chart-bar: var(--md-sys-color-info);
650
650
  --chart-bar-hover: var(--a-info-bg-hover);
651
- --chart-line: var(--a-info);
652
- --chart-dot: var(--a-info);
651
+ --chart-line: var(--md-sys-color-info);
652
+ --chart-dot: var(--md-sys-color-info);
653
653
  }
654
654
 
655
655
  :scope[color="accent"] {
656
- --chart-bar: var(--a-accent);
657
- --chart-bar-hover: var(--a-accent-bg-hover);
658
- --chart-line: var(--a-accent);
659
- --chart-dot: var(--a-accent);
656
+ --chart-bar: var(--md-sys-color-primary);
657
+ --chart-bar-hover: var(--a-primary-bg-hover);
658
+ --chart-line: var(--md-sys-color-primary);
659
+ --chart-dot: var(--md-sys-color-primary);
660
660
  }
661
661
 
662
662
  /* ── Tooltip hit-target cursor ──
@@ -677,8 +677,8 @@
677
677
  ───────────────────────────────────────────────────────────────── */
678
678
 
679
679
  .chart-tooltip-popup {
680
- --chart-tooltip-bg: var(--a-fg);
681
- --chart-tooltip-fg: var(--a-bg);
680
+ --chart-tooltip-bg: var(--md-sys-color-neutral-on-surface);
681
+ --chart-tooltip-fg: var(--md-sys-color-neutral-background);
682
682
  --chart-tooltip-px: var(--a-space-2-5);
683
683
  --chart-tooltip-py: var(--a-space-1-5);
684
684
  --chart-tooltip-radius: var(--a-radius-sm);
@@ -12,13 +12,13 @@
12
12
 
13
13
  /* ── Typography ── */
14
14
  --chart-legend-font-size: var(--a-ui-tiny);
15
- --chart-legend-fg: var(--a-fg-subtle);
15
+ --chart-legend-fg: var(--md-sys-color-neutral-on-surface-variant);
16
16
  --chart-legend-fg-inactive: var(--a-fg-muted);
17
17
 
18
18
  /* ── Interaction ── */
19
19
  --chart-legend-row-radius: var(--a-radius-sm);
20
20
  --chart-legend-row-hover: var(--a-canvas-2);
21
- --chart-legend-row-fg-hover: var(--a-fg);
21
+ --chart-legend-row-fg-hover: var(--md-sys-color-neutral-on-surface);
22
22
 
23
23
  /* ── Focus ── */
24
24
  --chart-legend-focus-ring: var(--a-focus-ring);
@@ -34,9 +34,9 @@ chat-input-ui textarea-ui:not([disabled]) [slot="text"]:hover {
34
34
  hover / focus / disabled / placeholder treatments inside this
35
35
  @scope and re-paints them with these tokens. */
36
36
  --chat-input-bg: var(--a-canvas-0);
37
- --chat-input-fg: var(--a-fg);
38
- --chat-input-border: var(--a-border-subtle);
39
- --chat-input-caret-color: var(--a-fg-subtle);
37
+ --chat-input-fg: var(--md-sys-color-neutral-on-surface);
38
+ --chat-input-border: var(--md-sys-color-neutral-outline-variant);
39
+ --chat-input-caret-color: var(--md-sys-color-neutral-on-surface-variant);
40
40
  --chat-input-placeholder-fg: var(--a-ui-text-placeholder);
41
41
 
42
42
  /* Hover — matches input-ui's affordance (subtle alpha lift on the
@@ -54,7 +54,7 @@ chat-input-ui textarea-ui:not([disabled]) [slot="text"]:hover {
54
54
  owned here so the inner textarea-ui's `--a-ui-text-disabled` doesn't
55
55
  leak through. */
56
56
  --chat-input-bg-disabled: transparent;
57
- --chat-input-border-disabled: var(--a-border-subtle);
57
+ --chat-input-border-disabled: var(--md-sys-color-neutral-outline-variant);
58
58
  --chat-input-fg-disabled: var(--a-ui-text-disabled);
59
59
 
60
60
  /* Canonical focus ring — chat-input is a *nested-control host*.
@@ -69,7 +69,7 @@ chat-input-ui textarea-ui:not([disabled]) [slot="text"]:hover {
69
69
  /* ── Image preview ── */
70
70
  --chat-input-image-size: 3rem; /* 48px at d=1 */
71
71
  --chat-input-image-radius: var(--a-radius-sm);
72
- --chat-input-image-border: var(--a-border-subtle);
72
+ --chat-input-image-border: var(--md-sys-color-neutral-outline-variant);
73
73
  --chat-input-preview-gap: var(--a-space-2);
74
74
  --chat-input-preview-py: var(--a-space-2);
75
75
 
@@ -77,7 +77,7 @@ chat-input-ui textarea-ui:not([disabled]) [slot="text"]:hover {
77
77
  --chat-input-remove-size: var(--a-space-4);
78
78
  --chat-input-remove-offset: var(--a-space-1);
79
79
  --chat-input-remove-bg: var(--a-fg-muted);
80
- --chat-input-remove-fg: var(--a-bg);
80
+ --chat-input-remove-fg: var(--md-sys-color-neutral-background);
81
81
  --chat-input-remove-font: var(--a-ui-tiny);
82
82
 
83
83
  /* ── Transition ── */
@@ -1,9 +1,9 @@
1
1
  @scope (chat-thread-ui) {
2
2
  :where(:scope) {
3
3
  /* ── Layout ── */
4
- --chat-border-color: var(--a-border-subtle);
4
+ --chat-border-color: var(--md-sys-color-neutral-outline-variant);
5
5
  --chat-radius: var(--a-radius-lg);
6
- --chat-bg: var(--a-bg);
6
+ --chat-bg: var(--md-sys-color-neutral-background);
7
7
  --chat-gap: var(--a-space-2);
8
8
  --chat-padding-y: var(--a-space-3);
9
9
  --chat-padding-x: var(--a-space-4);
@@ -19,12 +19,12 @@
19
19
  --chat-header-avatar-size: var(--a-size-md);
20
20
  --chat-header-avatar-radius: var(--a-radius-full);
21
21
  --chat-header-avatar-bg: var(--a-bg-muted);
22
- --chat-header-avatar-fg: var(--a-fg-subtle);
22
+ --chat-header-avatar-fg: var(--md-sys-color-neutral-on-surface-variant);
23
23
 
24
24
  /* ── Message avatar ── */
25
25
  --chat-msg-avatar-radius: var(--a-radius-full);
26
26
  --chat-msg-avatar-bg: var(--a-bg-muted);
27
- --chat-msg-avatar-fg: var(--a-fg-subtle);
27
+ --chat-msg-avatar-fg: var(--md-sys-color-neutral-on-surface-variant);
28
28
 
29
29
  /* ── Bubble ── */
30
30
  --chat-bubble-padding-y: var(--a-space-2);
@@ -33,12 +33,12 @@
33
33
  --chat-bubble-tail-radius: var(--a-radius-sm);
34
34
 
35
35
  /* ── Bubble: user ── */
36
- --chat-user-bg: var(--a-primary);
37
- --chat-user-fg: var(--a-primary-fg);
36
+ --chat-user-bg: var(--md-sys-color-primary);
37
+ --chat-user-fg: var(--md-sys-color-primary-on-primary);
38
38
 
39
39
  /* ── Bubble: assistant ── */
40
40
  --chat-assistant-bg: var(--a-bg-subtle);
41
- --chat-assistant-fg: var(--a-fg);
41
+ --chat-assistant-fg: var(--md-sys-color-neutral-on-surface);
42
42
 
43
43
  /* ── Typography ── */
44
44
  --chat-header-avatar-size-font: var(--a-ui-md);
@@ -41,7 +41,7 @@ check-ui[indeterminate] {
41
41
  /* ── State: default ── */
42
42
  --check-bg: var(--a-ui-bg);
43
43
  --check-border: var(--a-ui-border);
44
- --check-border-hover: var(--a-fg-subtle);
44
+ --check-border-hover: var(--md-sys-color-neutral-on-surface-variant);
45
45
 
46
46
  /* ── Transitions ── */
47
47
  --check-duration: var(--a-duration-fast);
@@ -54,10 +54,10 @@ check-ui[indeterminate] {
54
54
  --check-bg-hover: var(--a-bg-muted);
55
55
 
56
56
  /* ── State: checked ── */
57
- --check-bg-checked: var(--a-primary);
58
- --check-border-checked: var(--a-primary);
57
+ --check-bg-checked: var(--md-sys-color-primary);
58
+ --check-border-checked: var(--md-sys-color-primary);
59
59
  --check-fg-checked: var(--a-chrome-light);
60
- --check-bg-checked-hover: var(--a-primary-hover);
60
+ --check-bg-checked-hover: var(--md-sys-color-primary-hover);
61
61
 
62
62
  /* ── State: disabled ── */
63
63
  --check-fg-disabled: var(--a-ui-text-disabled);
@@ -38,7 +38,7 @@ import { tags as t } from '@lezer/highlight';
38
38
 
39
39
  export const adiaBaseTheme = EditorView.theme({
40
40
  '&': { fontFamily: 'inherit', fontSize: 'inherit', color: 'inherit', backgroundColor: 'transparent' },
41
- '.cm-content': { padding: '0', caretColor: 'inherit' },
41
+ '.cm-content': { caretColor: 'inherit' },
42
42
  '.cm-focused': { outline: 'none' },
43
43
  });
44
44
 
@@ -10,13 +10,13 @@
10
10
  --code-lint-marker-w: 3px; /* Vertical lint-marker rule; intrinsic measurement; no --a-space-* equivalent at this width. */
11
11
 
12
12
  /* ── Colors ── */
13
- --code-bg: var(--a-bg);
14
- --code-fg: var(--a-fg);
15
- --code-border: var(--a-border-subtle);
13
+ --code-bg: var(--md-sys-color-neutral-background);
14
+ --code-fg: var(--md-sys-color-neutral-on-surface);
15
+ --code-border: var(--md-sys-color-neutral-outline-variant);
16
16
  --code-header-bg: var(--a-bg-scrim);
17
17
  --code-header-fg: var(--a-fg-muted);
18
18
  --code-copy-hover-bg: var(--a-bg-muted);
19
- --code-copy-hover-fg: var(--a-fg);
19
+ --code-copy-hover-fg: var(--md-sys-color-neutral-on-surface);
20
20
 
21
21
  /* ── Typography ── */
22
22
  --code-font: var(--a-font-family-code);
@@ -36,10 +36,10 @@
36
36
  /* Transparency-mixing in oklab — Safari < 18 has an OKLCH bug where
37
37
  the transparent operand's hue resolves to 0, red-shifting the mix.
38
38
  oklab is hue-agnostic and visually identical in fixed engines. */
39
- --code-active-line-bg: color-mix(in oklab, var(--a-accent-muted) 40%, transparent);
40
- --code-selection-bg: color-mix(in oklab, var(--a-accent-muted) 60%, transparent);
41
- --code-selection-match: color-mix(in oklab, var(--a-accent-muted) 30%, transparent);
42
- --code-cursor: var(--a-accent-strong);
39
+ --code-active-line-bg: color-mix(in oklab, var(--md-sys-color-primary-container) 40%, transparent);
40
+ --code-selection-bg: color-mix(in oklab, var(--md-sys-color-primary-container) 60%, transparent);
41
+ --code-selection-match: color-mix(in oklab, var(--md-sys-color-primary-container) 30%, transparent);
42
+ --code-cursor: var(--a-primary-strong);
43
43
  --code-focus-ring: var(--a-focus-ring);
44
44
 
45
45
  /* ── Syntax highlight tokens ──
@@ -47,18 +47,18 @@
47
47
  tokens. Overridable per-instance by setting `--code-tok-*` on
48
48
  any ancestor. See docs/specs/code-editor.md §6.3 for the tag →
49
49
  class → role map. */
50
- --code-tok-comment: var(--a-fg-subtle);
51
- --code-tok-keyword: var(--a-accent-strong);
50
+ --code-tok-comment: var(--md-sys-color-neutral-on-surface-variant);
51
+ --code-tok-keyword: var(--a-primary-strong);
52
52
  --code-tok-string: var(--a-success-strong);
53
53
  --code-tok-number: var(--a-info-strong);
54
54
  --code-tok-boolean: var(--a-info-strong);
55
- --code-tok-operator: var(--a-fg);
55
+ --code-tok-operator: var(--md-sys-color-neutral-on-surface);
56
56
  --code-tok-punctuation: var(--a-fg-muted);
57
57
  --code-tok-function: var(--a-brand-strong);
58
- --code-tok-variable: var(--a-fg);
58
+ --code-tok-variable: var(--md-sys-color-neutral-on-surface);
59
59
  --code-tok-type: var(--a-warning-strong);
60
- --code-tok-property: var(--a-fg);
61
- --code-tok-tag: var(--a-accent-strong);
60
+ --code-tok-property: var(--md-sys-color-neutral-on-surface);
61
+ --code-tok-tag: var(--a-primary-strong);
62
62
  --code-tok-attribute: var(--a-warning-strong);
63
63
  --code-tok-url: var(--a-info-strong);
64
64
  --code-tok-invalid: var(--a-danger-strong);
@@ -72,8 +72,8 @@
72
72
  --code-lint-warning: var(--a-warning-strong);
73
73
  --code-lint-info: var(--a-info-strong);
74
74
  --code-lint-tooltip-bg: var(--a-bg-strong); /* §230-bundle (v0.5.9): elevated panel surface. Was orphaned --a-surface-floating. */
75
- --code-lint-tooltip-fg: var(--a-fg);
76
- --code-lint-tooltip-border: var(--a-border-subtle);
75
+ --code-lint-tooltip-fg: var(--md-sys-color-neutral-on-surface);
76
+ --code-lint-tooltip-border: var(--md-sys-color-neutral-outline-variant);
77
77
  }
78
78
 
79
79
  /* ── Block (default) ── */
@@ -178,7 +178,7 @@
178
178
  column-gap: var(--a-space-3);
179
179
  }
180
180
  & > pre > code[data-line-state-mode] [data-line-num] {
181
- color: var(--a-fg-subtle);
181
+ color: var(--md-sys-color-neutral-on-surface-variant);
182
182
  text-align: end;
183
183
  user-select: none;
184
184
  min-width: 1.5ch;
@@ -191,10 +191,10 @@
191
191
  content: " ";
192
192
  }
193
193
  & > pre > code [data-line-state="added"] {
194
- background: var(--a-success-muted);
194
+ background: var(--md-sys-color-success-container);
195
195
  }
196
196
  & > pre > code [data-line-state="removed"] {
197
- background: var(--a-danger-muted);
197
+ background: var(--md-sys-color-danger-container);
198
198
  }
199
199
 
200
200
  /* Footer — optional chrome band below the code block
@@ -285,8 +285,19 @@
285
285
 
286
286
  Selector discipline: `.cm-*` classes are CodeMirror's; `.tok-*`
287
287
  classes come from our `adiaHighlightStyle` (see core/_cm-theme.js).
288
- CM's CSS-in-JS stylesheets load first + at lower specificity, so
289
- these rules override without !important. */
288
+ TKT-0019 correction: this file is imported into `layer(components)`
289
+ (styles/index.css) per the cascade-layer architecture, ANY
290
+ unlayered rule beats ANY layered rule regardless of specificity or
291
+ load order, and CM's runtime-injected `<style>` is unlayered by
292
+ construction (third-party DOM we don't control). Most `.cm-*`
293
+ overrides below don't collide with a CM default (color/font/etc.
294
+ are inherit/transparent in CM's own base styles), so they "just
295
+ work" without needing to fight this — but `.cm-content`'s padding
296
+ does collide (CM ships a non-zero default), and needed `!important`
297
+ to actually win; see that rule's own comment. This is the sanctioned
298
+ escape hatch for exactly this case (cascade-layer-architecture.md:
299
+ "!important … beat … third-party DOM injected outside our layers"),
300
+ not a specificity workaround. */
290
301
 
291
302
  & > [data-cm-mount] {
292
303
  display: block;
@@ -312,8 +323,20 @@
312
323
  padding: 0;
313
324
  }
314
325
 
326
+ /* padding: !important — TKT-0019. CM6 ships its own non-zero
327
+ `.cm-content` default padding (4px 0), injected as an unlayered
328
+ runtime `<style>` tag; this file lives in `layer(components)`, and
329
+ unlayered rules beat ANY layered rule regardless of specificity —
330
+ a plain `:scope .cm-content` selector (even a more specific one)
331
+ can never win here, only `!important` can (a layered `!important`
332
+ outranks an unlayered normal declaration). Confirmed empirically:
333
+ bumping selector specificity alone left the padding at CM's 4px 0
334
+ default. Kept as the sole padding source (code-editor.js's
335
+ `adiaBaseTheme` intentionally sets no padding — see its own
336
+ "structural only" comment) so `--code-py`/`--code-px` stays the one
337
+ token pair driving both the header and this content. */
315
338
  :scope .cm-content {
316
- padding: var(--code-py) var(--code-px);
339
+ padding: var(--code-py) var(--code-px) !important;
317
340
  caret-color: var(--code-cursor);
318
341
  }
319
342
 
@@ -11,9 +11,9 @@
11
11
  --color-picker-thumb-shadow: 0 0 0 1px var(--a-chrome-ring-subtle), 0 2px 4px var(--a-chrome-shadow-soft);
12
12
  --color-picker-font: var(--a-font-family-code);
13
13
  --color-picker-font-size: var(--a-ui-sm);
14
- --color-picker-fg: var(--a-fg);
14
+ --color-picker-fg: var(--md-sys-color-neutral-on-surface);
15
15
  --color-picker-label-fg: var(--a-fg-muted);
16
- --color-picker-border: var(--a-border-subtle);
16
+ --color-picker-border: var(--md-sys-color-neutral-outline-variant);
17
17
  --color-picker-output-bg: var(--a-bg-muted);
18
18
  --color-picker-output-radius: var(--a-radius-sm);
19
19
  --color-picker-fg-disabled: var(--a-ui-text-disabled);
@@ -23,8 +23,8 @@
23
23
  --color-picker-pad-sm: var(--a-space-2);
24
24
 
25
25
  /* ── Interactive ── */
26
- --color-picker-focus-color: var(--a-accent);
27
- --color-picker-disabled-border: var(--a-border-subtle);
26
+ --color-picker-focus-color: var(--md-sys-color-primary);
27
+ --color-picker-disabled-border: var(--md-sys-color-neutral-outline-variant);
28
28
 
29
29
  /* ── Transitions ── */
30
30
  --color-picker-duration: var(--a-duration-fast);
@@ -31,7 +31,7 @@
31
31
  --combobox-easing: var(--a-easing);
32
32
 
33
33
  /* ── Popover ── */
34
- --combobox-popover-bg: var(--a-canvas-bright);
34
+ --combobox-popover-bg: var(--md-sys-color-neutral-surface-bright);
35
35
  --combobox-popover-border: var(--a-ui-border);
36
36
  --combobox-popover-radius: var(--a-radius);
37
37
  --combobox-popover-shadow: var(--a-shadow-lg);
@@ -45,8 +45,8 @@
45
45
  --combobox-option-fg-selected: var(--a-ui-text-selected);
46
46
 
47
47
  /* ── Match highlight ── */
48
- --combobox-match-bg: var(--a-accent-muted);
49
- --combobox-match-fg: var(--a-accent-strong);
48
+ --combobox-match-bg: var(--md-sys-color-primary-container);
49
+ --combobox-match-fg: var(--a-primary-strong);
50
50
 
51
51
  text-align: start; /* §text-align-reset — block ancestor centering */
52
52
  }
@@ -194,7 +194,7 @@ combobox-ui [data-listbox] {
194
194
  padding: var(--a-space-1);
195
195
  border: 1px solid var(--a-ui-border);
196
196
  border-radius: var(--a-radius);
197
- background: var(--a-canvas-bright);
197
+ background: var(--md-sys-color-neutral-surface-bright);
198
198
  box-shadow: var(--a-shadow-lg);
199
199
  /* --combobox-list-max-block is set inline by #applyVisibleCap() when the
200
200
  rendered options exceed [max-visible-items] (default 10) — the menu hugs
@@ -259,8 +259,8 @@ combobox-ui [data-listbox] [role="option"] mark {
259
259
  /* Consume the :where(:scope) match tokens (custom props inherit through the
260
260
  DOM even though the popover paints in the top layer); raw-token fallbacks
261
261
  keep the highlight alive if the host tokens are unavailable. */
262
- background: var(--combobox-match-bg, var(--a-accent-muted));
263
- color: var(--combobox-match-fg, var(--a-accent-strong));
262
+ background: var(--combobox-match-bg, var(--md-sys-color-primary-container));
263
+ color: var(--combobox-match-fg, var(--a-primary-strong));
264
264
  padding: 0 0.1em;
265
265
  border-radius: var(--a-radius-sm);
266
266
  }
@@ -12,6 +12,7 @@
12
12
  */
13
13
 
14
14
  import { UIElement } from '../../core/element.js';
15
+ import { logicalSlotted } from '../../core/logical-children.js';
15
16
 
16
17
  /**
17
18
  * <command-ui> — Searchable command palette.
@@ -56,6 +57,7 @@ export class UICommand extends UIElement {
56
57
  #footerEl = null;
57
58
  #bound = false;
58
59
  #itemByEl = new WeakMap();
60
+ #emptyNodes = [];
59
61
 
60
62
  static #RECENTS_MAX = 3;
61
63
 
@@ -83,8 +85,11 @@ export class UICommand extends UIElement {
83
85
  render() {
84
86
  // Stamp internal structure once
85
87
  if (!this.#inputEl) {
86
- // Parse options from declarative children before replacing innerHTML
88
+ // Parse options + capture author-provided slot="empty" content
89
+ // before replacing innerHTML (dogfood-status yaml-drift finding:
90
+ // yaml documented an overridable empty state that was never wired).
87
91
  this.#parseOptions();
92
+ this.#emptyNodes = logicalSlotted(this, 'empty');
88
93
 
89
94
  this.innerHTML = `
90
95
  <header>
@@ -244,11 +249,17 @@ export class UICommand extends UIElement {
244
249
  }
245
250
  }
246
251
 
247
- // Empty state
252
+ // Empty state — author-provided slot="empty" content wins over the
253
+ // default text (moves the same captured node references each time;
254
+ // safe since a node not currently attached is simply re-appended).
248
255
  if (!visibleCount) {
249
256
  const empty = document.createElement('div');
250
257
  empty.setAttribute('data-empty', '');
251
- empty.textContent = 'No results found.';
258
+ if (this.#emptyNodes.length) {
259
+ empty.append(...this.#emptyNodes);
260
+ } else {
261
+ empty.textContent = 'No results found.';
262
+ }
252
263
  this.#listEl.appendChild(empty);
253
264
  }
254
265