@xsynaptic/sonic-ui 0.24.1 → 0.25.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 (104) hide show
  1. package/CHANGELOG.md +28 -2
  2. package/README.md +5 -3
  3. package/dist/default/define/region.js +7 -0
  4. package/dist/default/define.js +1 -0
  5. package/dist/default/elements/envelope.js +11 -11
  6. package/dist/default/elements/form-element.js +10 -0
  7. package/dist/default/elements/readout.js +1 -1
  8. package/dist/default/elements/region-layer.js +251 -0
  9. package/dist/default/elements/region.js +157 -0
  10. package/dist/default/elements/sonic-element.js +3 -0
  11. package/dist/default/elements/split.js +2 -2
  12. package/dist/default/elements/toggle.js +2 -2
  13. package/dist/default/elements/value-element.js +7 -3
  14. package/dist/default/elements/value-gestures.js +7 -5
  15. package/dist/default/elements/wave-element.js +12 -3
  16. package/dist/default/elements/waveform.js +38 -2
  17. package/dist/default/elements/wavestrip.js +90 -17
  18. package/dist/default/elements/xy.js +3 -11
  19. package/dist/default/index.js +2 -1
  20. package/dist/default/lib/clock.js +1 -0
  21. package/dist/default/lib/drag-step.js +1 -1
  22. package/dist/default/lib/marker-band.js +40 -29
  23. package/dist/default/lib/region-drag.js +48 -0
  24. package/dist/dev/define/region.d.ts +2 -0
  25. package/dist/dev/define/region.js +8 -0
  26. package/dist/dev/define/region.js.map +1 -0
  27. package/dist/dev/define.d.ts +3 -1
  28. package/dist/dev/define.js +1 -0
  29. package/dist/dev/elements/envelope.js +11 -11
  30. package/dist/dev/elements/envelope.js.map +1 -1
  31. package/dist/dev/elements/form-element.d.ts +1 -0
  32. package/dist/dev/elements/form-element.js +10 -0
  33. package/dist/dev/elements/form-element.js.map +1 -1
  34. package/dist/dev/elements/readout.js +1 -1
  35. package/dist/dev/elements/readout.js.map +1 -1
  36. package/dist/dev/elements/region-layer.js +252 -0
  37. package/dist/dev/elements/region-layer.js.map +1 -0
  38. package/dist/dev/elements/region.d.ts +29 -0
  39. package/dist/dev/elements/region.js +165 -0
  40. package/dist/dev/elements/region.js.map +1 -0
  41. package/dist/dev/elements/sonic-element.d.ts +1 -0
  42. package/dist/dev/elements/sonic-element.js +4 -1
  43. package/dist/dev/elements/sonic-element.js.map +1 -1
  44. package/dist/dev/elements/split.js +2 -2
  45. package/dist/dev/elements/split.js.map +1 -1
  46. package/dist/dev/elements/toggle.js +2 -2
  47. package/dist/dev/elements/toggle.js.map +1 -1
  48. package/dist/dev/elements/value-element.d.ts +3 -1
  49. package/dist/dev/elements/value-element.js +7 -3
  50. package/dist/dev/elements/value-element.js.map +1 -1
  51. package/dist/dev/elements/value-gestures.js +7 -5
  52. package/dist/dev/elements/value-gestures.js.map +1 -1
  53. package/dist/dev/elements/wave-element.d.ts +7 -1
  54. package/dist/dev/elements/wave-element.js +12 -3
  55. package/dist/dev/elements/wave-element.js.map +1 -1
  56. package/dist/dev/elements/waveform.d.ts +7 -0
  57. package/dist/dev/elements/waveform.js +38 -2
  58. package/dist/dev/elements/waveform.js.map +1 -1
  59. package/dist/dev/elements/wavestrip.d.ts +17 -1
  60. package/dist/dev/elements/wavestrip.js +90 -17
  61. package/dist/dev/elements/wavestrip.js.map +1 -1
  62. package/dist/dev/elements/xy.js +3 -11
  63. package/dist/dev/elements/xy.js.map +1 -1
  64. package/dist/dev/index.d.ts +3 -2
  65. package/dist/dev/index.js +2 -1
  66. package/dist/dev/lib/clock.js +1 -0
  67. package/dist/dev/lib/clock.js.map +1 -1
  68. package/dist/dev/lib/drag-step.js +1 -1
  69. package/dist/dev/lib/drag-step.js.map +1 -1
  70. package/dist/dev/lib/marker-band.d.ts +7 -0
  71. package/dist/dev/lib/marker-band.js +40 -29
  72. package/dist/dev/lib/marker-band.js.map +1 -1
  73. package/dist/dev/lib/region-drag.js +49 -0
  74. package/dist/dev/lib/region-drag.js.map +1 -0
  75. package/dist/styles/button.css +12 -4
  76. package/dist/styles/controls.css +1 -0
  77. package/dist/styles/dial.css +35 -18
  78. package/dist/styles/envelope.css +6 -5
  79. package/dist/styles/material/arc.css +2 -2
  80. package/dist/styles/material/cap.css +21 -11
  81. package/dist/styles/material/glass.css +1 -1
  82. package/dist/styles/material/groove.css +3 -3
  83. package/dist/styles/material/keycap.css +2 -2
  84. package/dist/styles/material/lens.css +1 -1
  85. package/dist/styles/material/pane.css +13 -5
  86. package/dist/styles/material/readout.css +4 -3
  87. package/dist/styles/material/{bracket.css → reticle.css} +15 -8
  88. package/dist/styles/material/well.css +2 -2
  89. package/dist/styles/material.css +1 -1
  90. package/dist/styles/meter.css +18 -5
  91. package/dist/styles/number.css +2 -1
  92. package/dist/styles/panel.css +3 -3
  93. package/dist/styles/region.css +88 -0
  94. package/dist/styles/ring.css +2 -1
  95. package/dist/styles/screen.css +7 -5
  96. package/dist/styles/segmented.css +2 -1
  97. package/dist/styles/slider.css +12 -3
  98. package/dist/styles/spectrum.css +9 -1
  99. package/dist/styles/switch.css +3 -2
  100. package/dist/styles/toggle.css +2 -1
  101. package/dist/styles/waveform.css +3 -2
  102. package/dist/styles/wavestrip.css +11 -8
  103. package/dist/styles/xy.css +9 -8
  104. package/package.json +3 -2
