@xsynaptic/sonic-ui 0.5.0 → 0.6.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 (138) hide show
  1. package/README.md +3 -1
  2. package/dist/default/dat.js +5 -4
  3. package/dist/default/define/button.js +1 -1
  4. package/dist/default/define.js +2 -2
  5. package/dist/default/elements/button.js +6 -5
  6. package/dist/default/elements/dial.js +5 -1
  7. package/dist/default/elements/envelope.js +46 -18
  8. package/dist/default/elements/meter.js +12 -8
  9. package/dist/default/elements/number.js +1 -1
  10. package/dist/default/elements/radio-group.js +46 -47
  11. package/dist/default/elements/readout-claim.js +0 -29
  12. package/dist/default/elements/readout.js +1 -1
  13. package/dist/default/elements/scale.js +43 -0
  14. package/dist/default/elements/slider.js +16 -3
  15. package/dist/default/elements/sonic-element.js +17 -55
  16. package/dist/default/elements/switch.js +33 -39
  17. package/dist/default/elements/value-element.js +142 -187
  18. package/dist/default/elements/wave-element.js +5 -2
  19. package/dist/default/elements/waveform.js +35 -12
  20. package/dist/default/elements/wavestrip.js +59 -18
  21. package/dist/default/elements/xy.js +34 -19
  22. package/dist/default/index.js +2 -2
  23. package/dist/default/lib/adsr-shape.js +5 -0
  24. package/dist/default/lib/ballistics.js +2 -2
  25. package/dist/default/lib/canvas-surface.js +13 -2
  26. package/dist/default/lib/distribute.js +1 -1
  27. package/dist/default/lib/drag-step.js +4 -4
  28. package/dist/default/lib/frame-timeline.js +2 -1
  29. package/dist/default/lib/marker-band.js +54 -10
  30. package/dist/default/lib/marker-rider.js +10 -4
  31. package/dist/default/lib/math.js +6 -1
  32. package/dist/default/lib/mirror-children.js +64 -0
  33. package/dist/default/lib/owned-control.js +10 -0
  34. package/dist/default/lib/pointer-drag.js +8 -5
  35. package/dist/default/lib/resample-peaks.js +11 -1
  36. package/dist/default/lib/time-regions.js +4 -1
  37. package/dist/default/lib/write-attribute.js +1 -0
  38. package/dist/dev/dat.d.ts +2 -2
  39. package/dist/dev/dat.js +5 -4
  40. package/dist/dev/dat.js.map +1 -1
  41. package/dist/dev/define/button.js +1 -1
  42. package/dist/dev/define.d.ts +4 -4
  43. package/dist/dev/define.js +2 -2
  44. package/dist/dev/elements/button.js +6 -5
  45. package/dist/dev/elements/button.js.map +1 -1
  46. package/dist/dev/elements/dial.d.ts +1 -1
  47. package/dist/dev/elements/dial.js +5 -1
  48. package/dist/dev/elements/dial.js.map +1 -1
  49. package/dist/dev/elements/envelope.js +46 -18
  50. package/dist/dev/elements/envelope.js.map +1 -1
  51. package/dist/dev/elements/meter.d.ts +1 -1
  52. package/dist/dev/elements/meter.js +12 -8
  53. package/dist/dev/elements/meter.js.map +1 -1
  54. package/dist/dev/elements/number.js +1 -1
  55. package/dist/dev/elements/number.js.map +1 -1
  56. package/dist/dev/elements/radio-group.js +46 -47
  57. package/dist/dev/elements/radio-group.js.map +1 -1
  58. package/dist/dev/elements/readout-claim.js +0 -29
  59. package/dist/dev/elements/readout-claim.js.map +1 -1
  60. package/dist/dev/elements/readout.js +1 -1
  61. package/dist/dev/elements/readout.js.map +1 -1
  62. package/dist/dev/elements/scale.js +44 -0
  63. package/dist/dev/elements/scale.js.map +1 -0
  64. package/dist/dev/elements/slider.d.ts +4 -1
  65. package/dist/dev/elements/slider.js +16 -3
  66. package/dist/dev/elements/slider.js.map +1 -1
  67. package/dist/dev/elements/sonic-element.d.ts +2 -8
  68. package/dist/dev/elements/sonic-element.js +18 -55
  69. package/dist/dev/elements/sonic-element.js.map +1 -1
  70. package/dist/dev/elements/switch.js +33 -39
  71. package/dist/dev/elements/switch.js.map +1 -1
  72. package/dist/dev/elements/value-element.d.ts +6 -8
  73. package/dist/dev/elements/value-element.js +142 -187
  74. package/dist/dev/elements/value-element.js.map +1 -1
  75. package/dist/dev/elements/wave-element.d.ts +1 -0
  76. package/dist/dev/elements/wave-element.js +5 -2
  77. package/dist/dev/elements/wave-element.js.map +1 -1
  78. package/dist/dev/elements/waveform.d.ts +1 -1
  79. package/dist/dev/elements/waveform.js +35 -12
  80. package/dist/dev/elements/waveform.js.map +1 -1
  81. package/dist/dev/elements/wavestrip.d.ts +4 -0
  82. package/dist/dev/elements/wavestrip.js +59 -18
  83. package/dist/dev/elements/wavestrip.js.map +1 -1
  84. package/dist/dev/elements/xy.d.ts +3 -3
  85. package/dist/dev/elements/xy.js +34 -19
  86. package/dist/dev/elements/xy.js.map +1 -1
  87. package/dist/dev/index.d.ts +2 -2
  88. package/dist/dev/index.js +2 -2
  89. package/dist/dev/lib/adsr-shape.js +5 -0
  90. package/dist/dev/lib/adsr-shape.js.map +1 -1
  91. package/dist/dev/lib/ballistics.js +2 -2
  92. package/dist/dev/lib/ballistics.js.map +1 -1
  93. package/dist/dev/lib/canvas-surface.d.ts +1 -0
  94. package/dist/dev/lib/canvas-surface.js +13 -2
  95. package/dist/dev/lib/canvas-surface.js.map +1 -1
  96. package/dist/dev/lib/distribute.js +1 -1
  97. package/dist/dev/lib/distribute.js.map +1 -1
  98. package/dist/dev/lib/drag-step.js +4 -4
  99. package/dist/dev/lib/drag-step.js.map +1 -1
  100. package/dist/dev/lib/frame-timeline.js +2 -1
  101. package/dist/dev/lib/frame-timeline.js.map +1 -1
  102. package/dist/dev/lib/marker-band.js +54 -10
  103. package/dist/dev/lib/marker-band.js.map +1 -1
  104. package/dist/dev/lib/marker-rider.js +10 -4
  105. package/dist/dev/lib/marker-rider.js.map +1 -1
  106. package/dist/dev/lib/math.js +6 -1
  107. package/dist/dev/lib/math.js.map +1 -1
  108. package/dist/dev/lib/mirror-children.js +80 -0
  109. package/dist/dev/lib/mirror-children.js.map +1 -0
  110. package/dist/dev/lib/owned-control.js +23 -0
  111. package/dist/dev/lib/owned-control.js.map +1 -0
  112. package/dist/dev/lib/pointer-drag.js +8 -5
  113. package/dist/dev/lib/pointer-drag.js.map +1 -1
  114. package/dist/dev/lib/resample-peaks.js +11 -1
  115. package/dist/dev/lib/resample-peaks.js.map +1 -1
  116. package/dist/dev/lib/time-regions.js +4 -1
  117. package/dist/dev/lib/time-regions.js.map +1 -1
  118. package/dist/dev/lib/write-attribute.js +1 -0
  119. package/dist/dev/lib/write-attribute.js.map +1 -1
  120. package/dist/skins/amber.css +8 -0
  121. package/dist/skins/flat.css +26 -0
  122. package/dist/skins/ivory.css +1 -0
  123. package/dist/skins/lime.css +2 -0
  124. package/dist/skins/slate.css +2 -0
  125. package/dist/styles/button.css +59 -10
  126. package/dist/styles/dial.css +24 -16
  127. package/dist/styles/envelope.css +58 -13
  128. package/dist/styles/led.css +20 -4
  129. package/dist/styles/material.css +143 -55
  130. package/dist/styles/meter.css +8 -4
  131. package/dist/styles/panel.css +7 -4
  132. package/dist/styles/segmented.css +27 -5
  133. package/dist/styles/slider.css +2 -1
  134. package/dist/styles/switch.css +65 -23
  135. package/dist/styles/waveform.css +28 -5
  136. package/dist/styles/wavestrip.css +23 -6
  137. package/dist/styles/xy.css +48 -27
  138. package/package.json +2 -5
