@womp/kookie-ui 0.25.2 → 0.26.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 (151) hide show
  1. package/components.css +225 -529
  2. package/dist/cjs/components/_internal/base-checkbox.props.d.ts +0 -6
  3. package/dist/cjs/components/_internal/base-checkbox.props.d.ts.map +1 -1
  4. package/dist/cjs/components/_internal/base-checkbox.props.js +1 -1
  5. package/dist/cjs/components/_internal/base-checkbox.props.js.map +3 -3
  6. package/dist/cjs/components/_internal/base-radio.props.d.ts +0 -6
  7. package/dist/cjs/components/_internal/base-radio.props.d.ts.map +1 -1
  8. package/dist/cjs/components/_internal/base-radio.props.js +1 -1
  9. package/dist/cjs/components/_internal/base-radio.props.js.map +3 -3
  10. package/dist/cjs/components/checkbox-group.d.ts.map +1 -1
  11. package/dist/cjs/components/checkbox-group.js +1 -1
  12. package/dist/cjs/components/checkbox-group.js.map +3 -3
  13. package/dist/cjs/components/checkbox-group.props.d.ts +0 -6
  14. package/dist/cjs/components/checkbox-group.props.d.ts.map +1 -1
  15. package/dist/cjs/components/checkbox-group.props.js +1 -1
  16. package/dist/cjs/components/checkbox-group.props.js.map +3 -3
  17. package/dist/cjs/components/checkbox.js +1 -1
  18. package/dist/cjs/components/checkbox.js.map +3 -3
  19. package/dist/cjs/components/checkbox.props.js +1 -1
  20. package/dist/cjs/components/checkbox.props.js.map +3 -3
  21. package/dist/cjs/components/index.js +2 -2
  22. package/dist/cjs/components/index.js.map +4 -4
  23. package/dist/cjs/components/radio-group.d.ts.map +1 -1
  24. package/dist/cjs/components/radio-group.js +1 -1
  25. package/dist/cjs/components/radio-group.js.map +4 -4
  26. package/dist/cjs/components/radio-group.props.d.ts +0 -6
  27. package/dist/cjs/components/radio-group.props.d.ts.map +1 -1
  28. package/dist/cjs/components/radio-group.props.js +1 -1
  29. package/dist/cjs/components/radio-group.props.js.map +4 -4
  30. package/dist/cjs/components/radio.js +1 -1
  31. package/dist/cjs/components/radio.js.map +3 -3
  32. package/dist/cjs/components/radio.props.js +1 -1
  33. package/dist/cjs/components/radio.props.js.map +3 -3
  34. package/dist/cjs/components/slider.js +1 -1
  35. package/dist/cjs/components/slider.js.map +3 -3
  36. package/dist/cjs/components/slider.props.d.ts +0 -6
  37. package/dist/cjs/components/slider.props.d.ts.map +1 -1
  38. package/dist/cjs/components/slider.props.js +1 -1
  39. package/dist/cjs/components/slider.props.js.map +3 -3
  40. package/dist/cjs/components/switch.js +1 -1
  41. package/dist/cjs/components/switch.js.map +3 -3
  42. package/dist/cjs/components/switch.props.d.ts +0 -6
  43. package/dist/cjs/components/switch.props.d.ts.map +1 -1
  44. package/dist/cjs/components/switch.props.js +1 -1
  45. package/dist/cjs/components/switch.props.js.map +3 -3
  46. package/dist/cjs/index.js +4 -4
  47. package/dist/cjs/index.js.map +4 -4
  48. package/dist/esm/chunk-37GC4A2O.js +3 -0
  49. package/dist/esm/chunk-37GC4A2O.js.map +7 -0
  50. package/dist/esm/chunk-4S5L25RO.js +3 -0
  51. package/dist/esm/chunk-4S5L25RO.js.map +7 -0
  52. package/dist/esm/chunk-6BB2A6VU.js +3 -0
  53. package/dist/esm/chunk-6BB2A6VU.js.map +7 -0
  54. package/dist/esm/chunk-CBWERXF4.js +3 -0
  55. package/dist/esm/chunk-CBWERXF4.js.map +7 -0
  56. package/dist/esm/{chunk-XPVRXQSW.js → chunk-FCKJD2PW.js} +2 -2
  57. package/dist/esm/chunk-HV7USGHD.js +3 -0
  58. package/dist/esm/chunk-HV7USGHD.js.map +7 -0
  59. package/dist/esm/chunk-IE5ACUZS.js +3 -0
  60. package/dist/esm/{chunk-ZDSY6CJL.js → chunk-JS23YQ4M.js} +2 -2
  61. package/dist/esm/chunk-M3NI3D6R.js +3 -0
  62. package/dist/esm/chunk-M3NI3D6R.js.map +7 -0
  63. package/dist/esm/{chunk-PZZJH2LR.js → chunk-NZCAGHCL.js} +2 -2
  64. package/dist/esm/chunk-R7THBMND.js +3 -0
  65. package/dist/esm/chunk-R7THBMND.js.map +7 -0
  66. package/dist/esm/{chunk-3CY6H4TE.js → chunk-YDBFIJHB.js} +2 -2
  67. package/dist/esm/components/_internal/base-checkbox.props.d.ts +0 -6
  68. package/dist/esm/components/_internal/base-checkbox.props.d.ts.map +1 -1
  69. package/dist/esm/components/_internal/base-checkbox.props.js +1 -1
  70. package/dist/esm/components/_internal/base-radio.props.d.ts +0 -6
  71. package/dist/esm/components/_internal/base-radio.props.d.ts.map +1 -1
  72. package/dist/esm/components/_internal/base-radio.props.js +1 -1
  73. package/dist/esm/components/checkbox-group.d.ts.map +1 -1
  74. package/dist/esm/components/checkbox-group.js +1 -1
  75. package/dist/esm/components/checkbox-group.props.d.ts +0 -6
  76. package/dist/esm/components/checkbox-group.props.d.ts.map +1 -1
  77. package/dist/esm/components/checkbox-group.props.js +1 -1
  78. package/dist/esm/components/checkbox.js +1 -1
  79. package/dist/esm/components/checkbox.props.js +1 -1
  80. package/dist/esm/components/index.js +1 -1
  81. package/dist/esm/components/radio-group.d.ts.map +1 -1
  82. package/dist/esm/components/radio-group.js +1 -1
  83. package/dist/esm/components/radio-group.props.d.ts +0 -6
  84. package/dist/esm/components/radio-group.props.d.ts.map +1 -1
  85. package/dist/esm/components/radio-group.props.js +1 -1
  86. package/dist/esm/components/radio.js +1 -1
  87. package/dist/esm/components/radio.props.js +1 -1
  88. package/dist/esm/components/slider.js +1 -1
  89. package/dist/esm/components/slider.props.d.ts +0 -6
  90. package/dist/esm/components/slider.props.d.ts.map +1 -1
  91. package/dist/esm/components/slider.props.js +1 -1
  92. package/dist/esm/components/switch.js +1 -1
  93. package/dist/esm/components/switch.props.d.ts +0 -6
  94. package/dist/esm/components/switch.props.d.ts.map +1 -1
  95. package/dist/esm/components/switch.props.js +1 -1
  96. package/dist/esm/index.js +1 -1
  97. package/package.json +1 -1
  98. package/src/components/_internal/base-button.css +14 -6
  99. package/src/components/_internal/base-card.css +2 -2
  100. package/src/components/_internal/base-checkbox.css +39 -199
  101. package/src/components/_internal/base-checkbox.props.ts +0 -3
  102. package/src/components/_internal/base-dialog.css +1 -1
  103. package/src/components/_internal/base-menu.css +3 -2
  104. package/src/components/_internal/base-radio.css +38 -173
  105. package/src/components/_internal/base-radio.props.ts +0 -3
  106. package/src/components/accordion.css +2 -2
  107. package/src/components/avatar.css +2 -2
  108. package/src/components/chatbar.css +3 -4
  109. package/src/components/checkbox-group.css +1 -1
  110. package/src/components/checkbox-group.tsx +0 -2
  111. package/src/components/checkbox.css +1 -1
  112. package/src/components/chip.css +1 -1
  113. package/src/components/popover.css +1 -1
  114. package/src/components/radio-group.props.tsx +0 -5
  115. package/src/components/radio-group.tsx +0 -2
  116. package/src/components/segmented-control.css +4 -1
  117. package/src/components/select.css +14 -31
  118. package/src/components/shell.css +16 -16
  119. package/src/components/sidebar.css +10 -0
  120. package/src/components/slider.css +9 -40
  121. package/src/components/slider.props.tsx +0 -3
  122. package/src/components/switch.css +11 -52
  123. package/src/components/switch.props.tsx +0 -3
  124. package/src/components/text-area.css +16 -31
  125. package/src/components/text-field.css +16 -32
  126. package/src/components/toolbar.css +14 -1
  127. package/src/styles/tokens/color.css +31 -2
  128. package/src/styles/tokens/shadow.css +50 -122
  129. package/styles.css +270 -563
  130. package/tokens/base.css +45 -34
  131. package/tokens.css +45 -34
  132. package/dist/esm/chunk-2Z2I27ZS.js +0 -3
  133. package/dist/esm/chunk-2Z2I27ZS.js.map +0 -7
  134. package/dist/esm/chunk-AZHSPPBV.js +0 -3
  135. package/dist/esm/chunk-AZHSPPBV.js.map +0 -7
  136. package/dist/esm/chunk-BMKUGZ4I.js +0 -3
  137. package/dist/esm/chunk-FFJE25TJ.js +0 -3
  138. package/dist/esm/chunk-FFJE25TJ.js.map +0 -7
  139. package/dist/esm/chunk-FM3GBCX5.js +0 -3
  140. package/dist/esm/chunk-FM3GBCX5.js.map +0 -7
  141. package/dist/esm/chunk-N5H7C3PZ.js +0 -3
  142. package/dist/esm/chunk-N5H7C3PZ.js.map +0 -7
  143. package/dist/esm/chunk-RB5VHWAW.js +0 -3
  144. package/dist/esm/chunk-RB5VHWAW.js.map +0 -7
  145. package/dist/esm/chunk-ZFDHZEWN.js +0 -3
  146. package/dist/esm/chunk-ZFDHZEWN.js.map +0 -7
  147. /package/dist/esm/{chunk-XPVRXQSW.js.map → chunk-FCKJD2PW.js.map} +0 -0
  148. /package/dist/esm/{chunk-BMKUGZ4I.js.map → chunk-IE5ACUZS.js.map} +0 -0
  149. /package/dist/esm/{chunk-ZDSY6CJL.js.map → chunk-JS23YQ4M.js.map} +0 -0
  150. /package/dist/esm/{chunk-PZZJH2LR.js.map → chunk-NZCAGHCL.js.map} +0 -0
  151. /package/dist/esm/{chunk-3CY6H4TE.js.map → chunk-YDBFIJHB.js.map} +0 -0