@@ -83,7 +83,8 @@
83
83
  block-size: var(--_sonic-dial-size);
84
84
  touch-action: var(--sonic-touch-action, pan-x);
85
85
  cursor: ns-resize;
86
- user-select: none;
86
+ -webkit-user-select: none;
87
+ user-select: none;
87
88
  border-radius: 50%;
88
89
  }
89
90
 
@@ -130,7 +131,7 @@
130
131
  transparent 0 var(--_sonic-dial-notch-pitch)
131
132
  );
132
133
  border-radius: 50%;
133
- mask:
134
+ -webkit-mask:
134
135
  radial-gradient(
135
136
  closest-side,
136
137
  transparent calc(100% - var(--_sonic-dial-notch-band) * 0.8),
@@ -142,12 +143,25 @@
142
143
  #000 calc(var(--_sonic-dial-sweep) + 2 * var(--_sonic-dial-notch-width)),
143
144
  transparent 0
144
145
  );
145
- mask-composite: intersect;
146
+ mask:
147
+ radial-gradient(
148
+ closest-side,
149
+ transparent calc(100% - var(--_sonic-dial-notch-band) * 0.8),
150
+ #000 0 calc(100% - var(--_sonic-dial-notch-band) * 0.25),
151
+ transparent 0
152
+ ),
153
+ conic-gradient(
154
+ from calc(var(--_sonic-dial-start) - var(--_sonic-dial-notch-width)),
155
+ #000 calc(var(--_sonic-dial-sweep) + 2 * var(--_sonic-dial-notch-width)),
156
+ transparent 0
157
+ );
158
+ -webkit-mask-composite: source-in, xor;
159
+ mask-composite: intersect;
146
160
  }
147
161
 
148
162
  .sonic-dial-scale {
149
163
  font-size: calc(var(--_sonic-dial-size) * var(--_sonic-dial-scale-font-ratio));
150
- line-height: 1cap;
164
+ line-height: 0.7em;
151
165
  }
152
166
 
153
167
  .sonic-dial-scale > * {
@@ -162,8 +176,8 @@
162
176
 
163
177
  inset: calc(50% - var(--_sonic-dial-scale-cos) * var(--_sonic-dial-scale-radius)) auto auto
164
178
  calc(50% + var(--_sonic-dial-scale-sin) * var(--_sonic-dial-scale-radius));
165
- translate: calc(-50% + var(--_sonic-dial-scale-sin) * (50% + 0.15cap))
166
- calc(-50% - var(--_sonic-dial-scale-cos) * (50% + 0.15cap));
179
+ translate: calc(-50% + var(--_sonic-dial-scale-sin) * (50% + 0.105em))
180
+ calc(-50% - var(--_sonic-dial-scale-cos) * (50% + 0.105em));
167
181
  }
168
182
 
169
183
  .sonic-dial-scale > .sonic-scale-tick {
@@ -182,7 +196,8 @@
182
196
  position: absolute;
183
197
  inset: calc(var(--_sonic-dial-scale-band) + var(--_sonic-dial-notch-band));
184
198
  border-radius: 50%;
185
- mask: var(--_sonic-arc-mask);
199
+ -webkit-mask: var(--_sonic-arc-mask);
200
+ mask: var(--_sonic-arc-mask);
186
201
  }
187
202
 
188
203
  .sonic-dial-ring {
@@ -253,7 +268,8 @@
253
268
 
254
269
  display: block;
255
270
  background: none;
256
- mask: none;
271
+ -webkit-mask: none;
272
+ mask: none;
257
273
  }
258
274
 
259
275
  :is(:state(modulated) > .sonic-dial > .sonic-dial-modulation)::before,:is(:state(modulated) > .sonic-dial > .sonic-dial-modulation)::after {
@@ -279,7 +295,8 @@
279
295
  calc(var(--_sonic-dial-modulation-to, 0) * var(--_sonic-dial-sweep)),
280
296
  transparent 0
281
297
  );
