@adia-ai/web-components 0.6.32 → 0.6.34

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 (164) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/components/accordion/accordion.css +2 -2
  3. package/components/action-list/action-list.css +2 -2
  4. package/components/agent-artifact/agent-artifact.css +31 -31
  5. package/components/agent-feedback-bar/agent-feedback-bar.css +10 -10
  6. package/components/agent-questions/agent-questions.css +57 -57
  7. package/components/agent-reasoning/agent-reasoning.css +62 -62
  8. package/components/agent-suggestions/agent-suggestions.css +4 -4
  9. package/components/agent-trace/agent-trace.css +53 -53
  10. package/components/alert/alert.css +41 -41
  11. package/components/avatar/avatar.css +27 -27
  12. package/components/badge/badge.css +27 -27
  13. package/components/block/block.css +16 -16
  14. package/components/breadcrumb/breadcrumb.css +23 -23
  15. package/components/button/button.css +101 -91
  16. package/components/calendar-grid/calendar-grid.a2ui.json +136 -0
  17. package/components/calendar-grid/calendar-grid.css +226 -0
  18. package/components/calendar-grid/calendar-grid.d.ts +37 -0
  19. package/components/calendar-grid/calendar-grid.js +17 -0
  20. package/components/calendar-grid/calendar-grid.yaml +116 -0
  21. package/components/calendar-grid/class.js +300 -0
  22. package/components/calendar-picker/calendar-picker.css +139 -139
  23. package/components/canvas/canvas.css +12 -12
  24. package/components/card/card.css +83 -83
  25. package/components/chart/chart.css +224 -224
  26. package/components/chart-legend/chart-legend.css +26 -26
  27. package/components/check/check.css +40 -40
  28. package/components/code/code.css +125 -125
  29. package/components/col/col.css +15 -15
  30. package/components/color-picker/color-picker.css +55 -55
  31. package/components/combobox/class.js +861 -0
  32. package/components/combobox/combobox.a2ui.json +363 -0
  33. package/components/combobox/combobox.css +244 -0
  34. package/components/combobox/combobox.d.ts +113 -0
  35. package/components/combobox/combobox.examples.md +59 -0
  36. package/components/combobox/combobox.js +17 -0
  37. package/components/combobox/combobox.test.js +181 -0
  38. package/components/combobox/combobox.yaml +369 -0
  39. package/components/command/command.css +90 -90
  40. package/components/date-range-picker/class.js +775 -0
  41. package/components/date-range-picker/date-range-picker.a2ui.json +300 -0
  42. package/components/date-range-picker/date-range-picker.css +178 -0
  43. package/components/date-range-picker/date-range-picker.d.ts +82 -0
  44. package/components/date-range-picker/date-range-picker.examples.md +37 -0
  45. package/components/date-range-picker/date-range-picker.js +17 -0
  46. package/components/date-range-picker/date-range-picker.test.js +387 -0
  47. package/components/date-range-picker/date-range-picker.yaml +285 -0
  48. package/components/datetime-picker/class.js +706 -0
  49. package/components/datetime-picker/datetime-picker.a2ui.json +334 -0
  50. package/components/datetime-picker/datetime-picker.css +150 -0
  51. package/components/datetime-picker/datetime-picker.d.ts +86 -0
  52. package/components/datetime-picker/datetime-picker.examples.md +46 -0
  53. package/components/datetime-picker/datetime-picker.js +17 -0
  54. package/components/datetime-picker/datetime-picker.test.js +454 -0
  55. package/components/datetime-picker/datetime-picker.yaml +332 -0
  56. package/components/demo-toggle/demo-toggle.css +27 -27
  57. package/components/description-list/description-list.css +18 -18
  58. package/components/divider/divider.css +24 -24
  59. package/components/embed/embed.css +6 -6
  60. package/components/empty-state/empty-state.css +27 -27
  61. package/components/feed/feed.css +12 -12
  62. package/components/field/field.css +37 -28
  63. package/components/field/field.test.js +32 -0
  64. package/components/fields/fields.css +5 -5
  65. package/components/grid/grid.css +5 -5
  66. package/components/heatmap/heatmap.css +63 -63
  67. package/components/icon/icon.css +12 -12
  68. package/components/image/image.css +14 -14
  69. package/components/index.js +8 -0
  70. package/components/input/input.css +66 -66
  71. package/components/inspector/inspector.css +6 -6
  72. package/components/integration-card/class.js +410 -0
  73. package/components/integration-card/integration-card.a2ui.json +268 -0
  74. package/components/integration-card/integration-card.css +169 -0
  75. package/components/integration-card/integration-card.d.ts +63 -0
  76. package/components/integration-card/integration-card.examples.md +41 -0
  77. package/components/integration-card/integration-card.js +17 -0
  78. package/components/integration-card/integration-card.test.js +306 -0
  79. package/components/integration-card/integration-card.yaml +280 -0
  80. package/components/kbd/kbd.css +32 -32
  81. package/components/link/link.css +12 -12
  82. package/components/list/list.css +8 -8
  83. package/components/list-window/class.js +688 -0
  84. package/components/list-window/list-window.a2ui.json +277 -0
  85. package/components/list-window/list-window.css +124 -0
  86. package/components/list-window/list-window.d.ts +84 -0
  87. package/components/list-window/list-window.examples.md +73 -0
  88. package/components/list-window/list-window.js +17 -0
  89. package/components/list-window/list-window.test.js +303 -0
  90. package/components/list-window/list-window.yaml +270 -0
  91. package/components/menu/menu.css +8 -8
  92. package/components/modal/modal.css +43 -43
  93. package/components/nav/nav.css +40 -40
  94. package/components/nav-group/nav-group.css +52 -52
  95. package/components/nav-item/nav-item.css +44 -44
  96. package/components/noodles/noodles.css +31 -31
  97. package/components/option-card/option-card.css +69 -69
  98. package/components/otp-input/otp-input.css +30 -30
  99. package/components/page/page.css +18 -18
  100. package/components/pagination/pagination.css +61 -61
  101. package/components/pane/pane.css +57 -57
  102. package/components/pipeline-status/pipeline-status.css +65 -65
  103. package/components/popover/popover.css +17 -17
  104. package/components/progress/progress.css +23 -23
  105. package/components/progress-row/progress-row.css +17 -17
  106. package/components/radio/radio.css +39 -39
  107. package/components/range/range.css +55 -55
  108. package/components/rating/rating.css +28 -28
  109. package/components/richtext/richtext.css +133 -133
  110. package/components/row/row.css +19 -19
  111. package/components/search/search.css +5 -5
  112. package/components/segment/segment.css +24 -24
  113. package/components/segmented/segmented.css +25 -25
  114. package/components/select/select.css +84 -84
  115. package/components/skeleton/skeleton.css +14 -14
  116. package/components/slider/slider.css +46 -46
  117. package/components/spinner/class.js +69 -0
  118. package/components/spinner/spinner.a2ui.json +197 -0
  119. package/components/spinner/spinner.css +165 -0
  120. package/components/spinner/spinner.d.ts +26 -0
  121. package/components/spinner/spinner.examples.md +26 -0
  122. package/components/spinner/spinner.js +17 -0
  123. package/components/spinner/spinner.test.js +234 -0
  124. package/components/spinner/spinner.yaml +230 -0
  125. package/components/stack/stack.css +11 -11
  126. package/components/stat/stat.css +25 -25
  127. package/components/step-progress/step-progress.css +20 -20
  128. package/components/stepper/stepper.css +29 -29
  129. package/components/stream/stream.css +12 -12
  130. package/components/swatch/swatch.css +68 -68
  131. package/components/swiper/swiper.css +57 -57
  132. package/components/switch/switch.css +52 -52
  133. package/components/table/class.js +9 -0
  134. package/components/table/table.a2ui.json +1 -1
  135. package/components/table/table.css +162 -162
  136. package/components/table/table.d.ts +1 -1
  137. package/components/table/table.test.js +53 -0
  138. package/components/table/table.yaml +13 -1
  139. package/components/table-toolbar/table-toolbar.css +32 -32
  140. package/components/tabs/tabs.css +51 -51
  141. package/components/tag/tag.css +48 -48
  142. package/components/text/text.css +44 -44
  143. package/components/textarea/textarea.css +46 -46
  144. package/components/time-picker/class.js +693 -0
  145. package/components/time-picker/time-picker.a2ui.json +267 -0
  146. package/components/time-picker/time-picker.css +122 -0
  147. package/components/time-picker/time-picker.d.ts +75 -0
  148. package/components/time-picker/time-picker.examples.md +35 -0
  149. package/components/time-picker/time-picker.js +17 -0
  150. package/components/time-picker/time-picker.test.js +287 -0
  151. package/components/time-picker/time-picker.yaml +256 -0
  152. package/components/timeline/timeline.css +50 -50
  153. package/components/toast/toast.css +58 -58
  154. package/components/toggle-group/toggle-group.css +6 -6
  155. package/components/toggle-scheme/toggle-scheme.css +2 -2
  156. package/components/toolbar/toolbar.css +17 -17
  157. package/components/tooltip/tooltip.css +2 -2
  158. package/components/tree/tree.css +37 -37
  159. package/components/upload/upload.css +49 -49
  160. package/dist/icons-manifest.js +3 -3
  161. package/dist/web-components.min.css +1 -1
  162. package/dist/web-components.min.js +121 -83
  163. package/package.json +1 -1
  164. package/styles/components.css +8 -0
