@xsynaptic/sonic-ui 0.24.0 → 0.24.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 (36) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/default/elements/readout.js +3 -2
  3. package/dist/default/elements/sonic-element.js +23 -4
  4. package/dist/default/elements/value-element.js +2 -2
  5. package/dist/default/lib/spoken-duration.js +3 -0
  6. package/dist/dev/elements/readout.js +3 -2
  7. package/dist/dev/elements/readout.js.map +1 -1
  8. package/dist/dev/elements/sonic-element.js +23 -4
  9. package/dist/dev/elements/sonic-element.js.map +1 -1
  10. package/dist/dev/elements/value-element.js +2 -2
  11. package/dist/dev/elements/value-element.js.map +1 -1
  12. package/dist/dev/lib/spoken-duration.js +3 -0
  13. package/dist/dev/lib/spoken-duration.js.map +1 -1
  14. package/dist/styles/button.css +30 -11
  15. package/dist/styles/dial.css +13 -15
  16. package/dist/styles/envelope.css +2 -2
  17. package/dist/styles/led.css +28 -13
  18. package/dist/styles/material/cap.css +6 -6
  19. package/dist/styles/material/core.css +53 -1
  20. package/dist/styles/material/glass.css +11 -1
  21. package/dist/styles/material/keycap.css +3 -3
  22. package/dist/styles/material/pane.css +8 -6
  23. package/dist/styles/material/readout.css +19 -7
  24. package/dist/styles/material/scale.css +4 -4
  25. package/dist/styles/material/value.css +12 -3
  26. package/dist/styles/meter.css +6 -6
  27. package/dist/styles/panel.css +2 -3
  28. package/dist/styles/ring.css +3 -3
  29. package/dist/styles/segmented.css +6 -6
  30. package/dist/styles/slider.css +28 -29
  31. package/dist/styles/switch.css +49 -51
  32. package/dist/styles/toggle.css +31 -37
  33. package/dist/styles/waveform.css +2 -2
  34. package/dist/styles/wavestrip.css +4 -4
  35. package/dist/styles/xy.css +10 -11
  36. package/package.json +2 -2
@@ -148,8 +148,9 @@
148
148
  .sonic-dial-scale {
149
149
  font-size: calc(var(--_sonic-dial-size) * var(--_sonic-dial-scale-font-ratio));
150
150
  line-height: 1cap;
151
+ }
151
152
 