@@ -34,8 +34,17 @@
34
34
  --_sonic-switch-along-x: 0;
35
35
  --_sonic-switch-along-y: 1;
36
36
  --_sonic-switch-pan: pan-x;
37
- --_sonic-switch-metal: color-mix(in oklab, var(--_sonic-cap) 45%, #fff);
38
- --_sonic-switch-metal-shade: color-mix(in oklab, var(--_sonic-cap) 80%, #000);
37
+ --_sonic-switch-cap: var(--sonic-cap, var(--_sonic-ink));
38
+ --_sonic-switch-metal: color-mix(
39
+ in oklab,
40
+ var(--_sonic-switch-cap) calc(100% - 55% * var(--_sonic-relief)),
41
+ #fff
42
+ );
43
+ --_sonic-switch-metal-shade: color-mix(
44
+ in oklab,
45
+ var(--_sonic-switch-cap) calc(100% - 20% * var(--_sonic-relief)),
46
+ #000
47
+ );
39
48
 
40
49
  display: inline-grid;
41
50
  flex-shrink: 0;
@@ -56,6 +65,7 @@
56
65
  }
57
66
 
58
67
  .sonic-switch-position {
68
+ position: relative;
59
69
  display: grid;
60
70
  place-items: center;
61
71
  place-self: stretch;
@@ -84,6 +94,17 @@
84
94
  }
85
95
  }
