@xsynaptic/sonic-ui 0.18.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +12 -2
  3. package/dist/default/elements/button.js +0 -5
  4. package/dist/default/elements/dial.js +0 -7
  5. package/dist/default/elements/display-element.js +0 -5
  6. package/dist/default/elements/envelope.js +0 -6
  7. package/dist/default/elements/meter.js +0 -1
  8. package/dist/default/elements/number.js +0 -7
  9. package/dist/default/elements/segmented.js +0 -5
  10. package/dist/default/elements/slider.js +0 -7
  11. package/dist/default/elements/sonic-element.js +3 -1
  12. package/dist/default/elements/switch.js +0 -1
  13. package/dist/default/elements/toggle.js +0 -5
  14. package/dist/default/elements/value-element.js +8 -4
  15. package/dist/default/elements/wave-element.js +7 -8
  16. package/dist/default/elements/xy.js +0 -7
  17. package/dist/default/index.js +2 -1
  18. package/dist/default/lib/clock.js +23 -0
  19. package/dist/default/lib/spoken-duration.js +30 -0
  20. package/dist/default/lib/waveform-buckets.js +7 -1
  21. package/dist/dev/elements/button.js +12 -5
  22. package/dist/dev/elements/button.js.map +1 -1
  23. package/dist/dev/elements/dial.js +14 -7
  24. package/dist/dev/elements/dial.js.map +1 -1
  25. package/dist/dev/elements/display-element.js +2 -2
  26. package/dist/dev/elements/display-element.js.map +1 -1
  27. package/dist/dev/elements/envelope.js +17 -6
  28. package/dist/dev/elements/envelope.js.map +1 -1
  29. package/dist/dev/elements/meter.js +1 -1
  30. package/dist/dev/elements/meter.js.map +1 -1
  31. package/dist/dev/elements/number.js +13 -7
  32. package/dist/dev/elements/number.js.map +1 -1
  33. package/dist/dev/elements/segmented.js +12 -5
  34. package/dist/dev/elements/segmented.js.map +1 -1
  35. package/dist/dev/elements/slider.js +14 -7
  36. package/dist/dev/elements/slider.js.map +1 -1
  37. package/dist/dev/elements/sonic-element.d.ts +13 -2
  38. package/dist/dev/elements/sonic-element.js +63 -11
  39. package/dist/dev/elements/sonic-element.js.map +1 -1
  40. package/dist/dev/elements/split.js.map +1 -1
  41. package/dist/dev/elements/switch.js +7 -1
  42. package/dist/dev/elements/switch.js.map +1 -1
  43. package/dist/dev/elements/toggle.js +12 -5
  44. package/dist/dev/elements/toggle.js.map +1 -1
  45. package/dist/dev/elements/value-element.d.ts +6 -0
  46. package/dist/dev/elements/value-element.js +8 -4
  47. package/dist/dev/elements/value-element.js.map +1 -1
  48. package/dist/dev/elements/wave-element.d.ts +2 -1
  49. package/dist/dev/elements/wave-element.js +21 -8
  50. package/dist/dev/elements/wave-element.js.map +1 -1
  51. package/dist/dev/elements/waveform.d.ts +1 -1
  52. package/dist/dev/elements/xy.js +14 -7
  53. package/dist/dev/elements/xy.js.map +1 -1
  54. package/dist/dev/index.d.ts +3 -2
  55. package/dist/dev/index.js +2 -1
  56. package/dist/dev/lib/clock.d.ts +5 -0
  57. package/dist/dev/lib/clock.js +24 -0
  58. package/dist/dev/lib/clock.js.map +1 -0
  59. package/dist/dev/lib/mirror-children.js.map +1 -1
  60. package/dist/dev/lib/owned-control.js.map +1 -1
  61. package/dist/dev/lib/spoken-duration.js +31 -0
  62. package/dist/dev/lib/spoken-duration.js.map +1 -0
  63. package/dist/dev/lib/waveform-buckets.d.ts +2 -2
  64. package/dist/dev/lib/waveform-buckets.js +7 -1
  65. package/dist/dev/lib/waveform-buckets.js.map +1 -1
  66. package/dist/skins/amber.css +1 -0
  67. package/dist/skins/ivory.css +1 -0
  68. package/dist/skins/lime.css +1 -0
  69. package/dist/skins/slate.css +1 -0
  70. package/dist/styles/button.css +29 -5
  71. package/dist/styles/dial.css +10 -9
  72. package/dist/styles/envelope.css +10 -4
  73. package/dist/styles/led.css +5 -1
  74. package/dist/styles/material/arc.css +3 -2
  75. package/dist/styles/material/bracket.css +2 -2
  76. package/dist/styles/material/cap.css +33 -12
  77. package/dist/styles/material/core.css +4 -0
  78. package/dist/styles/material/glass.css +1 -1
  79. package/dist/styles/material/groove.css +4 -3
  80. package/dist/styles/material/keycap.css +3 -2
  81. package/dist/styles/material/lens.css +1 -1
  82. package/dist/styles/material/pane.css +5 -4
  83. package/dist/styles/material/readout.css +6 -6
  84. package/dist/styles/material/well.css +2 -2
  85. package/dist/styles/meter.css +2 -7
  86. package/dist/styles/number.css +5 -1
  87. package/dist/styles/panel.css +4 -3
  88. package/dist/styles/ring.css +1 -1
  89. package/dist/styles/screen.css +5 -1
  90. package/dist/styles/segmented.css +17 -4
  91. package/dist/styles/slider.css +9 -3
  92. package/dist/styles/spectrum.css +16 -3
  93. package/dist/styles/switch.css +35 -10
  94. package/dist/styles/toggle.css +14 -7
  95. package/dist/styles/waveform.css +15 -4
  96. package/dist/styles/wavestrip.css +11 -3
  97. package/dist/styles/xy.css +9 -5
  98. package/package.json +1 -6
  99. package/dist/default/dat.js +0 -52
  100. package/dist/dev/dat.d.ts +0 -20
  101. package/dist/dev/dat.js +0 -53
  102. package/dist/dev/dat.js.map +0 -1