282
- mask: var(--_sonic-arc-mask);
298
+ -webkit-mask: var(--_sonic-arc-mask);
299
+ mask: var(--_sonic-arc-mask);
283
300
  }
284
301
 
285
302
  :is(:state(modulated) > .sonic-dial > .sonic-dial-modulation)::after {
@@ -312,10 +329,10 @@
312
329
  .sonic-dial-cap::before {
313
330
  inset: 0;
314
331
  background: repeating-conic-gradient(
315
- rgb(from var(--_sonic-shade) r g b / calc(0.3 * var(--_sonic-relief))) 0,
316
- rgb(from var(--_sonic-shine) r g b / calc(0.12 * var(--_sonic-relief)))
332
+ color-mix(in srgb, var(--_sonic-shade) calc(30% * var(--_sonic-relief)), transparent) 0,
333
+ color-mix(in srgb, var(--_sonic-shine) calc(12% * var(--_sonic-relief)), transparent)
317
334
  calc(var(--_sonic-dial-ridge-angle) / 2),
318
- rgb(from var(--_sonic-shade) r g b / calc(0.3 * var(--_sonic-relief)))
335
+ color-mix(in srgb, var(--_sonic-shade) calc(30% * var(--_sonic-relief)), transparent)
319
336
  var(--_sonic-dial-ridge-angle)
320
337
  );
321
338
  rotate: var(--_sonic-dial-angle);
@@ -329,15 +346,15 @@
329
346
  calc(
330
347
  var(--_sonic-dial-face-drift) * var(--_sonic-dial-angle) - var(--_sonic-light-tilt)
331
348
  ),
332
- rgb(from var(--_sonic-shine) r g b / calc(0.16 * var(--_sonic-relief))),
349
+ color-mix(in srgb, var(--_sonic-shine) calc(16% * var(--_sonic-relief)), transparent),
333
350
  transparent 12%,
334
- rgb(from var(--_sonic-shade) r g b / calc(0.1 * var(--_sonic-relief))) 25%,
351
+ color-mix(in srgb, var(--_sonic-shade) calc(10% * var(--_sonic-relief)), transparent) 25%,
335
352
  transparent 38%,
336
- rgb(from var(--_sonic-shine) r g b / calc(0.12 * var(--_sonic-relief))) 50%,
353
+ color-mix(in srgb, var(--_sonic-shine) calc(12% * var(--_sonic-relief)), transparent) 50%,
337
354
  transparent 62%,
338
- rgb(from var(--_sonic-shade) r g b / calc(0.1 * var(--_sonic-relief))) 75%,
355
+ color-mix(in srgb, var(--_sonic-shade) calc(10% * var(--_sonic-relief)), transparent) 75%,
339
356
  transparent 88%,
340
- rgb(from var(--_sonic-shine) r g b / calc(0.16 * var(--_sonic-relief)))
357
+ color-mix(in srgb, var(--_sonic-shine) calc(16% * var(--_sonic-relief)), transparent)
341
358
  ),
342
359
  var(--_sonic-face);
343
360
  box-shadow: var(--_sonic-face-shadow);
@@ -368,7 +385,7 @@
368
385
  background: var(--_sonic-ink);
369
386
  border-radius: calc(var(--_sonic-dial-indicator-width) / 2);
370
387
  box-shadow: inset 0 0 calc(0.75 * var(--_sonic-unit))
371
- rgb(from var(--_sonic-shade) r g b / calc(0.55 * var(--_sonic-relief)));
388
+ color-mix(in srgb, var(--_sonic-shade) calc(55% * var(--_sonic-relief)), transparent);
372
389
  clip-path: shape(
373
390
  from 0 100%,
374
391
  line to calc(50% - var(--_sonic-dial-indicator-tip)) var(--_sonic-dial-indicator-tip),
@@ -40,7 +40,8 @@
40
40
  inline-size: calc(var(--_sonic-envelope-size) * var(--_sonic-envelope-aspect-ratio));
41
41
  block-size: var(--_sonic-envelope-size);
42
42
  container-type: size;
43
- user-select: none;
43
+ -webkit-user-select: none;
44
+ user-select: none;
44
45
  isolation: isolate;
45
46
  }
46
47
 
@@ -55,11 +56,11 @@
55
56
  clip-path: inset(calc(-1 * var(--_sonic-envelope-inset)));
56
57
  }
57
58
 