86
96
 
97
+ .sonic-switch[data-sonic-position-count] > .sonic-switch-position::after {
98
+ inset-block: 0;
99
+ }
100
+
101
+ [orientation='horizontal']
102
+ > .sonic-switch[data-sonic-position-count]
103
+ > .sonic-switch-position::after {
104
+ inset-block: var(--_sonic-target-outset);
105
+ inset-inline: 0;
106
+ }
107
+
87
108
  .sonic-switch-label {
88
109
  padding: calc(var(--_sonic-switch-size) * 0.12);
89
110
  white-space: nowrap;
@@ -200,20 +221,37 @@
200
221
  }
201
222
 
202
223
  .sonic-switch-bushing {
224
+ --_sonic-switch-bushing-shade: color-mix(
225
+ in oklab,
226
+ var(--_sonic-cap) calc(100% - 20% * var(--_sonic-relief)),
227
+ #000
228
+ );
229
+
203
230
  inline-size: calc(var(--_sonic-switch-size) * var(--_sonic-switch-bushing-ratio));
204
231
  aspect-ratio: 1;
205
232
  pointer-events: none;
206
- background: radial-gradient(
207
- closest-side,
208
- color-mix(in oklab, var(--_sonic-cap) 30%, #000) 0 42%,
209
- var(--_sonic-switch-metal-shade) 48%,
210
- var(--_sonic-cap) 70%,
211
- color-mix(in oklab, var(--_sonic-cap) 75%, #fff) 88%,
212
- var(--_sonic-switch-metal-shade)
233
+ background: var(
234
+ --sonic-well,
235
+ radial-gradient(
236
+ closest-side,
237
+ color-mix(in oklab, var(--_sonic-cap) calc(100% - 70% * var(--_sonic-relief)), #000) 0 42%,
238
+ var(--_sonic-switch-bushing-shade) 48%,
239
+ var(--_sonic-cap) 70%,
240
+ color-mix(in oklab, var(--_sonic-cap) calc(100% - 25% * var(--_sonic-relief)), #fff) 88%,
241
+ var(--_sonic-switch-bushing-shade)
242
+ )
213
243
  );
214
244
  border-radius: 50%;
215
245
  box-shadow:
216
- var(--_sonic-rim),
246
+ 0 0 0 max(1px, 0.75 * var(--_sonic-unit))
247
+ var(
248
+ --sonic-cap-edge,
249
+ color-mix(
250
+ in oklab,
251
+ var(--_sonic-switch-cap) calc(100% - 60% * var(--_sonic-relief)),
252
+ #000
253
+ )
254
+ ),
217
255
  calc(1.5 * var(--_sonic-cast-x)) calc(1.5 * var(--_sonic-cast-y)) calc(2 * var(--_sonic-unit))
218
256
  var(--_sonic-drop-shade);
219
257
  }
@@ -226,27 +264,27 @@
226
264
  background-position 90ms cubic-bezier(0.4, 0, 0.2, 1);
227
265
  --_sonic-switch-sheen: linear-gradient(
228
266
  var(--_sonic-light-fall),
229
- color-mix(in oklab, var(--_sonic-switch-metal) 55%, #fff) 12%,
267
+ color-mix(in oklab, var(--_sonic-switch-metal) calc(100% - 45% * var(--_sonic-relief)), #fff)
268
+ 12%,
230
269
  var(--_sonic-switch-metal) 45%,
231
270
  var(--_sonic-switch-metal-shade) 88%
232
271
  );
233
- --_sonic-switch-outline: max(0.5px, 0.4 * var(--_sonic-unit));
234
- --_sonic-switch-rim: color-mix(in oklab, var(--_sonic-cap) 70%, #000);
272
+ --_sonic-switch-outline: max(1px, 0.4 * var(--_sonic-unit));
273
+ --_sonic-switch-rim: var(
274
+ --sonic-cap-edge,
275
+ color-mix(in oklab, var(--_sonic-switch-cap) calc(100% - 30% * var(--_sonic-relief)), #000)
276
+ );
235
277
 
236
278
  position: relative;
237
279
  z-index: 1;
238
280
  inline-size: var(--_sonic-switch-size);
239
281
  block-size: var(--_sonic-switch-size);
240
282
  pointer-events: none;
241
- filter: drop-shadow(var(--_sonic-switch-outline) 0 0 var(--_sonic-switch-rim))
242
- drop-shadow(calc(-1 * var(--_sonic-switch-outline)) 0 0 var(--_sonic-switch-rim))
243
- drop-shadow(0 var(--_sonic-switch-outline) 0 var(--_sonic-switch-rim))
244
- drop-shadow(0 calc(-1 * var(--_sonic-switch-outline)) 0 var(--_sonic-switch-rim))
245
- drop-shadow(
246
- calc((1 + var(--_sonic-switch-lean)) * var(--_sonic-cast-x))
247
- calc((1 + var(--_sonic-switch-lean)) * var(--_sonic-cast-y))
248
- calc(1.5 * var(--_sonic-unit)) var(--_sonic-drop-shade)
249
- );
283
+ filter: drop-shadow(
284
+ calc((1 + var(--_sonic-switch-lean)) * var(--_sonic-cast-x))
285
+ calc((1 + var(--_sonic-switch-lean)) * var(--_sonic-cast-y)) calc(1.5 * var(--_sonic-unit))
286
+ var(--_sonic-drop-shade)
287
+ );
250
288
 
251
289
  @media (prefers-reduced-motion: reduce) {
252
290
  --_sonic-switch-transition: none;
@@ -261,6 +299,7 @@
261
299
  background: var(--_sonic-switch-sheen);
262
300
  background-size: var(--_sonic-switch-size) var(--_sonic-switch-size);
263
301
  border-radius: 999px;
302
+ box-shadow: 0 0 0 var(--_sonic-switch-outline) var(--_sonic-switch-rim);
264
303
  transition: var(--_sonic-switch-transition);
265
304
  }
266
305
 
@@ -292,7 +331,9 @@
292
331
  background-position: calc((var(--_sonic-switch-ball) - var(--_sonic-switch-size)) / 2)
293
332
  calc((var(--_sonic-switch-ball) - var(--_sonic-switch-size)) / 2);
294
333
  box-shadow:
295
- inset 0 0 calc(1.5 * var(--_sonic-unit)) calc(0.4 * var(--_sonic-unit)) rgb(0 0 0 / 30%),
334
+ inset 0 0 calc(1.5 * var(--_sonic-unit)) calc(0.4 * var(--_sonic-unit))
335
+ rgb(0 0 0 / calc(0.3 * var(--_sonic-relief))),
336
+ 0 0 0 var(--_sonic-switch-outline) var(--_sonic-switch-rim),
296
337
  var(--_sonic-focus-shadow);
297
338
  translate: calc(
298
339
  var(--_sonic-switch-along-x) * var(--_sonic-switch-at, 0) * var(--_sonic-switch-reach)
@@ -306,6 +347,7 @@
306
347
  }
307
348
 
308
349
  .sonic-switch:has(> .sonic-switch-position:disabled) {
350
+ --_sonic-switch-cap: var(--sonic-cap, var(--_sonic-etch));
309
351
  --_sonic-switch-metal: var(--_sonic-etch);
310
352
  --_sonic-switch-metal-shade: var(--_sonic-etch);
311
353
  }
@@ -65,12 +65,17 @@
65
65
  }
66
66
 
67
67
  .sonic-waveform {
68
- --_sonic-waveform-inset: calc(var(--_sonic-waveform-size) * 0.06);
68
+ --_sonic-waveform-inset: calc(
69
+ var(--_sonic-waveform-size) * var(--sonic-waveform-inset-ratio, 0.06)
70
+ );
69
71
  --_sonic-unit: calc(var(--_sonic-waveform-size) / 48);
70
72
  --_sonic-waveform-line: max(1px, var(--_sonic-unit));
71
73
  --_sonic-waveform-lit: var(--_sonic-lit);
72
74
  --_sonic-waveform-wave: var(--_sonic-waveform-lit);
73
- --_sonic-waveform-wave-edge: color-mix(in oklab, var(--_sonic-waveform-lit) 45%, #000);
75
+ --_sonic-waveform-wave-edge: var(
76
+ --sonic-waveform-edge,
77
+ color-mix(in oklab, var(--_sonic-waveform-lit) 45%, #000)
78
+ );
74
79
  --_sonic-waveform-grid: var(--_sonic-etch);
75
80
  --_sonic-waveform-hatch: var(--_sonic-etch);
76
81
  --_sonic-waveform-marker: var(--sonic-marker, var(--_sonic-ink));
@@ -87,7 +92,12 @@
87
92
  overflow: hidden;
88
93
  touch-action: pan-y;
89
94
  cursor: grab;
90
- border-radius: calc(var(--_sonic-waveform-size) * 0.08);
95
+
96
+ --_sonic-glass-radius: calc(
97
+ var(--_sonic-waveform-size) * var(--sonic-waveform-radius-ratio, 0.08)
98
+ );
99
+
100
+ border-radius: var(--_sonic-glass-radius);
91
101
  box-shadow: var(--_sonic-focus-shadow);
92
102
  }
93
103
 
@@ -134,13 +144,18 @@
134
144
  inset-inline-start: var(--_sonic-waveform-inset);
135
145
  font-size: calc(var(--_sonic-waveform-size) * var(--sonic-waveform-label-font-ratio, 0.13));
136
146
  line-height: 1;
137
- color: var(--_sonic-waveform-marker);
147
+ color: var(--_sonic-marker, var(--_sonic-waveform-marker));
138
148
  white-space: nowrap;
149
+ text-shadow: var(--sonic-waveform-label-shadow, none);
139
150
  pointer-events: none;
140
151
  }
141
152
 
142
153
  .sonic-waveform-label[data-sonic-dimmed] {
143
- color: color-mix(in oklab, var(--_sonic-waveform-marker) 50%, transparent);
154
+ color: color-mix(
155
+ in oklab,
156
+ var(--_sonic-marker, var(--_sonic-waveform-marker)) 50%,
157
+ transparent
158
+ );
144
159
  }
145
160
 
146
161
  /* Opaque, since a system highlight carries alpha that would blend the wave into the glass */
@@ -162,6 +177,14 @@
162
177
  forced-color-adjust: none;
163
178
  }
164
179
 
180
+ .sonic-waveform-label {
181
+ color: CanvasText;
182
+
183
+ &[data-sonic-dimmed] {
184
+ color: GrayText;
185
+ }
186
+ }
187
+
165
188
  .sonic-waveform-playhead {
166
189
  background: CanvasText;
167
190
  }
@@ -58,6 +58,12 @@
58
58
  initial-value: 0;
59
59
  }
60
60
 
61
+ @property --_sonic-marker-step {
62
+ syntax: '<length>';
63
+ inherits: true;
64
+ initial-value: 0;
65
+ }
66
+
61
67
  @property --_sonic-cancel-zone {
62
68
  syntax: '<length>';
63
69
  inherits: true;
@@ -88,10 +94,14 @@
88
94
  --_sonic-wavestrip-bar-gap-ratio: var(--sonic-wavestrip-bar-gap-ratio, 0.33);
89
95
  --_sonic-wavestrip-bar-radius-ratio: var(--sonic-wavestrip-bar-radius-ratio, 0.5);
90
96
  --_sonic-wavestrip-marker-ratio: var(--sonic-wavestrip-marker-ratio, 0.065);
91
- --_sonic-wavestrip-inset: calc(var(--_sonic-wavestrip-size) * 0.1);
97
+ --_sonic-wavestrip-inset: calc(
98
+ var(--_sonic-wavestrip-size) * var(--sonic-wavestrip-inset-ratio, 0.1)
99
+ );
92
100
  --_sonic-unit: calc(var(--_sonic-wavestrip-size) / 32);
93
101
  --_sonic-wavestrip-lit: var(--_sonic-lit);
94
102
  --_sonic-marker-size: calc(var(--_sonic-wavestrip-size) * var(--_sonic-wavestrip-marker-ratio));
103
+ --_sonic-marker-ring: max(1px, 0.5 * var(--_sonic-unit));
104
+ --_sonic-marker-step: calc(var(--_sonic-marker-size) + var(--_sonic-marker-ring));
95
105
  --_sonic-marker-default: var(--sonic-marker, var(--_sonic-ink));
96
106
  --_sonic-wavestrip-wave: var(
97
107
  --sonic-wave,
@@ -110,7 +120,12 @@
110
120
  container-type: size;
111
121
  touch-action: pan-y;
112
122
  cursor: ew-resize;
113
- border-radius: calc(var(--_sonic-wavestrip-size) * 0.15);
123
+
124
+ --_sonic-glass-radius: calc(
125
+ var(--_sonic-wavestrip-size) * var(--sonic-wavestrip-radius-ratio, 0.15)
126
+ );
127
+
128
+ border-radius: var(--_sonic-glass-radius);
114
129
  box-shadow: var(--_sonic-focus-shadow);
115
130
  }
116
131
 
@@ -151,16 +166,18 @@
151
166
  }
152
167
 
153
168
  .sonic-wavestrip-marker {
154
- inset: 0 auto auto calc(var(--_sonic-marker-from, 0) * 100% - var(--_sonic-marker-size) / 2);
169
+ inset: calc(var(--_sonic-marker-lane, 0) * var(--_sonic-marker-step)) auto auto
170
+ calc(var(--_sonic-marker-from, 0) * 100% - var(--_sonic-marker-size) / 2);
155
171
  inline-size: var(--_sonic-marker-size);
156
172
  block-size: var(--_sonic-marker-size);
157
173
  background: color-mix(in oklab, var(--_sonic-marker-colour) 85%, transparent);
158
174
  border-radius: 50%;
159
- box-shadow: 0 0 0 max(1px, 0.5 * var(--_sonic-unit)) var(--_sonic-glass);
175
+ box-shadow: 0 0 0 var(--_sonic-marker-ring) var(--_sonic-glass);
160
176
  }
161
177
 
162
178
  .sonic-wavestrip-region {
163
- inset: 0 auto 0 calc(var(--_sonic-marker-from, 0) * 100%);
179
+ inset: calc(-1 * var(--_sonic-wavestrip-inset)) auto calc(-1 * var(--_sonic-wavestrip-inset))
180
+ calc(var(--_sonic-marker-from, 0) * 100%);
164
181
  box-sizing: border-box;
165
182
  inline-size: calc((var(--_sonic-marker-to, 0) - var(--_sonic-marker-from, 0)) * 100%);
166
183
  background: color-mix(in oklab, var(--_sonic-marker-colour) 16%, transparent);
@@ -204,7 +221,7 @@
204
221
 
205
222
  .sonic-wavestrip-marker {
206
223
  background: var(--_sonic-marker-colour);
207
- box-shadow: 0 0 0 max(1px, 0.5 * var(--_sonic-unit)) Canvas;
224
+ box-shadow: 0 0 0 var(--_sonic-marker-ring) Canvas;
208
225
  }
209
226
 
210
227
  .sonic-wavestrip-region {
@@ -38,7 +38,10 @@
38
38
  container-type: size;
39
39
  touch-action: none;
40
40
  cursor: crosshair;
41
- border-radius: calc(var(--_sonic-xy-size) * var(--_sonic-xy-radius-ratio));
41
+
42
+ --_sonic-glass-radius: calc(var(--_sonic-xy-size) * var(--_sonic-xy-radius-ratio));
43
+
44
+ border-radius: var(--_sonic-glass-radius);
42
45
  }
43
46
 
44
47
  :disabled > .sonic-xy {
@@ -116,52 +119,68 @@
116
119
  }
117
120
  }
118
121
 
119
- .sonic-xy-puck {
120
- --_sonic-xy-star: var(--_sonic-xy-lit);
121
- --_sonic-xy-star-lift: color-mix(in oklab, var(--_sonic-xy-lit) 85%, #fff);
122
- --_sonic-xy-star-glow: transparent;
123
-
122
+ :is(.sonic-xy-bracket, .sonic-xy-puck) {
124
123
  position: absolute;
125
124
  inset: auto auto
126
125
  calc(var(--_sonic-xy-inset) + var(--_sonic-xy-y, 0) * var(--_sonic-xy-travel-y))
127
126
  calc(var(--_sonic-xy-inset) + var(--_sonic-xy-x, 0) * var(--_sonic-xy-travel-x));
128
127
  inline-size: var(--_sonic-xy-puck);
129
128
  block-size: var(--_sonic-xy-puck);
130
- cursor: var(--_sonic-xy-cursor);
131
129
  border-radius: 50%;
132
- box-shadow: var(--_sonic-focus-shadow);
133
- filter: drop-shadow(0 0 calc(0.1 * var(--_sonic-xy-puck)) var(--_sonic-xy-star-glow));
134
- transition:
135
- box-shadow 120ms ease-out,
136
- filter 120ms ease-out;
130
+ }
131
+
132
+ .sonic-xy-bracket {
133
+ --_sonic-bracket-size: var(--_sonic-xy-puck);
134
+ }
135
+
136
+ .sonic-xy-puck {
137
+ --_sonic-xy-puck-fill: var(--_sonic-xy-lit);
138
+ --_sonic-xy-puck-edge: var(--_sonic-xy-puck-fill);
139
+ --_sonic-xy-puck-lift: color-mix(in oklab, var(--_sonic-xy-lit) 85%, #fff);
140
+ --_sonic-xy-puck-glow: transparent;
141
+ --_sonic-xy-puck-ring: 0 0 transparent;
142
+
143
+ cursor: var(--_sonic-xy-cursor);
144
+ filter: drop-shadow(0 0 calc(0.15 * var(--_sonic-xy-puck)) var(--_sonic-xy-puck-glow));
145
+ transition: filter 120ms ease-out;
137
146
 
138
147
  &::before {
139
148
  position: absolute;
140
- inset: 0;
149
+ inset: 25%;
141
150
  pointer-events: none;
142
151
  content: '';
143
- background: var(--_sonic-xy-star);
144
- mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 108 108'%3E%3Cpath d='M50 0C52 38 62 48 100 50C62 52 52 62 50 100C48 62 38 52 0 50C38 48 48 38 50 0Z'/%3E%3C/svg%3E")
145
- center / 100% 100% no-repeat;
146
- transition: background-color 120ms ease-out;
152
+ background: var(--_sonic-xy-puck-fill);
153
+ border: max(1px, 0.08 * var(--_sonic-xy-puck)) solid var(--_sonic-xy-puck-edge);
154
+ border-radius: 50%;
155
+ box-shadow: var(--_sonic-xy-puck-ring);
156
+ transition:
157
+ background-color 120ms ease-out,
158
+ border-color 120ms ease-out,
159
+ box-shadow 120ms ease-out;
147
160
  }
148
161
  }
149
162
 
150
163
  @media (hover: hover) {
151
- :not(:disabled) > .sonic-xy > .sonic-xy-puck:hover {
152
- --_sonic-xy-star: var(--_sonic-xy-star-lift);
164
+ :not(:disabled, :state(dragging)) > .sonic-xy > .sonic-xy-puck:hover {
165
+ --_sonic-xy-puck-fill: var(--_sonic-xy-puck-lift);
153
166
  }
154
167
  }
155
168
 
156
- /* The glow goes on the puck, since a custom property cannot travel up from the part */
157
169
  .sonic-xy-puck:has(> :focus-visible:not([data-sonic-pointer-focus])) {
158
- --_sonic-xy-star: var(--_sonic-xy-star-lift);
159
- --_sonic-focus-shadow: var(--_sonic-focus-glow);
170
+ --_sonic-xy-puck-fill: var(--_sonic-xy-puck-lift);
171
+ --_sonic-xy-puck-ring:
172
+ 0 0 0 max(2px, 0.08 * var(--_sonic-xy-puck)) var(--_sonic-glass),
173
+ 0 0 0 max(4px, 0.16 * var(--_sonic-xy-puck)) var(--_sonic-focus);
160
174
  }
161
175
 
162
176
  :state(dragging) > .sonic-xy > .sonic-xy-puck {
163
- --_sonic-xy-star: var(--_sonic-xy-star-lift);
164
- --_sonic-xy-star-glow: color-mix(in oklab, var(--_sonic-xy-lit) 25%, transparent);
177
+ --_sonic-xy-puck-fill: var(--_sonic-glass);
178
+ --_sonic-xy-puck-edge: var(--_sonic-xy-lit);
179
+ --_sonic-xy-puck-glow: color-mix(
180
+ in oklab,
181
+ var(--_sonic-xy-lit) calc(45% * var(--_sonic-relief)),
182
+ transparent
183
+ );
165
184
  }
166
185
 
167
186
  .sonic-xy-axis {
@@ -175,6 +194,7 @@
175
194
  .sonic-xy {
176
195
  --_sonic-lit: Highlight;
177
196
  --_sonic-unlit: GrayText;
197
+ --_sonic-glass: Canvas;
178
198
  }
179
199
 
180
200
  .sonic-xy-field {
@@ -182,9 +202,10 @@
182
202
  }
183
203
 
184
204
  .sonic-xy-puck {
185
- --_sonic-xy-star: CanvasText;
186
- --_sonic-xy-star-lift: CanvasText;
187
- --_sonic-xy-star-glow: transparent;
205
+ --_sonic-xy-puck-fill: CanvasText;
206
+ --_sonic-xy-puck-lift: CanvasText;
207
+ --_sonic-xy-puck-glow: transparent;
208
+ --_sonic-xy-puck-ring: 0 0 transparent;
188
209
 
189
210
  forced-color-adjust: none;
190
211
  }
package/package.json CHANGED
@@ -1,15 +1,13 @@
1
1
  {
2
2
  "name": "@xsynaptic/sonic-ui",
3
- "version": "0.5.0",
3
+ "version": "0.6.1",
4
4
  "description": "Native custom elements for audio interfaces, skinned with CSS custom properties",
5
5
  "keywords": [
6
6
  "custom-elements",
7
7
  "web-components",
8
8
  "audio",
9
- "knob",
10
9
  "dial",
11
10
  "slider",
12
- "fader",
13
11
  "synth"
14
12
  ],
15
13
  "homepage": "https://github.com/xsynaptic/sonic-ui#readme",
@@ -79,13 +77,12 @@
79
77
  "dist"
80
78
  ],
81
79
  "devDependencies": {
82
- "publint": "^0.3.24",
80
+ "publint": "^0.3.25",
83
81
  "tsdown": "^0.23.0",
84
82
  "typescript": "^6.0.3"
85
83
  },
86
84
  "scripts": {
87
85
  "build": "tsdown",
88
- "dev": "tsdown --watch",
89
86
  "check-types": "tsc --noEmit"
90
87
  }
91
88
  }