@@ -117,7 +117,11 @@
117
117
  &::after {
118
118
  background: radial-gradient(
119
119
  closest-side,
120
- color-mix(in oklab, var(--_sonic-lit) calc(100% - 45% * var(--_sonic-relief)), #fff),
120
+ color-mix(
121
+ in oklab,
122
+ var(--_sonic-lit) calc(100% - 45% * var(--_sonic-relief)),
123
+ var(--_sonic-shine)
124
+ ),
121
125
  var(--_sonic-lit)
122
126
  );
123
127
  }
@@ -13,9 +13,10 @@
13
13
  );
14
14
  --_sonic-arc-shade: radial-gradient(
15
15
  closest-side,
16
- rgb(0 0 0 / calc(0.55 * var(--_sonic-relief))) calc(100% - var(--_sonic-arc-width)),
16
+ rgb(from var(--_sonic-shade) r g b / calc(0.55 * var(--_sonic-relief)))
17
+ calc(100% - var(--_sonic-arc-width)),
17
18
  transparent calc(100% - var(--_sonic-arc-width) * 0.4),
18
- rgb(0 0 0 / calc(0.25 * var(--_sonic-relief))) 100%
19
+ rgb(from var(--_sonic-shade) r g b / calc(0.25 * var(--_sonic-relief))) 100%
19
20
  );
20
21
  }
21
22
  }
@@ -19,8 +19,8 @@
19
19
  );
20
20
  scale: 0.6;
21
21
  transition:
22
- opacity 120ms ease-out,
23
- scale 120ms ease-out;
22
+ opacity var(--_sonic-fade-duration) ease-out,
23
+ scale var(--_sonic-fade-duration) ease-out;
24
24
  }
25
25
 
26
26
  :state(dragging) > * > .sonic-xy-bracket,
@@ -23,36 +23,57 @@
23
23
  --_sonic-lit-disabled: color-mix(in oklab, var(--_sonic-ink) 25%, var(--_sonic-unlit));