58
- .sonic-envelope-bracket {
59
+ .sonic-envelope-reticle {
59
60
  --_sonic-point-size: calc(
60
61
  2 * var(--_sonic-envelope-size) * var(--_sonic-envelope-handle-ratio)
61
62
  );
62
- --_sonic-bracket-size: var(--_sonic-point-size);
63
+ --_sonic-reticle-size: var(--_sonic-point-size);
63
64
 
64
65
  position: absolute;
65
66
  inset: 0;
@@ -67,7 +68,7 @@
67
68
  pointer-events: none;
68
69
  }
69
70
 
70
- .sonic-envelope-bracket[data-sonic-part='curve'] {
71
+ .sonic-envelope-reticle[data-sonic-part='curve'] {
71
72
  --_sonic-point-size: calc(
72
73
  2 * var(--_sonic-envelope-size) * var(--_sonic-envelope-curve-ratio)
73
74
  );
@@ -93,7 +94,7 @@
93
94
  }
94
95
 
95
96
  :is(.sonic-envelope-handle, .sonic-envelope-curve),
96
- .sonic-envelope-bracket::before {
97
+ .sonic-envelope-reticle::before {
97
98
  position: absolute;
98
99
  inset: auto auto
99
100
  calc(
@@ -13,10 +13,10 @@
13
13
  );
14
14
  --_sonic-arc-shade: radial-gradient(
15
15
  closest-side,
16
- rgb(from var(--_sonic-shade) r g b / calc(0.55 * var(--_sonic-relief)))
16
+ color-mix(in srgb, var(--_sonic-shade) calc(55% * var(--_sonic-relief)), transparent)
17
17
  calc(100% - var(--_sonic-arc-width)),
18
18
  transparent calc(100% - var(--_sonic-arc-width) * 0.4),
19
- rgb(from var(--_sonic-shade) r g b / calc(0.25 * var(--_sonic-relief))) 100%
19
+ color-mix(in srgb, var(--_sonic-shade) calc(25% * var(--_sonic-relief)), transparent) 100%
20
20
  );
21
21
  }
22
22
  }
@@ -50,9 +50,9 @@
50
50
  --_sonic-sheen: linear-gradient(
51
51
  calc(var(--_sonic-light-fall) - 58deg),
52
52
  transparent 20%,
53
- rgb(from var(--_sonic-shine) r g b / calc(0.1 * var(--_sonic-relief))) 45%,
53
+ color-mix(in srgb, var(--_sonic-shine) calc(10% * var(--_sonic-relief)), transparent) 45%,
54
54
  transparent 55%,
55
- rgb(from var(--_sonic-shade) r g b / calc(0.06 * var(--_sonic-relief))) 80%
55
+ color-mix(in srgb, var(--_sonic-shade) calc(6% * var(--_sonic-relief)), transparent) 80%
56
56
  );
57
57
  --_sonic-press-transition:
58
58
  scale var(--_sonic-press-duration) cubic-bezier(0.4, 0, 0.2, 1),
@@ -60,9 +60,9 @@
60
60
  box-shadow var(--_sonic-press-duration) cubic-bezier(0.4, 0, 0.2, 1);
61
61
  --_sonic-face-shadow:
62
62
  inset var(--_sonic-cast-x) var(--_sonic-cast-y) calc(1.5 * var(--_sonic-unit))
63
- rgb(from var(--_sonic-shade) r g b / calc(0.35 * var(--_sonic-relief))),
63
+ color-mix(in srgb, var(--_sonic-shade) calc(35% * var(--_sonic-relief)), transparent),
64
64
  calc(0.5 * var(--_sonic-cast-x)) calc(0.5 * var(--_sonic-cast-y)) var(--_sonic-unit)
65
- rgb(from var(--_sonic-shine) r g b / calc(0.12 * var(--_sonic-relief)));
65
+ color-mix(in srgb, var(--_sonic-shine) calc(12% * var(--_sonic-relief)), transparent);
66
66
  --_sonic-rim-width: max(1px, round(0.75 * var(--_sonic-unit), var(--_sonic-snap)));
67
67
  --_sonic-rim: 0 0 0 var(--_sonic-rim-width)
68
68
  var(
@@ -73,7 +73,11 @@
73
73
  var(--_sonic-shade)
74
74
  )
75
75
  );
76
- --_sonic-drop-shade: rgb(from var(--_sonic-shade) r g b / calc(0.65 * var(--_sonic-relief)));
76
+ --_sonic-drop-shade: color-mix(
77
+ in srgb,
78
+ var(--_sonic-shade) calc(65% * var(--_sonic-relief)),
79
+ transparent
80
+ );
77
81
  --_sonic-focus-shadow: 0 0 transparent;
78
82
  --_sonic-focus-glow: 0 0 max(4px, 3 * var(--_sonic-unit)) max(1px, 0.5 * var(--_sonic-unit))
79
83
  color-mix(in oklab, var(--_sonic-focus) calc(60% * var(--_sonic-focus-strength)), transparent);
@@ -84,7 +88,13 @@
84
88
  }
85
89
 
86
90
  /* A plain box has no corner of its own, so its focus outline and glow take this one */
87
- :is(.sonic-number, .sonic-slider, .sonic-switch-position, .sonic-waveform, .sonic-wavestrip) {
91
+ :is(
92
+ .sonic-number,
93
+ .sonic-slider,
94
+ .sonic-switch-position,
95
+ .sonic-waveform,
96
+ .sonic-wavestrip-canvas
97
+ ) {
88
98
  border-radius: var(--sonic-focus-radius, 0);
89
99
  }
90
100
 
@@ -141,14 +151,14 @@
141
151
  .sonic-segmented-option,
142
152
  .sonic-slider,
143
153
  .sonic-waveform,
144
- .sonic-wavestrip,
154
+ .sonic-wavestrip-canvas,
145
155
  .sonic-xy-axis
146
156
  ):focus-visible {
147
157
  outline: 2px solid transparent;
148
158
  outline-offset: var(--sonic-focus-outline-offset, -2px);
149
159
  }
150
160
 
