@xsynaptic/sonic-ui 0.24.1 → 0.26.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 (137) hide show
  1. package/CHANGELOG.md +42 -2
  2. package/README.md +6 -4
  3. package/dist/default/define/region.js +7 -0
  4. package/dist/default/define.js +1 -0
  5. package/dist/default/elements/button.js +3 -0
  6. package/dist/default/elements/dial.js +3 -0
  7. package/dist/default/elements/envelope.js +14 -11
  8. package/dist/default/elements/form-element.js +10 -0
  9. package/dist/default/elements/meter.js +3 -0
  10. package/dist/default/elements/number.js +3 -0
  11. package/dist/default/elements/radio-group.js +4 -1
  12. package/dist/default/elements/readout.js +1 -1
  13. package/dist/default/elements/region-layer.js +253 -0
  14. package/dist/default/elements/region.js +161 -0
  15. package/dist/default/elements/slider.js +3 -0
  16. package/dist/default/elements/sonic-element.js +7 -9
  17. package/dist/default/elements/split.js +2 -2
  18. package/dist/default/elements/toggle.js +4 -4
  19. package/dist/default/elements/value-element.js +21 -3
  20. package/dist/default/elements/value-gestures.js +7 -5
  21. package/dist/default/elements/wave-element.js +15 -3
  22. package/dist/default/elements/waveform.js +38 -2
  23. package/dist/default/elements/wavestrip.js +90 -17
  24. package/dist/default/elements/xy.js +6 -11
  25. package/dist/default/index.js +2 -1
  26. package/dist/default/lib/canvas-surface.js +22 -1
  27. package/dist/default/lib/clock.js +1 -0
  28. package/dist/default/lib/drag-step.js +1 -1
  29. package/dist/default/lib/key-press.js +2 -2
  30. package/dist/default/lib/marker-band.js +40 -29
  31. package/dist/default/lib/region-drag.js +48 -0
  32. package/dist/dev/define/region.d.ts +2 -0
  33. package/dist/dev/define/region.js +8 -0
  34. package/dist/dev/define/region.js.map +1 -0
  35. package/dist/dev/define.d.ts +3 -1
  36. package/dist/dev/define.js +1 -0
  37. package/dist/dev/elements/button.d.ts +1 -0
  38. package/dist/dev/elements/button.js +3 -0
  39. package/dist/dev/elements/button.js.map +1 -1
  40. package/dist/dev/elements/dial.d.ts +1 -0
  41. package/dist/dev/elements/dial.js +3 -0
  42. package/dist/dev/elements/dial.js.map +1 -1
  43. package/dist/dev/elements/envelope.d.ts +1 -0
  44. package/dist/dev/elements/envelope.js +14 -11
  45. package/dist/dev/elements/envelope.js.map +1 -1
  46. package/dist/dev/elements/form-element.d.ts +1 -0
  47. package/dist/dev/elements/form-element.js +10 -0
  48. package/dist/dev/elements/form-element.js.map +1 -1
  49. package/dist/dev/elements/meter.d.ts +1 -0
  50. package/dist/dev/elements/meter.js +3 -0
  51. package/dist/dev/elements/meter.js.map +1 -1
  52. package/dist/dev/elements/number.d.ts +1 -0
  53. package/dist/dev/elements/number.js +3 -0
  54. package/dist/dev/elements/number.js.map +1 -1
  55. package/dist/dev/elements/radio-group.d.ts +1 -0
  56. package/dist/dev/elements/radio-group.js +4 -1
  57. package/dist/dev/elements/radio-group.js.map +1 -1
  58. package/dist/dev/elements/readout.js +1 -1
  59. package/dist/dev/elements/readout.js.map +1 -1
  60. package/dist/dev/elements/region-layer.js +254 -0
  61. package/dist/dev/elements/region-layer.js.map +1 -0
  62. package/dist/dev/elements/region.d.ts +30 -0
  63. package/dist/dev/elements/region.js +169 -0
  64. package/dist/dev/elements/region.js.map +1 -0
  65. package/dist/dev/elements/slider.d.ts +1 -0
  66. package/dist/dev/elements/slider.js +3 -0
  67. package/dist/dev/elements/slider.js.map +1 -1
  68. package/dist/dev/elements/sonic-element.d.ts +2 -0
  69. package/dist/dev/elements/sonic-element.js +8 -10
  70. package/dist/dev/elements/sonic-element.js.map +1 -1
  71. package/dist/dev/elements/split.js +2 -2
  72. package/dist/dev/elements/split.js.map +1 -1
  73. package/dist/dev/elements/toggle.js +4 -4
  74. package/dist/dev/elements/toggle.js.map +1 -1
  75. package/dist/dev/elements/value-element.d.ts +3 -1
  76. package/dist/dev/elements/value-element.js +21 -3
  77. package/dist/dev/elements/value-element.js.map +1 -1
  78. package/dist/dev/elements/value-gestures.js +7 -5
  79. package/dist/dev/elements/value-gestures.js.map +1 -1
  80. package/dist/dev/elements/wave-element.d.ts +8 -1
  81. package/dist/dev/elements/wave-element.js +15 -3
  82. package/dist/dev/elements/wave-element.js.map +1 -1
  83. package/dist/dev/elements/waveform.d.ts +7 -0
  84. package/dist/dev/elements/waveform.js +38 -2
  85. package/dist/dev/elements/waveform.js.map +1 -1
  86. package/dist/dev/elements/wavestrip.d.ts +17 -1
  87. package/dist/dev/elements/wavestrip.js +90 -17
  88. package/dist/dev/elements/wavestrip.js.map +1 -1
  89. package/dist/dev/elements/xy.d.ts +1 -0
  90. package/dist/dev/elements/xy.js +6 -11
  91. package/dist/dev/elements/xy.js.map +1 -1
  92. package/dist/dev/index.d.ts +3 -2
  93. package/dist/dev/index.js +2 -1
  94. package/dist/dev/lib/canvas-surface.js +22 -1
  95. package/dist/dev/lib/canvas-surface.js.map +1 -1
  96. package/dist/dev/lib/clock.js +1 -0
  97. package/dist/dev/lib/clock.js.map +1 -1
  98. package/dist/dev/lib/drag-step.js +1 -1
  99. package/dist/dev/lib/drag-step.js.map +1 -1
  100. package/dist/dev/lib/key-press.js +2 -2
  101. package/dist/dev/lib/key-press.js.map +1 -1
  102. package/dist/dev/lib/marker-band.d.ts +7 -0
  103. package/dist/dev/lib/marker-band.js +40 -29
  104. package/dist/dev/lib/marker-band.js.map +1 -1
  105. package/dist/dev/lib/region-drag.js +49 -0
  106. package/dist/dev/lib/region-drag.js.map +1 -0
  107. package/dist/styles/button.css +23 -13
  108. package/dist/styles/controls.css +1 -0
  109. package/dist/styles/dial.css +41 -24
  110. package/dist/styles/envelope.css +12 -5
  111. package/dist/styles/led.css +8 -8
  112. package/dist/styles/material/arc.css +2 -2
  113. package/dist/styles/material/cap.css +34 -13
  114. package/dist/styles/material/glass.css +1 -1
  115. package/dist/styles/material/groove.css +3 -3
  116. package/dist/styles/material/keycap.css +2 -2
  117. package/dist/styles/material/lens.css +1 -1
  118. package/dist/styles/material/pane.css +20 -6
  119. package/dist/styles/material/readout.css +14 -5
  120. package/dist/styles/material/{bracket.css → reticle.css} +15 -8
  121. package/dist/styles/material/well.css +2 -2
  122. package/dist/styles/material.css +1 -1
  123. package/dist/styles/meter.css +29 -16
  124. package/dist/styles/number.css +3 -2
  125. package/dist/styles/panel.css +3 -3
  126. package/dist/styles/region.css +94 -0
  127. package/dist/styles/ring.css +2 -1
  128. package/dist/styles/screen.css +7 -5
  129. package/dist/styles/segmented.css +5 -4
  130. package/dist/styles/slider.css +24 -15
  131. package/dist/styles/spectrum.css +9 -1
  132. package/dist/styles/switch.css +9 -2
  133. package/dist/styles/toggle.css +5 -4
  134. package/dist/styles/waveform.css +10 -3
  135. package/dist/styles/wavestrip.css +17 -8
  136. package/dist/styles/xy.css +24 -11
  137. package/package.json +3 -2