@@ -3,15 +3,12 @@ import { colorPropDef } from '../../props/color.prop.js';
3
3
  import type { PropDef } from '../../props/prop-def.js';
4
4
 
5
5
  const sizes = ['1', '2', '3', '4'] as const;
6
- const variants = ['raised', 'solid', 'soft', 'outline', 'surface'] as const;
7
6
 
8
7
  const baseRadioPropDefs = {
9
8
  size: { type: 'enum', className: 'kui-r-size', values: sizes, default: '2', responsive: true },
10
- variant: { type: 'enum', className: 'kui-variant', values: variants, default: 'raised' },
11
9
  ...colorPropDef,
12
10
  } satisfies {
13
11
  size: PropDef<(typeof sizes)[number]>;
14
- variant: PropDef<(typeof variants)[number]>;
15
12
  };
16
13
 
17
14
  export { baseRadioPropDefs };
@@ -30,7 +30,7 @@
30
30
 
31
31
  :where(.kui-AccordionRoot:where(.kui-variant-raised)) {
32
32
  background-color: var(--color-surface);
33
- box-shadow: var(--shadow-2);
33
+ box-shadow: var(--surface-chrome);
34
34
  }
35
35
 
36
36
  :where(.kui-AccordionRoot:where(.kui-variant-soft)) {
@@ -158,7 +158,7 @@
158
158
  @media (hover: hover) {
159
159
  :where(.kui-AccordionRoot:where(.kui-variant-raised):hover) {
160
160
  background-color: var(--accent-2);
161
- box-shadow: var(--shadow-2);
161
+ box-shadow: var(--surface-chrome);
162
162
  }
163
163
  }
164
164
 
@@ -389,7 +389,7 @@
389
389
  top: 0;
390
390
  color: var(--accent-ink);
391
391
  background-color: var(--color-surface);
392
- box-shadow: var(--shadow-2);
392
+ box-shadow: var(--control-chrome);
393
393
  }
