@xsynaptic/sonic-ui 0.3.0 → 0.4.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 (41) hide show
  1. package/dist/default/elements/dial.js +5 -3
  2. package/dist/default/elements/key.js +29 -4
  3. package/dist/default/elements/meter.js +63 -9
  4. package/dist/default/elements/number.js +1 -1
  5. package/dist/default/elements/range-element.js +134 -21
  6. package/dist/default/elements/slider.js +49 -3
  7. package/dist/default/lib/detent.js +17 -0
  8. package/dist/default/lib/math.js +16 -0
  9. package/dist/default/lib/number-list.js +14 -0
  10. package/dist/default/lib/taper.js +17 -7
  11. package/dist/dev/elements/dial.js +5 -3
  12. package/dist/dev/elements/dial.js.map +1 -1
  13. package/dist/dev/elements/key.d.ts +4 -0
  14. package/dist/dev/elements/key.js +29 -4
  15. package/dist/dev/elements/key.js.map +1 -1
  16. package/dist/dev/elements/meter.d.ts +6 -0
  17. package/dist/dev/elements/meter.js +63 -9
  18. package/dist/dev/elements/meter.js.map +1 -1
  19. package/dist/dev/elements/number.js +1 -1
  20. package/dist/dev/elements/range-element.d.ts +8 -0
  21. package/dist/dev/elements/range-element.js +134 -21
  22. package/dist/dev/elements/range-element.js.map +1 -1
  23. package/dist/dev/elements/slider.d.ts +6 -0
  24. package/dist/dev/elements/slider.js +49 -3
  25. package/dist/dev/elements/slider.js.map +1 -1
  26. package/dist/dev/lib/detent.js +18 -0
  27. package/dist/dev/lib/detent.js.map +1 -0
  28. package/dist/dev/lib/math.js +17 -0
  29. package/dist/dev/lib/math.js.map +1 -0
  30. package/dist/dev/lib/number-list.js +15 -0
  31. package/dist/dev/lib/number-list.js.map +1 -0
  32. package/dist/dev/lib/taper.js +17 -7
  33. package/dist/dev/lib/taper.js.map +1 -1
  34. package/dist/styles/dial.css +43 -3
  35. package/dist/styles/key.css +60 -15
  36. package/dist/styles/led.css +8 -1
  37. package/dist/styles/material.css +50 -1
  38. package/dist/styles/meter.css +101 -5
  39. package/dist/styles/segmented.css +2 -7
  40. package/dist/styles/slider.css +94 -32
  41. package/package.json +1 -1
@@ -57,6 +57,7 @@
57
57
  --_sonic-meter-toward: to top;
58
58
  --_sonic-meter-inset: calc(var(--_sonic-meter-size) * 0.125);
59
59
  --_sonic-meter-lens: calc(var(--_sonic-meter-size) - 2 * var(--_sonic-meter-inset));
60
+ --_sonic-meter-clip-space: calc(var(--_sonic-meter-inset) + var(--_sonic-meter-lens));
60
61
  --_sonic-meter-gap: calc(var(--_sonic-meter-pitch) * var(--_sonic-meter-gap-ratio));
61
62
  --_sonic-meter-segment: calc(var(--_sonic-meter-pitch) - var(--_sonic-meter-gap));
62
63
  --_sonic-meter-segment-radius: calc(
@@ -64,7 +65,7 @@
64
65
  );
65
66
  --_sonic-meter-segments: round(
66
67
  down,
67
- var(--_sonic-meter-length) - 3 * var(--_sonic-meter-inset) - var(--_sonic-meter-lens) +
68
+ var(--_sonic-meter-length) - 2 * var(--_sonic-meter-inset) - var(--_sonic-meter-clip-space) +
68
69
  var(--_sonic-meter-gap),
69
70
  var(--_sonic-meter-pitch)
70
71
  );
@@ -93,6 +94,26 @@
93
94
  block-size: var(--_sonic-meter-size);
94
95
  }
95
96
 