@@ -83,11 +83,12 @@
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
 
90
- :state(dragging) > .sonic-dial {
91
+ .sonic-dial[data-sonic-dragging] {
91
92
  --_sonic-cap: var(--_sonic-cap-hover);
92
93
  }
93
94
 
@@ -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 {
@@ -236,7 +251,7 @@
236
251
  display: none;
237
252
  }
238
253
 
239
- :state(modulated) > .sonic-dial > .sonic-dial-modulation {
254
+ .sonic-dial[data-sonic-modulated] > .sonic-dial-modulation {
240
255
  --_sonic-dial-modulation-value-angle: calc(
241
256
  var(--_sonic-dial-modulation-value, 0) * var(--_sonic-dial-sweep)
242
257
  );
@@ -253,17 +268,18 @@
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
- :is(:state(modulated) > .sonic-dial > .sonic-dial-modulation)::before,:is(:state(modulated) > .sonic-dial > .sonic-dial-modulation)::after {
275
+ :is(.sonic-dial[data-sonic-modulated] > .sonic-dial-modulation)::before,:is(.sonic-dial[data-sonic-modulated] > .sonic-dial-modulation)::after {
260
276
  position: absolute;
261
277
  inset: 0;
262
278
  content: '';
263
279
  border-radius: 50%;
264
280
  }
265
281
 
266
- :is(:state(modulated) > .sonic-dial > .sonic-dial-modulation)::before {
282
+ :is(.sonic-dial[data-sonic-modulated] > .sonic-dial-modulation)::before {
267
283
  background:
268
284
  conic-gradient(
269
285
  from var(--_sonic-dial-start),
@@ -279,10 +295,11 @@
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
- :is(:state(modulated) > .sonic-dial > .sonic-dial-modulation)::after {
302
+ :is(.sonic-dial[data-sonic-modulated] > .sonic-dial-modulation)::after {
286
303
  background: linear-gradient(
287
304
  var(--_sonic-dial-modulation-tick),
288
305
  var(--_sonic-dial-modulation-tick)
@@ -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),
@@ -397,7 +414,7 @@
397
414
  --_sonic-dial-modulation: CanvasText;
398
415
  }
399
416
 
400
- :state(modulated) > .sonic-dial > .sonic-dial-modulation {
417
+ .sonic-dial[data-sonic-modulated] > .sonic-dial-modulation {
401
418
  --_sonic-dial-modulation-range: GrayText;
402
419
  --_sonic-dial-modulation-tick: CanvasText;
403
420
  }
@@ -6,6 +6,12 @@
6
6
  initial-value: 80px;
7
7
  }
8
8
 
9
+ @property --_sonic-point-edge {
10
+ syntax: '<length>';
11
+ inherits: true;
12
+ initial-value: 1px;
13
+ }
14
+
9
15
  @layer sonic.control {
10
16
  :is(sonic-envelope, .sonic-envelope) {
11
17
  --_sonic-envelope-size: var(--sonic-envelope-size, 5rem);
@@ -40,7 +46,8 @@
40
46
  inline-size: calc(var(--_sonic-envelope-size) * var(--_sonic-envelope-aspect-ratio));
41
47
  block-size: var(--_sonic-envelope-size);
42
48
  container-type: size;
43
- user-select: none;
49
+ -webkit-user-select: none;
50
+ user-select: none;
44
51
  isolation: isolate;
45
52
  }
46
53
 
@@ -55,11 +62,11 @@
55
62
  clip-path: inset(calc(-1 * var(--_sonic-envelope-inset)));
56
63
  }
57
64
 
58
- .sonic-envelope-bracket {
65
+ .sonic-envelope-reticle {
59
66
  --_sonic-point-size: calc(
60
67
  2 * var(--_sonic-envelope-size) * var(--_sonic-envelope-handle-ratio)
61
68
  );
62
- --_sonic-bracket-size: var(--_sonic-point-size);
69
+ --_sonic-reticle-size: var(--_sonic-point-size);
63
70
 
64
71
  position: absolute;
65
72
  inset: 0;
@@ -67,7 +74,7 @@
67
74
  pointer-events: none;
68
75
  }
69
76
 
70
- .sonic-envelope-bracket[data-sonic-part='curve'] {
77
+ .sonic-envelope-reticle[data-sonic-part='curve'] {
71
78
  --_sonic-point-size: calc(
72
79
  2 * var(--_sonic-envelope-size) * var(--_sonic-envelope-curve-ratio)
73
80
  );
@@ -93,7 +100,7 @@
93
100
  }
94
101
 
95
102
  :is(.sonic-envelope-handle, .sonic-envelope-curve),
96
- .sonic-envelope-bracket::before {
103
+ .sonic-envelope-reticle::before {
97
104
  position: absolute;
98
105
  inset: auto auto
99
106
  calc(
@@ -75,7 +75,7 @@
75
75
  [data-sonic-lit]:where(:not([data-sonic-lit='idle'])),
76
76
  :where(
77
77
  .sonic-button:is([aria-pressed='true'], [aria-expanded='true']),
78
- [momentary]:state(pressed) > .sonic-button,
78
+ [momentary] > .sonic-button[data-sonic-pressed],
79
79
  .sonic-segmented-option[aria-checked='true'],
80
80
  .sonic-toggle:has(
81
81
  > [role='switch'][aria-checked='true'],
@@ -83,7 +83,7 @@
83
83
  )
84
84
  )
85
85
  *,
86
- :where(:state(at-origin):not(:disabled) > .sonic-led)
86
+ :where(:not(:disabled):has(> [data-sonic-at-origin]) > .sonic-led)
87
87
  ) {
88
88
  background:
89
89
  radial-gradient(
@@ -95,8 +95,8 @@
95
95
  var(--_sonic-lens-bezel);
96
96
  }
97
97
 
98
- .sonic-led:is([data-sonic-lit]:where(:not([data-sonic-lit='idle'])),:where(.sonic-button:is([aria-pressed='true'],[aria-expanded='true']),[momentary]:state(pressed) > .sonic-button,.sonic-segmented-option[aria-checked='true'],.sonic-toggle:has( > [role='switch'][aria-checked='true'], > [aria-checked='true'] [data-sonic-lit]))
99
- *,:where(:state(at-origin):not(:disabled) > .sonic-led))::after {
98
+ .sonic-led:is([data-sonic-lit]:where(:not([data-sonic-lit='idle'])),:where(.sonic-button:is([aria-pressed='true'],[aria-expanded='true']),[momentary] > .sonic-button[data-sonic-pressed],.sonic-segmented-option[aria-checked='true'],.sonic-toggle:has( > [role='switch'][aria-checked='true'], > [aria-checked='true'] [data-sonic-lit]))
99
+ *,:where(:not(:disabled):has( > [data-sonic-at-origin]) > .sonic-led))::after {
100
100
  background: radial-gradient(
101
101
  closest-side,
102
102
  color-mix(
@@ -114,7 +114,7 @@
114
114
  [data-sonic-lit]:where(:not([data-sonic-lit='idle'])),
115
115
  :where(
116
116
  .sonic-button:is([aria-pressed='true'], [aria-expanded='true']),
117
- [momentary]:state(pressed) > .sonic-button,
117
+ [momentary] > .sonic-button[data-sonic-pressed],
118
118
  .sonic-segmented-option[aria-checked='true'],
119
119
  .sonic-toggle:has(
120
120
  > [role='switch'][aria-checked='true'],
@@ -122,13 +122,13 @@
122
122
  )
123
123
  )
124
124
  *,
125
- :where(:state(at-origin):not(:disabled) > .sonic-led)
125
+ :where(:not(:disabled):has(> [data-sonic-at-origin]) > .sonic-led)
126
126
  ) {
127
127
  background: none;
128
128
  }
129
129
 
130
- .sonic-led:is([data-sonic-lit]:where(:not([data-sonic-lit='idle'])),:where(.sonic-button:is([aria-pressed='true'],[aria-expanded='true']),[momentary]:state(pressed) > .sonic-button,.sonic-segmented-option[aria-checked='true'],.sonic-toggle:has( > [role='switch'][aria-checked='true'], > [aria-checked='true'] [data-sonic-lit]))
131
- *,:where(:state(at-origin):not(:disabled) > .sonic-led))::after {
130
+ .sonic-led:is([data-sonic-lit]:where(:not([data-sonic-lit='idle'])),:where(.sonic-button:is([aria-pressed='true'],[aria-expanded='true']),[momentary] > .sonic-button[data-sonic-pressed],.sonic-segmented-option[aria-checked='true'],.sonic-toggle:has( > [role='switch'][aria-checked='true'], > [aria-checked='true'] [data-sonic-lit]))
131
+ *,:where(:not(:disabled):has( > [data-sonic-at-origin]) > .sonic-led))::after {
132
132
  background: var(--_sonic-lit);
133
133
  box-shadow: 0 0 0 1px CanvasText;
134
134
  }
@@ -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
  }
@@ -1,3 +1,9 @@
1
+ @property --_sonic-rim-width {
2
+ syntax: '<length>';
3
+ inherits: true;
4
+ initial-value: 1px;
5
+ }
6
+
1
7
  @layer sonic.material {
2
8
  :is(
3
9
  .sonic-dial,
@@ -50,9 +56,9 @@
50
56
  --_sonic-sheen: linear-gradient(
51
57
  calc(var(--_sonic-light-fall) - 58deg),
52
58
  transparent 20%,
53
- rgb(from var(--_sonic-shine) r g b / calc(0.1 * var(--_sonic-relief))) 45%,
59
+ color-mix(in srgb, var(--_sonic-shine) calc(10% * var(--_sonic-relief)), transparent) 45%,
54
60
  transparent 55%,
55
- rgb(from var(--_sonic-shade) r g b / calc(0.06 * var(--_sonic-relief))) 80%
61
+ color-mix(in srgb, var(--_sonic-shade) calc(6% * var(--_sonic-relief)), transparent) 80%
56
62
  );
57
63
  --_sonic-press-transition:
58
64
  scale var(--_sonic-press-duration) cubic-bezier(0.4, 0, 0.2, 1),
@@ -60,9 +66,9 @@
60
66
  box-shadow var(--_sonic-press-duration) cubic-bezier(0.4, 0, 0.2, 1);
61
67
  --_sonic-face-shadow:
62
68
  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))),
69
+ color-mix(in srgb, var(--_sonic-shade) calc(35% * var(--_sonic-relief)), transparent),
64
70
  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)));
71
+ color-mix(in srgb, var(--_sonic-shine) calc(12% * var(--_sonic-relief)), transparent);
66
72
  --_sonic-rim-width: max(1px, round(0.75 * var(--_sonic-unit), var(--_sonic-snap)));
67
73
  --_sonic-rim: 0 0 0 var(--_sonic-rim-width)
68
74
  var(
@@ -73,7 +79,11 @@
73
79
  var(--_sonic-shade)
74
80
  )
75
81
  );
76
- --_sonic-drop-shade: rgb(from var(--_sonic-shade) r g b / calc(0.65 * var(--_sonic-relief)));
82
+ --_sonic-drop-shade: color-mix(
83
+ in srgb,
84
+ var(--_sonic-shade) calc(65% * var(--_sonic-relief)),
85
+ transparent
86
+ );
77
87
  --_sonic-focus-shadow: 0 0 transparent;
78
88
  --_sonic-focus-glow: 0 0 max(4px, 3 * var(--_sonic-unit)) max(1px, 0.5 * var(--_sonic-unit))
79
89
  color-mix(in oklab, var(--_sonic-focus) calc(60% * var(--_sonic-focus-strength)), transparent);
@@ -84,7 +94,13 @@
84
94
  }
85
95
 
86
96
  /* 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) {
97
+ :is(
98
+ .sonic-number,
99
+ .sonic-slider,
100
+ .sonic-switch-position,
101
+ .sonic-waveform,
102
+ .sonic-wavestrip-canvas
103
+ ) {
88
104
  border-radius: var(--sonic-focus-radius, 0);
89
105
  }
90
106
 
@@ -141,14 +157,14 @@
141
157
  .sonic-segmented-option,
142
158
  .sonic-slider,
143
159
  .sonic-waveform,
144
- .sonic-wavestrip,
160
+ .sonic-wavestrip-canvas,
145
161
  .sonic-xy-axis
146
162
  ):focus-visible {
147
163
  outline: 2px solid transparent;
148
164
  outline-offset: var(--sonic-focus-outline-offset, -2px);
149
165
  }
150
166
 
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]) {
167
+ :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
168
  --_sonic-cap: var(--_sonic-cap-hover);
153
169
  --_sonic-focus-shadow: var(--_sonic-focus-glow);
154
170
  }
@@ -157,7 +173,7 @@
157
173
  .sonic-number,
158
174
  .sonic-slider,
159
175
  .sonic-waveform,
160
- .sonic-wavestrip,
176
+ .sonic-wavestrip-canvas,
161
177
  .sonic-xy-axis
162
178
  ):focus-visible:not([data-sonic-pointer-focus]) {
163
179
  outline: var(--sonic-focus-outline, 2px solid transparent);
@@ -173,8 +189,13 @@
173
189
  }
174
190
  }
175
191
 
176
- :state(editing)
177
- > :is(.sonic-dial, .sonic-number, .sonic-slider, .sonic-waveform, .sonic-wavestrip) {
192
+ :is(
193
+ .sonic-dial,
194
+ .sonic-number,
195
+ .sonic-slider,
196
+ .sonic-waveform,
197
+ .sonic-wavestrip
198
+ )[data-sonic-editing] {
178
199
  --_sonic-cap: var(--_sonic-cap-hover);
179
200
  --_sonic-focus-shadow: var(--_sonic-focus-glow);
180
201
  }
@@ -226,12 +247,12 @@
226
247
  .sonic-segmented-option,
227
248
  .sonic-slider,
228
249
  .sonic-waveform,
229
- .sonic-wavestrip
250
+ .sonic-wavestrip-canvas
230
251
  ):focus-visible {
231
252
  outline-offset: 2px;
232
253
  }
233
254
 
234
- [data-sonic-pointer-focus]:is(.sonic-dial,.sonic-button,.sonic-number,.sonic-segmented-option,.sonic-slider,.sonic-waveform,.sonic-wavestrip):focus-visible {
255
+ [data-sonic-pointer-focus]:is(.sonic-dial,.sonic-button,.sonic-number,.sonic-segmented-option,.sonic-slider,.sonic-waveform,.sonic-wavestrip-canvas):focus-visible {
235
256
  outline-style: none;
236
257
  }
237
258
 
@@ -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));
@@ -1,3 +1,9 @@
1
+ @property --_sonic-glass-pitch {
2
+ syntax: '<length>';
3
+ inherits: true;
4
+ initial-value: 2px;
5
+ }
6
+
1
7
  @keyframes sonic-glass-breathe {
2
8
  to {
3
9
  opacity: calc(0.4 * min(1, var(--_sonic-glass-texture)));
@@ -38,25 +44,33 @@
38
44
  background:
39
45
  linear-gradient(
40
46
  var(--_sonic-light-fall),
41
- rgb(from var(--_sonic-shine) r g b / calc(0.07 * var(--_sonic-glass-depth))),
47
+ color-mix(in srgb, var(--_sonic-shine) calc(7% * var(--_sonic-glass-depth)), transparent),
42
48
  transparent 45%
43
49
  ),
44
50
  radial-gradient(
45
51
  farthest-corner,
46
52
  transparent 55%,
47
- rgb(from var(--_sonic-shade) r g b / calc(0.4 * var(--_sonic-glass-texture)))
53
+ color-mix(
54
+ in srgb,
55
+ var(--_sonic-shade) calc(40% * var(--_sonic-glass-texture)),
56
+ transparent
57
+ )
48
58
  ),
49
59
  repeating-linear-gradient(
50
60
  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),
61
+ color-mix(
62
+ in srgb,
63
+ var(--_sonic-shade) calc(2.5% * var(--_sonic-glass-texture)),
64
+ transparent
65
+ )
66
+ 0 calc(var(--_sonic-glass-pitch) / 2),
53
67
  transparent 0 var(--_sonic-glass-pitch)
54
68
  );
55
69
  border-radius: inherit;
56
70
  box-shadow:
57
71
  var(--_sonic-well),
58
72
  inset 0 0 calc(3 * var(--_sonic-glass-depth) * var(--_sonic-unit))
59
- rgb(from var(--_sonic-shade) r g b / 45%);
73
+ color-mix(in srgb, var(--_sonic-shade) 45%, transparent);
60
74
  }
61
75
 
62
76
  @media (forced-colors: none) {
@@ -76,7 +90,7 @@
76
90
  }
77
91
 
78
92
  @media (prefers-reduced-motion: no-preference) {
79
- .sonic-screen:is(:focus-visible,:focus-within)::before,.sonic-screen:has(:state(dragging))::before {
93
+ .sonic-screen:is(:focus-visible,:focus-within)::before,.sonic-screen:has([data-sonic-dragging])::before {
80
94
  animation: sonic-glass-breathe 3s ease-in-out infinite alternate;
81
95
  }
82
96
 
@@ -4,6 +4,12 @@
4
4
  initial-value: 24px;
5
5
  }
6
6
 
7
+ @property --_sonic-readout-shine-width {
8
+ syntax: '<length>';
9
+ inherits: true;
10
+ initial-value: 1px;
11
+ }
12
+
7
13
  @layer sonic.material {
8
14
  :is(.sonic-dial, .sonic-envelope, .sonic-slider, .sonic-waveform, .sonic-wavestrip, .sonic-xy) {
9
15
  --_sonic-readout-size: var(--sonic-readout-size, 1.5rem);
@@ -26,8 +32,10 @@
26
32
  --_sonic-glass-own: var(--sonic-readout-glass);
27
33
  --_sonic-glass-edge-colour-own: var(--sonic-readout-edge);
28
34
  --_sonic-glass-edge-width-own: var(--sonic-readout-edge-width);
35
+ --_sonic-readout-shine-width: max(1px, round(var(--_sonic-unit), var(--_sonic-snap)));
29
36
 
30
37
  box-sizing: border-box;
38
+ display: none;
31
39
  place-items: center;
32
40
  min-inline-size: calc(1.75 * var(--_sonic-readout-size));
33
41
  block-size: var(--_sonic-readout-size);
@@ -45,7 +53,8 @@
45
53
  white-space: nowrap;
46
54
  pointer-events: none;
47
55
  cursor: default;
48
- user-select: none;
56
+ -webkit-user-select: none;
57
+ user-select: none;
49
58
  background: var(--_sonic-glass-fill);
50
59
  border: var(--_sonic-glass-edge);
51
60
  border-radius: var(
@@ -54,9 +63,9 @@
54
63
  );
55
64
  box-shadow:
56
65
  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
- 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)));
66
+ color-mix(in srgb, var(--_sonic-shade) calc(55% * var(--_sonic-readout-depth)), transparent),
67
+ inset 0 0 0 var(--_sonic-readout-shine-width)
68
+ color-mix(in srgb, var(--_sonic-shine) calc(8% * var(--_sonic-readout-depth)), transparent);
60
69
  opacity: 0;
61
70
  translate: 0 calc(0.15 * var(--_sonic-readout-size));
62
71
  transition:
@@ -100,7 +109,7 @@
100
109
  }
101
110
  }
102
111
 
103
- :state(editing) > :is(.sonic-dial,.sonic-slider,.sonic-waveform,.sonic-wavestrip) > :is(.sonic-dial-readout,.sonic-envelope-readout,.sonic-slider-readout,.sonic-waveform-readout,.sonic-wavestrip-readout,.sonic-xy-readout) {
112
+ [data-sonic-editing]:is(.sonic-dial,.sonic-slider,.sonic-waveform,.sonic-wavestrip) > :is(.sonic-dial-readout,.sonic-envelope-readout,.sonic-slider-readout,.sonic-waveform-readout,.sonic-wavestrip-readout,.sonic-xy-readout) {
104
113
  pointer-events: auto;
105
114
  cursor: text;
106
115
  }
@@ -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
+ [data-sonic-dragging] > .sonic-xy-reticle,
34
+ [data-sonic-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';