@xsynaptic/sonic-ui 0.6.1 → 0.9.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.
- package/README.md +2 -0
- package/dist/default/define/spectrum.js +7 -0
- package/dist/default/define.js +1 -0
- package/dist/default/elements/button.js +30 -2
- package/dist/default/elements/dial.js +12 -3
- package/dist/default/elements/display-element.js +77 -0
- package/dist/default/elements/envelope.js +3 -3
- package/dist/default/elements/modulation.js +45 -0
- package/dist/default/elements/readout-claim.js +8 -3
- package/dist/default/elements/slider.js +68 -4
- package/dist/default/elements/spectrum.js +230 -0
- package/dist/default/elements/value-element.js +114 -317
- package/dist/default/elements/value-gestures.js +301 -0
- package/dist/default/elements/wave-element.js +59 -9
- package/dist/default/elements/waveform.js +61 -12
- package/dist/default/elements/wavestrip.js +25 -49
- package/dist/default/elements/xy.js +10 -21
- package/dist/default/index.js +2 -1
- package/dist/default/lib/asked-value.js +21 -0
- package/dist/default/lib/canvas-surface.js +10 -4
- package/dist/default/lib/frame-timeline.js +2 -2
- package/dist/default/lib/hover-preview.js +46 -0
- package/dist/default/lib/marker-rider.js +12 -6
- package/dist/default/lib/pointer-drag.js +7 -2
- package/dist/default/lib/read-ms-property.js +10 -0
- package/dist/default/lib/spectrum-columns.js +74 -0
- package/dist/default/lib/spectrum-levels.js +55 -0
- package/dist/default/lib/strip-scene.js +12 -1
- package/dist/default/lib/time-regions.js +5 -1
- package/dist/dev/define/spectrum.d.ts +2 -0
- package/dist/dev/define/spectrum.js +8 -0
- package/dist/dev/define/spectrum.js.map +1 -0
- package/dist/dev/define.d.ts +3 -1
- package/dist/dev/define.js +1 -0
- package/dist/dev/elements/button.d.ts +2 -0
- package/dist/dev/elements/button.js +30 -2
- package/dist/dev/elements/button.js.map +1 -1
- package/dist/dev/elements/dial.js +12 -3
- package/dist/dev/elements/dial.js.map +1 -1
- package/dist/dev/elements/display-element.d.ts +29 -0
- package/dist/dev/elements/display-element.js +78 -0
- package/dist/dev/elements/display-element.js.map +1 -0
- package/dist/dev/elements/envelope.js +3 -3
- package/dist/dev/elements/envelope.js.map +1 -1
- package/dist/dev/elements/modulation.js +46 -0
- package/dist/dev/elements/modulation.js.map +1 -0
- package/dist/dev/elements/readout-claim.js +8 -3
- package/dist/dev/elements/readout-claim.js.map +1 -1
- package/dist/dev/elements/slider.d.ts +5 -0
- package/dist/dev/elements/slider.js +68 -4
- package/dist/dev/elements/slider.js.map +1 -1
- package/dist/dev/elements/spectrum.d.ts +59 -0
- package/dist/dev/elements/spectrum.js +231 -0
- package/dist/dev/elements/spectrum.js.map +1 -0
- package/dist/dev/elements/value-element.d.ts +13 -14
- package/dist/dev/elements/value-element.js +114 -317
- package/dist/dev/elements/value-element.js.map +1 -1
- package/dist/dev/elements/value-gestures.d.ts +10 -0
- package/dist/dev/elements/value-gestures.js +302 -0
- package/dist/dev/elements/value-gestures.js.map +1 -0
- package/dist/dev/elements/wave-element.d.ts +8 -2
- package/dist/dev/elements/wave-element.js +59 -9
- package/dist/dev/elements/wave-element.js.map +1 -1
- package/dist/dev/elements/waveform.d.ts +12 -4
- package/dist/dev/elements/waveform.js +61 -12
- package/dist/dev/elements/waveform.js.map +1 -1
- package/dist/dev/elements/wavestrip.d.ts +3 -1
- package/dist/dev/elements/wavestrip.js +25 -49
- package/dist/dev/elements/wavestrip.js.map +1 -1
- package/dist/dev/elements/xy.js +10 -21
- package/dist/dev/elements/xy.js.map +1 -1
- package/dist/dev/index.d.ts +4 -1
- package/dist/dev/index.js +2 -1
- package/dist/dev/lib/asked-value.js +22 -0
- package/dist/dev/lib/asked-value.js.map +1 -0
- package/dist/dev/lib/canvas-surface.d.ts +5 -3
- package/dist/dev/lib/canvas-surface.js +10 -4
- package/dist/dev/lib/canvas-surface.js.map +1 -1
- package/dist/dev/lib/frame-timeline.js +2 -2
- package/dist/dev/lib/frame-timeline.js.map +1 -1
- package/dist/dev/lib/hover-preview.js +47 -0
- package/dist/dev/lib/hover-preview.js.map +1 -0
- package/dist/dev/lib/marker-rider.js +12 -6
- package/dist/dev/lib/marker-rider.js.map +1 -1
- package/dist/dev/lib/pointer-drag.js +7 -2
- package/dist/dev/lib/pointer-drag.js.map +1 -1
- package/dist/dev/lib/read-ms-property.js +11 -0
- package/dist/dev/lib/read-ms-property.js.map +1 -0
- package/dist/dev/lib/spectrum-columns.js +75 -0
- package/dist/dev/lib/spectrum-columns.js.map +1 -0
- package/dist/dev/lib/spectrum-levels.js +56 -0
- package/dist/dev/lib/spectrum-levels.js.map +1 -0
- package/dist/dev/lib/strip-scene.js +12 -1
- package/dist/dev/lib/strip-scene.js.map +1 -1
- package/dist/dev/lib/time-regions.js +5 -1
- package/dist/dev/lib/time-regions.js.map +1 -1
- package/dist/styles/button.css +7 -1
- package/dist/styles/controls.css +1 -0
- package/dist/styles/material.css +36 -3
- package/dist/styles/meter.css +22 -18
- package/dist/styles/slider.css +42 -5
- package/dist/styles/spectrum.css +105 -0
- package/dist/styles/waveform.css +48 -16
- package/dist/styles/wavestrip.css +26 -5
- package/package.json +2 -1
package/dist/styles/material.css
CHANGED
|
@@ -10,6 +10,12 @@
|
|
|
10
10
|
initial-value: 8px;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
@property --_sonic-reveal-delay {
|
|
14
|
+
syntax: '<time>';
|
|
15
|
+
inherits: true;
|
|
16
|
+
initial-value: 250ms;
|
|
17
|
+
}
|
|
18
|
+
|
|
13
19
|
@keyframes sonic-glass-breathe {
|
|
14
20
|
to {
|
|
15
21
|
opacity: calc(0.4 * min(1, var(--_sonic-glass-texture)));
|
|
@@ -33,6 +39,7 @@
|
|
|
33
39
|
.sonic-segmented,
|
|
34
40
|
.sonic-slider,
|
|
35
41
|
.sonic-slider-readout,
|
|
42
|
+
.sonic-spectrum,
|
|
36
43
|
.sonic-waveform,
|
|
37
44
|
.sonic-waveform-readout,
|
|
38
45
|
.sonic-wavestrip,
|
|
@@ -58,6 +65,7 @@
|
|
|
58
65
|
.sonic-ring,
|
|
59
66
|
.sonic-segmented-option,
|
|
60
67
|
.sonic-slider,
|
|
68
|
+
.sonic-spectrum,
|
|
61
69
|
.sonic-waveform,
|
|
62
70
|
.sonic-wavestrip,
|
|
63
71
|
.sonic-xy
|
|
@@ -92,6 +100,9 @@
|
|
|
92
100
|
);
|
|
93
101
|
--_sonic-lens-glass: var(--sonic-lens, color-mix(in oklab, var(--_sonic-unlit) 60%, #000));
|
|
94
102
|
--_sonic-lens: var(--_sonic-lens-glint), var(--_sonic-lens-glass);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
:is(.sonic-led, .sonic-meter, .sonic-spectrum) {
|
|
95
106
|
--_sonic-hot: var(--sonic-hot, oklch(70.5% 0.187 48deg));
|
|
96
107
|
--_sonic-clip: var(--sonic-clip, oklch(63.7% 0.208 25deg));
|
|
97
108
|
}
|
|
@@ -162,6 +173,18 @@
|
|
|
162
173
|
--_sonic-readout-size: var(--sonic-readout-size, 1.5rem);
|
|
163
174
|
}
|
|
164
175
|
|
|
176
|
+
:is(
|
|
177
|
+
.sonic-dial,
|
|
178
|
+
.sonic-envelope,
|
|
179
|
+
.sonic-number,
|
|
180
|
+
.sonic-slider,
|
|
181
|
+
.sonic-waveform,
|
|
182
|
+
.sonic-wavestrip,
|
|
183
|
+
.sonic-xy
|
|
184
|
+
) {
|
|
185
|
+
--_sonic-reveal-delay: var(--sonic-reveal-delay, 250ms);
|
|
186
|
+
}
|
|
187
|
+
|
|
165
188
|
:is(.sonic-dial, .sonic-slider, .sonic-waveform, .sonic-wavestrip) {
|
|
166
189
|
--_sonic-lit-off: var(
|
|
167
190
|
--sonic-dimmed,
|
|
@@ -176,6 +199,7 @@
|
|
|
176
199
|
.sonic-number,
|
|
177
200
|
.sonic-screen,
|
|
178
201
|
.sonic-slider-readout,
|
|
202
|
+
.sonic-spectrum,
|
|
179
203
|
.sonic-waveform,
|
|
180
204
|
.sonic-waveform-readout,
|
|
181
205
|
.sonic-wavestrip,
|
|
@@ -227,7 +251,15 @@
|
|
|
227
251
|
}
|
|
228
252
|
|
|
229
253
|
/* A definite cell, so percentage-sized content fills the glass; a canvas sized to its own box would feed back */
|
|
230
|
-
:is(
|
|
254
|
+
:is(
|
|
255
|
+
.sonic-envelope,
|
|
256
|
+
.sonic-number,
|
|
257
|
+
.sonic-screen,
|
|
258
|
+
.sonic-spectrum,
|
|
259
|
+
.sonic-waveform,
|
|
260
|
+
.sonic-wavestrip,
|
|
261
|
+
.sonic-xy
|
|
262
|
+
) {
|
|
231
263
|
--_sonic-glass-depth: var(--sonic-glass-depth, var(--_sonic-relief));
|
|
232
264
|
--_sonic-glass-texture: var(--sonic-glass-texture, var(--_sonic-relief));
|
|
233
265
|
--_sonic-glass-pitch: max(2px, round(2 * var(--_sonic-unit), 1px));
|
|
@@ -266,7 +298,7 @@
|
|
|
266
298
|
),
|
|
267
299
|
repeating-linear-gradient(
|
|
268
300
|
to bottom,
|
|
269
|
-
rgb(0 0 0 / calc(0.
|
|
301
|
+
rgb(0 0 0 / calc(0.025 * var(--_sonic-glass-texture))) 0
|
|
270
302
|
calc(var(--_sonic-glass-pitch) / 2),
|
|
271
303
|
transparent 0 var(--_sonic-glass-pitch)
|
|
272
304
|
);
|
|
@@ -313,6 +345,7 @@
|
|
|
313
345
|
.sonic-number,
|
|
314
346
|
.sonic-screen,
|
|
315
347
|
.sonic-segmented,
|
|
348
|
+
.sonic-spectrum,
|
|
316
349
|
.sonic-waveform,
|
|
317
350
|
.sonic-wavestrip,
|
|
318
351
|
.sonic-xy
|
|
@@ -514,7 +547,7 @@
|
|
|
514
547
|
font-size: calc(0.5 * var(--_sonic-readout-size));
|
|
515
548
|
font-variant-numeric: tabular-nums;
|
|
516
549
|
line-height: 1;
|
|
517
|
-
color: var(--_sonic-glass-text);
|
|
550
|
+
color: var(--sonic-readout-text, var(--_sonic-glass-text));
|
|
518
551
|
white-space: nowrap;
|
|
519
552
|
pointer-events: none;
|
|
520
553
|
cursor: default;
|
package/dist/styles/meter.css
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
@property --_sonic-meter-length {
|
|
8
|
-
syntax: '<length>';
|
|
8
|
+
syntax: '<length-percentage>';
|
|
9
9
|
inherits: true;
|
|
10
10
|
initial-value: 128px;
|
|
11
11
|
}
|
|
@@ -55,17 +55,12 @@
|
|
|
55
55
|
--_sonic-meter-segment-radius: calc(
|
|
56
56
|
var(--_sonic-meter-segment) * var(--_sonic-meter-segment-radius-ratio)
|
|
57
57
|
);
|
|
58
|
-
--_sonic-meter-segments: round(
|
|
59
|
-
down,
|
|
60
|
-
var(--_sonic-meter-length) - 2 * var(--_sonic-meter-inset) - var(--_sonic-meter-clip-space) +
|
|
61
|
-
var(--_sonic-meter-gap),
|
|
62
|
-
var(--_sonic-meter-pitch)
|
|
63
|
-
);
|
|
64
58
|
|
|
65
59
|
position: relative;
|
|
66
60
|
flex-shrink: 0;
|
|
67
61
|
inline-size: var(--_sonic-meter-size);
|
|
68
62
|
block-size: var(--_sonic-meter-length);
|
|
63
|
+
container-type: size;
|
|
69
64
|
background: var(--sonic-bezel, color-mix(in oklab, var(--_sonic-unlit) 55%, #000));
|
|
70
65
|
border-radius: calc(var(--_sonic-meter-size) * var(--_sonic-meter-radius-ratio));
|
|
71
66
|
|
|
@@ -91,21 +86,18 @@
|
|
|
91
86
|
}
|
|
92
87
|
|
|
93
88
|
:state(ladder) > .sonic-meter {
|
|
94
|
-
--_sonic-meter-pitch: calc(
|
|
95
|
-
(var(--_sonic-meter-length) - 2 * var(--_sonic-meter-inset)) / var(--_sonic-meter-count, 1)
|
|
96
|
-
);
|
|
97
89
|
--_sonic-meter-gap: 0px;
|
|
98
|
-
--_sonic-meter-segments: calc(var(--_sonic-meter-length) - 2 * var(--_sonic-meter-inset));
|
|
99
|
-
--_sonic-meter-ladder-radius: calc(
|
|
100
|
-
min(
|
|
101
|
-
var(--_sonic-meter-lens),
|
|
102
|
-
var(--_sonic-meter-pitch) * (1 - var(--_sonic-meter-gap-ratio))
|
|
103
|
-
) /
|
|
104
|
-
2
|
|
105
|
-
);
|
|
106
90
|
}
|
|
107
91
|
|
|
92
|
+
/* A percentage length means the parent only on the meter's own box; its parts measure the box */
|
|
108
93
|
:is(.sonic-meter-segments, .sonic-meter-bar) {
|
|
94
|
+
--_sonic-meter-length: 100cqb;
|
|
95
|
+
--_sonic-meter-segments: round(
|
|
96
|
+
down,
|
|
97
|
+
var(--_sonic-meter-length) - 2 * var(--_sonic-meter-inset) - var(--_sonic-meter-clip-space) +
|
|
98
|
+
var(--_sonic-meter-gap),
|
|
99
|
+
var(--_sonic-meter-pitch)
|
|
100
|
+
);
|
|
109
101
|
--_sonic-meter-span: calc(var(--_sonic-meter-max, 0) - var(--_sonic-meter-min, -60));
|
|
110
102
|
--_sonic-meter-hot-at: round(
|
|
111
103
|
clamp(
|
|
@@ -177,6 +169,17 @@
|
|
|
177
169
|
}
|
|
178
170
|
|
|
179
171
|
:state(ladder) > .sonic-meter > :is(.sonic-meter-segments, .sonic-meter-bar) {
|
|
172
|
+
--_sonic-meter-pitch: calc(
|
|
173
|
+
(var(--_sonic-meter-length) - 2 * var(--_sonic-meter-inset)) / var(--_sonic-meter-count, 1)
|
|
174
|
+
);
|
|
175
|
+
--_sonic-meter-segments: calc(var(--_sonic-meter-length) - 2 * var(--_sonic-meter-inset));
|
|
176
|
+
--_sonic-meter-ladder-radius: calc(
|
|
177
|
+
min(
|
|
178
|
+
var(--_sonic-meter-lens),
|
|
179
|
+
var(--_sonic-meter-pitch) * (1 - var(--_sonic-meter-gap-ratio))
|
|
180
|
+
) /
|
|
181
|
+
2
|
|
182
|
+
);
|
|
180
183
|
--_sonic-meter-hot-at: calc(var(--_sonic-meter-hot-segments, 0) * var(--_sonic-meter-pitch));
|
|
181
184
|
--_sonic-meter-clip-at: calc(var(--_sonic-meter-clip-segments, 0) * var(--_sonic-meter-pitch));
|
|
182
185
|
--_sonic-meter-segment-mask: radial-gradient(
|
|
@@ -193,6 +196,7 @@
|
|
|
193
196
|
}
|
|
194
197
|
|
|
195
198
|
[orientation='horizontal'] > .sonic-meter > :is(.sonic-meter-segments, .sonic-meter-bar) {
|
|
199
|
+
--_sonic-meter-length: 100cqi;
|
|
196
200
|
--_sonic-meter-segment-mask:
|
|
197
201
|
linear-gradient(to right, #000 var(--_sonic-meter-segment), transparent 0) 0
|
|
198
202
|
var(--_sonic-meter-segment-radius) / var(--_sonic-meter-pitch)
|
package/dist/styles/slider.css
CHANGED
|
@@ -10,6 +10,12 @@
|
|
|
10
10
|
initial-value: 128px;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
@property --_sonic-slider-groove-ratio {
|
|
14
|
+
syntax: '<number>';
|
|
15
|
+
inherits: true;
|
|
16
|
+
initial-value: 0.15;
|
|
17
|
+
}
|
|
18
|
+
|
|
13
19
|
@property --_sonic-slider-value {
|
|
14
20
|
syntax: '<number>';
|
|
15
21
|
inherits: true;
|
|
@@ -56,6 +62,7 @@
|
|
|
56
62
|
--sonic-buffered,
|
|
57
63
|
color-mix(in oklab, var(--_sonic-ink) 18%, var(--_sonic-unlit))
|
|
58
64
|
);
|
|
65
|
+
--_sonic-slider-scrub: var(--sonic-scrub, color-mix(in oklab, var(--_sonic-lit) 55%, #fff));
|
|
59
66
|
--_sonic-slider-toward: to right;
|
|
60
67
|
--_sonic-slider-across: to bottom;
|
|
61
68
|
--_sonic-slider-cursor: ew-resize;
|
|
@@ -69,9 +76,32 @@
|
|
|
69
76
|
inline-size: var(--_sonic-slider-length);
|
|
70
77
|
block-size: var(--_sonic-slider-size);
|
|
71
78
|
container-type: size;
|
|
72
|
-
touch-action: pan-y;
|
|
79
|
+
touch-action: var(--sonic-touch-action, pan-y);
|
|
73
80
|
cursor: var(--_sonic-slider-cursor);
|
|
74
81
|
user-select: none;
|
|
82
|
+
transition: --_sonic-slider-groove-ratio 120ms ease-out;
|
|
83
|
+
|
|
84
|
+
@media (prefers-reduced-motion: reduce) {
|
|
85
|
+
transition: none;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
:where(:not(:disabled)) > .sonic-slider:focus-visible,
|
|
90
|
+
:state(dragging) > .sonic-slider {
|
|
91
|
+
--_sonic-slider-groove-ratio: var(
|
|
92
|
+
--sonic-slider-groove-hover-ratio,
|
|
93
|
+
var(--sonic-slider-groove-ratio, 0.15)
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
@media (hover: hover) {
|
|
98
|
+
/* fallow-ignore-next-line code-duplication -- `:hover` and `:focus-visible` split by `(hover: hover)` */
|
|
99
|
+
:where(:not(:disabled)) > .sonic-slider:hover {
|
|
100
|
+
--_sonic-slider-groove-ratio: var(
|
|
101
|
+
--sonic-slider-groove-hover-ratio,
|
|
102
|
+
var(--sonic-slider-groove-ratio, 0.15)
|
|
103
|
+
);
|
|
104
|
+
}
|
|
75
105
|
}
|
|
76
106
|
|
|
77
107
|
[orientation='vertical'] > .sonic-slider {
|
|
@@ -82,7 +112,7 @@
|
|
|
82
112
|
|
|
83
113
|
inline-size: var(--_sonic-slider-size);
|
|
84
114
|
block-size: var(--_sonic-slider-length);
|
|
85
|
-
touch-action: pan-x;
|
|
115
|
+
touch-action: var(--sonic-touch-action, pan-x);
|
|
86
116
|
}
|
|
87
117
|
|
|
88
118
|
:state(dragging) > .sonic-slider {
|
|
@@ -225,14 +255,16 @@
|
|
|
225
255
|
}
|
|
226
256
|
|
|
227
257
|
.sonic-slider-groove {
|
|
228
|
-
--_sonic-slider-lit-
|
|
229
|
-
--_sonic-slider-lit-
|
|
258
|
+
--_sonic-slider-lit-to: var(--_sonic-slider-played, var(--_sonic-slider-value, 0));
|
|
259
|
+
--_sonic-slider-lit-low: min(var(--_sonic-slider-origin, 0), var(--_sonic-slider-lit-to));
|
|
260
|
+
--_sonic-slider-lit-high: max(var(--_sonic-slider-origin, 0), var(--_sonic-slider-lit-to));
|
|
230
261
|
|
|
231
262
|
position: absolute;
|
|
232
263
|
inset: calc(50% + var(--_sonic-slider-scale-band) / 2 - var(--_sonic-slider-groove) / 2)
|
|
233
264
|
calc((var(--_sonic-slider-cap) - var(--_sonic-slider-groove)) / 2)
|
|
234
265
|
calc(50% - var(--_sonic-slider-scale-band) / 2 - var(--_sonic-slider-groove) / 2);
|
|
235
266
|
background:
|
|
267
|
+
var(--_sonic-slider-scrub-region, none),
|
|
236
268
|
linear-gradient(
|
|
237
269
|
var(--_sonic-slider-toward),
|
|
238
270
|
transparent
|
|
@@ -430,7 +462,11 @@
|
|
|
430
462
|
|
|
431
463
|
/* Bare `block-start` spans the viewport; `translate` belongs to the open transition */
|
|
432
464
|
:not([orientation='vertical']) > .sonic-slider > .sonic-slider-readout {
|
|
433
|
-
--_sonic-slider-readout-at: calc(
|
|
465
|
+
--_sonic-slider-readout-at: calc(
|
|
466
|
+
var(--_sonic-slider-cap) / 2 +
|
|
467
|
+
var(--_sonic-slider-readout-value, var(--_sonic-slider-value, 0)) *
|
|
468
|
+
var(--_sonic-slider-travel)
|
|
469
|
+
);
|
|
434
470
|
|
|
435
471
|
inset-inline: var(--_sonic-slider-readout-at) calc(100cqi - var(--_sonic-slider-readout-at));
|
|
436
472
|
justify-self: center;
|
|
@@ -454,6 +490,7 @@
|
|
|
454
490
|
|
|
455
491
|
.sonic-slider {
|
|
456
492
|
--_sonic-slider-buffered: color-mix(in srgb, CanvasText 50%, GrayText);
|
|
493
|
+
--_sonic-slider-scrub: CanvasText;
|
|
457
494
|
}
|
|
458
495
|
|
|
459
496
|
.sonic-slider-groove {
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
@property --_sonic-spectrum-size {
|
|
2
|
+
syntax: '<length>';
|
|
3
|
+
inherits: true;
|
|
4
|
+
initial-value: 96px;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
@property --_sonic-spectrum-length {
|
|
8
|
+
syntax: '<length-percentage>';
|
|
9
|
+
inherits: true;
|
|
10
|
+
initial-value: 320px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@property --_sonic-spectrum-lit {
|
|
14
|
+
syntax: '<color>';
|
|
15
|
+
inherits: true;
|
|
16
|
+
initial-value: rgb(245 158 10);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@property --_sonic-spectrum-hot {
|
|
20
|
+
syntax: '<color>';
|
|
21
|
+
inherits: true;
|
|
22
|
+
initial-value: rgb(250 115 20);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@property --_sonic-spectrum-clip {
|
|
26
|
+
syntax: '<color>';
|
|
27
|
+
inherits: true;
|
|
28
|
+
initial-value: rgb(240 70 70);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@property --_sonic-spectrum-grid {
|
|
32
|
+
syntax: '<color>';
|
|
33
|
+
inherits: true;
|
|
34
|
+
initial-value: rgb(96 96 104);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@property --_sonic-spectrum-hot-from {
|
|
38
|
+
syntax: '<number>';
|
|
39
|
+
inherits: true;
|
|
40
|
+
initial-value: -12;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@property --_sonic-spectrum-clip-from {
|
|
44
|
+
syntax: '<number>';
|
|
45
|
+
inherits: true;
|
|
46
|
+
initial-value: -3;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@layer sonic {
|
|
50
|
+
:is(sonic-spectrum, .sonic-spectrum) {
|
|
51
|
+
--_sonic-spectrum-size: var(--sonic-spectrum-size, 6rem);
|
|
52
|
+
--_sonic-spectrum-length: var(--sonic-spectrum-length, 20rem);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
:has(> .sonic-spectrum):not([hidden]) {
|
|
56
|
+
display: contents;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
sonic-spectrum:not(:defined, [hidden]) {
|
|
60
|
+
display: block;
|
|
61
|
+
visibility: hidden;
|
|
62
|
+
flex-shrink: 0;
|
|
63
|
+
inline-size: var(--_sonic-spectrum-length);
|
|
64
|
+
block-size: var(--_sonic-spectrum-size);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.sonic-spectrum {
|
|
68
|
+
--_sonic-unit: calc(var(--_sonic-spectrum-size) / 48);
|
|
69
|
+
--_sonic-spectrum-lit: var(--_sonic-lit);
|
|
70
|
+
--_sonic-spectrum-hot: var(--_sonic-hot);
|
|
71
|
+
--_sonic-spectrum-clip: var(--_sonic-clip);
|
|
72
|
+
--_sonic-spectrum-grid: color-mix(in oklab, var(--_sonic-glass-text) 20%, transparent);
|
|
73
|
+
--_sonic-spectrum-hot-from: var(--sonic-spectrum-hot-from, -12);
|
|
74
|
+
--_sonic-spectrum-clip-from: var(--sonic-spectrum-clip-from, -3);
|
|
75
|
+
|
|
76
|
+
inline-size: var(--_sonic-spectrum-length);
|
|
77
|
+
block-size: var(--_sonic-spectrum-size);
|
|
78
|
+
padding: calc(var(--_sonic-spectrum-size) * var(--sonic-spectrum-inset-ratio, 0.06));
|
|
79
|
+
|
|
80
|
+
/* The canvas's backing size would otherwise feed an intrinsically sized parent */
|
|
81
|
+
contain: size;
|
|
82
|
+
|
|
83
|
+
--_sonic-glass-radius: calc(
|
|
84
|
+
var(--_sonic-spectrum-size) * var(--sonic-spectrum-radius-ratio, 0.08)
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
border-radius: var(--_sonic-glass-radius);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.sonic-spectrum-canvas {
|
|
91
|
+
display: block;
|
|
92
|
+
inline-size: 100%;
|
|
93
|
+
block-size: 100%;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* Opaque, since a system highlight carries alpha that would blend the bars into the glass */
|
|
97
|
+
@media (forced-colors: active) {
|
|
98
|
+
.sonic-spectrum {
|
|
99
|
+
--_sonic-spectrum-lit: rgb(from CanvasText r g b / 100%);
|
|
100
|
+
--_sonic-spectrum-hot: rgb(from Highlight r g b / 100%);
|
|
101
|
+
--_sonic-spectrum-clip: rgb(from Highlight r g b / 100%);
|
|
102
|
+
--_sonic-spectrum-grid: rgb(from GrayText r g b / 100%);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
package/dist/styles/waveform.css
CHANGED
|
@@ -16,6 +16,12 @@
|
|
|
16
16
|
initial-value: 0;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
@property --_sonic-waveform-label-park {
|
|
20
|
+
syntax: '<length>';
|
|
21
|
+
inherits: true;
|
|
22
|
+
initial-value: 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
19
25
|
@property --_sonic-waveform-wave {
|
|
20
26
|
syntax: '<color>';
|
|
21
27
|
inherits: true;
|
|
@@ -34,12 +40,24 @@
|
|
|
34
40
|
initial-value: rgb(96 96 104);
|
|
35
41
|
}
|
|
36
42
|
|
|
37
|
-
@property --_sonic-waveform-
|
|
43
|
+
@property --_sonic-waveform-ends {
|
|
44
|
+
syntax: '<color>';
|
|
45
|
+
inherits: true;
|
|
46
|
+
initial-value: rgb(96 96 104);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@property --_sonic-waveform-placeholder {
|
|
38
50
|
syntax: '<color>';
|
|
39
51
|
inherits: true;
|
|
40
52
|
initial-value: rgb(96 96 104);
|
|
41
53
|
}
|
|
42
54
|
|
|
55
|
+
@property --_sonic-waveform-label-fade {
|
|
56
|
+
syntax: '<number>';
|
|
57
|
+
inherits: true;
|
|
58
|
+
initial-value: 0.25;
|
|
59
|
+
}
|
|
60
|
+
|
|
43
61
|
@property --_sonic-waveform-marker {
|
|
44
62
|
syntax: '<color>';
|
|
45
63
|
inherits: true;
|
|
@@ -69,18 +87,25 @@
|
|
|
69
87
|
var(--_sonic-waveform-size) * var(--sonic-waveform-inset-ratio, 0.06)
|
|
70
88
|
);
|
|
71
89
|
--_sonic-unit: calc(var(--_sonic-waveform-size) / 48);
|
|
72
|
-
--_sonic-waveform-line: max(1px, var(--_sonic-unit));
|
|
90
|
+
--_sonic-waveform-line: var(--sonic-waveform-playhead-width, max(1px, var(--_sonic-unit)));
|
|
73
91
|
--_sonic-waveform-lit: var(--_sonic-lit);
|
|
74
92
|
--_sonic-waveform-wave: var(--_sonic-waveform-lit);
|
|
75
93
|
--_sonic-waveform-wave-edge: var(
|
|
76
94
|
--sonic-waveform-edge,
|
|
77
|
-
color-mix(in oklab, var(--_sonic-waveform-lit)
|
|
95
|
+
color-mix(in oklab, var(--_sonic-waveform-lit) calc(100% - 55% * var(--_sonic-relief)), #000)
|
|
78
96
|
);
|
|
79
|
-
--_sonic-waveform-grid: var(--_sonic-etch);
|
|
80
|
-
--_sonic-waveform-
|
|
97
|
+
--_sonic-waveform-grid: var(--sonic-waveform-grid, var(--_sonic-etch));
|
|
98
|
+
--_sonic-waveform-ends: var(--sonic-waveform-ends, var(--_sonic-etch));
|
|
99
|
+
--_sonic-waveform-placeholder: var(--sonic-waveform-placeholder, var(--_sonic-etch));
|
|
81
100
|
--_sonic-waveform-marker: var(--sonic-marker, var(--_sonic-ink));
|
|
101
|
+
--_sonic-waveform-label: var(--sonic-waveform-label, var(--_sonic-waveform-marker));
|
|
102
|
+
--_sonic-waveform-label-fade: var(--sonic-waveform-label-fade-ratio, 0.25);
|
|
82
103
|
--_sonic-waveform-label-inset: calc(
|
|
83
|
-
var(--_sonic-waveform-size) * var(--sonic-waveform-label-inset-ratio, 0.
|
|
104
|
+
var(--_sonic-waveform-size) * var(--sonic-waveform-label-inset-ratio, 0.04)
|
|
105
|
+
);
|
|
106
|
+
--_sonic-waveform-label-park: var(
|
|
107
|
+
--sonic-waveform-label-inset-inline,
|
|
108
|
+
var(--_sonic-waveform-label-inset)
|
|
84
109
|
);
|
|
85
110
|
|
|
86
111
|
inline-size: var(--_sonic-waveform-length);
|
|
@@ -90,7 +115,7 @@
|
|
|
90
115
|
|
|
91
116
|
/* A label riding in from the far side would otherwise widen the page */
|
|
92
117
|
overflow: hidden;
|
|
93
|
-
touch-action: pan-y;
|
|
118
|
+
touch-action: var(--sonic-touch-action, pan-y);
|
|
94
119
|
cursor: grab;
|
|
95
120
|
|
|
96
121
|
--_sonic-glass-radius: calc(
|
|
@@ -101,6 +126,11 @@
|
|
|
101
126
|
box-shadow: var(--_sonic-focus-shadow);
|
|
102
127
|
}
|
|
103
128
|
|
|
129
|
+
[fill] > .sonic-waveform,
|
|
130
|
+
sonic-waveform[fill]:not(:defined, [hidden]) {
|
|
131
|
+
block-size: 100%;
|
|
132
|
+
}
|
|
133
|
+
|
|
104
134
|
:state(dragging) > .sonic-waveform {
|
|
105
135
|
cursor: grabbing;
|
|
106
136
|
}
|
|
@@ -131,31 +161,32 @@
|
|
|
131
161
|
}
|
|
132
162
|
|
|
133
163
|
.sonic-waveform-playhead {
|
|
134
|
-
background: var(--_sonic-ink);
|
|
164
|
+
background: var(--sonic-waveform-playhead, var(--_sonic-ink));
|
|
135
165
|
}
|
|
136
166
|
|
|
137
167
|
.sonic-waveform-ghost {
|
|
138
|
-
background: var(--_sonic-etch);
|
|
168
|
+
background: var(--sonic-waveform-ghost, var(--_sonic-etch));
|
|
139
169
|
}
|
|
140
170
|
|
|
141
171
|
.sonic-waveform-label {
|
|
142
172
|
position: absolute;
|
|
143
173
|
inset-block-end: calc(var(--_sonic-waveform-inset) + var(--_sonic-waveform-label-inset));
|
|
144
174
|
inset-inline-start: var(--_sonic-waveform-inset);
|
|
175
|
+
padding: 0.2em 0.35em;
|
|
176
|
+
margin: -0.2em -0.35em;
|
|
177
|
+
font-family: var(--sonic-waveform-label-font, inherit);
|
|
145
178
|
font-size: calc(var(--_sonic-waveform-size) * var(--sonic-waveform-label-font-ratio, 0.13));
|
|
146
179
|
line-height: 1;
|
|
147
|
-
color: var(--_sonic-marker, var(--_sonic-waveform-
|
|
180
|
+
color: var(--_sonic-marker, var(--_sonic-waveform-label));
|
|
148
181
|
white-space: nowrap;
|
|
149
182
|
text-shadow: var(--sonic-waveform-label-shadow, none);
|
|
150
183
|
pointer-events: none;
|
|
184
|
+
background: var(--sonic-waveform-label-scrim, none);
|
|
185
|
+
border-radius: 0.2em;
|
|
151
186
|
}
|
|
152
187
|
|
|
153
188
|
.sonic-waveform-label[data-sonic-dimmed] {
|
|
154
|
-
color: color-mix(
|
|
155
|
-
in oklab,
|
|
156
|
-
var(--_sonic-marker, var(--_sonic-waveform-marker)) 50%,
|
|
157
|
-
transparent
|
|
158
|
-
);
|
|
189
|
+
color: color-mix(in oklab, var(--_sonic-marker, var(--_sonic-waveform-label)) 50%, transparent);
|
|
159
190
|
}
|
|
160
191
|
|
|
161
192
|
/* Opaque, since a system highlight carries alpha that would blend the wave into the glass */
|
|
@@ -164,7 +195,8 @@
|
|
|
164
195
|
--_sonic-waveform-wave: rgb(from CanvasText r g b / 100%);
|
|
165
196
|
--_sonic-waveform-wave-edge: rgb(from CanvasText r g b / 100%);
|
|
166
197
|
--_sonic-waveform-grid: rgb(from GrayText r g b / 100%);
|
|
167
|
-
--_sonic-waveform-
|
|
198
|
+
--_sonic-waveform-ends: rgb(from GrayText r g b / 100%);
|
|
199
|
+
--_sonic-waveform-placeholder: rgb(from GrayText r g b / 100%);
|
|
168
200
|
--_sonic-waveform-marker: rgb(from CanvasText r g b / 100%);
|
|
169
201
|
}
|
|
170
202
|
|
|
@@ -28,6 +28,12 @@
|
|
|
28
28
|
initial-value: 0.5;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
@property --_sonic-wavestrip-groove-ratio {
|
|
32
|
+
syntax: '<number>';
|
|
33
|
+
inherits: true;
|
|
34
|
+
initial-value: 0.15;
|
|
35
|
+
}
|
|
36
|
+
|
|
31
37
|
@property --_sonic-wavestrip-wave {
|
|
32
38
|
syntax: '<color>';
|
|
33
39
|
inherits: true;
|
|
@@ -93,13 +99,17 @@
|
|
|
93
99
|
--_sonic-wavestrip-bar-pitch: var(--sonic-wavestrip-bar-pitch, 3px);
|
|
94
100
|
--_sonic-wavestrip-bar-gap-ratio: var(--sonic-wavestrip-bar-gap-ratio, 0.33);
|
|
95
101
|
--_sonic-wavestrip-bar-radius-ratio: var(--sonic-wavestrip-bar-radius-ratio, 0.5);
|
|
102
|
+
--_sonic-wavestrip-groove-ratio: var(--sonic-wavestrip-groove-ratio, 0.15);
|
|
96
103
|
--_sonic-wavestrip-marker-ratio: var(--sonic-wavestrip-marker-ratio, 0.065);
|
|
97
104
|
--_sonic-wavestrip-inset: calc(
|
|
98
105
|
var(--_sonic-wavestrip-size) * var(--sonic-wavestrip-inset-ratio, 0.1)
|
|
99
106
|
);
|
|
100
107
|
--_sonic-unit: calc(var(--_sonic-wavestrip-size) / 32);
|
|
101
108
|
--_sonic-wavestrip-lit: var(--_sonic-lit);
|
|
102
|
-
--_sonic-marker-size:
|
|
109
|
+
--_sonic-marker-size: var(
|
|
110
|
+
--sonic-wavestrip-marker-size,
|
|
111
|
+
calc(var(--_sonic-wavestrip-size) * var(--_sonic-wavestrip-marker-ratio))
|
|
112
|
+
);
|
|
103
113
|
--_sonic-marker-ring: max(1px, 0.5 * var(--_sonic-unit));
|
|
104
114
|
--_sonic-marker-step: calc(var(--_sonic-marker-size) + var(--_sonic-marker-ring));
|
|
105
115
|
--_sonic-marker-default: var(--sonic-marker, var(--_sonic-ink));
|
|
@@ -118,7 +128,7 @@
|
|
|
118
128
|
block-size: var(--_sonic-wavestrip-size);
|
|
119
129
|
padding: var(--_sonic-wavestrip-inset);
|
|
120
130
|
container-type: size;
|
|
121
|
-
touch-action: pan-y;
|
|
131
|
+
touch-action: var(--sonic-touch-action, pan-y);
|
|
122
132
|
cursor: ew-resize;
|
|
123
133
|
|
|
124
134
|
--_sonic-glass-radius: calc(
|
|
@@ -129,6 +139,11 @@
|
|
|
129
139
|
box-shadow: var(--_sonic-focus-shadow);
|
|
130
140
|
}
|
|
131
141
|
|
|
142
|
+
[fill] > .sonic-wavestrip,
|
|
143
|
+
sonic-wavestrip[fill]:not(:defined, [hidden]) {
|
|
144
|
+
block-size: 100%;
|
|
145
|
+
}
|
|
146
|
+
|
|
132
147
|
[dimmed] > .sonic-wavestrip {
|
|
133
148
|
--_sonic-wavestrip-lit: var(--_sonic-lit-off);
|
|
134
149
|
}
|
|
@@ -191,10 +206,16 @@
|
|
|
191
206
|
var(--_sonic-wavestrip-inset) + var(--_sonic-wavestrip-readout-at, 0) * 100cqi
|
|
192
207
|
);
|
|
193
208
|
|
|
194
|
-
inset-inline:
|
|
195
|
-
|
|
196
|
-
justify-self: center;
|
|
209
|
+
inset-inline: 0;
|
|
210
|
+
justify-self: start;
|
|
197
211
|
position-area: block-start center;
|
|
212
|
+
transform: translateX(
|
|
213
|
+
clamp(
|
|
214
|
+
0px,
|
|
215
|
+
var(--_sonic-wavestrip-readout-inset) - 50%,
|
|
216
|
+
100cqi + 2 * var(--_sonic-wavestrip-inset) - 100%
|
|
217
|
+
)
|
|
218
|
+
);
|
|
198
219
|
}
|
|
199
220
|
|
|
200
221
|
/* Opaque, since a system highlight carries alpha that would blend the bars into the glass */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xsynaptic/sonic-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Native custom elements for audio interfaces, skinned with CSS custom properties",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"custom-elements",
|
|
@@ -66,6 +66,7 @@
|
|
|
66
66
|
"./screen.css": "./dist/styles/screen.css",
|
|
67
67
|
"./segmented.css": "./dist/styles/segmented.css",
|
|
68
68
|
"./slider.css": "./dist/styles/slider.css",
|
|
69
|
+
"./spectrum.css": "./dist/styles/spectrum.css",
|
|
69
70
|
"./switch.css": "./dist/styles/switch.css",
|
|
70
71
|
"./waveform.css": "./dist/styles/waveform.css",
|
|
71
72
|
"./wavestrip.css": "./dist/styles/wavestrip.css",
|