97
+ /* No clip on either, so the lights take the lens's room */
98
+ :is([scale='linear'], :state(ladder)) > .sonic-meter {
99
+ --_sonic-meter-clip-space: 0px;
100
+ }
101
+
102
+ :state(ladder) > .sonic-meter {
103
+ --_sonic-meter-pitch: calc(
104
+ (var(--_sonic-meter-length) - 2 * var(--_sonic-meter-inset)) / var(--_sonic-meter-count, 1)
105
+ );
106
+ --_sonic-meter-gap: 0px;
107
+ --_sonic-meter-segments: calc(var(--_sonic-meter-length) - 2 * var(--_sonic-meter-inset));
108
+ --_sonic-meter-light-radius: calc(
109
+ min(
110
+ var(--_sonic-meter-lens),
111
+ var(--_sonic-meter-pitch) * (1 - var(--_sonic-meter-gap-ratio))
112
+ ) /
113
+ 2
114
+ );
115
+ }
116
+
96
117
  /* Snapped to whole lights, so none is split between two colours */
97
118
  :is(.sonic-meter-segments, .sonic-meter-level) {
98
119
  --_sonic-meter-span: calc(var(--_sonic-meter-max, 0) - var(--_sonic-meter-min, -60));
@@ -108,7 +129,9 @@
108
129
  --_sonic-meter-clip-at: round(
109
130
  clamp(
110
131
  0,
111
- (var(--_sonic-meter-clip-from) - var(--_sonic-meter-min, -60)) / var(--_sonic-meter-span),
132
+ /* fallow-ignore-next-line code-duplication -- each zone snaps its own threshold by the same rule */
133
+ (var(--_sonic-meter-clip-from) - var(--_sonic-meter-min, -60)) /
134
+ var(--_sonic-meter-span),
112
135
  1
113
136
  ) *
114
137
  var(--_sonic-meter-segments),
@@ -144,6 +167,7 @@
144
167
  0 100% / 100% var(--_sonic-meter-pitch) no-repeat repeat,
145
168
  radial-gradient(
146
169
  circle var(--_sonic-meter-segment-radius) at left var(--_sonic-meter-segment-radius)
170
+ /* fallow-ignore-next-line code-duplication -- one gradient per segment corner is geometry, not copied logic */
147
171
  bottom calc(var(--_sonic-meter-segment) - var(--_sonic-meter-segment-radius)),
148
172
  #000 calc(100% - 0.5px),
149
173
  transparent
@@ -164,6 +188,23 @@
164
188
  mask-composite: add;
165
189
  }
166
190
 
191
+ :state(ladder) > .sonic-meter > :is(.sonic-meter-segments, .sonic-meter-level) {
192
+ --_sonic-meter-hot-at: calc(var(--_sonic-meter-hot-lights, 0) * var(--_sonic-meter-pitch));
193
+ --_sonic-meter-clip-at: calc(var(--_sonic-meter-clip-lights, 0) * var(--_sonic-meter-pitch));
194
+ --_sonic-meter-lights: radial-gradient(
195
+ circle var(--_sonic-meter-light-radius),
196
+ #000 calc(100% - 0.5px),
197
+ transparent
198
+ )
199
+ 0 100% / 100% var(--_sonic-meter-pitch) no-repeat repeat;
200
+ }
201
+
202
+ /* The zones are dBFS, which a linear level is not */
203
+ [scale='linear'] > .sonic-meter > :is(.sonic-meter-segments, .sonic-meter-level) {
204
+ --_sonic-meter-hot-at: var(--_sonic-meter-segments);
205
+ --_sonic-meter-clip-at: var(--_sonic-meter-segments);
206
+ }
207
+
167
208
  [orientation='horizontal'] > .sonic-meter > :is(.sonic-meter-segments, .sonic-meter-level) {
168
209
  --_sonic-meter-lights:
169
210
  linear-gradient(to right, #000 var(--_sonic-meter-segment), transparent 0) 0
@@ -194,6 +235,7 @@
194
235
  radial-gradient(
195
236
  circle var(--_sonic-meter-segment-radius) at left
196
237
  calc(var(--_sonic-meter-segment) - var(--_sonic-meter-segment-radius)) top
238
+ /* fallow-ignore-next-line code-duplication -- one gradient per segment corner is geometry, not copied logic */
197
239
  var(--_sonic-meter-segment-radius),
198
240
  #000 calc(100% - 0.5px),
199
241
  transparent
@@ -213,6 +255,42 @@
213
255
  block-size: auto;
214
256
  }
215
257
 
258
+ [orientation='horizontal']:state(ladder)
259
+ > .sonic-meter
260
+ > :is(.sonic-meter-segments, .sonic-meter-level) {
261
+ --_sonic-meter-lights: radial-gradient(
262
+ circle var(--_sonic-meter-light-radius),
263
+ #000 calc(100% - 0.5px),
264
+ transparent
265
+ )
266
+ 0 0 / var(--_sonic-meter-pitch) 100% repeat no-repeat;
267
+ }
268
+
269
+ :state(ladder) > .sonic-meter > :is(.sonic-meter-segments, .sonic-meter-level)::after {
270
+ position: absolute;
271
+ inset: 0;
272
+ content: '';
273
+ background: linear-gradient(var(--_sonic-light-fall), rgb(255 255 255 / 10%), transparent 60%) 0
274
+ 100% / 100% var(--_sonic-meter-pitch) repeat-y;
275
+ }
276
+
277
+ :state(ladder) > .sonic-meter > .sonic-meter-level::after {
278
+ background: radial-gradient(
279
+ circle var(--_sonic-meter-light-radius),
280
+ rgb(255 255 255 / 45%),
281
+ transparent
282
+ )
283
+ 0 100% / 100% var(--_sonic-meter-pitch) repeat-y;
284
+ }
285
+
286
+ [orientation='horizontal']:state(ladder)
287
+ > .sonic-meter
288
+ > :is(.sonic-meter-segments, .sonic-meter-level)::after {
289
+ background-repeat: repeat-x;
290
+ background-position: 0 0;
291
+ background-size: var(--_sonic-meter-pitch) 100%;
292
+ }
293
+
216
294
  .sonic-meter-segments {
217
295
  background: linear-gradient(
218
296
  var(--_sonic-meter-toward),
@@ -223,15 +301,24 @@
223
301
  }
224
302
 
225
303
  /* One mask for the bar and peak, so a frame repaints without layout */
304
+
305
+ /* The hair of slack keeps an exact fraction from losing a light to float error */
226
306
  .sonic-meter-level {
307
+ --_sonic-meter-lit-from: round(
308
+ up,
309
+ min(var(--_sonic-meter-origin, 0), var(--_sonic-meter-level, 0)) *
310
+ var(--_sonic-meter-segments) - 0.01px,
311
+ var(--_sonic-meter-pitch)
312
+ );
227
313
  --_sonic-meter-lit: round(
228
314
  down,
229
- var(--_sonic-meter-level, 0) * var(--_sonic-meter-segments),
315
+ max(var(--_sonic-meter-origin, 0), var(--_sonic-meter-level, 0)) *
316
+ var(--_sonic-meter-segments) + 0.01px,
230
317
  var(--_sonic-meter-pitch)
231
318
  );
232
319
  --_sonic-meter-held: round(
233
320
  down,
234
- var(--_sonic-meter-peak, 0) * var(--_sonic-meter-segments),
321
+ var(--_sonic-meter-peak, 0) * var(--_sonic-meter-segments) + 0.01px,
235
322
  var(--_sonic-meter-pitch)
236
323
  );
237
324
 
@@ -244,7 +331,8 @@
244
331
  mask:
245
332
  linear-gradient(
246
333
  var(--_sonic-meter-toward),
247
- #000 var(--_sonic-meter-lit),
334
+ transparent var(--_sonic-meter-lit-from),
335
+ #000 0 var(--_sonic-meter-lit),
248
336
  transparent 0 calc(var(--_sonic-meter-held) - var(--_sonic-meter-pitch)),
249
337
  #000 0 var(--_sonic-meter-held),
250
338
  transparent 0
@@ -274,6 +362,10 @@
274
362
  }
275
363
  }
276
364
 
365
+ :is([scale='linear'], :state(ladder)) > .sonic-meter > .sonic-meter-clip {
366
+ display: none;
367
+ }
368
+
277
369
  [orientation='horizontal'] > .sonic-meter > .sonic-meter-clip {
278
370
  inset: var(--_sonic-meter-inset) var(--_sonic-meter-inset) var(--_sonic-meter-inset) auto;
279
371
  inline-size: var(--_sonic-meter-lens);
@@ -303,5 +395,9 @@
303
395
  .sonic-meter-clip::after {
304
396
  background: Mark;
305
397
  }
398
+
399
+ :state(ladder) > .sonic-meter > :is(.sonic-meter-segments, .sonic-meter-level)::after {
400
+ display: none;
401
+ }
306
402
  }
307
403
  }
@@ -51,11 +51,7 @@
51
51
  padding: var(--_sonic-segmented-gap);
52
52
  touch-action: pan-y;
53
53
  user-select: none;
54
- background: linear-gradient(
55
- var(--_sonic-light-fall),
56
- color-mix(in oklab, var(--_sonic-unlit) 55%, #000),
57
- color-mix(in oklab, var(--_sonic-unlit) 85%, #000)
58
- );
54
+ background: var(--_sonic-well-floor);
59
55
  border-radius: var(--_sonic-segmented-corner);
60
56
  box-shadow: var(--_sonic-well);
61
57
  }
@@ -85,8 +81,7 @@
85
81
  .sonic-segmented-segment[aria-checked='true'] {
86
82
  --_sonic-segmented-shift: calc(var(--_sonic-segmented-depth) / 2);
87
83
  --_sonic-segmented-scale: var(--_sonic-segmented-press-scale);
88
- --_sonic-segmented-drop: calc(0.5 * var(--_sonic-cast-x)) calc(0.5 * var(--_sonic-cast-y))
89
- var(--_sonic-unit) var(--_sonic-drop-shade);
84
+ --_sonic-segmented-drop: var(--_sonic-press-drop);
90
85
  }
91
86
 
92
87
  .sonic-segmented-segment[aria-checked='true'] {
@@ -23,9 +23,11 @@
23
23
 
24
24
  sonic-slider:not(:defined, [hidden]) {
25
25
  display: block;
26
+ visibility: hidden;
26
27
  flex-shrink: 0;
27
28
  inline-size: var(--_sonic-slider-length);
28
29
  block-size: var(--_sonic-slider-size);
30
+ overflow: hidden;
29
31
  }
30
32
 
31
33
  sonic-slider[orientation='vertical']:not(:defined, [hidden]) {
@@ -42,13 +44,23 @@
42
44
  --_sonic-slider-radius-ratio: var(--sonic-slider-radius-ratio, 0.15);
43
45
  --_sonic-slider-bevel-ratio: var(--sonic-slider-bevel-ratio, 0.075);
44
46
  --_sonic-slider-pointer-ratio: var(--sonic-slider-pointer-ratio, 0.07);
45
- --_sonic-unit: calc(var(--_sonic-slider-size) / 32);
47
+ --_sonic-slider-scale-ratio: var(--sonic-slider-scale-ratio, 0.4);
48
+ --_sonic-slider-scale-font-ratio: var(--sonic-slider-scale-font-ratio, 0.18);
49
+ --_sonic-slider-scale-band: 0px;
50
+
51
+ /* Across the travel beside the legend, so a legend widens the box without restyling the fader */
52
+ --_sonic-slider-track: calc(var(--_sonic-slider-size) - var(--_sonic-slider-scale-band));
53
+ --_sonic-unit: calc(var(--_sonic-slider-track) / 32);
46
54
  --_sonic-slider-lit: var(--_sonic-lit);
55
+ --_sonic-slider-buffered: var(
56
+ --sonic-buffered,
57
+ color-mix(in oklab, var(--_sonic-ink) 18%, var(--_sonic-unlit))
58
+ );
47
59
  --_sonic-slider-toward: to right;
48
60
  --_sonic-slider-across: to bottom;
49
61
  --_sonic-slider-cursor: ew-resize;
50
- --_sonic-slider-groove: calc(var(--_sonic-slider-size) * var(--_sonic-slider-groove-ratio));
51
- --_sonic-slider-cap: calc(var(--_sonic-slider-size) * var(--_sonic-slider-cap-ratio));
62
+ --_sonic-slider-groove: calc(var(--_sonic-slider-track) * var(--_sonic-slider-groove-ratio));
63
+ --_sonic-slider-cap: calc(var(--_sonic-slider-track) * var(--_sonic-slider-cap-ratio));
52
64
  --_sonic-slider-travel: calc(var(--_sonic-slider-length) - var(--_sonic-slider-cap));
53
65
  --_sonic-slider-offset: calc(var(--_sonic-slider-value, 0) * var(--_sonic-slider-travel));
54
66
 
@@ -83,6 +95,10 @@
83
95
  --_sonic-slider-cursor: default;
84
96
  }
85
97
 
98
+ :has(> [data-sonic-value]) > .sonic-slider {
99
+ --_sonic-slider-scale-band: calc(var(--_sonic-slider-size) * var(--_sonic-slider-scale-ratio));
100
+ }
101
+
86
102
  [groove-press='none']:not(:state(dragging)) > .sonic-slider {
87
103
  cursor: default;
88
104
  }
@@ -92,11 +108,12 @@
92
108
  var(--_sonic-slider-travel) / (var(--_sonic-slider-positions, 2) - 1)
93
109
  );
94
110
  --_sonic-slider-mark-lip: calc(
95
- var(--_sonic-slider-groove) / 2 + var(--_sonic-slider-size) * 0.1
111
+ var(--_sonic-slider-groove) / 2 + var(--_sonic-slider-track) * 0.1
96
112
  );
97
113
 
98
114
  position: absolute;
99
- inset: 0 calc((var(--_sonic-slider-cap) - var(--_sonic-unit)) / 2);
115
+ inset: var(--_sonic-slider-scale-band) calc((var(--_sonic-slider-cap) - var(--_sonic-unit)) / 2)
116
+ 0;
100
117
  background: repeating-linear-gradient(
101
118
  var(--_sonic-slider-toward),
102
119
  var(--_sonic-etch) 0 var(--_sonic-unit),
@@ -113,43 +130,80 @@
113
130
  }
114
131
 
115
132
  [orientation='vertical'] > .sonic-slider > .sonic-slider-marks {
116
- inset: calc((var(--_sonic-slider-cap) - var(--_sonic-unit)) / 2) 0;
133
+ inset: calc((var(--_sonic-slider-cap) - var(--_sonic-unit)) / 2) 0
134
+ calc((var(--_sonic-slider-cap) - var(--_sonic-unit)) / 2) var(--_sonic-slider-scale-band);
117
135
  }
118
136
 
119
137
  :not([notched]) > .sonic-slider > .sonic-slider-marks {
120
138
  display: none;
121
139
  }
122
140
 
141
+ .sonic-slider-scale {
142
+ font-size: calc(var(--_sonic-slider-size) * var(--_sonic-slider-scale-font-ratio));
143
+
144
+ & > * {
145
+ --_sonic-slider-scale-along: calc(
146
+ var(--_sonic-slider-cap) / 2 + var(--_sonic-scale-at, 0) * var(--_sonic-slider-travel)
147
+ );
148
+ --_sonic-slider-scale-edge: calc(100% - var(--_sonic-slider-scale-band) + var(--_sonic-unit));
149
+
150
+ inset: auto auto var(--_sonic-slider-scale-edge) var(--_sonic-slider-scale-along);
151
+ translate: -50% 0;
152
+ }
153
+
154
+ & > .sonic-scale-tick {
155
+ inline-size: var(--_sonic-unit);
156
+ block-size: calc(var(--_sonic-slider-scale-band) * 0.4);
157
+ }
158
+ }
159
+
160
+ [orientation='vertical'] > .sonic-slider > .sonic-slider-scale {
161
+ & > * {
162
+ inset: auto var(--_sonic-slider-scale-edge) var(--_sonic-slider-scale-along) auto;
163
+ translate: 0 50%;
164
+ }
165
+
166
+ & > .sonic-scale-tick {
167
+ inline-size: calc(var(--_sonic-slider-scale-band) * 0.4);
168
+ block-size: var(--_sonic-unit);
169
+ }
170
+ }
171
+
123
172
  .sonic-slider-groove {
124
173
  --_sonic-slider-lit-low: min(var(--_sonic-slider-origin, 0), var(--_sonic-slider-value, 0));
125
174
  --_sonic-slider-lit-high: max(var(--_sonic-slider-origin, 0), var(--_sonic-slider-value, 0));
126
175
 
127
176
  position: absolute;
128
- inset: calc(50% - var(--_sonic-slider-groove) / 2)
129
- calc((var(--_sonic-slider-cap) - var(--_sonic-slider-groove)) / 2);
177
+ inset: calc(50% + var(--_sonic-slider-scale-band) / 2 - var(--_sonic-slider-groove) / 2)
178
+ calc((var(--_sonic-slider-cap) - var(--_sonic-slider-groove)) / 2)
179
+ calc(50% - var(--_sonic-slider-scale-band) / 2 - var(--_sonic-slider-groove) / 2);
130
180
 
131
181
  /* At either end of the travel the light runs on to the groove's rounded end */
132
- background: linear-gradient(
133
- var(--_sonic-slider-toward),
134
- var(--_sonic-unlit)
135
- calc(
136
- var(--_sonic-slider-lit-low) * var(--_sonic-slider-travel) + var(--_sonic-slider-groove) /
137
- 2 * sign(var(--_sonic-slider-lit-low))
138
- ),
139
- var(--_sonic-slider-lit) 0
140
- calc(
141
- var(--_sonic-slider-lit-high) * var(--_sonic-slider-travel) +
142
- var(--_sonic-slider-groove) / 2 * (2 - sign(1 - var(--_sonic-slider-lit-high)))
143
- ),
144
- var(--_sonic-unlit) 0
145
- );
182
+ background:
183
+ linear-gradient(
184
+ var(--_sonic-slider-toward),
185
+ transparent
186
+ calc(
187
+ var(--_sonic-slider-lit-low) * var(--_sonic-slider-travel) +
188
+ var(--_sonic-slider-groove) / 2 * sign(var(--_sonic-slider-lit-low))
189
+ ),
190
+ var(--_sonic-slider-lit) 0
191
+ calc(
192
+ var(--_sonic-slider-lit-high) * var(--_sonic-slider-travel) +
193
+ var(--_sonic-slider-groove) / 2 * (2 - sign(1 - var(--_sonic-slider-lit-high)))
194
+ ),
195
+ transparent 0
196
+ ),
197
+ var(--_sonic-slider-buffered-ranges, none), var(--_sonic-unlit);
146
198
  border-radius: calc(var(--_sonic-slider-groove) / 2);
147
199
  box-shadow: var(--_sonic-groove);
148
200
  }
149
201
 
150
202
  [orientation='vertical'] > .sonic-slider > .sonic-slider-groove {
151
203
  inset: calc((var(--_sonic-slider-cap) - var(--_sonic-slider-groove)) / 2)
152
- calc(50% - var(--_sonic-slider-groove) / 2);
204
+ calc(50% - var(--_sonic-slider-scale-band) / 2 - var(--_sonic-slider-groove) / 2)
205
+ calc((var(--_sonic-slider-cap) - var(--_sonic-slider-groove)) / 2)
206
+ calc(50% + var(--_sonic-slider-scale-band) / 2 - var(--_sonic-slider-groove) / 2);
153
207
  }
154
208
 
155
209
  .sonic-slider-modulation {
@@ -168,8 +222,10 @@
168
222
  );
169
223
 
170
224
  position: absolute;
171
- inset: calc(50% - var(--_sonic-slider-modulation-band) / 2) auto auto
172
- var(--_sonic-slider-modulation-start);
225
+ inset: calc(
226
+ 50% + var(--_sonic-slider-scale-band) / 2 - var(--_sonic-slider-modulation-band) / 2
227
+ )
228
+ auto auto var(--_sonic-slider-modulation-start);
173
229
  inline-size: var(--_sonic-slider-modulation-length);
174
230
  block-size: var(--_sonic-slider-modulation-band);
175
231
  background: var(--_sonic-slider-modulation);
@@ -178,7 +234,7 @@
178
234
 
179
235
  [orientation='vertical'] > .sonic-slider > .sonic-slider-modulation {
180
236
  inset: auto auto var(--_sonic-slider-modulation-start)
181
- calc(50% - var(--_sonic-slider-modulation-band) / 2);
237
+ calc(50% + var(--_sonic-slider-scale-band) / 2 - var(--_sonic-slider-modulation-band) / 2);
182
238
  inline-size: var(--_sonic-slider-modulation-band);
183
239
  block-size: var(--_sonic-slider-modulation-length);
184
240
  }
@@ -189,14 +245,16 @@
189
245
 
190
246
  .sonic-slider-cap {
191
247
  --_sonic-slider-pointer-width: calc(
192
- var(--_sonic-slider-size) * var(--_sonic-slider-pointer-ratio)
248
+ var(--_sonic-slider-track) * var(--_sonic-slider-pointer-ratio)
249
+ );
250
+ --_sonic-slider-bevel: calc(var(--_sonic-slider-track) * var(--_sonic-slider-bevel-ratio));
251
+ --_sonic-slider-corner: calc(var(--_sonic-slider-track) * var(--_sonic-slider-radius-ratio));
252
+ --_sonic-slider-index-inset: calc(
253
+ var(--_sonic-slider-bevel) + var(--_sonic-slider-track) * 0.1
193
254
  );
194
- --_sonic-slider-bevel: calc(var(--_sonic-slider-size) * var(--_sonic-slider-bevel-ratio));
195
- --_sonic-slider-corner: calc(var(--_sonic-slider-size) * var(--_sonic-slider-radius-ratio));
196
- --_sonic-slider-index-inset: calc(var(--_sonic-slider-bevel) + var(--_sonic-slider-size) * 0.1);
197
255
 
198
256
  position: absolute;
199
- inset: 0 auto 0 0;
257
+ inset: var(--_sonic-slider-scale-band) auto 0 0;
200
258
  inline-size: var(--_sonic-slider-cap);
201
259
  background: var(--_sonic-skirt);
202
260
  border-radius: var(--_sonic-slider-corner);
@@ -230,7 +288,7 @@
230
288
  }
231
289
 
232
290
  [orientation='vertical'] > .sonic-slider > .sonic-slider-cap {
233
- inset: auto 0 0;
291
+ inset: auto 0 0 var(--_sonic-slider-scale-band);
234
292
  inline-size: auto;
235
293
  block-size: var(--_sonic-slider-cap);
236
294
  translate: 0 calc(-1 * var(--_sonic-slider-offset));
@@ -257,6 +315,10 @@
257
315
  --_sonic-slider-modulation: CanvasText;
258
316
  }
259
317
 
318
+ .sonic-slider {
319
+ --_sonic-slider-buffered: color-mix(in srgb, CanvasText 50%, GrayText);
320
+ }
321
+
260
322
  .sonic-slider-groove {
261
323
  box-shadow: none;
262
324
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xsynaptic/sonic-ui",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Native custom elements for audio interfaces, skinned with CSS custom properties",
5
5
  "keywords": [
6
6
  "custom-elements",