24
24
  --_sonic-skirt: linear-gradient(
25
25
  var(--_sonic-light-fall),
26
- color-mix(in oklab, var(--_sonic-cap) calc(100% - 30% * var(--_sonic-relief)), #fff),
27
- color-mix(in oklab, var(--_sonic-cap) calc(100% - 45% * var(--_sonic-relief)), #000)
26
+ color-mix(
27
+ in oklab,
28
+ var(--_sonic-cap) calc(100% - 30% * var(--_sonic-relief)),
29
+ var(--_sonic-shine)
30
+ ),
31
+ color-mix(
32
+ in oklab,
33
+ var(--_sonic-cap) calc(100% - 45% * var(--_sonic-relief)),
34
+ var(--_sonic-shade)
35
+ )
28
36
  );
29
37
  --_sonic-face: linear-gradient(
30
38
  var(--_sonic-light-fall),
31
- color-mix(in oklab, var(--_sonic-cap) calc(100% - 15% * var(--_sonic-relief)), #000),
32
- color-mix(in oklab, var(--_sonic-cap) calc(100% - 10% * var(--_sonic-relief)), #fff)
39
+ color-mix(
40
+ in oklab,
41
+ var(--_sonic-cap) calc(100% - 15% * var(--_sonic-relief)),
42
+ var(--_sonic-shade)
43
+ ),
44
+ color-mix(
45
+ in oklab,
46
+ var(--_sonic-cap) calc(100% - 10% * var(--_sonic-relief)),
47
+ var(--_sonic-shine)
48
+ )
33
49
  );
34
50
  --_sonic-sheen: linear-gradient(
35
51
  105deg,
36
52
  transparent 20%,
37
- rgb(255 255 255 / calc(0.1 * var(--_sonic-relief))) 45%,
53
+ rgb(from var(--_sonic-shine) r g b / calc(0.1 * var(--_sonic-relief))) 45%,
38
54
  transparent 55%,
39
- rgb(0 0 0 / calc(0.06 * var(--_sonic-relief))) 80%
55
+ rgb(from var(--_sonic-shade) r g b / calc(0.06 * var(--_sonic-relief))) 80%
40
56
  );
41
57
  --_sonic-press-transition:
42
- scale 60ms cubic-bezier(0.4, 0, 0.2, 1), translate 60ms cubic-bezier(0.4, 0, 0.2, 1),
43
- box-shadow 60ms cubic-bezier(0.4, 0, 0.2, 1);
58
+ scale var(--_sonic-press-duration) cubic-bezier(0.4, 0, 0.2, 1),
59
+ translate var(--_sonic-press-duration) cubic-bezier(0.4, 0, 0.2, 1),
60
+ box-shadow var(--_sonic-press-duration) cubic-bezier(0.4, 0, 0.2, 1);
44
61
  --_sonic-face-shadow:
45
62
  inset var(--_sonic-cast-x) var(--_sonic-cast-y) calc(1.5 * var(--_sonic-unit))
46
- rgb(0 0 0 / calc(0.35 * var(--_sonic-relief))),
63
+ rgb(from var(--_sonic-shade) r g b / calc(0.35 * var(--_sonic-relief))),
47
64
  calc(0.5 * var(--_sonic-cast-x)) calc(0.5 * var(--_sonic-cast-y)) var(--_sonic-unit)
48
- rgb(255 255 255 / calc(0.12 * var(--_sonic-relief)));
65
+ rgb(from var(--_sonic-shine) r g b / calc(0.12 * var(--_sonic-relief)));
49
66
  --_sonic-rim-width: max(1px, round(0.75 * var(--_sonic-unit), var(--_sonic-snap)));
50
67
  --_sonic-rim: 0 0 0 var(--_sonic-rim-width)
51
68
  var(
52
69
  --sonic-cap-edge,
53
- color-mix(in oklab, var(--_sonic-cap) calc(100% - 60% * var(--_sonic-relief)), #000)
70
+ color-mix(
71
+ in oklab,
72
+ var(--_sonic-cap) calc(100% - 60% * var(--_sonic-relief)),
73
+ var(--_sonic-shade)
74
+ )
54
75
  );
55
- --_sonic-drop-shade: rgb(0 0 0 / calc(0.65 * var(--_sonic-relief)));
76
+ --_sonic-drop-shade: rgb(from var(--_sonic-shade) r g b / calc(0.65 * var(--_sonic-relief)));
56
77
  --_sonic-focus-shadow: 0 0 transparent;
57
78
  --_sonic-focus-glow: 0 0 max(4px, 3 * var(--_sonic-unit)) max(1px, 0.5 * var(--_sonic-unit))
58
79
  color-mix(in oklab, var(--_sonic-focus) calc(60% * var(--_sonic-focus-strength)), transparent);
@@ -32,6 +32,10 @@
32
32
  ) {
33
33
  --_sonic-unlit: var(--sonic-unlit, oklch(27.4% 0.005 286deg));
34
34
  --_sonic-relief: var(--sonic-relief, 0);
35
+ --_sonic-shade: var(--sonic-shade, #000);
36
+ --_sonic-shine: var(--sonic-shine, #fff);
37
+ --_sonic-press-duration: var(--sonic-press-duration, 60ms);
38
+ --_sonic-fade-duration: var(--sonic-fade-duration, 120ms);
35
39
  --_sonic-light-tilt: var(--sonic-light-tilt, 17deg);
36
40
  --_sonic-light-fall: calc(180deg - var(--_sonic-light-tilt));
37
41
  --_sonic-cast-x: calc(sin(var(--_sonic-light-tilt)) * var(--_sonic-unit));
@@ -29,7 +29,7 @@
29
29
  color-mix(
30
30
  in oklab,
31
31
  var(--_sonic-glass) calc(100% - 12% * var(--_sonic-glass-depth, var(--_sonic-relief))),
32
- #fff
32
+ var(--_sonic-shine)
33
33
  ),
34
34
  var(--_sonic-glass)
35
35
  )
@@ -2,9 +2,10 @@
2
2
  :is(.sonic-meter, .sonic-slider) {
3
3
  --_sonic-groove:
4
4
  inset var(--_sonic-cast-x) var(--_sonic-cast-y) calc(0.75 * var(--_sonic-unit))
5
- rgb(0 0 0 / calc(0.55 * var(--_sonic-relief))),
6
- inset 0 0 calc(0.5 * var(--_sonic-unit)) rgb(0 0 0 / calc(0.3 * var(--_sonic-relief))),
5
+ rgb(from var(--_sonic-shade) r g b / calc(0.55 * var(--_sonic-relief))),
6
+ inset 0 0 calc(0.5 * var(--_sonic-unit))
7
+ rgb(from var(--_sonic-shade) r g b / calc(0.3 * var(--_sonic-relief))),
7
8
  calc(0.5 * var(--_sonic-cast-x)) calc(0.5 * var(--_sonic-cast-y)) 0
8
- rgb(255 255 255 / calc(0.06 * var(--_sonic-relief)));
9
+ rgb(from var(--_sonic-shine) r g b / calc(0.06 * var(--_sonic-relief)));
9
10
  }
10
11
  }
@@ -18,11 +18,12 @@
18
18
  );
19
19
  --_sonic-engraving: drop-shadow(
20
20
  calc(-0.4 * var(--_sonic-cast-x)) calc(-0.4 * var(--_sonic-cast-y))
21
- calc(0.4 * var(--_sonic-unit)) rgb(0 0 0 / calc(0.3 * var(--_sonic-relief)))
21
+ calc(0.4 * var(--_sonic-unit))
22
+ rgb(from var(--_sonic-shade) r g b / calc(0.3 * var(--_sonic-relief)))
22
23
  )
23
24
  drop-shadow(
24
25
  calc(0.3 * var(--_sonic-cast-x)) calc(0.3 * var(--_sonic-cast-y)) 0
25
- rgb(255 255 255 / calc(0.07 * var(--_sonic-relief)))
26
+ rgb(from var(--_sonic-shine) r g b / calc(0.07 * var(--_sonic-relief)))
26
27
  );
27
28
  }
28
29
 
@@ -2,7 +2,7 @@
2
2
  :is(.sonic-led, .sonic-meter) {
3
3
  --_sonic-lens-glint: linear-gradient(
4
4
  var(--_sonic-light-fall),
5
- rgb(255 255 255 / calc(0.1 * var(--_sonic-relief))),
5
+ rgb(from var(--_sonic-shine) r g b / calc(0.1 * var(--_sonic-relief))),
6
6
  transparent 60%
7
7
  );
8
8
  --_sonic-lens-glass: var(--sonic-lens, color-mix(in oklab, var(--_sonic-unlit) 60%, #000));
@@ -44,24 +44,25 @@
44
44
  background:
45
45
  linear-gradient(
46
46
  var(--_sonic-light-fall),
47
- rgb(255 255 255 / calc(0.07 * var(--_sonic-glass-depth))),
47
+ rgb(from var(--_sonic-shine) r g b / calc(0.07 * var(--_sonic-glass-depth))),
48
48
  transparent 45%
49
49
  ),
50
50
  radial-gradient(
51
51
  farthest-corner,
52
52
  transparent 55%,
53
- rgb(0 0 0 / calc(0.4 * var(--_sonic-glass-texture)))
53
+ rgb(from var(--_sonic-shade) r g b / calc(0.4 * var(--_sonic-glass-texture)))
54
54
  ),
55
55
  repeating-linear-gradient(
56
56
  to bottom,
57
- rgb(0 0 0 / calc(0.025 * var(--_sonic-glass-texture))) 0
57
+ rgb(from var(--_sonic-shade) r g b / calc(0.025 * var(--_sonic-glass-texture))) 0
58
58
  calc(var(--_sonic-glass-pitch) / 2),
59
59
  transparent 0 var(--_sonic-glass-pitch)
60
60
  );
61
61
  border-radius: inherit;
62
62
  box-shadow:
63
63
  var(--_sonic-well),
64
- inset 0 0 calc(3 * var(--_sonic-glass-depth) * var(--_sonic-unit)) rgb(0 0 0 / 45%);
64
+ inset 0 0 calc(3 * var(--_sonic-glass-depth) * var(--_sonic-unit))
65
+ rgb(from var(--_sonic-shade) r g b / 45%);
65
66
  }
66
67
 
67
68
  @media (forced-colors: none) {
@@ -46,16 +46,16 @@
46
46
  border-radius: calc(0.25 * var(--_sonic-readout-size));
47
47
  box-shadow:
48
48
  calc(2 * var(--_sonic-cast-x)) calc(2 * var(--_sonic-cast-y)) calc(6 * var(--_sonic-unit))
49
- rgb(0 0 0 / calc(0.55 * var(--_sonic-relief))),
49
+ rgb(from var(--_sonic-shade) r g b / calc(0.55 * var(--_sonic-relief))),
50
50
  inset 0 0 0 max(1px, round(var(--_sonic-unit), var(--_sonic-snap)))
51
- rgb(255 255 255 / calc(0.08 * var(--_sonic-relief)));
51
+ rgb(from var(--_sonic-shine) r g b / calc(0.08 * var(--_sonic-relief)));
52
52
  opacity: 0;
53
53
  translate: 0 calc(0.15 * var(--_sonic-readout-size));
54
54
  transition:
55
- opacity 120ms ease-out,
56
- translate 120ms ease-out,
57
- display 120ms allow-discrete,
58
- overlay 120ms allow-discrete;
55
+ opacity var(--_sonic-fade-duration) ease-out,
56
+ translate var(--_sonic-fade-duration) ease-out,
57
+ display var(--_sonic-fade-duration) allow-discrete,
58
+ overlay var(--_sonic-fade-duration) allow-discrete;
59
59
 
60
60
  /* Grid only while open; engines keep the flip a closed readout took against a filtered ancestor */
61
61
  &:popover-open {
@@ -16,9 +16,9 @@
16
16
  inset calc(var(--_sonic-well-depth) * var(--_sonic-cast-x))
17
17
  calc(var(--_sonic-well-depth) * var(--_sonic-cast-y))
18
18
  calc(2 * var(--_sonic-well-depth) * var(--_sonic-unit))
19
- rgb(0 0 0 / calc(0.6 * var(--_sonic-relief))),
19
+ rgb(from var(--_sonic-shade) r g b / calc(0.6 * var(--_sonic-relief))),
20
20
  calc(0.5 * var(--_sonic-well-depth) * var(--_sonic-cast-x))
21
21
  calc(0.5 * var(--_sonic-well-depth) * var(--_sonic-cast-y)) 0
22
- rgb(255 255 255 / calc(0.06 * var(--_sonic-relief)));
22
+ rgb(from var(--_sonic-shine) r g b / calc(0.06 * var(--_sonic-relief)));
23
23
  }
24
24
  }
@@ -263,18 +263,13 @@
263
263
  position: absolute;
264
264
  inset: 0;
265
265
  content: '';
266
- background: linear-gradient(
267
- var(--_sonic-light-fall),
268
- rgb(255 255 255 / calc(0.1 * var(--_sonic-relief))),
269
- transparent 60%
270
- )
271
- 0 100% / 100% var(--_sonic-meter-pitch) repeat-y;
266
+ background: var(--_sonic-lens-glint) 0 100% / 100% var(--_sonic-meter-pitch) repeat-y;
272
267
  }
273
268
 
274
269
  :state(ladder) > .sonic-meter > .sonic-meter-bar::after {
275
270
  background: radial-gradient(
276
271
  circle var(--_sonic-meter-ladder-radius),
277
- rgb(255 255 255 / calc(0.45 * var(--_sonic-relief))),
272
+ rgb(from var(--_sonic-shine) r g b / calc(0.45 * var(--_sonic-relief))),
278
273
  transparent
279
274
  )
280
275
  0 100% / 100% var(--_sonic-meter-pitch) repeat-y;
@@ -31,6 +31,7 @@
31
31
 
32
32
  .sonic-number {
33
33
  --_sonic-number-radius-ratio: var(--sonic-number-radius-ratio, 0.15);
34
+ --_sonic-number-radius-own: calc(var(--_sonic-number-size) * var(--sonic-number-radius-ratio));
34
35
  --_sonic-number-inset-ratio: var(--sonic-number-inset-ratio, 0.2);
35
36
  --_sonic-number-text-ratio: var(--sonic-number-text-ratio, 0.45);
36
37
  --_sonic-number-travel: var(--sonic-number-travel, 160px);
@@ -44,7 +45,10 @@
44
45
  line-height: 1;
45
46
  touch-action: pan-x;
46
47
  cursor: ns-resize;
47
- border-radius: calc(var(--_sonic-number-size) * var(--_sonic-number-radius-ratio));
48
+ border-radius: var(
49
+ --_sonic-number-radius-own,
50
+ var(--sonic-radius, calc(var(--_sonic-number-size) * var(--_sonic-number-radius-ratio)))
51
+ );
48
52
  box-shadow: var(--_sonic-focus-shadow);
49
53
  }
50
54
 
@@ -29,13 +29,14 @@
29
29
  box-shadow:
30
30
  inset var(--_sonic-cast-x) var(--_sonic-cast-y)
31
31
  max(var(--_sonic-panel-depth), -1 * var(--_sonic-panel-depth))
32
- rgb(255 255 255 / calc(0.07 * var(--_sonic-relief))),
32
+ rgb(from var(--_sonic-shine) r g b / calc(0.07 * var(--_sonic-relief))),
33
33
  inset calc(-1 * var(--_sonic-cast-x)) calc(-1 * var(--_sonic-cast-y))
34
34
  max(var(--_sonic-panel-depth), -1 * var(--_sonic-panel-depth))
35
- rgb(0 0 0 / calc(0.35 * var(--_sonic-relief))),
35
+ rgb(from var(--_sonic-shade) r g b / calc(0.35 * var(--_sonic-relief))),
36
36
  calc(2 * sin(var(--_sonic-light-tilt)) * max(0px, var(--_sonic-panel-depth)))
37
37
  calc(2 * cos(var(--_sonic-light-tilt)) * max(0px, var(--_sonic-panel-depth)))
38
- calc(3 * max(0px, var(--_sonic-panel-depth))) rgb(0 0 0 / calc(0.45 * var(--_sonic-relief)));
38
+ calc(3 * max(0px, var(--_sonic-panel-depth)))
39
+ rgb(from var(--_sonic-shade) r g b / calc(0.45 * var(--_sonic-relief)));
39
40
  }
40
41
 
41
42
  .sonic-panel-title {
@@ -70,7 +70,7 @@
70
70
  }
71
71
 
72
72
  .sonic-ring > * > .sonic-button {
73
- --_sonic-button-radius-ratio: 0.5;
73
+ --_sonic-button-radius-own: calc(var(--_sonic-button-size) / 2);
74
74
  --_sonic-button-face-radius-ratio: 0.5;
75
75
 
76
76
  inline-size: var(--_sonic-button-size);
@@ -11,12 +11,16 @@
11
11
  --_sonic-screen-size: var(--sonic-screen-size, 2.5rem);
12
12
  --_sonic-screen-aspect-ratio: var(--sonic-screen-aspect-ratio, 3);
13
13
  --_sonic-screen-radius-ratio: var(--sonic-screen-radius-ratio, 0.15);
14
+ --_sonic-screen-radius-own: calc(var(--_sonic-screen-size) * var(--sonic-screen-radius-ratio));
14
15
  --_sonic-screen-inset-ratio: var(--sonic-screen-inset-ratio, 0.1);
15
16
  --_sonic-unit: calc(var(--_sonic-screen-size) / 32);
16
17
 
17
18
  inline-size: calc(var(--_sonic-screen-size) * var(--_sonic-screen-aspect-ratio));
18
19
  block-size: var(--_sonic-screen-size);
19
20
  padding: calc(var(--_sonic-screen-size) * var(--_sonic-screen-inset-ratio));
20
- border-radius: calc(var(--_sonic-screen-size) * var(--_sonic-screen-radius-ratio));
21
+ border-radius: var(
22
+ --_sonic-screen-radius-own,
23
+ var(--sonic-radius, calc(var(--_sonic-screen-size) * var(--_sonic-screen-radius-ratio)))
24
+ );
21
25
  }
22
26
  }
@@ -38,11 +38,18 @@
38
38
  var(--_sonic-segmented-press-scale)
39
39
  );
40
40
  --_sonic-segmented-font-ratio: var(--sonic-segmented-font-ratio, 0.34);
41
+ --_sonic-segmented-font-own: calc(
42
+ var(--_sonic-segmented-size) * var(--sonic-segmented-font-ratio)
43
+ );
41
44
  --_sonic-segmented-padding-ratio: var(--sonic-segmented-padding-ratio, 0.25);
42
45
  --_sonic-segmented-icon-ratio: var(--sonic-segmented-icon-ratio, 0.5);
43
46
  --_sonic-unit: calc(var(--_sonic-segmented-size) / 32);
44
- --_sonic-segmented-corner: calc(
45
- var(--_sonic-segmented-size) * var(--_sonic-segmented-radius-ratio)
47
+ --_sonic-segmented-radius-own: calc(
48
+ var(--_sonic-segmented-size) * var(--sonic-segmented-radius-ratio)
49
+ );
50
+ --_sonic-segmented-corner: var(
51
+ --_sonic-segmented-radius-own,
52
+ var(--sonic-radius, calc(var(--_sonic-segmented-size) * var(--_sonic-segmented-radius-ratio)))
46
53
  );
47
54
  --_sonic-keycap-depth: calc(var(--_sonic-segmented-size) * var(--_sonic-segmented-depth-ratio));
48
55
  --_sonic-segmented-gap: calc(var(--_sonic-segmented-size) * var(--_sonic-segmented-gap-ratio));
@@ -75,14 +82,20 @@
75
82
  min-inline-size: calc(var(--_sonic-segmented-size) - 2 * var(--_sonic-segmented-gap));
76
83
  padding: 0;
77
84
  font: inherit;
78
- font-size: calc(var(--_sonic-segmented-size) * var(--_sonic-segmented-font-ratio));
85
+ font-size: var(
86
+ --_sonic-segmented-font-own,
87
+ var(
88
+ --sonic-legend-font-size,
89
+ calc(var(--_sonic-segmented-size) * var(--_sonic-segmented-font-ratio))
90
+ )
91
+ );
79
92
  line-height: 1;
80
93
  color: var(--_sonic-ink);
81
94
  cursor: pointer;
82
95
  background: transparent;
83
96
  border: 0;
84
97
  border-radius: var(--_sonic-segmented-inner-corner);
85
- transition: color 120ms ease-out;
98
+ transition: color var(--_sonic-fade-duration) ease-out;
86
99
  }
87
100
 
88
101
  .sonic-segmented-option:where([data-sonic-pressed]):not(:disabled),
@@ -92,7 +92,7 @@
92
92
  touch-action: var(--sonic-touch-action, pan-y);
93
93
  cursor: var(--_sonic-slider-cursor);
94
94
  user-select: none;
95
- transition: --_sonic-slider-groove-ratio 120ms ease-out;
95
+ transition: --_sonic-slider-groove-ratio var(--_sonic-fade-duration) ease-out;
96
96
 
97
97
  @media (prefers-reduced-motion: reduce) {
98
98
  transition: none;
@@ -424,7 +424,13 @@
424
424
  var(--_sonic-slider-breadth) * var(--_sonic-slider-indicator-ratio)
425
425
  );
426
426
  --_sonic-slider-bevel: calc(var(--_sonic-slider-breadth) * var(--_sonic-slider-bevel-ratio));
427
- --_sonic-slider-corner: calc(var(--_sonic-slider-breadth) * var(--_sonic-slider-radius-ratio));
427
+ --_sonic-slider-radius-own: calc(
428
+ var(--_sonic-slider-breadth) * var(--sonic-slider-radius-ratio)
429
+ );
430
+ --_sonic-slider-corner: var(
431
+ --_sonic-slider-radius-own,
432
+ var(--sonic-radius, calc(var(--_sonic-slider-breadth) * var(--_sonic-slider-radius-ratio)))
433
+ );
428
434
  --_sonic-slider-indicator-inset: calc(
429
435
  var(--_sonic-slider-bevel) + var(--_sonic-slider-breadth) * 0.1
430
436
  );
@@ -460,7 +466,7 @@
460
466
  background: var(--_sonic-slider-indicator);
461
467
  border-radius: calc(var(--_sonic-slider-indicator-width) / 2);
462
468
  box-shadow: inset 0 0 calc(0.75 * var(--_sonic-unit))
463
- rgb(0 0 0 / calc(0.55 * var(--_sonic-relief)));
469
+ rgb(from var(--_sonic-shade) r g b / calc(0.55 * var(--_sonic-relief)));
464
470
  }
465
471
  }