151
- :is(.sonic-dial,.sonic-button,.sonic-number,.sonic-segmented-option,.sonic-slider,.sonic-waveform,.sonic-wavestrip,.sonic-xy-axis):focus-visible:not([data-sonic-pointer-focus]) {
161
+ :is(.sonic-dial,.sonic-button,.sonic-number,.sonic-segmented-option,.sonic-slider,.sonic-waveform,.sonic-wavestrip-canvas,.sonic-xy-axis):focus-visible:not([data-sonic-pointer-focus]) {
152
162
  --_sonic-cap: var(--_sonic-cap-hover);
153
163
  --_sonic-focus-shadow: var(--_sonic-focus-glow);
154
164
  }
@@ -157,7 +167,7 @@
157
167
  .sonic-number,
158
168
  .sonic-slider,
159
169
  .sonic-waveform,
160
- .sonic-wavestrip,
170
+ .sonic-wavestrip-canvas,
161
171
  .sonic-xy-axis
162
172
  ):focus-visible:not([data-sonic-pointer-focus]) {
163
173
  outline: var(--sonic-focus-outline, 2px solid transparent);
@@ -226,12 +236,12 @@
226
236
  .sonic-segmented-option,
227
237
  .sonic-slider,
228
238
  .sonic-waveform,
229
- .sonic-wavestrip
239
+ .sonic-wavestrip-canvas
230
240
  ):focus-visible {
231
241
  outline-offset: 2px;
232
242
  }
233
243
 
234
- [data-sonic-pointer-focus]:is(.sonic-dial,.sonic-button,.sonic-number,.sonic-segmented-option,.sonic-slider,.sonic-waveform,.sonic-wavestrip):focus-visible {
244
+ [data-sonic-pointer-focus]:is(.sonic-dial,.sonic-button,.sonic-number,.sonic-segmented-option,.sonic-slider,.sonic-waveform,.sonic-wavestrip-canvas):focus-visible {
235
245
  outline-style: none;
236
246
  }
237
247
 
@@ -14,7 +14,7 @@
14
14
  color-mix(
15
15
  in oklab,
16
16
  var(--_sonic-glass-slab) calc(100% * var(--_sonic-relief)),
17
- light-dark(oklch(97% 0.003 286deg), var(--_sonic-glass-slab))
17
+ color-mix(in oklab, Canvas 97%, #000)
18
18
  )
19
19
  );
20
20
  --_sonic-glass: var(--_sonic-glass-own, var(--_sonic-glass-base));
@@ -2,10 +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(from var(--_sonic-shade) r g b / calc(0.55 * var(--_sonic-relief))),
5
+ color-mix(in srgb, var(--_sonic-shade) calc(55% * var(--_sonic-relief)), transparent),
6
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
+ color-mix(in srgb, var(--_sonic-shade) calc(30% * var(--_sonic-relief)), transparent),
8
8
  calc(0.5 * var(--_sonic-cast-x)) calc(0.5 * var(--_sonic-cast-y)) 0
9
- rgb(from var(--_sonic-shine) r g b / calc(0.06 * var(--_sonic-relief)));
9
+ color-mix(in srgb, var(--_sonic-shine) calc(6% * var(--_sonic-relief)), transparent);
10
10
  }
11
11
  }
@@ -19,11 +19,11 @@
19
19
  --_sonic-engraving: drop-shadow(
20
20
  calc(-0.4 * var(--_sonic-cast-x)) calc(-0.4 * var(--_sonic-cast-y))
21
21
  calc(0.4 * var(--_sonic-unit))
22
- rgb(from var(--_sonic-shade) r g b / calc(0.3 * var(--_sonic-relief)))
22
+ color-mix(in srgb, var(--_sonic-shade) calc(30% * var(--_sonic-relief)), transparent)
23
23
  )
24
24
  drop-shadow(
25
25
  calc(0.3 * var(--_sonic-cast-x)) calc(0.3 * var(--_sonic-cast-y)) 0
26
- rgb(from var(--_sonic-shine) r g b / calc(0.07 * var(--_sonic-relief)))
26
+ color-mix(in srgb, var(--_sonic-shine) calc(7% * var(--_sonic-relief)), transparent)
27
27
  );
28
28
  }
29
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(from var(--_sonic-shine) r g b / calc(0.1 * var(--_sonic-relief))),
5
+ color-mix(in srgb, var(--_sonic-shine) calc(10% * var(--_sonic-relief)), transparent),
6
6
  transparent 60%
7
7
  );
8
8
  --_sonic-lens-modelled: calc(100% * var(--_sonic-relief));
@@ -38,25 +38,33 @@
38
38
  background:
39
39
  linear-gradient(
40
40
  var(--_sonic-light-fall),
41
- rgb(from var(--_sonic-shine) r g b / calc(0.07 * var(--_sonic-glass-depth))),
41
+ color-mix(in srgb, var(--_sonic-shine) calc(7% * var(--_sonic-glass-depth)), transparent),
42
42
  transparent 45%
43
43
  ),