@@ -6,49 +6,49 @@
6
6
  consumers extending below the floor and is harmlessly redundant on
7
7
  engines without the bug. */
8
8
  nav-item-ui:hover {
9
- background: var(--nav-item-bg-hover);
10
- color: var(--nav-item-fg-hover);
9
+ background: var(--nav-item-bg-hover, var(--nav-item-bg-hover-default));
10
+ color: var(--nav-item-fg-hover, var(--nav-item-fg-hover-default));
11
11
  }
12
12
  nav-item-ui:hover [slot="icon"] {
13
- color: var(--nav-item-fg-hover);
13
+ color: var(--nav-item-fg-hover, var(--nav-item-fg-hover-default));
14
14
  }
15
15
  nav-item-ui[selected] {
16
- background: var(--nav-item-bg-selected);
17
- color: var(--nav-item-fg-selected);
16
+ background: var(--nav-item-bg-selected, var(--nav-item-bg-selected-default));
17
+ color: var(--nav-item-fg-selected, var(--nav-item-fg-selected-default));
18
18
  }
19
19
  nav-item-ui[selected] [slot="icon"] {
20
- color: var(--nav-item-icon-fg-selected);
20
+ color: var(--nav-item-icon-fg-selected, var(--nav-item-icon-fg-selected-default));
21
21
  }
22
22
  nav-item-ui[selected] [slot="icon"]:empty::before {
23
23
  content: '';
24
24
  width: 2px;
25
25
  height: 1em;
26
26
  border-radius: 1px;
27
- background: var(--nav-item-accent);
27
+ background: var(--nav-item-accent, var(--nav-item-accent-default));
28
28
  }
29
29
 