466
472
 
@@ -77,13 +77,25 @@
77
77
 
78
78
  inline-size: var(--_sonic-spectrum-length);
79
79
  block-size: var(--_sonic-spectrum-size);
80
- padding: calc(var(--_sonic-spectrum-size) * var(--sonic-spectrum-inset-ratio, 0.06));
80
+
81
+ --_sonic-spectrum-inset: calc(
82
+ var(--_sonic-spectrum-size) * var(--sonic-spectrum-inset-ratio, 0.06)
83
+ );
84
+
85
+ padding: var(--_sonic-spectrum-inset);
81
86
 
82
87
  /* The canvas's backing size would otherwise feed an intrinsically sized parent */
83
88
  contain: size;
84
89
 
85
- --_sonic-glass-radius: calc(
86
- var(--_sonic-spectrum-size) * var(--sonic-spectrum-radius-ratio, 0.08)
90
+ --_sonic-spectrum-radius-own: calc(
91
+ var(--_sonic-spectrum-size) * var(--sonic-spectrum-radius-ratio)
92
+ );
93
+ --_sonic-glass-radius: var(
94
+ --_sonic-spectrum-radius-own,
95
+ var(
96
+ --sonic-radius,
97
+ calc(var(--_sonic-spectrum-size) * var(--sonic-spectrum-radius-ratio, 0.08))
98
+ )
87
99
  );
88
100
 
89
101
  border-radius: var(--_sonic-glass-radius);
@@ -98,6 +110,7 @@
98
110
  display: block;
99
111
  inline-size: 100%;
100
112
  block-size: 100%;
113
+ border-radius: max(0px, var(--_sonic-glass-radius) - var(--_sonic-spectrum-inset));
101
114
  }