44
44
  radial-gradient(
45
45
  farthest-corner,
46
46
  transparent 55%,
47
- rgb(from var(--_sonic-shade) r g b / calc(0.4 * var(--_sonic-glass-texture)))
47
+ color-mix(
48
+ in srgb,
49
+ var(--_sonic-shade) calc(40% * var(--_sonic-glass-texture)),
50
+ transparent
51
+ )
48
52
  ),
49
53
  repeating-linear-gradient(
50
54
  to bottom,
51
- rgb(from var(--_sonic-shade) r g b / calc(0.025 * var(--_sonic-glass-texture))) 0
52
- calc(var(--_sonic-glass-pitch) / 2),
55
+ color-mix(
56
+ in srgb,
57
+ var(--_sonic-shade) calc(2.5% * var(--_sonic-glass-texture)),
58
+ transparent
59
+ )
60
+ 0 calc(var(--_sonic-glass-pitch) / 2),
53
61
  transparent 0 var(--_sonic-glass-pitch)
54
62
  );
55
63
  border-radius: inherit;
56
64
  box-shadow:
57
65
  var(--_sonic-well),
58
66
  inset 0 0 calc(3 * var(--_sonic-glass-depth) * var(--_sonic-unit))
59
- rgb(from var(--_sonic-shade) r g b / 45%);
67
+ color-mix(in srgb, var(--_sonic-shade) 45%, transparent);
60
68
  }
61
69
 