30
30
  @scope (nav-item-ui) {
31
31
  :where(:scope) {
32
- --nav-item-accent: var(--a-accent);
33
- --nav-item-row-height: var(--a-size);
34
- --nav-item-row-height-sm: var(--a-size-sm);
35
- --nav-item-row-height-lg: var(--a-size-lg);
36
- --nav-item-row-px: var(--a-ui-px);
37
- --nav-item-row-gap: var(--a-space-1);
38
- --nav-item-row-radius: var(--a-radius-md);
39
- --nav-item-font-size: var(--a-ui-size);
40
- --nav-item-font-size-sm: var(--a-ui-sm);
41
- --nav-item-font-size-lg: var(--a-ui-lg);
42
- --nav-item-font-weight: var(--a-weight-normal);
43
- --nav-item-fg: var(--a-ui-text-subtle);
44
- --nav-item-fg-hover: var(--a-ui-text-hover);
45
- --nav-item-fg-selected: var(--a-ui-text-selected);
46
- --nav-item-icon-fg: var(--a-ui-text-muted);
47
- --nav-item-icon-fg-selected: var(--nav-item-accent);
48
- --nav-item-bg-hover: var(--a-ui-bg-hover);
49
- --nav-item-bg-selected: var(--a-ui-bg-selected);
50
- --nav-item-icon-size: calc(var(--nav-item-row-height) - var(--a-space-2));
51
- --nav-item-badge-size: var(--a-ui-sm);
32
+ --nav-item-accent-default: var(--a-accent);
33
+ --nav-item-row-height-default: var(--a-size);
34
+ --nav-item-row-height-sm-default: var(--a-size-sm);
35
+ --nav-item-row-height-lg-default: var(--a-size-lg);
36
+ --nav-item-row-px-default: var(--a-ui-px);
37
+ --nav-item-row-gap-default: var(--a-space-1);
38
+ --nav-item-row-radius-default: var(--a-radius-md);
39
+ --nav-item-font-size-default: var(--a-ui-size);
40
+ --nav-item-font-size-sm-default: var(--a-ui-sm);
41
+ --nav-item-font-size-lg-default: var(--a-ui-lg);
42
+ --nav-item-font-weight-default: var(--a-weight-normal);
43
+ --nav-item-fg-default: var(--a-ui-text-subtle);
44
+ --nav-item-fg-hover-default: var(--a-ui-text-hover);
45
+ --nav-item-fg-selected-default: var(--a-ui-text-selected);
46
+ --nav-item-icon-fg-default: var(--a-ui-text-muted);
47
+ --nav-item-icon-fg-selected-default: var(--nav-item-accent, var(--nav-item-accent-default));
48
+ --nav-item-bg-hover-default: var(--a-ui-bg-hover);
49
+ --nav-item-bg-selected-default: var(--a-ui-bg-selected);
50
+ --nav-item-icon-size-default: calc(var(--nav-item-row-height, var(--nav-item-row-height-default)) - var(--a-space-2));
51
+ --nav-item-badge-size-default: var(--a-ui-sm);
52
52
  text-align: start; /* §text-align-reset — blocks inheritance from centered ancestors */
53
53
  }
54
54
 
@@ -56,12 +56,12 @@ nav-item-ui[selected] [slot="icon"]:empty::before {
56
56
  box-sizing: border-box;
57
57
  display: flex;
58
58
  align-items: center;
59
- gap: var(--nav-item-row-gap);
60
- height: var(--nav-item-row-height);
61
- padding: 0 var(--nav-item-row-px);
62
- border-radius: var(--nav-item-row-radius);
63
- font-size: var(--nav-item-font-size);
64
- color: var(--nav-item-fg);
59
+ gap: var(--nav-item-row-gap, var(--nav-item-row-gap-default));
60
+ height: var(--nav-item-row-height, var(--nav-item-row-height-default));
61
+ padding: 0 var(--nav-item-row-px, var(--nav-item-row-px-default));
62
+ border-radius: var(--nav-item-row-radius, var(--nav-item-row-radius-default));
63
+ font-size: var(--nav-item-font-size, var(--nav-item-font-size-default));
64
+ color: var(--nav-item-fg, var(--nav-item-fg-default));
65
65
  cursor: pointer;
66
66
  user-select: none;
67
67
  white-space: nowrap;
@@ -69,12 +69,12 @@ nav-item-ui[selected] [slot="icon"]:empty::before {
69
69
  background var(--nav-duration-fast) var(--nav-easing),
70
70
  color var(--nav-duration-fast) var(--nav-easing);
71
71
  outline: none;
72
- font-weight: var(--nav-item-font-weight);
72
+ font-weight: var(--nav-item-font-weight, var(--nav-item-font-weight-default));
73
73
  }
74
74
 
75
75
  :scope:focus-visible {
76
- background: var(--nav-item-bg-hover);
77
- color: var(--nav-item-fg-hover);
76
+ background: var(--nav-item-bg-hover, var(--nav-item-bg-hover-default));
77
+ color: var(--nav-item-fg-hover, var(--nav-item-fg-hover-default));
78
78
  outline: none;
79
79
  }
80
80
 
@@ -82,13 +82,13 @@ nav-item-ui[selected] [slot="icon"]:empty::before {
82
82
 
83
83
  /* Icon slot — always present, reserves space even when empty */
84
84
  [slot="icon"] {
85
- width: var(--nav-item-icon-size);
86
- height: var(--nav-item-icon-size);
85
+ width: var(--nav-item-icon-size, var(--nav-item-icon-size-default));
86
+ height: var(--nav-item-icon-size, var(--nav-item-icon-size-default));
87
87
  flex-shrink: 0;
88
88
  display: flex;
89
89
  align-items: center;
90
90
  justify-content: center;
91
- color: var(--nav-item-icon-fg);
91
+ color: var(--nav-item-icon-fg, var(--nav-item-icon-fg-default));
92
92
  transition: color var(--nav-duration-fast) var(--nav-easing);
93
93
  }
94
94
 
@@ -106,7 +106,7 @@ nav-item-ui[selected] [slot="icon"]:empty::before {
106
106
  }
107
107
 
108
108
  [slot="badge"] {
109
- font-size: var(--nav-item-badge-size);
109
+ font-size: var(--nav-item-badge-size, var(--nav-item-badge-size-default));
110
110
  color: var(--nav-item-badge-fg);
111
111
  background: var(--nav-item-badge-bg);
112
112
  padding: 1px var(--nav-item-badge-px);
@@ -153,13 +153,13 @@ nav-item-ui[selected] [slot="icon"]:empty::before {
153
153
 
154
154
  /* ── Size variants ── */
155
155
  :scope[size="sm"] {
156
- --nav-item-row-height: var(--nav-item-row-height-sm);
157
- --nav-item-font-size: var(--nav-item-font-size-sm);
156
+ --nav-item-row-height-default: var(--nav-item-row-height-sm, var(--nav-item-row-height-sm-default));
157
+ --nav-item-font-size-default: var(--nav-item-font-size-sm, var(--nav-item-font-size-sm-default));
158
158
  }
159
159
 
160
160
  :scope[size="lg"] {
161
- --nav-item-row-height: var(--nav-item-row-height-lg);
162
- --nav-item-font-size: var(--nav-item-font-size-lg);
161
+ --nav-item-row-height-default: var(--nav-item-row-height-lg, var(--nav-item-row-height-lg-default));
162
+ --nav-item-font-size-default: var(--nav-item-font-size-lg, var(--nav-item-font-size-lg-default));
163
163
  }
164
164
  }
165
165
 
@@ -1,22 +1,22 @@
1
1
  @scope (noodles-ui) {
2
2
  :where(:scope) {
3
3
  /* ── Tokens ── */
4
- --noodles-duration: var(--a-duration-fast);
5
- --noodles-easing: var(--a-easing);
6
- --noodles-stroke: var(--a-accent-bg);
4
+ --noodles-duration-default: var(--a-duration-fast);
5
+ --noodles-easing-default: var(--a-easing);
6
+ --noodles-stroke-default: var(--a-accent-bg);
7
7
  /* Component-intrinsic visual constants; no --a-space-* equivalent */
8
- --noodles-stroke-width: 2px;
9
- --noodles-stroke-readonly: var(--a-fg-muted);
8
+ --noodles-stroke-width-default: 2px;
9
+ --noodles-stroke-readonly-default: var(--a-fg-muted);
10
10
  /* Component-intrinsic visual constants; no --a-space-* equivalent */
11
- --noodles-port-size: 10px;
12
- --noodles-port-bg: var(--a-accent-bg);
13
- --noodles-port-border: var(--a-bg);
14
- --noodles-port-hover-ring: 0 0 0 3px var(--a-bg-muted);
15
- --noodles-port-drop-scale: 1.4;
16
- --noodles-port-drag-opacity: 0.4;
17
- --noodles-dash-length: 8;
18
- --noodles-dash-gap: 4;
19
- --noodles-anim-speed: 0.6s;
11
+ --noodles-port-size-default: 10px;
12
+ --noodles-port-bg-default: var(--a-accent-bg);
13
+ --noodles-port-border-default: var(--a-bg);
14
+ --noodles-port-hover-ring-default: 0 0 0 3px var(--a-bg-muted);
15
+ --noodles-port-drop-scale-default: 1.4;
16
+ --noodles-port-drag-opacity-default: 0.4;
17
+ --noodles-dash-length-default: 8;
18
+ --noodles-dash-gap-default: 4;
19
+ --noodles-anim-speed-default: 0.6s;
20
20
  }
21
21
 
22
22
  :scope {
@@ -41,25 +41,25 @@
41
41
 
42
42
  :scope > svg[data-noodle-svg] path {
43
43
  fill: none;
44
- stroke: var(--noodles-stroke);
45
- stroke-width: var(--noodles-stroke-width);
44
+ stroke: var(--noodles-stroke, var(--noodles-stroke-default));
45
+ stroke-width: var(--noodles-stroke-width, var(--noodles-stroke-width-default));
46
46
  stroke-linecap: round;
47
47
  stroke-linejoin: round;
48
48
  transition:
49
- stroke var(--noodles-duration) var(--noodles-easing),
50
- stroke-dasharray var(--noodles-duration) var(--noodles-easing);
49
+ stroke var(--noodles-duration, var(--noodles-duration-default)) var(--noodles-easing, var(--noodles-easing-default)),
50
+ stroke-dasharray var(--noodles-duration, var(--noodles-duration-default)) var(--noodles-easing, var(--noodles-easing-default));
51
51
  }
52
52
 
53
53
  /* ── State: readonly ── */
54
54
  :scope[readonly] > svg[data-noodle-svg] path {
55
- stroke: var(--noodles-stroke-readonly);
55
+ stroke: var(--noodles-stroke-readonly, var(--noodles-stroke-readonly-default));
56
56
  stroke-dasharray: 6 4;
57
57
  }
58
58
 
59
59
  /* ── State: animated ── */
60
60
  :scope[animated] > svg[data-noodle-svg] path {
61
- stroke-dasharray: var(--noodles-dash-length) var(--noodles-dash-gap);
62
- animation: noodle-march var(--noodles-anim-speed) linear infinite;
61
+ stroke-dasharray: var(--noodles-dash-length, var(--noodles-dash-length-default)) var(--noodles-dash-gap, var(--noodles-dash-gap-default));
62
+ animation: noodle-march var(--noodles-anim-speed, var(--noodles-anim-speed-default)) linear infinite;
63
63
  }
64
64
 
65
65
  @keyframes noodle-march {
@@ -71,33 +71,33 @@
71
71
  /* ── Port indicators ── */
72
72
  [data-noodle-port-indicator] {
73
73
  position: absolute;
74
- width: var(--noodles-port-size);
75
- height: var(--noodles-port-size);
74
+ width: var(--noodles-port-size, var(--noodles-port-size-default));
75
+ height: var(--noodles-port-size, var(--noodles-port-size-default));
76
76
  border-radius: 50%;
77
- background: var(--noodles-port-bg);
78
- border: 2px solid var(--noodles-port-border);
77
+ background: var(--noodles-port-bg, var(--noodles-port-bg-default));
78
+ border: 2px solid var(--noodles-port-border, var(--noodles-port-border-default));
79
79
  transform: translate(-50%, -50%);
80
80
  z-index: 2;
81
81
  cursor: crosshair;
82
82
  pointer-events: auto;
83
83
  transition:
84
- transform var(--noodles-duration) var(--noodles-easing),
85
- opacity var(--noodles-duration) var(--noodles-easing),
86
- box-shadow var(--noodles-duration) var(--noodles-easing);
84
+ transform var(--noodles-duration, var(--noodles-duration-default)) var(--noodles-easing, var(--noodles-easing-default)),
85
+ opacity var(--noodles-duration, var(--noodles-duration-default)) var(--noodles-easing, var(--noodles-easing-default)),
86
+ box-shadow var(--noodles-duration, var(--noodles-duration-default)) var(--noodles-easing, var(--noodles-easing-default));
87
87
  }
88
88
 
89
89
  [data-noodle-port-indicator]:hover {
90
- box-shadow: var(--noodles-port-hover-ring);
90
+ box-shadow: var(--noodles-port-hover-ring, var(--noodles-port-hover-ring-default));
91
91
  }
92
92
 
93
93
  /* ── State: drop ready ── */
94
94
  [data-noodle-drop-ready] {
95
- transform: translate(-50%, -50%) scale(var(--noodles-port-drop-scale));
95
+ transform: translate(-50%, -50%) scale(var(--noodles-port-drop-scale, var(--noodles-port-drop-scale-default)));
96
96
  }
97
97
 
98
98
  /* ── State: dragging ── */
99
99
  [data-noodle-dragging] {
100
- opacity: var(--noodles-port-drag-opacity);
100
+ opacity: var(--noodles-port-drag-opacity, var(--noodles-port-drag-opacity-default));
101
101
  }
102
102
 
103
103
  /* ── State: readonly ports ── */
@@ -2,83 +2,83 @@
2
2
  (Flavor B — attribute-removal restyle) both fail inside `@scope`.
3
3
  Selectors moved out. See docs/BROWSER-COMPAT.md §3a. */
4
4
  option-card-ui:not([checked]):not([disabled]):hover {
5
- background: var(--option-card-bg-hover);
6
- border-color: var(--option-card-border-hover);
5
+ background: var(--option-card-bg-hover, var(--option-card-bg-hover-default));
6
+ border-color: var(--option-card-border-hover, var(--option-card-border-hover-default));
7
7
  }
8
8
  option-card-ui[checked] > :not([slot]) {
9
9
  display: block;
10
10
  }
11
11
  option-card-ui[checked] {
12
- background: var(--option-card-bg-checked);
13
- border-color: var(--option-card-border-checked);
12
+ background: var(--option-card-bg-checked, var(--option-card-bg-checked-default));
13
+ border-color: var(--option-card-border-checked, var(--option-card-border-checked-default));
14
14
  }
15
15
  option-card-ui[checked]::before {
16
- border-color: var(--option-card-radio-fill);
16
+ border-color: var(--option-card-radio-fill, var(--option-card-radio-fill-default));
17
17
  background:
18
18
  radial-gradient(
19
19
  circle,
20
- var(--option-card-radio-dot) 0 30%,
21
- var(--option-card-radio-fill) 30% 100%
20
+ var(--option-card-radio-dot, var(--option-card-radio-dot-default)) 0 30%,
21
+ var(--option-card-radio-fill, var(--option-card-radio-fill-default)) 30% 100%
22
22
  );
23
23
  }
24
24
  option-card-ui[checked] > [slot="heading"] {
25
- color: var(--option-card-heading-color-checked);
25
+ color: var(--option-card-heading-color-checked, var(--option-card-heading-color-checked-default));
26
26
  }
27
27
  option-card-ui[checked] > [slot="icon"] {
28
- color: var(--option-card-icon-color-checked);
28
+ color: var(--option-card-icon-color-checked, var(--option-card-icon-color-checked-default));
29
29
  }
30
30
 
31
31
  @scope (option-card-ui) {
32
32
  :where(:scope) {
33
33
  /* ── Container ── */
34
- --option-card-padding-block: var(--a-space-3);
35
- --option-card-padding-inline: var(--a-space-4);
36
- --option-card-radius: var(--a-radius-md);
37
- --option-card-bg: var(--a-bg);
38
- --option-card-border: var(--a-border);
39
- --option-card-gap-x: var(--a-space-3);
40
- --option-card-gap-y: var(--a-space-1);
34
+ --option-card-padding-block-default: var(--a-space-3);
35
+ --option-card-padding-inline-default: var(--a-space-4);
36
+ --option-card-radius-default: var(--a-radius-md);
37
+ --option-card-bg-default: var(--a-bg);
38
+ --option-card-border-default: var(--a-border);
39
+ --option-card-gap-x-default: var(--a-space-3);
40
+ --option-card-gap-y-default: var(--a-space-1);
41
41
 
42
42
  /* ── State: hover ── */
43
- --option-card-bg-hover: var(--a-bg-muted);
44
- --option-card-border-hover: var(--a-fg-subtle);
43
+ --option-card-bg-hover-default: var(--a-bg-muted);
44
+ --option-card-border-hover-default: var(--a-fg-subtle);
45
45
 
46
46
  /* ── State: checked ── */
47
- --option-card-bg-checked: var(--a-accent-muted);
48
- --option-card-border-checked: var(--a-accent);
47
+ --option-card-bg-checked-default: var(--a-accent-muted);
48
+ --option-card-border-checked-default: var(--a-accent);
49
49
 
50
50
  /* ── Indicator (CSS radio circle, same size + recipe as <radio-ui>). */
51
- --option-card-radio-size: var(--a-toggle-size);
52
- --option-card-radio-bg: var(--a-bg);
53
- --option-card-radio-border: var(--a-border);
54
- --option-card-radio-fill: var(--a-accent);
51
+ --option-card-radio-size-default: var(--a-toggle-size);
52
+ --option-card-radio-bg-default: var(--a-bg);
53
+ --option-card-radio-border-default: var(--a-border);
54
+ --option-card-radio-fill-default: var(--a-accent);
55
55
  /* Mirror radio.css's --radio-fg-checked recipe: an always-light
56
56
  token rather than --a-accent-fg, which can flip dark depending
57
57
  on theme/scheme combos and produce a near-black inner dot
58
58
  against the accent disc. */
59
- --option-card-radio-dot: var(--a-chrome-light);
59
+ --option-card-radio-dot-default: var(--a-chrome-light);
60
60
 
61
61
  /* ── Typography ── */
62
- --option-card-heading-color: var(--a-fg);
63
- --option-card-heading-color-checked: var(--a-fg-strong);
64
- --option-card-heading-weight: var(--a-weight-medium);
65
- --option-card-heading-size: var(--a-ui-size);
66
- --option-card-desc-color: var(--a-fg-muted);
67
- --option-card-desc-size: var(--a-ui-sm);
68
- --option-card-desc-line-height: 1.4;
69
- --option-card-icon-color: var(--a-fg-subtle);
70
- --option-card-icon-color-checked: var(--a-fg-strong);
71
- --option-card-icon-size: 1.5rem;
62
+ --option-card-heading-color-default: var(--a-fg);
63
+ --option-card-heading-color-checked-default: var(--a-fg-strong);
64
+ --option-card-heading-weight-default: var(--a-weight-medium);
65
+ --option-card-heading-size-default: var(--a-ui-size);
66
+ --option-card-desc-color-default: var(--a-fg-muted);
67
+ --option-card-desc-size-default: var(--a-ui-sm);
68
+ --option-card-desc-line-height-default: 1.4;
69
+ --option-card-icon-color-default: var(--a-fg-subtle);
70
+ --option-card-icon-color-checked-default: var(--a-fg-strong);
71
+ --option-card-icon-size-default: 1.5rem;
72
72
 
73
73
  /* ── State: disabled ── */
74
- --option-card-disabled-opacity: 0.6;
74
+ --option-card-disabled-opacity-default: 0.6;
75
75
 
76
76
  /* ── Focus ── */
77
- --option-card-focus-ring: var(--a-focus-ring);
77
+ --option-card-focus-ring-default: var(--a-focus-ring);
78
78
 
79
79
  /* ── Transitions ── */
80
- --option-card-duration: var(--a-duration-fast);
81
- --option-card-easing: var(--a-easing);
80
+ --option-card-duration-default: var(--a-duration-fast);
81
+ --option-card-easing-default: var(--a-easing);
82
82
  }
83
83
 
84
84
  /* ── Base — grid: indicator | (heading + description). Optional icon
@@ -90,19 +90,19 @@ option-card-ui[checked] > [slot="icon"] {
90
90
  grid-template-areas:
91
91
  "indicator heading"
92
92
  "indicator description";
93
- column-gap: var(--option-card-gap-x);
94
- row-gap: var(--option-card-gap-y);
95
- padding: var(--option-card-padding-block) var(--option-card-padding-inline);
96
- border: 1px solid var(--option-card-border);
97
- border-radius: var(--option-card-radius);
98
- background: var(--option-card-bg);
93
+ column-gap: var(--option-card-gap-x, var(--option-card-gap-x-default));
94
+ row-gap: var(--option-card-gap-y, var(--option-card-gap-y-default));
95
+ padding: var(--option-card-padding-block, var(--option-card-padding-block-default)) var(--option-card-padding-inline, var(--option-card-padding-inline-default));
96
+ border: 1px solid var(--option-card-border, var(--option-card-border-default));
97
+ border-radius: var(--option-card-radius, var(--option-card-radius-default));
98
+ background: var(--option-card-bg, var(--option-card-bg-default));
99
99
  cursor: pointer;
100
100
  user-select: none;
101
101
  outline: none;
102
102
  transition:
103
- background var(--option-card-duration) var(--option-card-easing),
104
- border-color var(--option-card-duration) var(--option-card-easing),
105
- box-shadow var(--option-card-duration) var(--option-card-easing);
103
+ background var(--option-card-duration, var(--option-card-duration-default)) var(--option-card-easing, var(--option-card-easing-default)),
104
+ border-color var(--option-card-duration, var(--option-card-duration-default)) var(--option-card-easing, var(--option-card-easing-default)),
105
+ box-shadow var(--option-card-duration, var(--option-card-duration-default)) var(--option-card-easing, var(--option-card-easing-default));
106
106
  }
107
107
 
108
108
  /* When an icon slot is present, insert a third column for it
@@ -116,41 +116,41 @@ option-card-ui[checked] > [slot="icon"] {
116
116
  :scope > [slot="icon"] {
117
117
  grid-area: icon;
118
118
  align-self: start;
119
- color: var(--option-card-icon-color);
120
- --a-icon-size: var(--option-card-icon-size);
121
- transition: color var(--option-card-duration) var(--option-card-easing);
119
+ color: var(--option-card-icon-color, var(--option-card-icon-color-default));
120
+ --a-icon-size: var(--option-card-icon-size, var(--option-card-icon-size-default));
121
+ transition: color var(--option-card-duration, var(--option-card-duration-default)) var(--option-card-easing, var(--option-card-easing-default));
122
122
  }
123
123
 
124
124
  /* ── Indicator — pure CSS radio circle, no separate <radio-ui>. */
125
125
  :scope::before {
126
126
  content: '';
127
127
  grid-area: indicator;
128
- width: var(--option-card-radio-size);
129
- height: var(--option-card-radio-size);
130
- border: 1.5px solid var(--option-card-radio-border);
128
+ width: var(--option-card-radio-size, var(--option-card-radio-size-default));
129
+ height: var(--option-card-radio-size, var(--option-card-radio-size-default));
130
+ border: 1.5px solid var(--option-card-radio-border, var(--option-card-radio-border-default));
131
131
  border-radius: var(--a-radius-full);
132
- background: var(--option-card-radio-bg);
132
+ background: var(--option-card-radio-bg, var(--option-card-radio-bg-default));
133
133
  align-self: start;
134
134
  margin-block-start: 0.125rem;
135
135
  flex-shrink: 0;
136
136
  transition:
137
- background var(--option-card-duration) var(--option-card-easing),
138
- border-color var(--option-card-duration) var(--option-card-easing);
137
+ background var(--option-card-duration, var(--option-card-duration-default)) var(--option-card-easing, var(--option-card-easing-default)),
138
+ border-color var(--option-card-duration, var(--option-card-duration-default)) var(--option-card-easing, var(--option-card-easing-default));
139
139
  }
140
140
 
141
141
  /* ── Slots — heading + description ── */
142
142
  :scope > [slot="heading"] {
143
143
  grid-area: heading;
144
- color: var(--option-card-heading-color);
145
- font-weight: var(--option-card-heading-weight);
146
- font-size: var(--option-card-heading-size);
147
- transition: color var(--option-card-duration) var(--option-card-easing);
144
+ color: var(--option-card-heading-color, var(--option-card-heading-color-default));
145
+ font-weight: var(--option-card-heading-weight, var(--option-card-heading-weight-default));
146
+ font-size: var(--option-card-heading-size, var(--option-card-heading-size-default));
147
+ transition: color var(--option-card-duration, var(--option-card-duration-default)) var(--option-card-easing, var(--option-card-easing-default));
148
148
  }
149
149
  :scope > [slot="description"] {
150
150
  grid-area: description;
151
- color: var(--option-card-desc-color);
152
- font-size: var(--option-card-desc-size);
153
- line-height: var(--option-card-desc-line-height);
151
+ color: var(--option-card-desc-color, var(--option-card-desc-color-default));
152
+ font-size: var(--option-card-desc-size, var(--option-card-desc-size-default));
153
+ line-height: var(--option-card-desc-line-height, var(--option-card-desc-line-height-default));
154
154
  }
155
155
 
156
156
  /* ── Default slot — "spillover" content revealed when checked.
@@ -179,8 +179,8 @@ option-card-ui[checked] > [slot="icon"] {
179
179
  "icon indicator"
180
180
  "heading heading"
181
181
  "description description";
182
- column-gap: var(--option-card-gap-x);
183
- row-gap: var(--option-card-gap-y);
182
+ column-gap: var(--option-card-gap-x, var(--option-card-gap-x-default));
183
+ row-gap: var(--option-card-gap-y, var(--option-card-gap-y-default));
184
184
  padding: var(--a-space-4);
185
185
  align-items: start;
186
186
  }
@@ -188,7 +188,7 @@ option-card-ui[checked] > [slot="icon"] {
188
188
  grid-area: icon;
189
189
  justify-self: start;
190
190
  align-self: start;
191
- --option-card-icon-size: 1.75rem;
191
+ --option-card-icon-size-default: 1.75rem;
192
192
  }
193
193
  :scope[layout="tile"]::before {
194
194
  grid-area: indicator;
@@ -206,11 +206,11 @@ option-card-ui[checked] > [slot="icon"] {
206
206
  /* ── State: disabled ── */
207
207
  :scope[disabled] {
208
208
  cursor: not-allowed;
209
- opacity: var(--option-card-disabled-opacity);
209
+ opacity: var(--option-card-disabled-opacity, var(--option-card-disabled-opacity-default));
210
210
  }
211
211
 
212
212
  /* ── Focus ── */
213
213
  :scope:focus-visible {
214
- box-shadow: var(--option-card-focus-ring);
214
+ box-shadow: var(--option-card-focus-ring, var(--option-card-focus-ring-default));
215
215
  }
216
216
  }
@@ -1,23 +1,23 @@
1
1
  @scope (otp-input-ui) {
2
2
  :where(:scope) {
3
3
  /* ── Tokens ── */
4
- --otp-input-size: var(--a-size);
5
- --otp-input-gap: var(--a-space-2);
6
- --otp-input-radius: var(--a-radius-md);
7
- --otp-input-border: var(--a-ui-border);
8
- --otp-input-border-hover: var(--a-ui-border-hover);
9
- --otp-input-border-focus: var(--a-accent);
10
- --otp-input-bg-disabled: var(--a-ui-bg-disabled);
11
- --otp-input-fg-disabled: var(--a-ui-text-disabled);
12
- --otp-input-border-disabled: var(--a-ui-border-disabled);
13
- --otp-input-font: var(--a-font-family-code);
14
- --otp-input-font-size: var(--a-body-md);
15
- --otp-input-bg: var(--a-ui-bg);
16
- --otp-input-fg: var(--a-ui-text);
4
+ --otp-input-size-default: var(--a-size);
5
+ --otp-input-gap-default: var(--a-space-2);
6
+ --otp-input-radius-default: var(--a-radius-md);
7
+ --otp-input-border-default: var(--a-ui-border);
8
+ --otp-input-border-hover-default: var(--a-ui-border-hover);
9
+ --otp-input-border-focus-default: var(--a-accent);
10
+ --otp-input-bg-disabled-default: var(--a-ui-bg-disabled);
11
+ --otp-input-fg-disabled-default: var(--a-ui-text-disabled);
12
+ --otp-input-border-disabled-default: var(--a-ui-border-disabled);
13
+ --otp-input-font-default: var(--a-font-family-code);
14
+ --otp-input-font-size-default: var(--a-body-md);
15
+ --otp-input-bg-default: var(--a-ui-bg);
16
+ --otp-input-fg-default: var(--a-ui-text);
17
17
 
18
18
  /* ── Transitions ── */
19
- --otp-input-duration: var(--a-duration-fast);
20
- --otp-input-easing: var(--a-easing);
19
+ --otp-input-duration-default: var(--a-duration-fast);
20
+ --otp-input-easing-default: var(--a-easing);
21
21
  }
22
22
 
23
23
  :scope {
@@ -25,24 +25,24 @@
25
25
  box-sizing: border-box;
26
26
  display: flex;
27
27
  justify-content: space-around;
28
- gap: var(--otp-input-gap);
28
+ gap: var(--otp-input-gap, var(--otp-input-gap-default));
29
29
  }
30
30
 
31
31
  /* ── Digit inputs ── */
32
32
  [slot="digit"] {
33
33
  box-sizing: border-box;
34
- width: var(--otp-input-size);
35
- height: var(--otp-input-size);
34
+ width: var(--otp-input-size, var(--otp-input-size-default));
35
+ height: var(--otp-input-size, var(--otp-input-size-default));
36
36
  text-align: center;
37
- border: 1px solid var(--otp-input-border);
38
- border-radius: var(--otp-input-radius);
39
- background: var(--otp-input-bg);
40
- color: var(--otp-input-fg);
41
- font-family: var(--otp-input-font);
42
- font-size: var(--otp-input-font-size);
37
+ border: 1px solid var(--otp-input-border, var(--otp-input-border-default));
38
+ border-radius: var(--otp-input-radius, var(--otp-input-radius-default));
39
+ background: var(--otp-input-bg, var(--otp-input-bg-default));
40
+ color: var(--otp-input-fg, var(--otp-input-fg-default));
41
+ font-family: var(--otp-input-font, var(--otp-input-font-default));
42
+ font-size: var(--otp-input-font-size, var(--otp-input-font-size-default));
43
43
  line-height: 1;
44
44
  outline: none;
45
- transition: border-color var(--otp-input-duration) var(--otp-input-easing);
45
+ transition: border-color var(--otp-input-duration, var(--otp-input-duration-default)) var(--otp-input-easing, var(--otp-input-easing-default));
46
46
  /* Hide number spinner */
47
47
  -moz-appearance: textfield;
48
48
  }
@@ -53,11 +53,11 @@
53
53
  }
54
54
 
55
55
  [slot="digit"]:hover:not(:disabled) {
56
- border-color: var(--otp-input-border-hover);
56
+ border-color: var(--otp-input-border-hover, var(--otp-input-border-hover-default));
57
57
  }
58
58
 
59
59
  [slot="digit"]:focus {
60
- border-color: var(--otp-input-border-focus);
60
+ border-color: var(--otp-input-border-focus, var(--otp-input-border-focus-default));
61
61
  }
62
62
 
63
63
  /* ── Disabled ── */
@@ -65,13 +65,13 @@
65
65
  pointer-events: none;
66
66
  }
67
67
  :scope[disabled] [slot="digit"] {
68
- background: var(--otp-input-bg-disabled);
69
- color: var(--otp-input-fg-disabled);
68
+ background: var(--otp-input-bg-disabled, var(--otp-input-bg-disabled-default));
69
+ color: var(--otp-input-fg-disabled, var(--otp-input-fg-disabled-default));
70
70
  /* Dashed border rendered via SVG border-image for consistent ~8px
71
71
  dashes across browsers (native `border-style: dashed` is too short
72
72
  and varies by engine). The border-color fallback is used when
73
73
  border-image isn't supported. */
74
- border: 1px dashed var(--otp-input-border-disabled);
74
+ border: 1px dashed var(--otp-input-border-disabled, var(--otp-input-border-disabled-default));
75
75
  border-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='28' height='28' preserveAspectRatio='none'><rect x='0.5' y='0.5' width='27' height='27' fill='none' stroke='%23999' stroke-width='1' stroke-dasharray='8 6'/></svg>") 1 repeat;
76
76
  cursor: not-allowed;
77
77
  }