394
394
 
395
395
  &:where([data-disabled]) :where(.kui-AvatarFallback) {
@@ -405,7 +405,7 @@
405
405
  @media (hover: hover) {
406
406
  &:where(:hover:not(:disabled, [data-disabled])) {
407
407
  background-color: var(--neutral-2);
408
- box-shadow: var(--shadow-2);
408
+ box-shadow: var(--control-chrome);
409
409
 
410
410
  & :where(.kui-AvatarFallback) {
411
411
  background-color: inherit;
@@ -387,26 +387,25 @@
387
387
  * *
388
388
  ***************************************************************************************************/
389
389
 
390
- /* Raised variant - uses --color-surface and shadow */
390
+ /* Raised variant: a surface, as v2's composer is. It casts the surface role. */
391
391
  .kui-ChatbarBox:where(.kui-variant-raised) {
392
392
  --text-area-border-width: 0px;
393
393
  --v-selection-color: var(--focus-a5);
394
394
  --v-focus-color: var(--focus-8);
395
395
 
396
396
  background-color: var(--color-surface);
397
- box-shadow: var(--shadow-2);
397
+ box-shadow: var(--surface-chrome);
398
398
 
399
399
  /* Hover effects */
400
400
  @media (hover: hover) {
401
401
  &:where(:hover:not(:focus-within)):where(:not(.kui-ChatbarRoot:is([data-disabled], [data-readonly]) *)) {
402
402
  background-color: var(--accent-2);
403
- box-shadow: var(--shadow-3);
404
403
  }
405
404
  }
406
405
 
407
406
  /* Focus state - accent ring */
408
407
  &:where(:focus-within) {
409
- box-shadow: var(--shadow-2), 0 0 0 2px var(--v-focus-color, var(--focus-8));
408
+ box-shadow: var(--surface-chrome), 0 0 0 2px var(--v-focus-color, var(--focus-8));
410
409
  }
411
410
  }
412
411
 
@@ -12,7 +12,7 @@
12
12
  width: fit-content;
13
13
  }
14
14
 
15
- /* The disabled cursor and colours live in the base mark, per variant. */
15
+ /* The disabled cursor and colours live in the base mark. */
16
16
  .kui-CheckboxGroupItemCheckbox {
17
17
  &:where(:focus-visible)::before {
18
18
  outline: var(--focus-ring-width, 2px) solid var(--focus-8);
@@ -41,7 +41,6 @@ const CheckboxGroupRoot = React.forwardRef<CheckboxGroupRootElement, CheckboxGro
41
41
  {
42
42
  color = checkboxGroupRootPropDefs.color.default,
43
43
  size: sizeProp,
44
- variant = checkboxGroupRootPropDefs.variant.default,
45
44
  ...props
46
45
  }: ScopedProps<CheckboxGroupRootProps>,
47
46
  forwardedRef,
@@ -54,7 +53,6 @@ const CheckboxGroupRoot = React.forwardRef<CheckboxGroupRootElement, CheckboxGro
54
53
  scope={__scopeCheckboxGroup}
55
54
  color={color}
56
55
  size={size}
57
- variant={variant}
58
56
  >
59
57
  <CheckboxGroupPrimitive.Root
60
58
  {...checkboxGroupScope}
@@ -1,6 +1,6 @@
1
1
  @import './_internal/base-checkbox.css';
2
2
 
3
- /* The disabled cursor and colours live in the base mark, per variant. */
3
+ /* The disabled cursor and colours live in the base mark. */
4
4
  .kui-CheckboxRoot {
5
5
  &:where(:focus-visible)::before {
6
6
  outline: var(--focus-ring-width, 2px) solid var(--focus-8);
@@ -150,7 +150,7 @@
150
150
  position: relative;
151
151
  top: var(--raised-elevation-offset);
152
152
  color: var(--accent-ink);
153
- box-shadow: var(--shadow-2);
153
+ box-shadow: var(--control-chrome);
154
154
 
155
155
  --raised-surface: var(--color-surface);
156
156
  background-color: var(--raised-surface);
@@ -1,6 +1,6 @@
1
1
  .kui-PopoverContent {
2
2
  background-color: var(--color-surface);
3
- box-shadow: var(--shadow-5);
3
+ box-shadow: var(--floating-chrome);
4
4
  min-width: var(--radix-popover-trigger-width);
5
5
  outline: 0;
6
6
  overflow: auto;
@@ -1,21 +1,16 @@
1
- import { baseRadioPropDefs } from './_internal/base-radio.props.js';
2
1
  import { asChildPropDef } from '../props/as-child.prop.js';
3
2
  import { colorPropDef } from '../props/color.prop.js';
4
3
 
5
4
  import type { PropDef } from '../props/prop-def.js';
6
5
 
7
6
  const sizes = ['1', '2', '3', '4'] as const;
8
- // The same list as Radio: a group offers exactly what its items can draw.
9
- const variants = baseRadioPropDefs.variant.values;
10
7
 
11
8
  const radioGroupRootPropDefs = {
12
9
  ...asChildPropDef,
13
10
  size: { type: 'enum', className: 'kui-r-size', values: sizes, default: '2', responsive: true },
14
- variant: { type: 'enum', className: 'kui-variant', values: variants, default: 'raised' },
15
11
  ...colorPropDef,
16
12
  } satisfies {
17
13
  size: PropDef<(typeof sizes)[number]>;
18
- variant: PropDef<(typeof variants)[number]>;
19
14
  };
20
15
 
21
16
  export { radioGroupRootPropDefs };
@@ -39,7 +39,6 @@ const RadioGroupRoot = React.forwardRef<RadioGroupRootElement, RadioGroupRootPro
39
39
  {
40
40
  color = radioGroupRootPropDefs.color.default,
41
41
  size: sizeProp,
42
- variant = radioGroupRootPropDefs.variant.default,
43
42
  ...props
44
43
  }: ScopedProps<RadioGroupRootProps>,
45
44
  forwardedRef
@@ -52,7 +51,6 @@ const RadioGroupRoot = React.forwardRef<RadioGroupRootElement, RadioGroupRootPro
52
51
  scope={__scopeRadioGroup}
53
52
  color={color}
54
53
  size={size}
55
- variant={variant}
56
54
  >
57
55
  <RadioGroupPrimitive.Root
58
56
  {...radioGroupScope}
@@ -171,7 +171,7 @@
171
171
  position: absolute;
172
172
  border-radius: max(calc(var(--border-width-standard) * 0.5), calc(var(--segmented-control-border-radius) - var(--border-width-standard)));
173
173
  background-color: var(--segmented-control-indicator-background-color);
174
- box-shadow: var(--shadow-2);
174
+ box-shadow: var(--control-chrome);
175
175
  content: '';
176
176
  }
177
177
 
@@ -472,7 +472,10 @@
472
472
  .kui-SegmentedControlIndicator::before {
473
473
  background-color: Highlight;
474
474
  }
475
+ /* The browser paints a Canvas backplate behind forced text, which covered the chosen label
476
+ * with a white box. The chosen segment opts out and paints its own system pair. */
475
477
  .kui-SegmentedControlItem:where([data-state='on']) {
478
+ forced-color-adjust: none;
476
479
  color: HighlightText;
477
480
  }
478
481
  .kui-SegmentedControlRoot:where([data-disabled]),
@@ -53,7 +53,7 @@
53
53
  overflow: hidden;
54
54
  z-index: 200; /* Above dialogs (100) so select inside dialogs/sheets work */
55
55
  background-color: var(--color-surface);
56
- box-shadow: var(--shadow-5);
56
+ box-shadow: var(--floating-chrome);
57
57
 
58
58
  &:where([data-side]) {
59
59
  min-width: var(--radix-select-trigger-width);
@@ -194,14 +194,13 @@
194
194
  * *
195
195
  ***************************************************************************************************/
196
196
 
197
- /* raised */
197
+ /* raised: the default. A field, as in v2: a flat soft fill with a faint edge, no shadow. */
198
198
 
199
199
  .kui-SelectTrigger:where(.kui-variant-raised) {
200
200
  position: relative;
201
- top: var(--raised-elevation-offset);
202
201
  color: var(--accent-ink);
203
- background-color: var(--color-surface);
204
- box-shadow: var(--shadow-2);
202
+ background-color: var(--field-fill);
203
+ box-shadow: var(--control-chrome);
205
204
 
206
205
  &:where(:focus-visible) {
207
206
  outline: 2px solid var(--focus-8);
@@ -210,26 +209,21 @@
210
209
 
211
210
  @media (hover: hover) {
212
211
  &:where(:hover:not(:disabled)) {
213
- background-color: var(--accent-2);
214
- box-shadow: var(--shadow-2);
212
+ background-color: var(--field-fill-hover);
215
213
  }
216
214
  }
217
215
 
218
- &:where([data-state='open']) {
219
- background-color: var(--accent-3);
220
- }
221
-
216
+ &:where([data-state='open']),
222
217
  &:where(:active:not([data-state='open'], [data-disabled])) {
223
- background-color: var(--accent-3);
218
+ background-color: var(--neutral-5);
224
219
  }
225
220
 
226
221
  &:where(:disabled) {
227
222
  color: var(--neutral-a8);
228
- background-color: var(--neutral-a3);
229
- box-shadow: none;
223
+ background-color: var(--field-fill-disabled);
224
+ box-shadow: inset 0 0 0 1px var(--field-edge-disabled);
230
225
  outline: none;
231
226
  cursor: default;
232
- top: 0;
233
227
  }
234
228
 
235
229
  &:where([data-placeholder]) {
@@ -423,27 +417,16 @@
423
417
  * Only the border and the focus ring move; the fill stays the variant's.
424
418
  */
425
419
  .kui-SelectTrigger:where([aria-invalid='true']) {
426
- &:where(:not(.kui-variant-raised)) {
427
- box-shadow: inset 0 0 0 1px var(--red-6);
420
+ box-shadow: inset 0 0 0 1px var(--red-6);
428
421
 
429
- @media (hover: hover) {
430
- &:where(:hover:not(:disabled)) {
431
- box-shadow: inset 0 0 0 1px var(--red-7);
432
- }
433
- }
434
- &:where([data-state='open'], :active) {
422
+ @media (hover: hover) {
423
+ &:where(:hover:not(:disabled)) {
435
424
  box-shadow: inset 0 0 0 1px var(--red-7);
436
425
  }
437
426
  }
438
427
 
439
- &:where(.kui-variant-raised) {
440
- box-shadow: var(--shadow-2), inset 0 0 0 1px var(--red-6);
441
-
442
- @media (hover: hover) {
443
- &:where(:hover:not(:disabled)) {
444
- box-shadow: var(--shadow-2), inset 0 0 0 1px var(--red-7);
445
- }
446
- }
428
+ &:where([data-state='open'], :active) {
429
+ box-shadow: inset 0 0 0 1px var(--red-7);
447
430
  }
448
431
 
449
432
  &:where(:focus-visible) {
@@ -465,7 +465,7 @@
465
465
  --kui-shell-row: 1 / -1;
466
466
  --kui-shell-col: 1 / -1;
467
467
  --kui-shell-surface: var(--color-surface);
468
- --kui-shell-shadow: var(--shadow-5);
468
+ --kui-shell-shadow: var(--dialog-chrome);
469
469
  --kui-shell-edge: 1px;
470
470
  --kui-shell-cap: calc(100% - var(--space-9) - var(--kui-shell-start, 0px));
471
471
  --kui-shell-offset: var(--shell-rail-offset, 0px);
@@ -479,7 +479,7 @@
479
479
  --kui-shell-row: 2 / 3;
480
480
  --kui-shell-col: 1 / -1;
481
481
  --kui-shell-surface: var(--color-surface);
482
- --kui-shell-shadow: var(--shadow-4);
482
+ --kui-shell-shadow: var(--surface-chrome);
483
483
  --kui-shell-edge: 1px;
484
484
  --kui-shell-cap: initial;
485
485
  --kui-shell-offset: var(--shell-rail-offset, 0px);
@@ -512,7 +512,7 @@
512
512
  --kui-shell-row: 1 / -1;
513
513
  --kui-shell-col: 1 / -1;
514
514
  --kui-shell-surface: var(--color-surface);
515
- --kui-shell-shadow: var(--shadow-5);
515
+ --kui-shell-shadow: var(--dialog-chrome);
516
516
  --kui-shell-edge: 1px;
517
517
  --kui-shell-cap: calc(100% - var(--space-9) - var(--kui-shell-start, 0px));
518
518
  --kui-shell-offset: var(--shell-rail-offset, 0px);
@@ -526,7 +526,7 @@
526
526
  --kui-shell-row: 2 / 3;
527
527
  --kui-shell-col: 1 / -1;
528
528
  --kui-shell-surface: var(--color-surface);
529
- --kui-shell-shadow: var(--shadow-4);
529
+ --kui-shell-shadow: var(--surface-chrome);
530
530
  --kui-shell-edge: 1px;
531
531
  --kui-shell-cap: initial;
532
532
  --kui-shell-offset: var(--shell-rail-offset, 0px);
@@ -567,7 +567,7 @@
567
567
  --kui-shell-row: 1 / -1;
568
568
  --kui-shell-col: 1 / -1;
569
569
  --kui-shell-surface: var(--color-surface);
570
- --kui-shell-shadow: var(--shadow-5);
570
+ --kui-shell-shadow: var(--dialog-chrome);
571
571
  --kui-shell-edge: 1px;
572
572
  --kui-shell-cap: calc(100% - var(--space-9) - var(--kui-shell-start, 0px));
573
573
  --kui-shell-offset: var(--shell-rail-offset, 0px);
@@ -581,7 +581,7 @@
581
581
  --kui-shell-row: 2 / 3;
582
582
  --kui-shell-col: 1 / -1;
583
583
  --kui-shell-surface: var(--color-surface);
584
- --kui-shell-shadow: var(--shadow-4);
584
+ --kui-shell-shadow: var(--surface-chrome);
585
585
  --kui-shell-edge: 1px;
586
586
  --kui-shell-cap: initial;
587
587
  --kui-shell-offset: var(--shell-rail-offset, 0px);
@@ -623,7 +623,7 @@
623
623
  --kui-shell-row: 1 / -1;
624
624
  --kui-shell-col: 1 / -1;
625
625
  --kui-shell-surface: var(--color-surface);
626
- --kui-shell-shadow: var(--shadow-5);
626
+ --kui-shell-shadow: var(--dialog-chrome);
627
627
  --kui-shell-edge: 1px;
628
628
  --kui-shell-cap: calc(100% - var(--space-9) - var(--kui-shell-start, 0px));
629
629
  --kui-shell-offset: var(--shell-rail-offset, 0px);
@@ -637,7 +637,7 @@
637
637
  --kui-shell-row: 2 / 3;
638
638
  --kui-shell-col: 1 / -1;
639
639
  --kui-shell-surface: var(--color-surface);
640
- --kui-shell-shadow: var(--shadow-4);
640
+ --kui-shell-shadow: var(--surface-chrome);
641
641
  --kui-shell-edge: 1px;
642
642
  --kui-shell-cap: initial;
643
643
  --kui-shell-offset: var(--shell-rail-offset, 0px);
@@ -679,7 +679,7 @@
679
679
  --kui-shell-row: 1 / -1;
680
680
  --kui-shell-col: 1 / -1;
681
681
  --kui-shell-surface: var(--color-surface);
682
- --kui-shell-shadow: var(--shadow-5);
682
+ --kui-shell-shadow: var(--dialog-chrome);
683
683
  --kui-shell-edge: 1px;
684
684
  --kui-shell-cap: calc(100% - var(--space-9) - var(--kui-shell-start, 0px));
685
685
  --kui-shell-offset: var(--shell-rail-offset, 0px);
@@ -693,7 +693,7 @@
693
693
  --kui-shell-row: 2 / 3;
694
694
  --kui-shell-col: 1 / -1;
695
695
  --kui-shell-surface: var(--color-surface);
696
- --kui-shell-shadow: var(--shadow-4);
696
+ --kui-shell-shadow: var(--surface-chrome);
697
697
  --kui-shell-edge: 1px;
698
698
  --kui-shell-cap: initial;
699
699
  --kui-shell-offset: var(--shell-rail-offset, 0px);
@@ -735,7 +735,7 @@
735
735
  --kui-shell-row: 1 / -1;
736
736
  --kui-shell-col: 1 / -1;
737
737
  --kui-shell-surface: var(--color-surface);
738
- --kui-shell-shadow: var(--shadow-5);
738
+ --kui-shell-shadow: var(--dialog-chrome);
739
739
  --kui-shell-edge: 1px;
740
740
  --kui-shell-cap: calc(100% - var(--space-9) - var(--kui-shell-start, 0px));
741
741
  --kui-shell-offset: var(--shell-rail-offset, 0px);
@@ -749,7 +749,7 @@
749
749
  --kui-shell-row: 2 / 3;
750
750
  --kui-shell-col: 1 / -1;
751
751
  --kui-shell-surface: var(--color-surface);
752
- --kui-shell-shadow: var(--shadow-4);
752
+ --kui-shell-shadow: var(--surface-chrome);
753
753
  --kui-shell-edge: 1px;
754
754
  --kui-shell-cap: initial;
755
755
  --kui-shell-offset: var(--shell-rail-offset, 0px);
@@ -791,7 +791,7 @@
791
791
  --kui-shell-row: 1 / -1;
792
792
  --kui-shell-col: 1 / -1;
793
793
  --kui-shell-surface: var(--color-surface);
794
- --kui-shell-shadow: var(--shadow-5);
794
+ --kui-shell-shadow: var(--dialog-chrome);
795
795
  --kui-shell-edge: 1px;
796
796
  --kui-shell-cap: calc(100% - var(--space-9) - var(--kui-shell-start, 0px));
797
797
  --kui-shell-offset: var(--shell-rail-offset, 0px);
@@ -805,7 +805,7 @@
805
805
  --kui-shell-row: 2 / 3;
806
806
  --kui-shell-col: 1 / -1;
807
807
  --kui-shell-surface: var(--color-surface);
808
- --kui-shell-shadow: var(--shadow-4);
808
+ --kui-shell-shadow: var(--surface-chrome);
809
809
  --kui-shell-edge: 1px;
810
810
  --kui-shell-cap: initial;
811
811
  --kui-shell-offset: var(--shell-rail-offset, 0px);
@@ -839,7 +839,7 @@
839
839
  --kui-shell-row: 2 / 3;
840
840
  --kui-shell-col: 1 / -1;
841
841
  --kui-shell-surface: var(--color-surface);
842
- --kui-shell-shadow: var(--shadow-4);
842
+ --kui-shell-shadow: var(--surface-chrome);
843
843
  --kui-shell-edge: 1px;
844
844
  --kui-shell-offset: var(--shell-rail-offset, 0px);
845
845
  --kui-shell-handle: none;
@@ -897,7 +897,7 @@
897
897
  margin: var(--shell-inset-gap);
898
898
  border-radius: var(--radius-surface-1);
899
899
  background: var(--color-page);
900
- box-shadow: var(--shadow-2);
900
+ box-shadow: var(--surface-chrome);
901
901
  }
902
902
 
903
903
  /*
@@ -964,3 +964,13 @@
964
964
  color: var(--accent-solid-contrast);
965
965
  }
966
966
  }
967
+
968
+ /* High contrast drops background colours, so the current row lost its only mark. It takes the
969
+ * system highlight pair instead, as a chosen segment does. */
970
+ @media (forced-colors: active) {
971
+ .kui-SidebarMenuButton:where([data-active]) {
972
+ forced-color-adjust: none;
973
+ background-color: Highlight;
974
+ color: HighlightText;
975
+ }
976
+ }
@@ -81,7 +81,7 @@
81
81
  inset: calc(var(--slider-thumb-inset-factor) * var(--slider-thumb-overshoot-base, var(--slider-track-size)) * -1);
82
82
  background-color: var(--accent-solid-thumb);
83
83
  border-radius: var(--slider-thumb-radius);
84
- box-shadow: var(--slider-thumb-box-shadow, var(--shadow-2));
84
+ box-shadow: var(--slider-thumb-box-shadow, var(--grip-chrome));
85
85
  cursor: pointer;
86
86
  }
87
87
 
@@ -142,54 +142,23 @@
142
142
 
143
143
  /***************************************************************************************************
144
144
  * *
145
- * VARIANTS *
145
+ * THE LOOK *
146
146
  * *
147
147
  ***************************************************************************************************/
148
148
 
149
- /* surface */
149
+ /* One look, as in v2. The track is the switch's well, a soft fill with no edge; the range is the
150
+ * accent solid; the thumb is the switch's grip. */
150
151
 
151
- .kui-SliderRoot:where(.kui-variant-surface) {
152
- & :where(.kui-SliderTrack) {
153
- background-color: var(--neutral-2);
154
- box-shadow: inset 0 0 0 1px var(--neutral-6);
155
-
156
- &:where([data-disabled]) {
157
- box-shadow: inset 0 0 0 1px var(--neutral-5);
158
- }
159
- }
160
-
161
- & :where(.kui-SliderRange) {
162
- background-color: var(--accent-solid);
163
- }
164
- }
165
-
166
- /* soft */
167
-
168
- .kui-SliderRoot:where(.kui-variant-soft) {
169
- & :where(.kui-SliderTrack) {
170
- background-color: var(--neutral-3);
171
- }
172
-
173
- & :where(.kui-SliderRange) {
174
- background-color: var(--accent-solid);
175
- }
152
+ .kui-SliderTrack {
153
+ background-color: var(--color-track);
176
154
  }
177
155
 
178
- /* outline */
179
-
180
- .kui-SliderRoot:where(.kui-variant-outline) {
181
- & :where(.kui-SliderTrack) {
182
- /* Base state: no background, just border */
183
- box-shadow: inset 0 0 0 1px var(--neutral-6);
184
- }
185
-
186
- & :where(.kui-SliderRange) {
187
- background-color: var(--accent-solid);
188
- }
156
+ .kui-SliderRange {
157
+ background-color: var(--accent-solid);
189
158
  }
190
159
 
191
160
  /* all disabled Sliders: a colour remap, never opacity, and a default cursor.
192
- * These come after every variant at the same specificity, so they win by order. */
161
+ * These come after the look at the same specificity, so they win by order. */
193
162
 
194
163
  [data-disabled] {
195
164
  .kui-SliderRoot:where(&) {
@@ -4,18 +4,15 @@ import { radiusPropDef } from '../props/radius.prop.js';
4
4
  import type { PropDef } from '../props/prop-def.js';
5
5
 
6
6
  const sizes = ['1', '2', '3', '4'] as const;
7
- const variants = ['surface', 'soft', 'outline'] as const;
8
7
 
9
8
  const sliderPropDefs = {
10
9
  size: { type: 'enum', className: 'kui-r-size', values: sizes, default: '2', responsive: true },
11
- variant: { type: 'enum', className: 'kui-variant', values: variants, default: 'surface' },
12
10
  showTickLabels: { type: 'boolean' },
13
11
  snapToTicks: { type: 'boolean' },
14
12
  ...colorPropDef,
15
13
  ...radiusPropDef,
16
14
  } satisfies {
17
15
  size: PropDef<(typeof sizes)[number]>;
18
- variant: PropDef<(typeof variants)[number]>;
19
16
  showTickLabels: PropDef<boolean>;
20
17
  snapToTicks: PropDef<boolean>;
21
18
  };
@@ -30,13 +30,14 @@
30
30
  }
31
31
 
32
32
  .kui-SwitchThumb {
33
- background-color: white;
33
+ /* The grip: the surface colour, near-white in dark. */
34
+ background-color: var(--color-thumb);
34
35
  position: absolute;
35
36
  inset-inline-start: var(--switch-thumb-inset);
36
37
  width: var(--switch-thumb-size);
37
38
  height: var(--switch-thumb-size);
38
39
  border-radius: 9999px;
39
- box-shadow: var(--shadow-2);
40
+ box-shadow: var(--grip-chrome);
40
41
 
41
42
  &:where([data-state='checked']) {
42
43
  background-color: var(--accent-solid-thumb);
@@ -82,75 +83,33 @@
82
83
 
83
84
  /***************************************************************************************************
84
85
  * *
85
- * VARIANTS *
86
+ * THE LOOK *
86
87
  * *
87
88
  ***************************************************************************************************/
88
89
 
89
- /* surface */
90
+ /* One look, as in v2. Off, the track is a well: a soft fill with no edge. On, it is the accent
91
+ * solid. Hover is one step darker, press two. Disabled switches take neither. */
90
92
 
91
- .kui-SwitchRoot:where(.kui-variant-surface) {
93
+ .kui-SwitchRoot {
92
94
  &::before {
93
- background-color: var(--neutral-2);
94
- box-shadow: inset 0 0 0 1px var(--neutral-6);
95
- }
96
-
97
- &:where([data-state='checked'])::before {
98
- background-color: var(--accent-solid);
95
+ background-color: var(--color-track);
99
96
  box-shadow: none;
100
97
  }
101
- }
102
-
103
- /* soft */
104
-
105
- .kui-SwitchRoot:where(.kui-variant-soft) {
106
- &::before {
107
- background-color: var(--neutral-3);
108
- }
109
98
 
110
99
  &:where([data-state='checked'])::before {
111
100
  background-color: var(--accent-solid);
112
101
  }
113
- }
114
-
115
- /* outline */
116
-
117
- .kui-SwitchRoot:where(.kui-variant-outline) {
118
- &::before {
119
- /* Base state: no background, just border */
120
- box-shadow: inset 0 0 0 1px var(--neutral-6);
121
- }
122
-
123
- &:where([data-state='checked'])::before {
124
- background-color: var(--accent-solid);
125
- box-shadow: none;
126
- }
127
- }
128
-
129
- /* Hover is one step up the variant's own ramp, press two. Disabled switches take neither. */
130
-
131
- .kui-SwitchRoot {
132
- --switch-off-hover: var(--neutral-a2);
133
- --switch-off-active: var(--neutral-a3);
134
-
135
- &:where(.kui-variant-surface) {
136
- --switch-off-hover: var(--neutral-3);
137
- --switch-off-active: var(--neutral-4);
138
- }
139
- &:where(.kui-variant-soft) {
140
- --switch-off-hover: var(--neutral-4);
141
- --switch-off-active: var(--neutral-5);
142
- }
143
102
 
144
103
  @media (hover: hover) {
145
104
  &:where(:hover:not([data-disabled]))::before {
146
- background-color: var(--switch-off-hover);
105
+ background-color: var(--color-track-hover);
147
106
  }
148
107
  &:where(:hover:not([data-disabled]):is([data-state='checked']))::before {
149
108
  background-color: var(--accent-solid-hover);
150
109
  }
151
110
  }
152
111
  &:where(:active:not([data-disabled]))::before {
153
- background-color: var(--switch-off-active);
112
+ background-color: var(--color-track-active);
154
113
  }
155
114
  &:where(:active:not([data-disabled]):is([data-state='checked']))::before {
156
115
  background-color: var(--accent-solid-active);
@@ -158,7 +117,7 @@
158
117
  }
159
118
 
160
119
  /* all disabled Switches: a colour remap, never opacity, and a default cursor.
161
- * These come after every variant at the same specificity, so they win by order. */
120
+ * These come after the look at the same specificity, so they win by order. */
162
121
 
163
122
  [data-disabled] {
164
123
  .kui-SwitchRoot:where(&) {
@@ -3,15 +3,12 @@ import { colorPropDef } from '../props/color.prop.js';
3
3
  import type { PropDef } from '../props/prop-def.js';
4
4
 
5
5
  const sizes = ['1', '2', '3', '4'] as const;
6
- const variants = ['surface', 'soft', 'outline'] as const;
7
6
 
8
7
  const switchPropDefs = {
9
8
  size: { type: 'enum', className: 'kui-r-size', values: sizes, default: '2', responsive: true },
10
- variant: { type: 'enum', className: 'kui-variant', values: variants, default: 'surface' },
11
9
  ...colorPropDef,
12
10
  } satisfies {
13
11
  size: PropDef<(typeof sizes)[number]>;
14
- variant: PropDef<(typeof variants)[number]>;
15
12
  };
16
13
 
17
14
  export { switchPropDefs };