102
115
 
103
116
  /* Opaque, since a system highlight carries alpha that would blend the bars into the glass */
@@ -35,6 +35,7 @@
35
35
  --_sonic-switch-bat-ratio: var(--sonic-switch-bat-ratio, 0.36);
36
36
  --_sonic-switch-bushing-ratio: var(--sonic-switch-bushing-ratio, 0.62);
37
37
  --_sonic-switch-font-ratio: var(--sonic-switch-font-ratio, 0.4);
38
+ --_sonic-switch-font-own: calc(var(--_sonic-switch-size) * var(--sonic-switch-font-ratio));
38
39
  --_sonic-unit: calc(var(--_sonic-switch-size) / 32);
39
40
  --_sonic-switch-reach: calc(var(--_sonic-switch-size) * var(--_sonic-switch-reach-ratio));
40
41
  --_sonic-switch-ball: calc(var(--_sonic-switch-size) * var(--_sonic-switch-bat-ratio));
@@ -46,12 +47,12 @@
46
47
  --_sonic-switch-metal: color-mix(
47
48
  in oklab,
48
49
  var(--_sonic-switch-cap) calc(100% - 55% * var(--_sonic-relief)),
49
- #fff
50
+ var(--_sonic-shine)
50
51
  );
51
52
  --_sonic-switch-metal-shade: color-mix(
52
53
  in oklab,
53
54
  var(--_sonic-switch-cap) calc(100% - 20% * var(--_sonic-relief)),
54
- #000
55
+ var(--_sonic-shade)
55
56
  );