152
- & > * {
153
+ .sonic-dial-scale > * {
153
154
  --_sonic-dial-scale-angle: calc(
154
155
  var(--_sonic-dial-start) + var(--_sonic-scale-at, 0) * var(--_sonic-dial-sweep)
155
156
  );
@@ -165,7 +166,7 @@
165
166
  calc(-50% - var(--_sonic-dial-scale-cos) * (50% + 0.15cap));
166
167
  }
167
168
 
168
- & > .sonic-scale-tick {
169
+ .sonic-dial-scale > .sonic-scale-tick {
169
170
  --_sonic-dial-tick-length: calc(var(--_sonic-dial-scale-band) * 0.4);
170
171
 
171
172
  inline-size: var(--_sonic-unit);
@@ -174,7 +175,6 @@
174
175
  translate: calc(-50% + var(--_sonic-dial-scale-sin) * var(--_sonic-dial-tick-length) / 2)
175
176
  calc(-50% - var(--_sonic-dial-scale-cos) * var(--_sonic-dial-tick-length) / 2);
176
177
  }
177
- }
178
178
 
179
179
  :is(.sonic-dial-ring, .sonic-dial-modulation) {
180
180
  --_sonic-arc-width: var(--_sonic-dial-ring-width);
@@ -254,16 +254,16 @@
254
254
  display: block;
255
255
  background: none;
256
256
  mask: none;
257
+ }
257
258
 
258
- &::before,
259
- &::after {
259
+ :is(:state(modulated) > .sonic-dial > .sonic-dial-modulation)::before,:is(:state(modulated) > .sonic-dial > .sonic-dial-modulation)::after {
260
260
  position: absolute;
261
261
  inset: 0;
262
262
  content: '';
263
263
  border-radius: 50%;
264
264
  }
265
265
 
266
- &::before {
266
+ :is(:state(modulated) > .sonic-dial > .sonic-dial-modulation)::before {
267
267
  background:
268
268
  conic-gradient(
269
269
  from var(--_sonic-dial-start),
@@ -282,7 +282,7 @@
282
282
  mask: var(--_sonic-arc-mask);
283
283
  }
284
284
 
285
- &::after {
285
+ :is(:state(modulated) > .sonic-dial > .sonic-dial-modulation)::after {
286
286
  background: linear-gradient(
287
287
  var(--_sonic-dial-modulation-tick),
288
288
  var(--_sonic-dial-modulation-tick)
@@ -290,7 +290,6 @@
290
290
  50% 0 / var(--_sonic-unit) var(--_sonic-dial-ring-width) no-repeat;
291
291
  rotate: calc(var(--_sonic-dial-start) + var(--_sonic-dial-modulation-value-angle));
292
292
  }
293
- }
294
293
 
295
294
  .sonic-dial-cap {
296
295
  position: absolute;
@@ -302,15 +301,15 @@
302
301
  var(--_sonic-drop-shade),
303
302
  var(--_sonic-rim),
304
303
  var(--_sonic-focus-shadow);
304
+ }
305
305
 
306
- &::before,
307
- &::after {
306
+ .sonic-dial-cap::before,.sonic-dial-cap::after {
308
307
  position: absolute;
309
308
  content: '';
310
309
  border-radius: 50%;
311
310
  }
312
311
 
313
- &::before {
312
+ .sonic-dial-cap::before {
314
313
  inset: 0;
315
314
  background: repeating-conic-gradient(
316
315
  rgb(from var(--_sonic-shade) r g b / calc(0.3 * var(--_sonic-relief))) 0,
@@ -322,7 +321,7 @@
322
321
  rotate: var(--_sonic-dial-angle);
323
322
  }
324
323
 
325
- &::after {
324
+ .sonic-dial-cap::after {
326
325
  inset: 16%;
327
326
  background:
328
327
  conic-gradient(
@@ -343,7 +342,6 @@
343
342
  var(--_sonic-face);
344
343
  box-shadow: var(--_sonic-face-shadow);
345
344
  }
346
- }
347
345
 
348
346
  .sonic-dial-indicator {
349
347
  position: absolute;
@@ -351,8 +349,9 @@
351
349
  pointer-events: none;
352
350
  border-radius: 50%;
353
351
  rotate: calc(var(--_sonic-dial-start) + var(--_sonic-dial-angle));
352
+ }
354
353
 
355
- &::before {
354
+ .sonic-dial-indicator::before {
356
355
  --_sonic-dial-indicator-width: calc(
357
356
  var(--_sonic-dial-size) * var(--_sonic-dial-indicator-ratio)
358
357
  );
@@ -380,7 +379,6 @@
380
379
  );
381
380
  translate: -50% 0;
382
381
  }
383
- }
384
382
 
385
383
  :disabled > .sonic-dial > .sonic-dial-indicator::before {
386
384
  background: var(--_sonic-ink-disabled);
@@ -65,13 +65,13 @@
65
65
  inset: 0;
66
66
  overflow: clip;
67
67
  pointer-events: none;
68
+ }
68
69
 
69
- &[data-sonic-part='curve'] {
70
+ .sonic-envelope-bracket[data-sonic-part='curve'] {
70
71
  --_sonic-point-size: calc(
71
72
  2 * var(--_sonic-envelope-size) * var(--_sonic-envelope-curve-ratio)
72
73
  );
73
74
  }
74
- }
75
75
 
76
76
  .sonic-envelope-fill {
77
77
  fill: color-mix(in oklab, var(--_sonic-lit) 18%, transparent);
@@ -19,8 +19,9 @@
19
19
  block-size: var(--_sonic-led-size);
20
20
  background: var(--_sonic-lens-bezel);
21
21
  border-radius: 50%;
22
+ }
22
23
 
23
- &::after {
24
+ .sonic-led::after {
24
25
  position: absolute;
25
26
  inset: calc(var(--_sonic-led-size) * (1 - var(--_sonic-led-lens-ratio)) / 2);
26
27
  content: '';
@@ -29,19 +30,20 @@
29
30
  }
30
31
 
31
32
  @media (forced-colors: active) {
33
+ .sonic-led {
32
34
  --_sonic-lit-ok: Mark;
33
35
  --_sonic-lit-warning: Highlight;
34
36
  --_sonic-lit-danger: Mark;
35
37
 
36
38
  forced-color-adjust: none;
37
39
  background: none;
40
+ }
38
41
 
39
- &::after {
42
+ .sonic-led::after {
40
43
  background: GrayText;
41
44
  box-shadow: 0 0 0 1px CanvasText;
42
45
  }
43
46
  }
44
- }
45
47
 
46
48
  .sonic-led[data-sonic-lit='ok'] {
47
49
  --_sonic-lit: var(--_sonic-lit-ok);
@@ -56,23 +58,18 @@
56
58
  }
57
59
 
58
60
  /* Before the lit rule, which a latched button's LED also matches */
59
- .sonic-led:is(
60
- [data-sonic-lit='idle'],
61
- :where(:is([armed], [busy]) > .sonic-button:not(:disabled, [aria-disabled='true'])) *
62
- ) {
63
- &::after {
61
+ .sonic-led:is([data-sonic-lit='idle'],:where(:is([armed],[busy]) > .sonic-button:not(:disabled,[aria-disabled='true'])) *)::after {
64
62
  background:
65
63
  var(--_sonic-lens-glint),
66
64
  color-mix(in oklab, var(--_sonic-lit) 35%, var(--_sonic-lens-glass));
67
65
  }
68
66
 
69
67
  @media (forced-colors: active) {
70
- &::after {
68
+ .sonic-led:is([data-sonic-lit='idle'],:where(:is([armed],[busy]) > .sonic-button:not(:disabled,[aria-disabled='true'])) *)::after {
71
69
  background: GrayText;
72
70
  box-shadow: 0 0 0 1px var(--_sonic-lit);
73
71
  }
74
72
  }
75
- }
76
73
 
77
74
  .sonic-led:is(
78
75
  [data-sonic-lit]:where(:not([data-sonic-lit='idle'])),
@@ -96,8 +93,10 @@
96
93
  transparent
97
94
  ),
98
95
  var(--_sonic-lens-bezel);
96
+ }
99
97
 
100
- &::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]: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 {
101
100
  background: radial-gradient(
102
101
  closest-side,
103
102
  color-mix(
@@ -110,14 +109,30 @@
110
109
  }
111
110
 
112
111
  @media (forced-colors: active) {
112
+
113
+ .sonic-led:is(
114
+ [data-sonic-lit]:where(:not([data-sonic-lit='idle'])),
115
+ :where(
116
+ .sonic-button:is([aria-pressed='true'], [aria-expanded='true']),
117
+ [momentary]:state(pressed) > .sonic-button,
118
+ .sonic-segmented-option[aria-checked='true'],
119
+ .sonic-toggle:has(
120
+ > [role='switch'][aria-checked='true'],
121
+ > [aria-checked='true'] [data-sonic-lit]
122
+ )
123
+ )
124
+ *,
125
+ :where(:state(at-origin):not(:disabled) > .sonic-led)
126
+ ) {
113
127
  background: none;
128
+ }
114
129
 
115
- &::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]: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 {
116
132
  background: var(--_sonic-lit);
117
133
  box-shadow: 0 0 0 1px CanvasText;
118
134
  }
119
135
  }
120
- }
121
136
 
122
137
  :is(.sonic-button:is(:disabled, [aria-disabled='true']), .sonic-segmented-option:disabled)
123
138
  .sonic-led {
@@ -97,13 +97,13 @@
97
97
 
98
98
  :is(.sonic-button, .sonic-segmented-option, .sonic-switch-position, .sonic-toggle-position) {
99
99
  --_sonic-target-outset: min(0px, calc((100% - var(--sonic-target-size, 100%)) / 2));
100
+ }
100
101
 
101
- &::after {
102
+ :is(.sonic-button,.sonic-segmented-option,.sonic-switch-position,.sonic-toggle-position)::after {
102
103
  position: absolute;
103
104
  inset: var(--_sonic-target-outset);
104
105
  content: '';
105
106
  }
106
- }
107
107
 
108
108
  @media not (forced-colors: active) {
109
109
  :is(
@@ -146,12 +146,12 @@
146
146
  ):focus-visible {
147
147
  outline: 2px solid transparent;
148
148
  outline-offset: var(--sonic-focus-outline-offset, -2px);
149
+ }
149
150
 
150
- &:not([data-sonic-pointer-focus]) {
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]) {
151
152
  --_sonic-cap: var(--_sonic-cap-hover);
152
153
  --_sonic-focus-shadow: var(--_sonic-focus-glow);
153
154
  }
154
- }
155
155
 
156
156
  :is(
157
157
  .sonic-number,
@@ -229,11 +229,11 @@
229
229
  .sonic-wavestrip
230
230
  ):focus-visible {
231
231
  outline-offset: 2px;
232
+ }
232
233
 
233
- &[data-sonic-pointer-focus] {
234
+ [data-sonic-pointer-focus]:is(.sonic-dial,.sonic-button,.sonic-number,.sonic-segmented-option,.sonic-slider,.sonic-waveform,.sonic-wavestrip):focus-visible {
234
235
  outline-style: none;
235
236
  }
236
- }
237
237
 
238
238
  :is(
239
239
  .sonic-dial-cap,
@@ -49,15 +49,67 @@
49
49
  --_sonic-cast-x: calc(sin(var(--_sonic-light-tilt)) * var(--_sonic-unit));
50
50
  --_sonic-cast-y: calc(cos(var(--_sonic-light-tilt)) * var(--_sonic-unit));
51
51
  --_sonic-snap: 1px;
52
+ }
52
53
 
53
54
  @media (resolution >= 2dppx) {
55
+ :is(
56
+ .sonic-dial,
57
+ .sonic-dial-readout,
58
+ .sonic-envelope,
59
+ .sonic-envelope-readout,
60
+ .sonic-button,
61
+ .sonic-led,
62
+ .sonic-switch,
63
+ .sonic-toggle,
64
+ .sonic-meter,
65
+ .sonic-number,
66
+ .sonic-panel,
67
+ .sonic-ring,
68
+ .sonic-screen,
69
+ .sonic-segmented,
70
+ .sonic-slider,
71
+ .sonic-slider-readout,
72
+ .sonic-spectrum,
73
+ .sonic-waveform,
74
+ .sonic-waveform-readout,
75
+ .sonic-wavestrip,
76
+ .sonic-wavestrip-readout,
77
+ .sonic-xy,
78
+ .sonic-xy-readout
79
+ ) {
54
80
  --_sonic-snap: 0.5px;
81
+ }
55
82
  }
56
83
 
57
84
  @media (resolution >= 3dppx) {
85
+ :is(
86
+ .sonic-dial,
87
+ .sonic-dial-readout,
88
+ .sonic-envelope,
89
+ .sonic-envelope-readout,
90
+ .sonic-button,
91
+ .sonic-led,
92
+ .sonic-switch,
93
+ .sonic-toggle,
94
+ .sonic-meter,
95
+ .sonic-number,
96
+ .sonic-panel,
97
+ .sonic-ring,
98
+ .sonic-screen,
99
+ .sonic-segmented,
100
+ .sonic-slider,
101
+ .sonic-slider-readout,
102
+ .sonic-spectrum,
103
+ .sonic-waveform,
104
+ .sonic-waveform-readout,
105
+ .sonic-wavestrip,
106
+ .sonic-wavestrip-readout,
107
+ .sonic-xy,
108
+ .sonic-xy-readout
109
+ ) {
58
110
  --_sonic-snap: calc(1px / 3);
59
- }
60
111
  }
112
+ }
61
113
 
62
114
  :is(
63
115
  .sonic-dial,
@@ -49,8 +49,18 @@
49
49
  );
50
50
 
51
51
  /* Glass is forced to Canvas like the page, so only a border shows its edge */
52
+ }
52
53
  @media (forced-colors: active) {
54
+ :is(
55
+ .sonic-dial-readout,
56
+ .sonic-envelope-readout,
57
+ .sonic-screen,
58
+ .sonic-slider-readout,
59
+ .sonic-waveform-readout,
60
+ .sonic-wavestrip-readout,
61
+ .sonic-xy-readout
62
+ ) {
53
63
  --_sonic-glass-edge: 1px solid CanvasText;
54
- }
55
64
  }
65
+ }
56
66
  }
@@ -77,8 +77,9 @@
77
77
  scale: var(--_sonic-keycap-scale);
78
78
  translate: 0 var(--_sonic-keycap-shift);
79
79
  transition: var(--_sonic-press-transition);
80
+ }
80
81
 
81
- &::before {
82
+ :is(.sonic-button-cap,.sonic-segmented-cap,.sonic-toggle-cap)::before {
82
83
  position: absolute;
83
84
  inset: var(--_sonic-keycap-bevel);
84
85
  content: '';
@@ -89,8 +90,7 @@
89
90
  box-shadow: var(--_sonic-face-shadow);
90
91
  }
91
92
 
92
- & > * {
93
+ :is(.sonic-button-cap,.sonic-segmented-cap,.sonic-toggle-cap) > * {
93
94
  position: relative;
94
95
  }
95
- }
96
96
  }
@@ -21,12 +21,16 @@
21
21
  color: var(--_sonic-glass-text);
22
22
  background: var(--_sonic-glass-fill);
23
23
  border: var(--_sonic-glass-edge);
24
+ }
24
25
 
25
26
  @media (forced-colors: active) {
27
+
28
+ .sonic-screen {
26
29
  --_sonic-glass-texture: 0;
30
+ }
27
31
  }
28
32
 
29
- &::after {
33
+ .sonic-screen::after {
30
34
  position: absolute;
31
35
  inset: 0;
32
36
  pointer-events: none;
@@ -57,7 +61,7 @@
57
61
 
58
62
  @media (forced-colors: none) {
59
63
  /* No var() beside the tile, which would parse the url() again on every style recalculation */
60
- &::before {
64
+ .sonic-screen::before {
61
65
  position: absolute;
62
66
  inset: 0;
63
67
  color: color-mix(in oklab, var(--_sonic-glass-text) 7.5%, transparent);
@@ -72,17 +76,15 @@
72
76
  }
73
77
 
74
78
  @media (prefers-reduced-motion: no-preference) {
75
- &:is(:focus-visible, :focus-within)::before,
76
- &:has(:state(dragging))::before {
79
+ .sonic-screen:is(:focus-visible,:focus-within)::before,.sonic-screen:has(:state(dragging))::before {
77
80
  animation: sonic-glass-breathe 3s ease-in-out infinite alternate;
78
81
  }
79
82
 
80
83
  @media (hover: hover) {
81
- &:hover::before {
84
+ .sonic-screen:hover::before {
82
85
  animation: sonic-glass-breathe 3s ease-in-out infinite alternate;
83
86
  }
84
87
  }
85
88
  }
86
89
  }
87
- }
88
90
  }
@@ -66,30 +66,42 @@
66
66
  overlay var(--_sonic-fade-duration) allow-discrete;
67
67
 
68
68
  /* Grid only while open; engines keep the flip a closed readout took against a filtered ancestor */
69
- &:popover-open {
69
+ }
70
+ :is(.sonic-dial-readout,.sonic-envelope-readout,.sonic-slider-readout,.sonic-waveform-readout,.sonic-wavestrip-readout,.sonic-xy-readout):popover-open {
70
71
  display: grid;
71
72
  opacity: 1;
72
73
  translate: 0;
74
+ }
73
75
 
74
76
  @starting-style {
77
+ :is(.sonic-dial-readout,.sonic-envelope-readout,.sonic-slider-readout,.sonic-waveform-readout,.sonic-wavestrip-readout,.sonic-xy-readout):popover-open {
75
78
  opacity: 0;
76
79
  translate: 0 calc(0.15 * var(--_sonic-readout-size));
77
- }
78
80
  }
81
+ }
79
82
 
80
83
  @media (prefers-reduced-motion: reduce) {
81
- translate: 0;
82
84
 
83
- &:popover-open {
85
+ :is(
86
+ .sonic-dial-readout,
87
+ .sonic-envelope-readout,
88
+ .sonic-slider-readout,
89
+ .sonic-waveform-readout,
90
+ .sonic-wavestrip-readout,
91
+ .sonic-xy-readout
92
+ ) {
93
+ translate: 0;
94
+ }
84
95
  @starting-style {
96
+
97
+ :is(.sonic-dial-readout,.sonic-envelope-readout,.sonic-slider-readout,.sonic-waveform-readout,.sonic-wavestrip-readout,.sonic-xy-readout):popover-open {
85
98
  translate: 0;
86
- }
87
99
  }
100
+ }
88
101
  }
89
102
 
90
- :state(editing) > :is(.sonic-dial, .sonic-slider, .sonic-waveform, .sonic-wavestrip) > & {
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) {
91
104
  pointer-events: auto;
92
105
  cursor: text;
93
106
  }
94
- }
95
107
  }
@@ -5,21 +5,21 @@
5
5
  line-height: 1;
6
6
  white-space: nowrap;
7
7
  pointer-events: none;
8
+ }
8
9
 
9
- & > * {
10
+ :is(.sonic-dial-scale,.sonic-slider-scale) > * {
10
11
  position: absolute;
11
12
  }
12
13
 
13
- & svg {
14
+ :is(.sonic-dial-scale,.sonic-slider-scale) svg {
14
15
  display: block;
15
16
  inline-size: 1em;
16
17
  block-size: 1em;
17
18
  }
18
19
 
19
- & > .sonic-scale-tick {
20
+ :is(.sonic-dial-scale,.sonic-slider-scale) > .sonic-scale-tick {
20
21
  background: var(--sonic-scale, var(--_sonic-etch));
21
22
  }
22
- }
23
23
 
24
24
  @media (forced-colors: active) {
25
25
  :is(.sonic-dial-scale, .sonic-slider-scale) > .sonic-scale-tick {
@@ -23,21 +23,30 @@
23
23
  text-align: center;
24
24
  background: transparent;
25
25
  border: 0;
26
+ }
26
27
 
27
- &::selection {
28
+ :is(.sonic-dial-entry,.sonic-number-entry,.sonic-slider-entry,.sonic-waveform-entry,.sonic-wavestrip-entry)::selection {
28
29
  color: var(--sonic-entry-selection, var(--_sonic-lit));
29
30
  background: transparent;
30
31
  }
31
32
 
32
- &:focus-visible {
33
+ :is(.sonic-dial-entry,.sonic-number-entry,.sonic-slider-entry,.sonic-waveform-entry,.sonic-wavestrip-entry):focus-visible {
33
34
  outline: 2px solid transparent;
34
35
  outline-offset: -2px;
35
36
  }
36
37
 
37
38
  @supports (field-sizing: content) {
39
+
40
+ :is(
41
+ .sonic-dial-entry,
42
+ .sonic-number-entry,
43
+ .sonic-slider-entry,
44
+ .sonic-waveform-entry,
45
+ .sonic-wavestrip-entry
46
+ ) {
38
47
  inline-size: auto;
39
48
  min-inline-size: 3ch;
40
49
  field-sizing: content;
41
- }
42
50
  }
51
+ }
43
52
  }
@@ -66,8 +66,9 @@
66
66
  container-type: size;
67
67
  background: var(--_sonic-lens-bezel);
68
68
  border-radius: calc(var(--_sonic-meter-size) * var(--_sonic-meter-radius-ratio));
69
+ }
69
70
 
70
- &::after {
71
+ .sonic-meter::after {
71
72
  position: absolute;
72
73
  inset: 0;
73
74
  pointer-events: none;
@@ -75,7 +76,6 @@
75
76
  border-radius: inherit;
76
77
  box-shadow: var(--_sonic-groove);
77
78
  }
78
- }
79
79
 
80
80
  [orientation='horizontal'] > .sonic-meter {
81
81
  --_sonic-meter-toward: to right;
@@ -340,8 +340,9 @@
340
340
  block-size: var(--_sonic-meter-lens);
341
341
  background: var(--_sonic-lens);
342
342
  border-radius: 50%;
343
+ }
343
344
 
344
- &::after {
345
+ .sonic-meter-clip::after {
345
346
  position: absolute;
346
347
  inset: 0;
347
348
  content: '';
@@ -353,7 +354,6 @@
353
354
  border-radius: inherit;
354
355
  opacity: var(--_sonic-meter-clipped, 0);
355
356
  }
356
- }
357
357
 
358
358
  :is([value], :state(ladder)) > .sonic-meter > .sonic-meter-clip {
359
359
  display: none;
@@ -370,12 +370,12 @@
370
370
  .sonic-meter {
371
371
  forced-color-adjust: none;
372
372
  background: Canvas;
373
+ }
373
374
 
374
- &::after {
375
+ .sonic-meter::after {
375
376
  border: 1px solid CanvasText;
376
377
  box-shadow: none;
377
378
  }
378
- }
379
379
 
380
380
  :is(.sonic-meter-segments, .sonic-meter-clip) {
381
381
  background: var(--_sonic-unlit);
@@ -45,15 +45,14 @@
45
45
  align-items: center;
46
46
  margin: 0;
47
47
  white-space: nowrap;
48
+ }
48
49
 
49
- &::before,
50
- &::after {
50
+ .sonic-panel-title::before,.sonic-panel-title::after {
51
51
  flex: 1;
52
52
  min-inline-size: 1em;
53
53
  content: '';
54
54
  border-block-start: 1px solid var(--_sonic-panel-line);
55
55
  }
56
- }
57
56
 
58
57
  .sonic-panel-rule {
59
58
  align-self: stretch;
@@ -28,8 +28,9 @@
28
28
  var(--_sonic-ring-size) * (var(--_sonic-ring-ratio) + var(--_sonic-ring-gap-ratio))
29
29
  );
30
30
  border-radius: 50%;
31
+ }
31
32
 
32
- &::before {
33
+ .sonic-ring::before {
33
34
  --_sonic-arc-width: calc(var(--_sonic-ring-size) * var(--_sonic-ring-ratio));
34
35
  --_sonic-arc-inset: 0px;
35
36
 
@@ -53,13 +54,12 @@
53
54
  }
54
55
 
55
56
  @media (forced-colors: active) {
56
- &::before {
57
+ .sonic-ring::before {
57
58
  --_sonic-arc-shade: none;
58
59
 
59
60
  forced-color-adjust: none;
60
61
  }
61
62
  }
62
- }
63
63
 
64
64
  .sonic-ring > :not(:defined),
65
65
  .sonic-ring > * > .sonic-button {
@@ -166,16 +166,16 @@
166
166
 
167
167
  position: relative;
168
168
  padding-inline: calc(var(--_sonic-segmented-size) * var(--_sonic-segmented-padding-ratio));
169
+ }
169
170
 
170
- & > * {
171
+ .sonic-segmented-cap > * {
171
172
  filter: var(--_sonic-engraving);
172
173
  }
173
174
 
174
- & > svg {
175
+ .sonic-segmented-cap > svg {
175
176
  inline-size: calc(var(--_sonic-segmented-size) * var(--_sonic-segmented-icon-ratio));
176
177
  block-size: calc(var(--_sonic-segmented-size) * var(--_sonic-segmented-icon-ratio));
177
178
  }
178
- }
179
179
 
180
180
  .sonic-segmented-option[aria-checked='true'] .sonic-segmented-cap > * {
181
181
  filter: var(--_sonic-engraving) var(--_sonic-legend-glow);
@@ -190,14 +190,14 @@
190
190
  --_sonic-skirt: var(--_sonic-lit);
191
191
  --_sonic-face: var(--_sonic-lit);
192
192
  --_sonic-ink: HighlightText;
193
+ }
193
194
 
194
- &:disabled {
195
+ .sonic-segmented-option[aria-checked='true']:disabled {
195
196
  --_sonic-ink: ButtonFace;
196
197
  }
197
198
 
198
- & .sonic-segmented-cap > * {
199
+ .sonic-segmented-option[aria-checked='true'] .sonic-segmented-cap > * {
199
200
  filter: none;
200
201
  }
201
- }
202
202
  }
203
203
  }