62
70
  @media (forced-colors: none) {
@@ -45,7 +45,8 @@
45
45
  white-space: nowrap;
46
46
  pointer-events: none;
47
47
  cursor: default;
48
- user-select: none;
48
+ -webkit-user-select: none;
49
+ user-select: none;
49
50
  background: var(--_sonic-glass-fill);
50
51
  border: var(--_sonic-glass-edge);
51
52
  border-radius: var(
@@ -54,9 +55,9 @@
54
55
  );
55
56
  box-shadow:
56
57
  calc(2 * var(--_sonic-cast-x)) calc(2 * var(--_sonic-cast-y)) calc(6 * var(--_sonic-unit))
57
- rgb(from var(--_sonic-shade) r g b / calc(0.55 * var(--_sonic-readout-depth))),
58
+ color-mix(in srgb, var(--_sonic-shade) calc(55% * var(--_sonic-readout-depth)), transparent),
58
59
  inset 0 0 0 max(1px, round(var(--_sonic-unit), var(--_sonic-snap)))
59
- rgb(from var(--_sonic-shine) r g b / calc(0.08 * var(--_sonic-readout-depth)));
60
+ color-mix(in srgb, var(--_sonic-shine) calc(8% * var(--_sonic-readout-depth)), transparent);
60
61
  opacity: 0;
61
62
  translate: 0 calc(0.15 * var(--_sonic-readout-size));
62
63
  transition:
@@ -1,16 +1,23 @@
1
1
  @layer sonic.material {
2
- .sonic-xy-bracket,
3
- .sonic-envelope-bracket::before {
2
+ .sonic-xy-reticle,
3
+ .sonic-envelope-reticle::before {
4
4
  box-sizing: border-box;
5
- inline-size: var(--_sonic-bracket-size);
6
- block-size: var(--_sonic-bracket-size);
5
+ inline-size: var(--_sonic-reticle-size);
6
+ block-size: var(--_sonic-reticle-size);
7
7
  pointer-events: none;
8
8
  content: '';
9
- border: max(1px, 0.06 * var(--_sonic-bracket-size)) solid
9
+ border: max(1px, 0.06 * var(--_sonic-reticle-size)) solid
10
10
  color-mix(in oklab, currentcolor 45%, transparent);
11
11
  border-radius: 50%;
12
12
  opacity: 0;
13
- mask: conic-gradient(
13
+ -webkit-mask: conic-gradient(
14
+ from 10deg,
15
+ #000 0 70deg,
16
+ transparent 0 180deg,
17
+ #000 0 250deg,
18
+ transparent 0
19
+ );
20
+ mask: conic-gradient(
14
21
  from 10deg,
15
22
  #000 0 70deg,
16
23
  transparent 0 180deg,
@@ -23,8 +30,8 @@
23
30
  scale var(--_sonic-fade-duration) ease-out;
24
31
  }
25
32
 
26
- :state(dragging) > * > .sonic-xy-bracket,
27
- :state(dragging) > * > .sonic-envelope-bracket::before {
33
+ :state(dragging) > * > .sonic-xy-reticle,
34
+ :state(dragging) > * > .sonic-envelope-reticle::before {
28
35
  opacity: calc(1 - var(--_sonic-relief));
29
36
  scale: 1;
30
37
  }
@@ -12,9 +12,9 @@
12
12
  inset calc(var(--_sonic-well-depth) * var(--_sonic-cast-x))
13
13
  calc(var(--_sonic-well-depth) * var(--_sonic-cast-y))
14
14
  calc(2 * var(--_sonic-well-depth) * var(--_sonic-unit))
15
- rgb(from var(--_sonic-shade) r g b / calc(0.6 * var(--_sonic-relief))),
15
+ color-mix(in srgb, var(--_sonic-shade) calc(60% * var(--_sonic-relief)), transparent),
16
16
  calc(0.5 * var(--_sonic-well-depth) * var(--_sonic-cast-x))
17
17
  calc(0.5 * var(--_sonic-well-depth) * var(--_sonic-cast-y)) 0
18
- rgb(from var(--_sonic-shine) r g b / calc(0.06 * var(--_sonic-relief)));
18
+ color-mix(in srgb, var(--_sonic-shine) calc(6% * var(--_sonic-relief)), transparent);
19
19
  }
20
20
  }
@@ -10,6 +10,6 @@
10
10
  @import './material/keycap.css';
11
11
  @import './material/arc.css';
12
12
  @import './material/lens.css';
13
- @import './material/bracket.css';
13
+ @import './material/reticle.css';
14
14
  @import './material/groove.css';
15
15
  @import './material/scale.css';
@@ -167,8 +167,10 @@
167
167
  position: absolute;
168
168
  inset: auto var(--_sonic-meter-inset) var(--_sonic-meter-inset);
169
169
  block-size: calc(var(--_sonic-meter-segments) - var(--_sonic-meter-gap));
170
- mask: var(--_sonic-meter-segment-mask);
171
- mask-composite: add;
170
+ -webkit-mask: var(--_sonic-meter-segment-mask);
171
+ mask: var(--_sonic-meter-segment-mask);
172
+ -webkit-mask-composite: source-over;
173
+ mask-composite: add;
172
174
  }
173
175
 
174
176
  :state(ladder) > .sonic-meter > :is(.sonic-meter-segments, .sonic-meter-bar) {
@@ -270,7 +272,7 @@
270
272
  :state(ladder) > .sonic-meter > .sonic-meter-bar::after {
271
273
  background: radial-gradient(
272
274
  circle var(--_sonic-meter-ladder-radius),
273
- rgb(from var(--_sonic-shine) r g b / calc(0.45 * var(--_sonic-relief))),
275
+ color-mix(in srgb, var(--_sonic-shine) calc(45% * var(--_sonic-relief)), transparent),
274
276
  transparent
275
277
  )
276
278
  0 100% / 100% var(--_sonic-meter-pitch) repeat-y;
@@ -321,7 +323,7 @@
321
323
  var(--_sonic-lit-warning) 0 var(--_sonic-meter-clip-at),
322
324
  var(--_sonic-lit-danger) 0
323
325
  );
324
- mask:
326
+ -webkit-mask:
325
327
  linear-gradient(
326
328
  var(--_sonic-meter-toward),
327
329
  transparent var(--_sonic-meter-lit-from),
@@ -331,7 +333,18 @@
331
333
  transparent 0
332
334
  ),
333
335
  var(--_sonic-meter-segment-mask);
334
- mask-composite: intersect, add, add, add, add, add, add;
336
+ mask:
337
+ linear-gradient(
338
+ var(--_sonic-meter-toward),
339
+ transparent var(--_sonic-meter-lit-from),
340
+ #000 0 var(--_sonic-meter-lit),
341
+ transparent 0 calc(var(--_sonic-meter-peak-hold-edge) - var(--_sonic-meter-pitch)),
342
+ #000 0 var(--_sonic-meter-peak-hold-edge),
343
+ transparent 0
344
+ ),
345
+ var(--_sonic-meter-segment-mask);
346
+ -webkit-mask-composite: source-in, source-over, source-over, source-over, source-over, source-over, source-over, xor;
347
+ mask-composite: intersect, add, add, add, add, add, add;
335
348
  }
336
349
 
337
350
  .sonic-meter-clip {
@@ -47,7 +47,8 @@
47
47
  line-height: 1;
48
48
  touch-action: var(--sonic-touch-action, pan-x);
49
49
  cursor: ns-resize;
50
- user-select: none;
50
+ -webkit-user-select: none;
51
+ user-select: none;
51
52
  box-shadow: var(--_sonic-focus-shadow);
52
53
  }
53
54
 
@@ -29,14 +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(from var(--_sonic-shine) r g b / calc(0.07 * var(--_sonic-relief))),
32
+ color-mix(in srgb, var(--_sonic-shine) calc(7% * var(--_sonic-relief)), transparent),
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(from var(--_sonic-shade) r g b / calc(0.35 * var(--_sonic-relief))),
35
+ color-mix(in srgb, var(--_sonic-shade) calc(35% * var(--_sonic-relief)), transparent),
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
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
+ color-mix(in srgb, var(--_sonic-shade) calc(45% * var(--_sonic-relief)), transparent);
40
40
  }
41
41
 
42
42
  .sonic-panel-title {
@@ -0,0 +1,88 @@
1
+ @layer sonic.material, sonic.control;
2
+
3
+ @layer sonic.control {
4
+ sonic-region {
5
+ display: none;
6
+ }
7
+
8
+ .sonic-region {
9
+ --_sonic-region-paint: var(--sonic-region-bracket, var(--_sonic-marker, var(--_sonic-ink)));
10
+ --_sonic-region-colour: var(--_sonic-region-paint);
11
+ --_sonic-region-bracket-width: var(
12
+ --sonic-region-bracket-width,
13
+ max(1px, round(var(--_sonic-unit), var(--_sonic-snap)))
14
+ );
15
+
16
+ position: absolute;
17
+ inset-block: 0;
18
+ inset-inline-start: calc(var(--_sonic-region-from, 0) * 100%);
19
+ inline-size: calc((var(--_sonic-region-to, 0) - var(--_sonic-region-from, 0)) * 100%);
20
+ min-inline-size: calc(2 * var(--_sonic-region-bracket-width));
21
+ pointer-events: none;
22
+ border-radius: var(--sonic-region-bracket-radius, calc(2 * var(--_sonic-unit)));
23
+ }
24
+
25
+ .sonic-region:focus-visible {
26
+ outline: 2px solid transparent;
27
+ outline-offset: var(--sonic-focus-outline-offset, -2px);
28
+ }
29
+
30
+ .sonic-region:focus-visible:not([data-sonic-pointer-focus]) {
31
+ outline: var(--sonic-focus-outline, 2px solid transparent);
32
+ box-shadow: var(--_sonic-focus-glow);
33
+ }
34
+
35
+ :is(.sonic-region[aria-disabled='true'], [dimmed] > .sonic-wavestrip .sonic-region) {
36
+ --_sonic-region-colour: color-mix(in oklab, var(--_sonic-region-paint) 45%, transparent);
37
+ }
38
+
39
+ .sonic-region-bracket {
40
+ position: absolute;
41
+ inset: 0;
42
+ box-sizing: border-box;
43
+ background: var(--sonic-region-fill, transparent);
44
+ border: var(--_sonic-region-bracket-width) solid var(--_sonic-region-colour);
45
+ border-radius: inherit;
46
+ }
47
+
48
+ .sonic-region[data-sonic-clipped~='start'] {
49
+ border-start-start-radius: 0;
50
+ border-end-start-radius: 0;
51
+ }
52
+
53
+ .sonic-region[data-sonic-clipped~='start'] > .sonic-region-bracket {
54
+ border-inline-start-width: 0;
55
+ }
56
+
57
+ .sonic-region[data-sonic-clipped~='end'] {
58
+ border-start-end-radius: 0;
59
+ border-end-end-radius: 0;
60
+ }
61
+
62
+ .sonic-region[data-sonic-clipped~='end'] > .sonic-region-bracket {
63
+ border-inline-end-width: 0;
64
+ }
65
+
66
+ @media (forced-colors: active) {
67
+ .sonic-region {
68
+ --_sonic-region-colour: CanvasText;
69
+ }
70
+
71
+ .sonic-region:focus-visible {
72
+ outline-offset: 2px;
73
+ }
74
+
75
+ .sonic-region[data-sonic-pointer-focus]:focus-visible {
76
+ outline-style: none;
77
+ }
78
+
79
+ :is(.sonic-region[aria-disabled='true'], [dimmed] > .sonic-wavestrip .sonic-region) {
80
+ --_sonic-region-colour: GrayText;
81
+ }
82
+
83
+ .sonic-region-bracket {
84
+ forced-color-adjust: none;
85
+ background: none;
86
+ }
87
+ }
88
+ }
@@ -50,7 +50,8 @@
50
50
  transparent 0
51
51
  );
52
52
  border-radius: 50%;
53
- mask: var(--_sonic-arc-mask);
53
+ -webkit-mask: var(--_sonic-arc-mask);
54
+ mask: var(--_sonic-arc-mask);
54
55
  }
55
56
 
56
57
  @media (forced-colors: active) {
@@ -11,14 +11,16 @@
11
11
  --_sonic-screen-size: var(--sonic-screen-size, 2.5rem);
12
12
  --_sonic-screen-radius-ratio: var(--sonic-screen-radius-ratio, 0.15);
13
13
  --_sonic-screen-radius-own: calc(var(--_sonic-screen-size) * var(--sonic-screen-radius-ratio));
14
+ --_sonic-screen-radius: var(
15
+ --_sonic-screen-radius-own,
16
+ var(--sonic-radius, calc(var(--_sonic-screen-size) * var(--_sonic-screen-radius-ratio)))
17
+ );
14
18
  --_sonic-screen-inset-ratio: var(--sonic-screen-inset-ratio, 0.1);
19
+ --_sonic-screen-inset: calc(var(--_sonic-screen-size) * var(--_sonic-screen-inset-ratio));
15
20
  --_sonic-unit: calc(var(--_sonic-screen-size) / 32);
16
21
 
17
22
  min-block-size: var(--_sonic-screen-size);
18
- padding: calc(var(--_sonic-screen-size) * var(--_sonic-screen-inset-ratio));
19
- border-radius: var(
20
- --_sonic-screen-radius-own,
21
- var(--sonic-radius, calc(var(--_sonic-screen-size) * var(--_sonic-screen-radius-ratio)))
22
- );
23
+ padding: var(--_sonic-screen-inset);
24
+ border-radius: var(--_sonic-screen-radius);
23
25
  }
24
26
  }
@@ -65,7 +65,8 @@
65
65
  block-size: var(--_sonic-segmented-size);
66
66
  padding: var(--_sonic-segmented-gap);
67
67
  touch-action: pan-y;
68
- user-select: none;
68
+ -webkit-user-select: none;
69
+ user-select: none;
69
70
  background: var(--_sonic-well-floor);
70
71
  border-radius: var(--_sonic-segmented-corner);
71
72
  box-shadow: var(--_sonic-well);