56
57
 
57
58
  display: inline-grid;
@@ -84,7 +85,13 @@
84
85
  place-self: stretch;
85
86
  padding: 0;
86
87
  font: inherit;
87
- font-size: calc(var(--_sonic-switch-size) * var(--_sonic-switch-font-ratio));
88
+ font-size: var(
89
+ --_sonic-switch-font-own,
90
+ var(
91
+ --sonic-legend-font-size,
92
+ calc(var(--_sonic-switch-size) * var(--_sonic-switch-font-ratio))
93
+ )
94
+ );
88
95
  color: inherit;
89
96
  text-transform: inherit;
90
97
  letter-spacing: inherit;
@@ -241,7 +248,7 @@
241
248
  --_sonic-switch-bushing-shade: color-mix(
242
249
  in oklab,
243
250
  var(--_sonic-cap) calc(100% - 20% * var(--_sonic-relief)),
244
- #000
251
+ var(--_sonic-shade)
245
252
  );
246
253
 
247
254
  inline-size: calc(var(--_sonic-switch-size) * var(--_sonic-switch-bushing-ratio));
@@ -251,10 +258,20 @@
251
258
  --sonic-well,
252
259
  radial-gradient(
253
260
  closest-side,
254
- color-mix(in oklab, var(--_sonic-cap) calc(100% - 70% * var(--_sonic-relief)), #000) 0 42%,
261
+ color-mix(
262
+ in oklab,
263
+ var(--_sonic-cap) calc(100% - 70% * var(--_sonic-relief)),
264
+ var(--_sonic-shade)
265
+ )
266
+ 0 42%,
255
267
  var(--_sonic-switch-bushing-shade) 48%,
256
268
  var(--_sonic-cap) 70%,
257
- color-mix(in oklab, var(--_sonic-cap) calc(100% - 25% * var(--_sonic-relief)), #fff) 88%,
269
+ color-mix(
270
+ in oklab,
271
+ var(--_sonic-cap) calc(100% - 25% * var(--_sonic-relief)),
272
+ var(--_sonic-shine)
273
+ )
274
+ 88%,
258
275
  var(--_sonic-switch-bushing-shade)
259
276
  )
260
277
  );
@@ -266,7 +283,7 @@
266
283
  color-mix(
267
284
  in oklab,
268
285
  var(--_sonic-switch-cap) calc(100% - 60% * var(--_sonic-relief)),
269
- #000
286
+ var(--_sonic-shade)
270
287
  )
271
288
  ),
