@dorsk/tsumikit 0.73.2 → 0.75.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 +38 -1
- package/dist/autoresize.d.ts +2 -0
- package/dist/autoresize.js +8 -1
- package/dist/components/atoms/Artwork.svelte +12 -5
- package/dist/components/atoms/Avatar.svelte +1 -1
- package/dist/components/atoms/Badge.svelte +59 -23
- package/dist/components/atoms/Button.svelte +130 -96
- package/dist/components/atoms/Button.svelte.d.ts +2 -0
- package/dist/components/atoms/Card.svelte +10 -4
- package/dist/components/atoms/Checkbox.svelte +36 -9
- package/dist/components/atoms/Checkbox.svelte.d.ts +2 -0
- package/dist/components/atoms/Gauge.svelte +20 -14
- package/dist/components/atoms/Heading.svelte +1 -1
- package/dist/components/atoms/Icon.svelte +1 -0
- package/dist/components/atoms/Input.svelte +67 -13
- package/dist/components/atoms/Kbd.svelte +3 -3
- package/dist/components/atoms/Link.svelte +7 -2
- package/dist/components/atoms/Progress.svelte +12 -6
- package/dist/components/atoms/Scrim.svelte +3 -8
- package/dist/components/atoms/SegmentedProgress.svelte +5 -4
- package/dist/components/atoms/Select.svelte +58 -27
- package/dist/components/atoms/Skeleton.svelte +14 -8
- package/dist/components/atoms/Slider.svelte +79 -22
- package/dist/components/atoms/Slider.svelte.d.ts +2 -0
- package/dist/components/atoms/Spinner.svelte +464 -5
- package/dist/components/atoms/Spinner.svelte.d.ts +2 -0
- package/dist/components/atoms/Swatch.svelte +19 -8
- package/dist/components/atoms/Switch.svelte +34 -21
- package/dist/components/atoms/Switch.svelte.d.ts +2 -0
- package/dist/components/atoms/Text.svelte +1 -1
- package/dist/components/atoms/Textarea.svelte +34 -12
- package/dist/components/atoms/TimeDisplay.svelte +4 -2
- package/dist/components/layouts/AppShell.svelte +26 -15
- package/dist/components/layouts/MasterDetail.svelte +23 -21
- package/dist/components/layouts/NavBar.svelte +11 -8
- package/dist/components/layouts/NavItem.svelte +15 -7
- package/dist/components/layouts/NavSection.svelte +1 -1
- package/dist/components/layouts/ResizablePanel.svelte +37 -16
- package/dist/components/layouts/TabBar.svelte +24 -14
- package/dist/components/layouts/TabBar.svelte.d.ts +2 -0
- package/dist/components/molecules/Accordion.svelte +4 -0
- package/dist/components/molecules/Accordion.svelte.d.ts +2 -0
- package/dist/components/molecules/AttachmentList.svelte +14 -11
- package/dist/components/molecules/Breadcrumb.svelte +13 -9
- package/dist/components/molecules/Callout.svelte +3 -3
- package/dist/components/molecules/CapBar.svelte +23 -22
- package/dist/components/molecules/Carousel.svelte +27 -17
- package/dist/components/molecules/ChatBubble.svelte +2 -2
- package/dist/components/molecules/CodeBlock.svelte +2 -2
- package/dist/components/molecules/Combobox.svelte +30 -1
- package/dist/components/molecules/Combobox.svelte.d.ts +4 -0
- package/dist/components/molecules/Composer.svelte +2 -2
- package/dist/components/molecules/ConfirmModal.svelte +4 -0
- package/dist/components/molecules/ConfirmModal.svelte.d.ts +2 -0
- package/dist/components/molecules/CopyButton.svelte +46 -2
- package/dist/components/molecules/CopyButton.svelte.d.ts +2 -0
- package/dist/components/molecules/Disclosure.svelte +23 -12
- package/dist/components/molecules/Disclosure.svelte.d.ts +2 -0
- package/dist/components/molecules/Drawer.svelte +43 -23
- package/dist/components/molecules/Drawer.svelte.d.ts +2 -0
- package/dist/components/molecules/Dropzone.svelte +24 -8
- package/dist/components/molecules/EmojiPicker.svelte +27 -8
- package/dist/components/molecules/EmojiPicker.svelte.d.ts +2 -0
- package/dist/components/molecules/EmptyState.svelte +5 -5
- package/dist/components/molecules/Fieldset.svelte +8 -13
- package/dist/components/molecules/FileButton.svelte +57 -31
- package/dist/components/molecules/FileButton.svelte.d.ts +2 -0
- package/dist/components/molecules/FilterInput.svelte +51 -11
- package/dist/components/molecules/FontScalePicker.svelte +20 -9
- package/dist/components/molecules/GitRef.svelte +9 -7
- package/dist/components/molecules/GlyphStack.svelte +38 -14
- package/dist/components/molecules/IconButton.svelte +6 -3
- package/dist/components/molecules/IconButton.svelte.d.ts +2 -0
- package/dist/components/molecules/InputGroup.svelte +13 -12
- package/dist/components/molecules/LoadMore.svelte +6 -1
- package/dist/components/molecules/LoadMore.svelte.d.ts +2 -0
- package/dist/components/molecules/Menu.svelte +33 -7
- package/dist/components/molecules/Menu.svelte.d.ts +2 -0
- package/dist/components/molecules/Metric.svelte +11 -9
- package/dist/components/molecules/Modal.svelte +76 -26
- package/dist/components/molecules/Modal.svelte.d.ts +2 -0
- package/dist/components/molecules/OptionButton.svelte +28 -10
- package/dist/components/molecules/OptionButton.svelte.d.ts +2 -0
- package/dist/components/molecules/Pagination.svelte +26 -9
- package/dist/components/molecules/Pagination.svelte.d.ts +2 -0
- package/dist/components/molecules/Popover.svelte +107 -51
- package/dist/components/molecules/Popover.svelte.d.ts +2 -0
- package/dist/components/molecules/Prose.svelte +1 -1
- package/dist/components/molecules/PullToRefresh.svelte +14 -10
- package/dist/components/molecules/PullToRefresh.svelte.d.ts +2 -0
- package/dist/components/molecules/RadialMenu.svelte +52 -19
- package/dist/components/molecules/RadialMenu.svelte.d.ts +2 -0
- package/dist/components/molecules/RadioGroup.svelte +38 -23
- package/dist/components/molecules/RadioGroup.svelte.d.ts +2 -0
- package/dist/components/molecules/SectionHeader.svelte +13 -8
- package/dist/components/molecules/SeekSlider.svelte +38 -27
- package/dist/components/molecules/SeekSlider.svelte.d.ts +2 -0
- package/dist/components/molecules/SegmentedControl.svelte +139 -86
- package/dist/components/molecules/SegmentedControl.svelte.d.ts +2 -0
- package/dist/components/molecules/SelectButton.svelte +21 -6
- package/dist/components/molecules/SelectButton.svelte.d.ts +2 -0
- package/dist/components/molecules/SortableList.svelte +10 -11
- package/dist/components/molecules/SoundSettings.svelte +161 -0
- package/dist/components/molecules/SoundSettings.svelte.d.ts +17 -0
- package/dist/components/molecules/SplitButton.svelte +30 -3
- package/dist/components/molecules/SplitButton.svelte.d.ts +2 -0
- package/dist/components/molecules/SwipeRow.svelte +18 -15
- package/dist/components/molecules/SwipeRow.svelte.d.ts +2 -0
- package/dist/components/molecules/Tabs.svelte +92 -10
- package/dist/components/molecules/Tabs.svelte.d.ts +2 -0
- package/dist/components/molecules/ThemePicker.svelte +25 -10
- package/dist/components/molecules/Timestamp.svelte +12 -7
- package/dist/components/molecules/Toaster.svelte +65 -14
- package/dist/components/molecules/Toaster.svelte.d.ts +2 -0
- package/dist/components/molecules/Toggle.svelte +36 -13
- package/dist/components/molecules/Toggle.svelte.d.ts +2 -0
- package/dist/components/molecules/Tooltip.svelte +41 -10
- package/dist/components/molecules/Tooltip.svelte.d.ts +1 -1
- package/dist/components/molecules/VolumeSlider.svelte +34 -14
- package/dist/components/molecules/VolumeSlider.svelte.d.ts +2 -0
- package/dist/components/molecules/WorkingDir.svelte +1 -0
- package/dist/components/organisms/ConversationFeed.svelte +4 -0
- package/dist/components/organisms/DataTable.svelte +37 -14
- package/dist/floating.js +26 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -1
- package/dist/sound-synth.d.ts +3 -0
- package/dist/sound-synth.js +91 -0
- package/dist/sound.d.ts +1 -0
- package/dist/sound.js +3 -0
- package/dist/stores/sound.svelte.d.ts +20 -0
- package/dist/stores/sound.svelte.js +150 -0
- package/dist/stores/toast.svelte.d.ts +9 -0
- package/dist/stores/toast.svelte.js +45 -9
- package/dist/styles/reset.css +19 -2
- package/dist/styles/tokens.css +89 -6
- package/package.json +1 -1
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
<script lang="ts">
|
|
16
16
|
import type { Snippet } from 'svelte';
|
|
17
|
+
import { playSound } from '../../sound';
|
|
17
18
|
|
|
18
19
|
// Native <input type="radio"> sharing one `name`: the browser handles
|
|
19
20
|
// single-selection, arrow keys and form participation. `variant="rows"`
|
|
@@ -28,6 +29,7 @@
|
|
|
28
29
|
action,
|
|
29
30
|
below,
|
|
30
31
|
onfocuschange,
|
|
32
|
+
sound = true,
|
|
31
33
|
class: klass = ''
|
|
32
34
|
}: {
|
|
33
35
|
options: RadioOption[];
|
|
@@ -41,6 +43,8 @@
|
|
|
41
43
|
/** Fires once each time a different option becomes active — by keyboard
|
|
42
44
|
* focus or by pointer hover — so a consumer can drive a preview pane. */
|
|
43
45
|
onfocuschange?: (value: string) => void;
|
|
46
|
+
/** Play UI sounds when enabled globally; false silences this instance. */
|
|
47
|
+
sound?: boolean;
|
|
44
48
|
class?: string;
|
|
45
49
|
} = $props();
|
|
46
50
|
|
|
@@ -53,6 +57,7 @@
|
|
|
53
57
|
active = v;
|
|
54
58
|
onfocuschange?.(v);
|
|
55
59
|
}
|
|
60
|
+
const onchange = () => playSound('click', sound);
|
|
56
61
|
</script>
|
|
57
62
|
|
|
58
63
|
<div
|
|
@@ -76,6 +81,7 @@
|
|
|
76
81
|
aria-label={o.label}
|
|
77
82
|
aria-describedby={descId(o)}
|
|
78
83
|
onfocus={() => activate(o.value)}
|
|
84
|
+
{onchange}
|
|
79
85
|
/>
|
|
80
86
|
{#if o.description}<span class="sr-only" id={descId(o)}>{o.description}</span>{/if}
|
|
81
87
|
<span class="swatch-chip" aria-hidden="true" style="--swatch: {o.color ?? 'var(--accent)'}"></span>
|
|
@@ -92,6 +98,7 @@
|
|
|
92
98
|
disabled={o.disabled}
|
|
93
99
|
aria-describedby={descId(o)}
|
|
94
100
|
onfocus={() => activate(o.value)}
|
|
101
|
+
{onchange}
|
|
95
102
|
/>
|
|
96
103
|
<span class="dot-ctl" aria-hidden="true"></span>
|
|
97
104
|
<span class="texts">
|
|
@@ -117,6 +124,7 @@
|
|
|
117
124
|
disabled={o.disabled}
|
|
118
125
|
aria-describedby={descId(o)}
|
|
119
126
|
onfocus={() => activate(o.value)}
|
|
127
|
+
{onchange}
|
|
120
128
|
/>
|
|
121
129
|
<span class="dot-ctl" aria-hidden="true"></span>
|
|
122
130
|
<span class="texts">
|
|
@@ -149,7 +157,7 @@
|
|
|
149
157
|
}
|
|
150
158
|
.radio.disabled,
|
|
151
159
|
.row.disabled {
|
|
152
|
-
opacity:
|
|
160
|
+
opacity: var(--disabled-opacity);
|
|
153
161
|
}
|
|
154
162
|
input {
|
|
155
163
|
position: absolute;
|
|
@@ -161,40 +169,47 @@
|
|
|
161
169
|
.dot-ctl {
|
|
162
170
|
position: relative;
|
|
163
171
|
flex: none;
|
|
164
|
-
width:
|
|
165
|
-
height:
|
|
166
|
-
margin-top:
|
|
172
|
+
width: var(--chip-sm);
|
|
173
|
+
height: var(--chip-sm);
|
|
174
|
+
margin-top: var(--sp-px);
|
|
167
175
|
border: 1px solid var(--border-strong);
|
|
168
176
|
border-radius: var(--r-pill);
|
|
169
177
|
background: var(--bg);
|
|
170
|
-
transition: border-color
|
|
178
|
+
transition: border-color var(--dur-fast) var(--ease);
|
|
171
179
|
}
|
|
172
180
|
.dot-ctl::after {
|
|
173
181
|
content: '';
|
|
174
182
|
position: absolute;
|
|
175
|
-
inset:
|
|
176
|
-
width:
|
|
177
|
-
height:
|
|
178
|
-
margin:
|
|
183
|
+
inset: 0;
|
|
184
|
+
width: var(--sp-2);
|
|
185
|
+
height: var(--sp-2);
|
|
186
|
+
margin: auto;
|
|
179
187
|
border-radius: var(--r-pill);
|
|
180
188
|
background: var(--accent);
|
|
181
|
-
|
|
182
|
-
|
|
189
|
+
opacity: 0;
|
|
190
|
+
scale: 0.5;
|
|
191
|
+
transition:
|
|
192
|
+
opacity var(--dur-exit-fast) var(--ease-out),
|
|
193
|
+
scale var(--dur-exit-fast) var(--ease-out);
|
|
183
194
|
}
|
|
184
195
|
input:checked + .dot-ctl {
|
|
185
196
|
border-color: var(--accent);
|
|
186
197
|
}
|
|
187
198
|
input:checked + .dot-ctl::after {
|
|
188
|
-
|
|
199
|
+
opacity: 1;
|
|
200
|
+
scale: 1;
|
|
201
|
+
transition:
|
|
202
|
+
opacity var(--dur-spring) var(--ease-spring),
|
|
203
|
+
scale var(--dur-spring) var(--ease-spring);
|
|
189
204
|
}
|
|
190
205
|
input:focus-visible + .dot-ctl {
|
|
191
|
-
outline:
|
|
192
|
-
outline-offset:
|
|
206
|
+
outline: var(--focus-ring);
|
|
207
|
+
outline-offset: var(--focus-ring-offset);
|
|
193
208
|
}
|
|
194
209
|
.texts {
|
|
195
210
|
display: flex;
|
|
196
211
|
flex-direction: column;
|
|
197
|
-
gap:
|
|
212
|
+
gap: var(--sp-px);
|
|
198
213
|
min-width: 0;
|
|
199
214
|
}
|
|
200
215
|
.hint {
|
|
@@ -218,8 +233,8 @@
|
|
|
218
233
|
border: 1px solid var(--border);
|
|
219
234
|
border-radius: var(--r-md);
|
|
220
235
|
transition:
|
|
221
|
-
border-color
|
|
222
|
-
background-color
|
|
236
|
+
border-color var(--dur-fast) var(--ease),
|
|
237
|
+
background-color var(--dur-fast) var(--ease);
|
|
223
238
|
}
|
|
224
239
|
.row.selected {
|
|
225
240
|
border-color: var(--accent-dim);
|
|
@@ -240,7 +255,7 @@
|
|
|
240
255
|
min-width: 0;
|
|
241
256
|
}
|
|
242
257
|
.row .label-text {
|
|
243
|
-
font-weight:
|
|
258
|
+
font-weight: var(--fw-semibold);
|
|
244
259
|
}
|
|
245
260
|
.note {
|
|
246
261
|
font-size: var(--fs-xs);
|
|
@@ -287,17 +302,17 @@
|
|
|
287
302
|
cursor: pointer;
|
|
288
303
|
}
|
|
289
304
|
.swatch.disabled {
|
|
290
|
-
opacity:
|
|
305
|
+
opacity: var(--disabled-opacity);
|
|
291
306
|
cursor: not-allowed;
|
|
292
307
|
}
|
|
293
308
|
.swatch-chip {
|
|
294
|
-
width:
|
|
295
|
-
height:
|
|
309
|
+
width: var(--chip-md);
|
|
310
|
+
height: var(--chip-md);
|
|
296
311
|
border-radius: var(--r-pill);
|
|
297
312
|
background: var(--swatch);
|
|
298
313
|
border: 2px solid transparent;
|
|
299
314
|
box-shadow: 0 0 0 1px var(--border-strong);
|
|
300
|
-
transition: box-shadow
|
|
315
|
+
transition: box-shadow var(--dur-fast) var(--ease);
|
|
301
316
|
}
|
|
302
317
|
.swatch input:checked + .swatch-chip {
|
|
303
318
|
border-color: var(--bg);
|
|
@@ -305,6 +320,6 @@
|
|
|
305
320
|
}
|
|
306
321
|
.swatch input:focus-visible + .swatch-chip {
|
|
307
322
|
outline: var(--focus-ring);
|
|
308
|
-
outline-offset:
|
|
323
|
+
outline-offset: var(--focus-ring-offset);
|
|
309
324
|
}
|
|
310
325
|
</style>
|
|
@@ -22,6 +22,8 @@ type $$ComponentProps = {
|
|
|
22
22
|
/** Fires once each time a different option becomes active — by keyboard
|
|
23
23
|
* focus or by pointer hover — so a consumer can drive a preview pane. */
|
|
24
24
|
onfocuschange?: (value: string) => void;
|
|
25
|
+
/** Play UI sounds when enabled globally; false silences this instance. */
|
|
26
|
+
sound?: boolean;
|
|
25
27
|
class?: string;
|
|
26
28
|
};
|
|
27
29
|
declare const RadioGroup: import("svelte").Component<$$ComponentProps, {}, "value">;
|
|
@@ -86,6 +86,7 @@
|
|
|
86
86
|
class:sh-sticky={sticky}
|
|
87
87
|
class:sh-uppercase={uppercase}
|
|
88
88
|
class:sh-open={open}
|
|
89
|
+
class:sh-collapsible={collapsible}
|
|
89
90
|
{...rest}
|
|
90
91
|
>
|
|
91
92
|
<div class="sh-row">
|
|
@@ -221,7 +222,7 @@
|
|
|
221
222
|
display: inline-flex;
|
|
222
223
|
flex: none;
|
|
223
224
|
color: var(--sh-tone);
|
|
224
|
-
line-height:
|
|
225
|
+
line-height: var(--lh-none);
|
|
225
226
|
}
|
|
226
227
|
.sh-swatch {
|
|
227
228
|
flex: none;
|
|
@@ -263,23 +264,27 @@
|
|
|
263
264
|
border-radius: var(--r-sm);
|
|
264
265
|
}
|
|
265
266
|
.sh-toggle:focus-visible {
|
|
266
|
-
outline:
|
|
267
|
-
outline-offset:
|
|
267
|
+
outline: var(--focus-ring);
|
|
268
|
+
outline-offset: var(--focus-ring-offset);
|
|
268
269
|
}
|
|
269
270
|
.section-header :global(.sh-chevron) {
|
|
270
271
|
flex: none;
|
|
271
272
|
color: var(--text-muted);
|
|
272
|
-
transition:
|
|
273
|
+
transition: rotate var(--dur-base) var(--ease-out);
|
|
273
274
|
}
|
|
274
275
|
.sh-open :global(.sh-chevron) {
|
|
275
|
-
|
|
276
|
+
rotate: 90deg;
|
|
276
277
|
}
|
|
277
278
|
.sh-panel {
|
|
278
279
|
margin-top: var(--sp-3);
|
|
280
|
+
transition:
|
|
281
|
+
opacity var(--dur-base) var(--ease-out),
|
|
282
|
+
translate var(--dur-base) var(--ease-out);
|
|
279
283
|
}
|
|
280
|
-
@
|
|
281
|
-
.
|
|
282
|
-
|
|
284
|
+
@starting-style {
|
|
285
|
+
.sh-collapsible.sh-open .sh-panel {
|
|
286
|
+
opacity: 0;
|
|
287
|
+
translate: 0 calc(-1 * var(--shift-xs));
|
|
283
288
|
}
|
|
284
289
|
}
|
|
285
290
|
</style>
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import type { Snippet } from 'svelte';
|
|
8
8
|
import type { HTMLAttributes } from 'svelte/elements';
|
|
9
9
|
import { describeMediaTime, formatMediaTime, isLiveDuration } from '../../media-time';
|
|
10
|
+
import { playSound } from '../../sound';
|
|
10
11
|
|
|
11
12
|
type Own = {
|
|
12
13
|
/** Position in seconds. Updated only on commit, never while dragging. */
|
|
@@ -22,6 +23,8 @@
|
|
|
22
23
|
disabled?: boolean;
|
|
23
24
|
size?: 'sm' | 'md';
|
|
24
25
|
label?: string;
|
|
26
|
+
/** Play UI sounds when enabled globally; false silences this instance. */
|
|
27
|
+
sound?: boolean;
|
|
25
28
|
formatTime?: (seconds: number, ref?: number) => string;
|
|
26
29
|
/** Fired on every pointer move while scrubbing with the previewed time. */
|
|
27
30
|
oninput?: (seconds: number) => void;
|
|
@@ -44,6 +47,7 @@
|
|
|
44
47
|
disabled = false,
|
|
45
48
|
size = 'md',
|
|
46
49
|
label = 'Seek',
|
|
50
|
+
sound = true,
|
|
47
51
|
formatTime = formatMediaTime,
|
|
48
52
|
oninput,
|
|
49
53
|
onchange,
|
|
@@ -77,6 +81,7 @@
|
|
|
77
81
|
.filter(([a, b]) => b > a)
|
|
78
82
|
);
|
|
79
83
|
const valueText = $derived(describeMediaTime(shown, live ? null : duration, formatTime));
|
|
84
|
+
const discrete = $derived(duration > 0 && duration / step <= 20);
|
|
80
85
|
|
|
81
86
|
function fracAt(el: HTMLElement, clientX: number) {
|
|
82
87
|
const r = el.getBoundingClientRect();
|
|
@@ -125,6 +130,7 @@
|
|
|
125
130
|
const el = e.currentTarget as HTMLElement;
|
|
126
131
|
if (pointerId === e.pointerId) {
|
|
127
132
|
preview = fracAt(el, e.clientX) * duration;
|
|
133
|
+
if (discrete) playSound('tick', sound);
|
|
128
134
|
oninput?.(preview);
|
|
129
135
|
return;
|
|
130
136
|
}
|
|
@@ -182,6 +188,7 @@
|
|
|
182
188
|
}
|
|
183
189
|
if (next === null) return;
|
|
184
190
|
e.preventDefault();
|
|
191
|
+
playSound('tick', sound);
|
|
185
192
|
commit(next);
|
|
186
193
|
}
|
|
187
194
|
</script>
|
|
@@ -233,8 +240,9 @@
|
|
|
233
240
|
<style>
|
|
234
241
|
.seek {
|
|
235
242
|
--seek-track: 3px;
|
|
236
|
-
--seek-track-
|
|
243
|
+
--seek-track-grow: 1.6;
|
|
237
244
|
--seek-thumb: 12px;
|
|
245
|
+
--seek-halo: 0 0 0 4px color-mix(in srgb, var(--seek-accent) 20%, transparent);
|
|
238
246
|
--seek-slab: 1.25rem;
|
|
239
247
|
--seek-accent: var(--slider-accent, var(--accent));
|
|
240
248
|
position: relative;
|
|
@@ -249,7 +257,6 @@
|
|
|
249
257
|
}
|
|
250
258
|
.seek--md {
|
|
251
259
|
--seek-track: 4px;
|
|
252
|
-
--seek-track-active: 6px;
|
|
253
260
|
--seek-thumb: 14px;
|
|
254
261
|
--seek-slab: 1.5rem;
|
|
255
262
|
}
|
|
@@ -259,8 +266,8 @@
|
|
|
259
266
|
}
|
|
260
267
|
}
|
|
261
268
|
.seek--inert {
|
|
262
|
-
cursor:
|
|
263
|
-
opacity:
|
|
269
|
+
cursor: not-allowed;
|
|
270
|
+
opacity: var(--disabled-opacity);
|
|
264
271
|
}
|
|
265
272
|
.seek-track {
|
|
266
273
|
position: absolute;
|
|
@@ -271,19 +278,12 @@
|
|
|
271
278
|
border-radius: var(--r-pill);
|
|
272
279
|
background: var(--bg-elevated-2);
|
|
273
280
|
overflow: hidden;
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
margin-top 120ms var(--ease);
|
|
281
|
+
transform-origin: center;
|
|
282
|
+
transition: scale var(--dur-fast) var(--ease);
|
|
277
283
|
}
|
|
278
|
-
.seek:hover .seek-track,
|
|
279
284
|
.seek:focus-visible .seek-track,
|
|
280
285
|
.seek--dragging .seek-track {
|
|
281
|
-
|
|
282
|
-
margin-top: calc(var(--seek-track-active) / -2);
|
|
283
|
-
}
|
|
284
|
-
.seek--inert:hover .seek-track {
|
|
285
|
-
height: var(--seek-track);
|
|
286
|
-
margin-top: calc(var(--seek-track) / -2);
|
|
286
|
+
scale: 1 var(--seek-track-grow);
|
|
287
287
|
}
|
|
288
288
|
.seek-buffered,
|
|
289
289
|
.seek-played {
|
|
@@ -319,28 +319,45 @@
|
|
|
319
319
|
top: 0;
|
|
320
320
|
width: var(--seek-thumb);
|
|
321
321
|
height: var(--seek-thumb);
|
|
322
|
-
border-radius:
|
|
322
|
+
border-radius: var(--r-pill);
|
|
323
323
|
background: var(--seek-accent);
|
|
324
324
|
border: 2px solid var(--bg);
|
|
325
325
|
box-shadow: var(--shadow-sm);
|
|
326
|
-
transform: translate(-50%, -50%)
|
|
326
|
+
transform: translate(-50%, -50%);
|
|
327
|
+
scale: 0.6;
|
|
327
328
|
opacity: 0;
|
|
328
329
|
transition:
|
|
329
|
-
opacity
|
|
330
|
-
|
|
330
|
+
opacity var(--dur-fast) var(--ease),
|
|
331
|
+
scale var(--dur-press) var(--ease-out),
|
|
332
|
+
box-shadow var(--dur-fast) var(--ease);
|
|
331
333
|
}
|
|
332
|
-
.seek:hover .seek-thumb,
|
|
333
334
|
.seek:focus-visible .seek-thumb,
|
|
334
335
|
.seek--dragging .seek-thumb {
|
|
335
336
|
opacity: 1;
|
|
336
|
-
|
|
337
|
+
scale: 1;
|
|
338
|
+
}
|
|
339
|
+
.seek--dragging .seek-thumb {
|
|
340
|
+
scale: 1.15;
|
|
341
|
+
}
|
|
342
|
+
@media (hover: hover) and (pointer: fine) {
|
|
343
|
+
.seek:not(.seek--inert):hover .seek-track {
|
|
344
|
+
scale: 1 var(--seek-track-grow);
|
|
345
|
+
}
|
|
346
|
+
.seek:not(.seek--inert):hover .seek-thumb {
|
|
347
|
+
opacity: 1;
|
|
348
|
+
scale: 1;
|
|
349
|
+
box-shadow: var(--shadow-sm), var(--seek-halo);
|
|
350
|
+
}
|
|
351
|
+
.seek--dragging .seek-thumb {
|
|
352
|
+
scale: 1.15;
|
|
353
|
+
}
|
|
337
354
|
}
|
|
338
355
|
.seek--inert .seek-thumb {
|
|
339
356
|
opacity: 0;
|
|
340
357
|
}
|
|
341
358
|
.seek:focus-visible .seek-thumb {
|
|
342
359
|
outline: var(--focus-ring);
|
|
343
|
-
outline-offset:
|
|
360
|
+
outline-offset: var(--focus-ring-offset);
|
|
344
361
|
}
|
|
345
362
|
.seek-tip {
|
|
346
363
|
position: absolute;
|
|
@@ -361,10 +378,4 @@
|
|
|
361
378
|
font-variant-numeric: tabular-nums;
|
|
362
379
|
white-space: nowrap;
|
|
363
380
|
}
|
|
364
|
-
@media (prefers-reduced-motion: reduce) {
|
|
365
|
-
.seek-track,
|
|
366
|
-
.seek-thumb {
|
|
367
|
-
transition: none;
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
381
|
</style>
|
|
@@ -19,6 +19,8 @@ type Own = {
|
|
|
19
19
|
disabled?: boolean;
|
|
20
20
|
size?: 'sm' | 'md';
|
|
21
21
|
label?: string;
|
|
22
|
+
/** Play UI sounds when enabled globally; false silences this instance. */
|
|
23
|
+
sound?: boolean;
|
|
22
24
|
formatTime?: (seconds: number, ref?: number) => string;
|
|
23
25
|
/** Fired on every pointer move while scrubbing with the previewed time. */
|
|
24
26
|
oninput?: (seconds: number) => void;
|