272
289
  calc(1.5 * var(--_sonic-cast-x)) calc(1.5 * var(--_sonic-cast-y)) calc(2 * var(--_sonic-unit))
@@ -279,7 +296,11 @@
279
296
  --_sonic-switch-pivot: calc((var(--_sonic-switch-size) - var(--_sonic-switch-shaft)) / 2);
280
297
  --_sonic-switch-sheen: linear-gradient(
281
298
  var(--_sonic-light-fall),
282
- color-mix(in oklab, var(--_sonic-switch-metal) calc(100% - 45% * var(--_sonic-relief)), #fff)
299
+ color-mix(
300
+ in oklab,
301
+ var(--_sonic-switch-metal) calc(100% - 45% * var(--_sonic-relief)),
302
+ var(--_sonic-shine)
303
+ )
283
304
  12%,
284
305
  var(--_sonic-switch-metal) 45%,
285
306
  var(--_sonic-switch-metal-shade) 88%
@@ -287,7 +308,11 @@
287
308
  --_sonic-switch-outline: max(1px, round(0.4 * var(--_sonic-unit), var(--_sonic-snap)));
288
309
  --_sonic-switch-rim: var(
289
310
  --sonic-cap-edge,
290
- color-mix(in oklab, var(--_sonic-switch-cap) calc(100% - 30% * var(--_sonic-relief)), #000)
311
+ color-mix(
312
+ in oklab,
313
+ var(--_sonic-switch-cap) calc(100% - 30% * var(--_sonic-relief)),
314
+ var(--_sonic-shade)
315
+ )
291
316
  );
292
317
 
293
318
  position: relative;
@@ -344,7 +369,7 @@
344
369
  calc((var(--_sonic-switch-ball) - var(--_sonic-switch-size)) / 2);
345
370
  box-shadow:
346
371
  inset 0 0 calc(1.5 * var(--_sonic-unit)) calc(0.4 * var(--_sonic-unit))
347
- rgb(0 0 0 / calc(0.3 * var(--_sonic-relief))),
372
+ rgb(from var(--_sonic-shade) r g b / calc(0.3 * var(--_sonic-relief))),
348
373
  0 0 0 var(--_sonic-switch-outline) var(--_sonic-switch-rim),
349
374
  var(--_sonic-focus-shadow);
350
375
  translate: calc(var(--_sonic-switch-along-x) * var(--_sonic-switch-throw))
@@ -52,6 +52,7 @@
52
52
  --_sonic-toggle-bevel-ratio: var(--sonic-toggle-bevel-ratio, 0.075);
53
53
  --_sonic-toggle-depth-ratio: var(--sonic-toggle-depth-ratio, calc(0.03 * var(--_sonic-relief)));
54
54
  --_sonic-toggle-font-ratio: var(--sonic-toggle-font-ratio, 0.26);
55
+ --_sonic-toggle-font-own: calc(var(--_sonic-toggle-size) * var(--sonic-toggle-font-ratio));
55
56
  --_sonic-toggle-press-scale: var(--sonic-toggle-press-scale, 0.985);
56
57
  --_sonic-toggle-icon-ratio: var(--sonic-toggle-icon-ratio, 0.5);
57
58
  --_sonic-toggle-led-ratio: var(--sonic-toggle-led-ratio, 0.25);
@@ -107,7 +108,7 @@
107
108
  user-select: none;
108
109
  transition:
109
110
  --_sonic-toggle-at 120ms cubic-bezier(0.4, 0, 0.2, 1),
110
- --_sonic-toggle-sink 60ms cubic-bezier(0.4, 0, 0.2, 1);
111
+ --_sonic-toggle-sink var(--_sonic-press-duration) cubic-bezier(0.4, 0, 0.2, 1);
111
112
  }
112
113
 
113
114
  [orientation='vertical'] > .sonic-toggle {
@@ -122,7 +123,7 @@
122
123
  }
123
124
 
124
125
  :state(dragging) > .sonic-toggle {
125
- transition: --_sonic-toggle-sink 60ms cubic-bezier(0.4, 0, 0.2, 1);
126
+ transition: --_sonic-toggle-sink var(--_sonic-press-duration) cubic-bezier(0.4, 0, 0.2, 1);
126
127
  }
127
128
 
128
129
  [data-sonic-lit='ok'] > .sonic-toggle:has(> [role='switch']),
@@ -205,7 +206,7 @@
205
206
  box-shadow:
206
207
  var(--_sonic-well),
207
208
  inset 0 0 0 calc(1px * (1 - var(--_sonic-relief))) var(--_sonic-toggle-well-edge);
208
- transition: --_sonic-toggle-well-tint 120ms ease-out;
209
+ transition: --_sonic-toggle-well-tint var(--_sonic-fade-duration) ease-out;
209
210
  }
210
211
 
211
212
  /* The position rides `--_sonic-toggle-at`, which already eases; easing the offset too would trail a drag */
@@ -219,8 +220,8 @@
219
220
  translate: calc(var(--_sonic-toggle-along-x) * var(--_sonic-toggle-throw))
220
221
  calc(var(--_sonic-toggle-along-y) * var(--_sonic-toggle-throw) + var(--_sonic-toggle-sink));
221
222
  transition:
222
- scale 60ms cubic-bezier(0.4, 0, 0.2, 1),
223
- box-shadow 60ms cubic-bezier(0.4, 0, 0.2, 1);
223
+ scale var(--_sonic-press-duration) cubic-bezier(0.4, 0, 0.2, 1),
224
+ box-shadow var(--_sonic-press-duration) cubic-bezier(0.4, 0, 0.2, 1);
224
225
 
225
226
  & > .sonic-led {
226
227
  --_sonic-led-size: var(
@@ -241,7 +242,13 @@
241
242
  position: relative;
242
243
  padding: 0;
243
244
  font: inherit;
244
- font-size: calc(var(--_sonic-toggle-size) * var(--_sonic-toggle-font-ratio));
245
+ font-size: var(
246
+ --_sonic-toggle-font-own,
247
+ var(
248
+ --sonic-legend-font-size,
249
+ calc(var(--_sonic-toggle-size) * var(--_sonic-toggle-font-ratio))
250
+ )
251
+ );
245
252
  line-height: 1;
246
253
  color: inherit;
247
254
  text-transform: inherit;
@@ -304,7 +311,7 @@
304
311
  opacity: 0;
305
312
  translate: calc(var(--_sonic-toggle-along-x) * var(--_sonic-toggle-ride))
306
313
  calc(var(--_sonic-toggle-along-y) * var(--_sonic-toggle-ride) + var(--_sonic-toggle-sink));
307
- transition: opacity 120ms ease-out;
314
+ transition: opacity var(--_sonic-fade-duration) ease-out;
308
315
 
309
316
  & > * {
310
317
  filter: var(--_sonic-engraving);