@lucaismyname/ginger 0.0.10 → 0.0.12
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 +42 -6
- package/dist/client.cjs +1 -1
- package/dist/client.js +2 -2
- package/dist/components/controls/Controls.d.ts +12 -8
- package/dist/components/controls/Controls.d.ts.map +1 -1
- package/dist/components/controls/Controls.test.d.ts +2 -0
- package/dist/components/controls/Controls.test.d.ts.map +1 -0
- package/dist/components/current/Artwork.d.ts +3 -1
- package/dist/components/current/Artwork.d.ts.map +1 -1
- package/dist/components/current/Time.d.ts +6 -2
- package/dist/components/current/Time.d.ts.map +1 -1
- package/dist/components/current/texts.test.d.ts +2 -0
- package/dist/components/current/texts.test.d.ts.map +1 -0
- package/dist/components/playlist/GingerPlaylist.d.ts +6 -2
- package/dist/components/playlist/GingerPlaylist.d.ts.map +1 -1
- package/dist/components/queue/QueueDisplay.d.ts +3 -1
- package/dist/components/queue/QueueDisplay.d.ts.map +1 -1
- package/dist/context/GingerProvider.d.ts +1 -1
- package/dist/context/GingerProvider.d.ts.map +1 -1
- package/dist/context/GingerProvider.test.d.ts +2 -0
- package/dist/context/GingerProvider.test.d.ts.map +1 -0
- package/dist/core/playbackReducer.d.ts.map +1 -1
- package/dist/ginger-DYoHDn8T.cjs +2 -0
- package/dist/ginger-DYoHDn8T.cjs.map +1 -0
- package/dist/ginger-Dntdd6zH.js +1599 -0
- package/dist/ginger-Dntdd6zH.js.map +1 -0
- package/dist/hooks/useSeekDrag.d.ts +3 -0
- package/dist/hooks/useSeekDrag.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/internal/formatTime.test.d.ts +2 -0
- package/dist/internal/formatTime.test.d.ts.map +1 -0
- package/dist/internal/selectors.test.d.ts +2 -0
- package/dist/internal/selectors.test.d.ts.map +1 -0
- package/dist/media/useMediaSession.d.ts.map +1 -1
- package/dist/testing/index.cjs +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/testing/setup.d.ts +2 -0
- package/dist/testing/setup.d.ts.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/useSeekDrag-DBzoym0-.cjs +2 -0
- package/dist/useSeekDrag-DBzoym0-.cjs.map +1 -0
- package/dist/useSeekDrag-jLsYA-uG.js +174 -0
- package/dist/useSeekDrag-jLsYA-uG.js.map +1 -0
- package/dist/waveform/index.cjs +1 -1
- package/dist/waveform/index.cjs.map +1 -1
- package/dist/waveform/index.js +15 -13
- package/dist/waveform/index.js.map +1 -1
- package/dist/waveform/useAudioPeaks.d.ts.map +1 -1
- package/package.json +2 -1
- package/dist/ginger-B5wfhrC8.cjs +0 -2
- package/dist/ginger-B5wfhrC8.cjs.map +0 -1
- package/dist/ginger-Cg2cLsA6.js +0 -1547
- package/dist/ginger-Cg2cLsA6.js.map +0 -1
- package/dist/useSeekDrag-B0l3F1fL.js +0 -174
- package/dist/useSeekDrag-B0l3F1fL.js.map +0 -1
- package/dist/useSeekDrag-DmVvk2Pc.cjs +0 -2
- package/dist/useSeekDrag-DmVvk2Pc.cjs.map +0 -1
package/README.md
CHANGED
|
@@ -337,10 +337,19 @@ Props:
|
|
|
337
337
|
| `initialPlaylistMeta` | `PlaylistMeta \| null` | `null` | Queue/playlist metadata |
|
|
338
338
|
| `initialShuffle` | `boolean` | `false` | Start shuffled |
|
|
339
339
|
| `initialRepeatMode` | `"off" \| "all" \| "one"` | `"off"` | Initial repeat mode |
|
|
340
|
+
| `initialPlaybackMode` | `"playlist" \| "single"` | `"playlist"` | Playlist wraps/advances vs single-track stop behavior |
|
|
340
341
|
| `initialPaused` | `boolean` | `true` | Start paused or playing |
|
|
341
342
|
| `initialVolume` | `number` | `1` | Initial volume, clamped `0..1` |
|
|
342
343
|
| `initialMuted` | `boolean` | `false` | Initial muted state |
|
|
343
344
|
| `initialPlaybackRate` | `number` | `1` | Initial playback rate, clamped `0.25..4` |
|
|
345
|
+
| `initialStateKey` | `string \| number` | `undefined` | Re-dispatches `INIT` when this key changes |
|
|
346
|
+
| `mediaSession` | `boolean` | `false` | Enables Media Session lock-screen/OS controls |
|
|
347
|
+
| `beforePlay` | `() => boolean \| Promise<boolean>` | `undefined` | Policy hook run before playback starts |
|
|
348
|
+
| `onPlayBlocked` | `() => void` | `undefined` | Called when `beforePlay` returns `false` |
|
|
349
|
+
| `persistence` | `{ get(key): unknown; set(key, value): void }` | `undefined` | Adapter for persisted playback settings and resume state |
|
|
350
|
+
| `hydrateOnMount` | `boolean` | `false` | Hydrate persisted values into initial provider state |
|
|
351
|
+
| `resumeOnTrackChange` | `boolean` | `false` | Restore/save per-track playback position |
|
|
352
|
+
| `unstyled` | `boolean` | `false` | Skip provider default CSS variable/theme styles |
|
|
344
353
|
| `className` | `string` | `undefined` | Class for the provider wrapper |
|
|
345
354
|
| `style` | `CSSProperties` | `undefined` | Inline styles / CSS variables |
|
|
346
355
|
| `onTrackChange` | `(track, index) => void` | `undefined` | Fires when current track changes |
|
|
@@ -365,6 +374,7 @@ Props:
|
|
|
365
374
|
| `style` | `CSSProperties` | `undefined` | Optional inline styles |
|
|
366
375
|
| `preload` | `AudioHTMLAttributes["preload"]` | `"metadata"` | Native audio preload mode |
|
|
367
376
|
| `crossOrigin` | `AudioHTMLAttributes["crossOrigin"]` | `undefined` | Native cross-origin mode |
|
|
377
|
+
| `respectReducedMotion` | `boolean` | `false` | Uses lower time-update frequency when user prefers reduced motion |
|
|
368
378
|
|
|
369
379
|
### `useGinger()`
|
|
370
380
|
|
|
@@ -414,6 +424,7 @@ Returned values:
|
|
|
414
424
|
| `setRepeatMode`, `cycleRepeat` | Repeat controls |
|
|
415
425
|
| `toggleShuffle` | Toggle shuffle |
|
|
416
426
|
| `setQueue` | Replace the queue after mount |
|
|
427
|
+
| `insertTrackAt`, `removeTrackAt`, `moveTrack`, `enqueueNext` | Queue mutation actions |
|
|
417
428
|
| `playTrackAt`, `selectTrackAt` | Pick a track by index |
|
|
418
429
|
| `setPlaylistMeta` | Replace playlist metadata |
|
|
419
430
|
| `audioRef` | Ref to the underlying `HTMLAudioElement` |
|
|
@@ -432,8 +443,8 @@ Transport and media controls.
|
|
|
432
443
|
| `Ginger.Control.Next` | Go to next track | native button props |
|
|
433
444
|
| `Ginger.Control.Repeat` | Cycle repeat mode | native button props |
|
|
434
445
|
| `Ginger.Control.Shuffle` | Toggle shuffle on/off | native button props |
|
|
435
|
-
| `Ginger.Control.SeekBar` | Controlled range input for time | `inputStyle`, native input props |
|
|
436
|
-
| `Ginger.Control.Volume` | Controlled range input for volume `0..1` | `inputStyle`, native input props |
|
|
446
|
+
| `Ginger.Control.SeekBar` | Controlled range input for time | `unstyled`, `inputStyle`, native input props |
|
|
447
|
+
| `Ginger.Control.Volume` | Controlled range input for volume `0..1` | `unstyled`, `inputStyle`, native input props |
|
|
437
448
|
| `Ginger.Control.Mute` | Toggle mute on/off | `muteLabel`, `unmuteLabel`, native button props |
|
|
438
449
|
| `Ginger.Control.PlaybackRate` | Select input for playback speed | `rates`, native select props |
|
|
439
450
|
|
|
@@ -477,7 +488,7 @@ Other current-track components:
|
|
|
477
488
|
|
|
478
489
|
| Component | Description | Important props |
|
|
479
490
|
|-----------|-------------|-----------------|
|
|
480
|
-
| `Ginger.Current.Artwork` | Current track artwork or playlist artwork fallback | `imgStyle`, `sizes`, `loading`, `decoding`, `onError`, display-base props |
|
|
491
|
+
| `Ginger.Current.Artwork` | Current track artwork or playlist artwork fallback | `unstyled`, `imgStyle`, `sizes`, `loading`, `decoding`, `onError`, display-base props |
|
|
481
492
|
| `Ginger.Current.Lyrics` | Track lyrics | `preserveWhitespace`, render-prop `children` |
|
|
482
493
|
| `Ginger.Current.FileUrl` | Track `fileUrl`, hidden unless explicitly enabled | `visible`, display-base props |
|
|
483
494
|
| `Ginger.Current.QueueIndex` | Current queue index | `base`, render-prop `children` |
|
|
@@ -487,9 +498,10 @@ Other current-track components:
|
|
|
487
498
|
| `Ginger.Current.Duration` | Duration string | `format`, render-prop `children` |
|
|
488
499
|
| `Ginger.Current.Remaining` | Remaining time string | `format`, render-prop `children` |
|
|
489
500
|
| `Ginger.Current.Progress` | Progress as text or render-prop object | render-prop `children` |
|
|
490
|
-
| `Ginger.Current.TimeRail` | Simple visual progress rail | `height`, display-base props |
|
|
501
|
+
| `Ginger.Current.TimeRail` | Simple visual progress rail | `unstyled`, `height`, `showBuffered`, display-base props |
|
|
502
|
+
| `Ginger.Current.BufferRail` | Buffered-only rail | `unstyled`, `height`, display-base props |
|
|
491
503
|
| `Ginger.Current.PlaybackState` | Derived state label | render-prop `children` |
|
|
492
|
-
| `Ginger.Current.ErrorMessage` | Media error string | render-prop `children` |
|
|
504
|
+
| `Ginger.Current.ErrorMessage` | Media error string | `live`, render-prop `children` |
|
|
493
505
|
|
|
494
506
|
Example:
|
|
495
507
|
|
|
@@ -514,7 +526,7 @@ Displays queue or playlist metadata from `playlistMeta`.
|
|
|
514
526
|
| `Ginger.Queue.Copyright` | Playlist copyright |
|
|
515
527
|
| `Ginger.Queue.Artwork` | Playlist artwork |
|
|
516
528
|
|
|
517
|
-
These components follow the same fallback/empty behavior as other display components. `Ginger.Queue.Artwork`
|
|
529
|
+
These components follow the same fallback/empty behavior as other display components. `Ginger.Queue.Artwork` accepts `unstyled` and `imgStyle`.
|
|
518
530
|
|
|
519
531
|
### `Ginger.Playlist`
|
|
520
532
|
|
|
@@ -525,6 +537,7 @@ Props:
|
|
|
525
537
|
| Prop | Type | Default | Description |
|
|
526
538
|
|------|------|---------|-------------|
|
|
527
539
|
| `children` | `ReactNode` | `undefined` | Manual mode rows |
|
|
540
|
+
| `unstyled` | `boolean` | `false` | Remove default list/row styles for fully custom layout |
|
|
528
541
|
| `rowStyle` | `CSSProperties` | `undefined` | Auto-mode button style override |
|
|
529
542
|
| `renderTrack` | `(track, index, isActive) => ReactNode` | `undefined` | Auto-mode custom row content |
|
|
530
543
|
| `playOnSelect` | `boolean` | `true` | Click plays immediately if true |
|
|
@@ -557,6 +570,7 @@ Props:
|
|
|
557
570
|
| Prop | Type | Description |
|
|
558
571
|
|------|------|-------------|
|
|
559
572
|
| `index` | `number` | Queue index for the row |
|
|
573
|
+
| `unstyled` | `boolean` | Remove default row button styles |
|
|
560
574
|
| `liProps` | `LiHTMLAttributes<HTMLLIElement>` | Props for the wrapper `<li>` |
|
|
561
575
|
| `children` | `ReactNode` | Optional custom content |
|
|
562
576
|
| `...rest` | `ButtonHTMLAttributes<HTMLButtonElement>` | Props for the row button |
|
|
@@ -605,7 +619,10 @@ type Track = {
|
|
|
605
619
|
isrc?: string;
|
|
606
620
|
trackNumber?: number;
|
|
607
621
|
lyrics?: string;
|
|
622
|
+
lyricsTimed?: Array<{ time: number; text: string }>;
|
|
623
|
+
chapters?: Array<{ title: string; startSeconds: number }>;
|
|
608
624
|
durationSeconds?: number;
|
|
625
|
+
metadata?: Record<string, unknown>;
|
|
609
626
|
};
|
|
610
627
|
```
|
|
611
628
|
|
|
@@ -621,6 +638,7 @@ type PlaylistMeta = {
|
|
|
621
638
|
artworkUrl?: string;
|
|
622
639
|
copyright?: string;
|
|
623
640
|
description?: string;
|
|
641
|
+
metadata?: Record<string, unknown>;
|
|
624
642
|
};
|
|
625
643
|
```
|
|
626
644
|
|
|
@@ -669,6 +687,8 @@ Example:
|
|
|
669
687
|
|
|
670
688
|
- **Headless control bindings** (bind to your own components): **`useSeekBarBinding()`**, **`useVolumeSlider()`**, **`usePlayPauseBinding({ playAriaLabel?, pauseAriaLabel? })`**. Each returns props such as `value`, `min`, `max`, handlers, and `ariaLabel` / `ariaValueText` where relevant.
|
|
671
689
|
|
|
690
|
+
- **Advanced hooks** — **`useGingerKeyboardShortcuts()`**, **`useGingerSleepTimer()`**, **`useSeekDrag()`**, **`useGingerChapters()`**, **`useGingerLyricsSync()`**, and **`useGingerDebugLog()`** are available for custom UX and diagnostics.
|
|
691
|
+
|
|
672
692
|
- **Locale** — Pass **`locale={partialMessages}`** on `Ginger.Provider` (type **`GingerLocaleMessages`**) to translate built-in control strings; **`useGingerLocale()`** reads the merged messages anywhere under the provider.
|
|
673
693
|
|
|
674
694
|
- **Track extras** — Optional **`metadata?: Record<string, unknown>`** on **`Track`** (and on **`PlaylistMeta`**) is ignored by core logic; use it for badges, flags, or UI-only fields.
|
|
@@ -728,6 +748,8 @@ function Hotkeys() {
|
|
|
728
748
|
}
|
|
729
749
|
```
|
|
730
750
|
|
|
751
|
+
`mute` is optional; if omitted, no mute key binding is installed.
|
|
752
|
+
|
|
731
753
|
### Chapters and synced lyrics
|
|
732
754
|
|
|
733
755
|
```tsx
|
|
@@ -784,6 +806,20 @@ Provider supports `initialPlaybackMode?: "playlist" | "single"` (`"playlist"` de
|
|
|
784
806
|
|
|
785
807
|
- `Ginger.Player` supports `respectReducedMotion` to reduce time sync update frequency.
|
|
786
808
|
- `Ginger.Provider` supports `beforePlay?: () => boolean | Promise<boolean>` and `onPlayBlocked`.
|
|
809
|
+
- If `beforePlay` throws/rejects, Ginger sets `errorMessage` and triggers `onError`.
|
|
810
|
+
|
|
811
|
+
### Debug logging
|
|
812
|
+
|
|
813
|
+
Use `useGingerDebugLog(true)` during development to log core state transitions in the console.
|
|
814
|
+
|
|
815
|
+
### Fully unstyled mode
|
|
816
|
+
|
|
817
|
+
- `Ginger.Provider unstyled` disables provider theme defaults (CSS variable injection).
|
|
818
|
+
- `Ginger.Control.SeekBar` and `Ginger.Control.Volume` accept `unstyled`.
|
|
819
|
+
- `Ginger.Current.Artwork`, `Ginger.Queue.Artwork`, `Ginger.Current.TimeRail`, and `Ginger.Current.BufferRail` accept `unstyled`.
|
|
820
|
+
- `Ginger.Playlist` and `Ginger.Playlist.Track` accept `unstyled`.
|
|
821
|
+
|
|
822
|
+
This gives you a pure state+behavior layer while keeping convenience components available.
|
|
787
823
|
|
|
788
824
|
### Subpath exports
|
|
789
825
|
|
package/dist/client.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ginger-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ginger-DYoHDn8T.cjs"),r=require("./useSeekDrag-DBzoym0-.cjs"),i=require("./GingerSplitContexts-Bze1Bqe2.cjs");exports.Ginger=e.Ginger;exports.clampPlaybackRate=e.clampPlaybackRate;exports.clampVolume=e.clampVolume;exports.defaultGingerLocale=e.defaultGingerLocale;exports.derivePlaybackUiState=e.derivePlaybackUiState;exports.useGingerLocale=e.useGingerLocale;exports.usePlayPauseBinding=e.usePlayPauseBinding;exports.useSeekBarBinding=e.useSeekBarBinding;exports.useVolumeSlider=e.useVolumeSlider;exports.parseLrc=r.parseLrc;exports.useGinger=r.useGinger;exports.useGingerChapters=r.useGingerChapters;exports.useGingerDebugLog=r.useGingerDebugLog;exports.useGingerKeyboardShortcuts=r.useGingerKeyboardShortcuts;exports.useGingerLyricsSync=r.useGingerLyricsSync;exports.useGingerSleepTimer=r.useGingerSleepTimer;exports.useSeekDrag=r.useSeekDrag;exports.gingerStateFromContextValues=i.gingerStateFromContextValues;exports.gingerStateFromContexts=i.gingerStateFromContexts;exports.useGingerMedia=i.useGingerMedia;exports.useGingerPlayback=i.useGingerPlayback;exports.useGingerState=i.useGingerState;
|
|
2
2
|
//# sourceMappingURL=client.cjs.map
|
package/dist/client.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { G as s, c as r, a as i, d as u, b as g, u as n, e as t, f as o, g as c } from "./ginger-
|
|
2
|
-
import { p as G, u as m, a as S, b as d, c as p, d as b, e as y, f } from "./useSeekDrag-
|
|
1
|
+
import { G as s, c as r, a as i, d as u, b as g, u as n, e as t, f as o, g as c } from "./ginger-Dntdd6zH.js";
|
|
2
|
+
import { p as G, u as m, a as S, b as d, c as p, d as b, e as y, f } from "./useSeekDrag-jLsYA-uG.js";
|
|
3
3
|
import { g as x, a as L, u as P, b as B, c as C } from "./GingerSplitContexts-4YZ-OJ9V.js";
|
|
4
4
|
export {
|
|
5
5
|
s as Ginger,
|
|
@@ -8,41 +8,45 @@ export type PlayPauseProps = ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
|
8
8
|
/** Screen-reader label when playing (action would pause); defaults to match `pauseLabel` when it is a string */
|
|
9
9
|
pauseAriaLabel?: string;
|
|
10
10
|
};
|
|
11
|
-
export declare function PlayPause({ playLabel, pauseLabel, playAriaLabel, pauseAriaLabel, type, ...rest }: PlayPauseProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare function PlayPause({ playLabel, pauseLabel, playAriaLabel, pauseAriaLabel, type, onClick, ...rest }: PlayPauseProps): import("react/jsx-runtime").JSX.Element;
|
|
12
12
|
export declare namespace PlayPause {
|
|
13
13
|
var displayName: string;
|
|
14
14
|
}
|
|
15
15
|
export type RepeatProps = ButtonHTMLAttributes<HTMLButtonElement>;
|
|
16
|
-
export declare function Repeat({ type, ...rest }: RepeatProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export declare function Repeat({ type, onClick, ...rest }: RepeatProps): import("react/jsx-runtime").JSX.Element;
|
|
17
17
|
export declare namespace Repeat {
|
|
18
18
|
var displayName: string;
|
|
19
19
|
}
|
|
20
20
|
export type NextProps = ButtonHTMLAttributes<HTMLButtonElement>;
|
|
21
|
-
export declare function Next({ type, children, ...rest }: NextProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
export declare function Next({ type, children, onClick, ...rest }: NextProps): import("react/jsx-runtime").JSX.Element;
|
|
22
22
|
export declare namespace Next {
|
|
23
23
|
var displayName: string;
|
|
24
24
|
}
|
|
25
25
|
export type PreviousProps = ButtonHTMLAttributes<HTMLButtonElement>;
|
|
26
|
-
export declare function Previous({ type, children, ...rest }: PreviousProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export declare function Previous({ type, children, onClick, ...rest }: PreviousProps): import("react/jsx-runtime").JSX.Element;
|
|
27
27
|
export declare namespace Previous {
|
|
28
28
|
var displayName: string;
|
|
29
29
|
}
|
|
30
30
|
export type ShuffleProps = ButtonHTMLAttributes<HTMLButtonElement>;
|
|
31
|
-
export declare function Shuffle({ type, children, ...rest }: ShuffleProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export declare function Shuffle({ type, children, onClick, ...rest }: ShuffleProps): import("react/jsx-runtime").JSX.Element;
|
|
32
32
|
export declare namespace Shuffle {
|
|
33
33
|
var displayName: string;
|
|
34
34
|
}
|
|
35
35
|
export type SeekBarProps = Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "onChange" | "onInput" | "min" | "max" | "step"> & {
|
|
36
|
+
/** Remove default width style for fully custom styling. */
|
|
37
|
+
unstyled?: boolean;
|
|
36
38
|
inputStyle?: CSSProperties;
|
|
37
39
|
};
|
|
38
|
-
export declare function SeekBar({ inputStyle, style, ...rest }: SeekBarProps): import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
export declare function SeekBar({ inputStyle, style, unstyled, ...rest }: SeekBarProps): import("react/jsx-runtime").JSX.Element;
|
|
39
41
|
export declare namespace SeekBar {
|
|
40
42
|
var displayName: string;
|
|
41
43
|
}
|
|
42
44
|
export type VolumeProps = Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "onChange" | "onInput" | "min" | "max" | "step"> & {
|
|
45
|
+
/** Remove default width style for fully custom styling. */
|
|
46
|
+
unstyled?: boolean;
|
|
43
47
|
inputStyle?: CSSProperties;
|
|
44
48
|
};
|
|
45
|
-
export declare function Volume({ inputStyle, style, ...rest }: VolumeProps): import("react/jsx-runtime").JSX.Element;
|
|
49
|
+
export declare function Volume({ inputStyle, style, unstyled, ...rest }: VolumeProps): import("react/jsx-runtime").JSX.Element;
|
|
46
50
|
export declare namespace Volume {
|
|
47
51
|
var displayName: string;
|
|
48
52
|
}
|
|
@@ -50,7 +54,7 @@ export type MuteProps = ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
|
50
54
|
muteLabel?: ReactNode;
|
|
51
55
|
unmuteLabel?: ReactNode;
|
|
52
56
|
};
|
|
53
|
-
export declare function Mute({ muteLabel, unmuteLabel, type, ...rest }: MuteProps): import("react/jsx-runtime").JSX.Element;
|
|
57
|
+
export declare function Mute({ muteLabel, unmuteLabel, type, onClick, ...rest }: MuteProps): import("react/jsx-runtime").JSX.Element;
|
|
54
58
|
export declare namespace Mute {
|
|
55
59
|
var displayName: string;
|
|
56
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Controls.d.ts","sourceRoot":"","sources":["../../../src/components/controls/Controls.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACrB,MAAM,OAAO,CAAC;AAKf,MAAM,MAAM,cAAc,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IACrE,iEAAiE;IACjE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,+GAA+G;IAC/G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gHAAgH;IAChH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACxB,SAAkB,EAClB,UAAoB,EACpB,aAAa,EACb,cAAc,EACd,IAAe,EACf,GAAG,IAAI,EACR,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"Controls.d.ts","sourceRoot":"","sources":["../../../src/components/controls/Controls.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACrB,MAAM,OAAO,CAAC;AAKf,MAAM,MAAM,cAAc,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IACrE,iEAAiE;IACjE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,+GAA+G;IAC/G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gHAAgH;IAChH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACxB,SAAkB,EAClB,UAAoB,EACpB,aAAa,EACb,cAAc,EACd,IAAe,EACf,OAAO,EACP,GAAG,IAAI,EACR,EAAE,cAAc,2CAkBhB;yBA1Be,SAAS;;;AA8BzB,MAAM,MAAM,WAAW,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AAElE,wBAAgB,MAAM,CAAC,EAAE,IAAe,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,2CASxE;yBATe,MAAM;;;AAatB,MAAM,MAAM,SAAS,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AAChE,wBAAgB,IAAI,CAAC,EAAE,IAAe,EAAE,QAAiB,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,2CAQvF;yBARe,IAAI;;;AAWpB,MAAM,MAAM,aAAa,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AACpE,wBAAgB,QAAQ,CAAC,EAAE,IAAe,EAAE,QAAqB,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,aAAa,2CAQnG;yBARe,QAAQ;;;AAWxB,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AACnE,wBAAgB,OAAO,CAAC,EAAE,IAAe,EAAE,QAAoB,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,YAAY,2CAchG;yBAde,OAAO;;;AAiBvB,MAAM,MAAM,YAAY,GAAG,IAAI,CAC7B,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CACnE,GAAG;IACF,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B,CAAC;AAEF,wBAAgB,OAAO,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,QAAgB,EAAE,GAAG,IAAI,EAAE,EAAE,YAAY,2CAkBrF;yBAlBe,OAAO;;;AAsBvB,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CACnE,GAAG;IACF,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B,CAAC;AAEF,wBAAgB,MAAM,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,QAAgB,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,2CAkBnF;yBAlBe,MAAM;;;AAsBtB,MAAM,MAAM,SAAS,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAChE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB,CAAC;AAEF,wBAAgB,IAAI,CAAC,EACnB,SAAS,EACT,WAAW,EACX,IAAe,EACf,OAAO,EACP,GAAG,IAAI,EACR,EAAE,SAAS,2CAgBX;yBAtBe,IAAI;;;AA4BpB,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IACpG,gDAAgD;IAChD,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAAE,KAAoB,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,iBAAiB,2CAsBvF;yBAtBe,YAAY"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Controls.test.d.ts","sourceRoot":"","sources":["../../../src/components/controls/Controls.test.tsx"],"names":[],"mappings":""}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { CSSProperties, ImgHTMLAttributes } from 'react';
|
|
2
2
|
import { DisplayBaseProps } from '../../types';
|
|
3
3
|
export type ArtworkProps = DisplayBaseProps & Pick<ImgHTMLAttributes<HTMLImageElement>, "sizes" | "loading" | "onError" | "decoding"> & {
|
|
4
|
+
/** Remove default wrapper/image styles for fully custom layout. */
|
|
5
|
+
unstyled?: boolean;
|
|
4
6
|
imgStyle?: CSSProperties;
|
|
5
7
|
};
|
|
6
|
-
export declare function Artwork({ className, style, fallback, empty, sizes, loading, onError, decoding, imgStyle }: ArtworkProps): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
export declare function Artwork({ className, style, fallback, empty, sizes, loading, onError, decoding, unstyled, imgStyle, }: ArtworkProps): import("react/jsx-runtime").JSX.Element | null;
|
|
7
9
|
export declare namespace Artwork {
|
|
8
10
|
var displayName: string;
|
|
9
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Artwork.d.ts","sourceRoot":"","sources":["../../../src/components/current/Artwork.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,MAAM,MAAM,YAAY,GAAG,gBAAgB,GACzC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC,GAAG;IACxF,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEJ,wBAAgB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"Artwork.d.ts","sourceRoot":"","sources":["../../../src/components/current/Artwork.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,MAAM,MAAM,YAAY,GAAG,gBAAgB,GACzC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC,GAAG;IACxF,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEJ,wBAAgB,OAAO,CAAC,EACtB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,QAAQ,EACR,QAAgB,EAChB,QAAQ,GACT,EAAE,YAAY,kDAwCd;yBAnDe,OAAO"}
|
|
@@ -32,16 +32,20 @@ export type TimeRailProps = DisplayBaseProps & {
|
|
|
32
32
|
height?: number;
|
|
33
33
|
/** When true, shows a buffered range behind the progress fill (uses `bufferedFraction`). */
|
|
34
34
|
showBuffered?: boolean;
|
|
35
|
+
/** Remove default rail styles and render only inline width values. */
|
|
36
|
+
unstyled?: boolean;
|
|
35
37
|
};
|
|
36
|
-
export declare function TimeRail({ className, style, height, showBuffered }: TimeRailProps): import("react/jsx-runtime").JSX.Element;
|
|
38
|
+
export declare function TimeRail({ className, style, height, showBuffered, unstyled, }: TimeRailProps): import("react/jsx-runtime").JSX.Element;
|
|
37
39
|
export declare namespace TimeRail {
|
|
38
40
|
var displayName: string;
|
|
39
41
|
}
|
|
40
42
|
export type BufferRailProps = DisplayBaseProps & {
|
|
41
43
|
height?: number;
|
|
44
|
+
/** Remove default rail styles and render only buffered width value. */
|
|
45
|
+
unstyled?: boolean;
|
|
42
46
|
};
|
|
43
47
|
/** Buffered portion of the timeline (0…`bufferedFraction`); pair with `TimeRail` or use alone. */
|
|
44
|
-
export declare function BufferRail({ className, style, height }: BufferRailProps): import("react/jsx-runtime").JSX.Element;
|
|
48
|
+
export declare function BufferRail({ className, style, height, unstyled }: BufferRailProps): import("react/jsx-runtime").JSX.Element;
|
|
45
49
|
export declare namespace BufferRail {
|
|
46
50
|
var displayName: string;
|
|
47
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Time.d.ts","sourceRoot":"","sources":["../../../src/components/current/Time.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAKjE,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAC7C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;CAC7D,CAAC;AAqBF,wBAAgB,OAAO,CAAC,KAAK,EAAE,aAAa,iFAG3C;yBAHe,OAAO;;;AAOvB,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,iFAG5C;yBAHe,QAAQ;;;AAOxB,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,iFAG7C;yBAHe,SAAS;;;AAOzB,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAC7C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;CAClH,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,aAAa,kDAmBtF;yBAnBe,QAAQ;;;AAuBxB,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAC7C,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4FAA4F;IAC5F,YAAY,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Time.d.ts","sourceRoot":"","sources":["../../../src/components/current/Time.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAKjE,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAC7C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;CAC7D,CAAC;AAqBF,wBAAgB,OAAO,CAAC,KAAK,EAAE,aAAa,iFAG3C;yBAHe,OAAO;;;AAOvB,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,iFAG5C;yBAHe,QAAQ;;;AAOxB,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,iFAG7C;yBAHe,SAAS;;;AAOzB,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAC7C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;CAClH,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,aAAa,kDAmBtF;yBAnBe,QAAQ;;;AAuBxB,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAC7C,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4FAA4F;IAC5F,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,KAAK,EACL,MAAU,EACV,YAAoB,EACpB,QAAgB,GACjB,EAAE,aAAa,2CA4Cf;yBAlDe,QAAQ;;;AAsDxB,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,kGAAkG;AAClG,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAU,EAAE,QAAgB,EAAE,EAAE,eAAe,2CA6B7F;yBA7Be,UAAU"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texts.test.d.ts","sourceRoot":"","sources":["../../../src/components/current/texts.test.tsx"],"names":[],"mappings":""}
|
|
@@ -5,6 +5,8 @@ export type GingerPlaylistConfig = {
|
|
|
5
5
|
};
|
|
6
6
|
export type GingerPlaylistProps = Omit<HTMLAttributes<HTMLUListElement>, "children"> & {
|
|
7
7
|
children?: ReactNode;
|
|
8
|
+
/** Remove default list/row styles for fully custom playlist styling. */
|
|
9
|
+
unstyled?: boolean;
|
|
8
10
|
rowStyle?: CSSProperties;
|
|
9
11
|
/**
|
|
10
12
|
* Used only in **auto** mode (no custom `children`). Ignored when you pass custom `children`
|
|
@@ -19,16 +21,18 @@ export type GingerPlaylistProps = Omit<HTMLAttributes<HTMLUListElement>, "childr
|
|
|
19
21
|
* - **Manual mode** (`children` defined): renders `<ul>{children}</ul>`; map `state.tracks` yourself
|
|
20
22
|
* with `Ginger.Playlist.Track` for each index.
|
|
21
23
|
*/
|
|
22
|
-
export declare function GingerPlaylist({ children, rowStyle, renderTrack, playOnSelect, style, ...rest }: GingerPlaylistProps): import("react/jsx-runtime").JSX.Element;
|
|
24
|
+
export declare function GingerPlaylist({ children, unstyled, rowStyle, renderTrack, playOnSelect, style, ...rest }: GingerPlaylistProps): import("react/jsx-runtime").JSX.Element;
|
|
23
25
|
export declare namespace GingerPlaylist {
|
|
24
26
|
var displayName: string;
|
|
25
27
|
}
|
|
26
28
|
export type GingerPlaylistTrackProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "type"> & {
|
|
27
29
|
index: number;
|
|
30
|
+
/** Remove default row button styles for fully custom styling. */
|
|
31
|
+
unstyled?: boolean;
|
|
28
32
|
/** Optional wrapper for the row; defaults to a plain `<li>` */
|
|
29
33
|
liProps?: LiHTMLAttributes<HTMLLIElement>;
|
|
30
34
|
};
|
|
31
|
-
export declare function GingerPlaylistTrack({ index, className, style, children, liProps, onClick, ...buttonRest }: GingerPlaylistTrackProps): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
export declare function GingerPlaylistTrack({ index, unstyled, className, style, children, liProps, onClick, ...buttonRest }: GingerPlaylistTrackProps): import("react/jsx-runtime").JSX.Element;
|
|
32
36
|
export declare namespace GingerPlaylistTrack {
|
|
33
37
|
var displayName: string;
|
|
34
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GingerPlaylist.d.ts","sourceRoot":"","sources":["../../../src/components/playlist/GingerPlaylist.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAYF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,GAAG;IACrF,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,SAAS,CAAC;IAC5E,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,YAAmB,EACnB,KAAK,EACL,GAAG,IAAI,EACR,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"GingerPlaylist.d.ts","sourceRoot":"","sources":["../../../src/components/playlist/GingerPlaylist.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAYF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,GAAG;IACrF,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,SAAS,CAAC;IAC5E,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,QAAgB,EAChB,QAAQ,EACR,WAAW,EACX,YAAmB,EACnB,KAAK,EACL,GAAG,IAAI,EACR,EAAE,mBAAmB,2CAuErB;yBA/Ee,cAAc;;;AAmF9B,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,GAAG;IAC7F,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;CAC3C,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAgB,EAChB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,OAAO,EACP,OAAO,EACP,GAAG,UAAU,EACd,EAAE,wBAAwB,2CA+C1B;yBAxDe,mBAAmB;;;AA4DnC,eAAO,MAAM,sBAAsB;;CAEjC,CAAC"}
|
|
@@ -5,9 +5,11 @@ export declare const Subtitle: (props: import('../current/createTextDisplay').Te
|
|
|
5
5
|
export declare const Description: (props: import('../current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
6
6
|
export declare const Copyright: (props: import('../current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
7
7
|
export type QueueArtworkProps = DisplayBaseProps & {
|
|
8
|
+
/** Remove default wrapper/image styles for fully custom layout. */
|
|
9
|
+
unstyled?: boolean;
|
|
8
10
|
imgStyle?: CSSProperties;
|
|
9
11
|
};
|
|
10
|
-
export declare function Artwork({ className, style, fallback, empty, imgStyle }: QueueArtworkProps): import("react/jsx-runtime").JSX.Element | null;
|
|
12
|
+
export declare function Artwork({ className, style, fallback, empty, unstyled, imgStyle }: QueueArtworkProps): import("react/jsx-runtime").JSX.Element | null;
|
|
11
13
|
export declare namespace Artwork {
|
|
12
14
|
var displayName: string;
|
|
13
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueueDisplay.d.ts","sourceRoot":"","sources":["../../../src/components/queue/QueueDisplay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,eAAO,MAAM,KAAK,yGAAwE,CAAC;AAC3F,eAAO,MAAM,QAAQ,yGAA8E,CAAC;AACpG,eAAO,MAAM,WAAW,yGAAoF,CAAC;AAC7G,eAAO,MAAM,SAAS,yGAAgF,CAAC;AAEvG,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG;IACjD,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"QueueDisplay.d.ts","sourceRoot":"","sources":["../../../src/components/queue/QueueDisplay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,eAAO,MAAM,KAAK,yGAAwE,CAAC;AAC3F,eAAO,MAAM,QAAQ,yGAA8E,CAAC;AACpG,eAAO,MAAM,WAAW,yGAAoF,CAAC;AAC7G,eAAO,MAAM,SAAS,yGAAgF,CAAC;AAEvG,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG;IACjD,mEAAmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAgB,EAAE,QAAQ,EAAE,EAAE,iBAAiB,kDAoC3G;yBApCe,OAAO"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { GingerProviderProps } from '../types';
|
|
2
|
-
export declare function GingerProvider({ children, initialTracks, initialIndex, initialPlaylistMeta, initialShuffle, initialRepeatMode, initialPlaybackMode, initialPaused, initialVolume, initialMuted, initialPlaybackRate, initialStateKey, locale, mediaSession, beforePlay, onPlayBlocked, persistence, hydrateOnMount, resumeOnTrackChange, className, style, onTrackChange, onPlay, onPause, onQueueEnd, onError, }: GingerProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare function GingerProvider({ children, initialTracks, initialIndex, initialPlaylistMeta, initialShuffle, initialRepeatMode, initialPlaybackMode, initialPaused, initialVolume, initialMuted, initialPlaybackRate, initialStateKey, locale, mediaSession, beforePlay, onPlayBlocked, persistence, hydrateOnMount, resumeOnTrackChange, unstyled, className, style, onTrackChange, onPlay, onPause, onQueueEnd, onError, }: GingerProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=GingerProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GingerProvider.d.ts","sourceRoot":"","sources":["../../src/context/GingerProvider.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAqB,mBAAmB,EAAmC,MAAM,UAAU,CAAC;AAmBxG,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,aAAkB,EAClB,YAAgB,EAChB,mBAA0B,EAC1B,cAAsB,EACtB,iBAAyB,EACzB,mBAAgC,EAChC,aAAoB,EACpB,aAAiB,EACjB,YAAoB,EACpB,mBAAuB,EACvB,eAAe,EACf,MAAM,EACN,YAAoB,EACpB,UAAU,EACV,aAAa,EACb,WAAW,EACX,cAAsB,EACtB,mBAA2B,EAC3B,SAAS,EACT,KAAK,EACL,aAAa,EACb,MAAM,EACN,OAAO,EACP,UAAU,EACV,OAAO,GACR,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"GingerProvider.d.ts","sourceRoot":"","sources":["../../src/context/GingerProvider.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAqB,mBAAmB,EAAmC,MAAM,UAAU,CAAC;AAmBxG,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,aAAkB,EAClB,YAAgB,EAChB,mBAA0B,EAC1B,cAAsB,EACtB,iBAAyB,EACzB,mBAAgC,EAChC,aAAoB,EACpB,aAAiB,EACjB,YAAoB,EACpB,mBAAuB,EACvB,eAAe,EACf,MAAM,EACN,YAAoB,EACpB,UAAU,EACV,aAAa,EACb,WAAW,EACX,cAAsB,EACtB,mBAA2B,EAC3B,QAAgB,EAChB,SAAS,EACT,KAAK,EACL,aAAa,EACb,MAAM,EACN,OAAO,EACP,UAAU,EACV,OAAO,GACR,EAAE,mBAAmB,2CAufrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GingerProvider.test.d.ts","sourceRoot":"","sources":["../../src/context/GingerProvider.test.tsx"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playbackReducer.d.ts","sourceRoot":"","sources":["../../src/core/playbackReducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAY7E,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGnD;AAkBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,WAAW,CA0Bd;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"playbackReducer.d.ts","sourceRoot":"","sources":["../../src/core/playbackReducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAY7E,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGnD;AAkBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,WAAW,CA0Bd;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,WAAW,CAoOnF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const c=require("react/jsx-runtime"),d=require("react"),h=require("./GingerSplitContexts-Bze1Bqe2.cjs"),je=d.createContext(null);function Er(){const e=d.useContext(je);if(!e)throw new Error("Ginger components must be used within <Ginger.Provider>");return e}function Ce(e){const{buffered:r,duration:n}=e;return!(n>0)||r.length===0?0:Math.min(1,r.end(r.length-1)/n)}function Ir({className:e,style:r,preload:n="metadata",crossOrigin:t,respectReducedMotion:a=!1}){var M;const{audioRef:u,dispatch:o,state:i,notifyEnded:l}=Er(),p=((M=i.tracks[i.currentIndex])==null?void 0:M.fileUrl)??"",m=d.useRef({currentTime:-1,duration:-1,bufferedFraction:-1}),[b,T]=d.useState(!1);d.useEffect(()=>{if(!a||typeof window>"u")return;const g=window.matchMedia("(prefers-reduced-motion: reduce)"),y=()=>T(g.matches);return y(),g.addEventListener("change",y),()=>g.removeEventListener("change",y)},[a]);const E=(g,y=!1)=>{const R={currentTime:g.currentTime,duration:g.duration,bufferedFraction:Ce(g)},P=m.current,H=b?.5:.25,ke=Math.abs(R.currentTime-P.currentTime)>=H||Math.abs(R.duration-P.duration)>=.01||Math.abs(R.bufferedFraction-P.bufferedFraction)>=.01;!y&&!ke||(m.current=R,o({type:"MEDIA_TIME_UPDATE",payload:R}))};return d.useEffect(()=>{const g=u.current;g&&(g.volume=i.volume,g.muted=i.muted,g.playbackRate=i.playbackRate)},[u,i.volume,i.muted,i.playbackRate]),d.useEffect(()=>{const g=u.current;if(g){if(!p){g.removeAttribute("src"),m.current={currentTime:-1,duration:-1,bufferedFraction:-1};return}g.getAttribute("src")!==p&&(g.src=p,g.load(),m.current={currentTime:-1,duration:-1,bufferedFraction:-1})}},[u,i.currentIndex,i.tracks,p]),c.jsx("audio",{ref:u,className:e,style:r,preload:n,crossOrigin:t,controls:!1,playsInline:!0,onTimeUpdate:g=>{E(g.currentTarget)},onLoadedMetadata:g=>{const y=g.currentTarget;m.current={currentTime:-1,duration:-1,bufferedFraction:-1},o({type:"MEDIA_LOADED_METADATA",payload:{duration:y.duration,bufferedFraction:Ce(y)}})},onSeeking:g=>E(g.currentTarget,!0),onSeeked:g=>E(g.currentTarget,!0),onEnded:()=>l(),onPlay:()=>o({type:"MEDIA_PLAY"}),onPause:()=>o({type:"MEDIA_PAUSE"}),onWaiting:()=>o({type:"MEDIA_WAITING"}),onCanPlay:()=>o({type:"MEDIA_CANPLAY"}),onProgress:g=>E(g.currentTarget,!0),onVolumeChange:g=>{const y=g.currentTarget;o({type:"MEDIA_VOLUME_SYNC",payload:{volume:y.volume,muted:y.muted}})},onError:()=>{var P;const g=u.current,y=(P=g==null?void 0:g.error)==null?void 0:P.code;o({type:"MEDIA_ERROR",payload:{message:y===1?"MEDIA_ERR_ABORTED":y===2?"MEDIA_ERR_NETWORK":y===3?"MEDIA_ERR_DECODE":y===4?"MEDIA_ERR_SRC_NOT_SUPPORTED":"MEDIA_ERR_UNKNOWN"}})}})}function I(e,r){return r<=0?0:Math.max(0,Math.min(r-1,e))}function _e(e,r){if(e.length<=1)return[...e];const n=e[r];if(!n)return[...e];const t=e.filter((a,u)=>u!==r);for(let a=t.length-1;a>0;a--){const u=Math.floor(Math.random()*(a+1));[t[a],t[u]]=[t[u],t[a]]}return[n,...t]}function Y(e){return e?e.id!=null&&e.id!==""?`id:${e.id}`:`file:${e.fileUrl}`:""}function Pr(e,r){const n=Y(r);if(!n)return 0;const t=e.findIndex(a=>Y(a)===n);return t===-1?0:t}function Ne(e,r,n){const t=[...e],a=Math.max(0,Math.min(t.length,n??t.length));return t.splice(a,0,r),t}function Sr(e,r){if(r<0||r>=e.length)return[...e];const n=[...e];return n.splice(r,1),n}function Ar(e,r,n){if(r===n||r<0||r>=e.length||n<0||n>=e.length)return[...e];const t=[...e],[a]=t.splice(r,1);return a?(t.splice(n,0,a),t):[...e]}function Rr(e,r,n){return Ne(e,n,Math.max(0,Math.min(e.length,r+1)))}function Gr(e){const{tracks:r,currentIndex:n,repeatMode:t,playbackMode:a}=e,u=r.length;return u===0?{kind:"stop",nextIndex:0}:t==="one"?{kind:"replay_same"}:a==="single"?{kind:"stop",nextIndex:I(n,u)}:n<u-1?{kind:"advance",nextIndex:n+1}:t==="all"?{kind:"wrap",nextIndex:0}:{kind:"stop",nextIndex:I(n,u)}}function Cr(e){const{tracks:r,currentIndex:n,repeatMode:t,playbackMode:a}=e,u=r.length;return u===0?0:a==="single"?I(n,u):n<u-1?n+1:t==="all"?0:I(n,u)}function jr(e){const{tracks:r,currentIndex:n,repeatMode:t,playbackMode:a}=e,u=r.length;return u===0?0:a==="single"?I(n,u):n>0?n-1:t==="all"?u-1:0}function _r(e){return e==="off"?"all":e==="all"?"one":"off"}function Nr(e,r){return(e==null?void 0:e.artworkUrl)??r??void 0}function wr(e,r){return(e==null?void 0:e.album)??r??void 0}function C(e){return e.tracks[e.currentIndex]??null}function Ie(e){return e.errorMessage?"error":e.tracks.length===0?"idle":e.isBuffering?"loading":e.isPaused?Number.isFinite(e.duration)&&e.duration>0&&e.currentTime>=e.duration-.05?"ended":"paused":"playing"}function B(e){var t;const r=e.duration;if(Number.isFinite(r)&&r>0)return r;const n=(t=e.tracks[e.currentIndex])==null?void 0:t.durationSeconds;return typeof n=="number"&&Number.isFinite(n)&&n>0?n:0}function we(e){const n=B(e)-e.currentTime;return Number.isFinite(n)?Math.max(0,n):0}function Pe(e){const r=B(e);return r>0?Math.min(1,Math.max(0,e.currentTime/r)):0}function De(e){var n;const r=C(e);return Nr(r,(n=e.playlistMeta)==null?void 0:n.artworkUrl)}function Le(e){var n;const r=C(e);return wr(r,(n=e.playlistMeta)==null?void 0:n.subtitle)}function L(e,r){function n(t){const a=h.useGingerState(),o=(r(a)??"").trim(),{className:i,style:l,fallback:p,empty:m,children:b}=t;if(!o){const T=m??p??null;return T?c.jsx("span",{className:i,style:l,children:T}):null}return b?c.jsx("span",{className:i,style:l,children:b(o,a)}):c.jsx("span",{className:i,style:l,children:o})}return n.displayName=e,n}function F(e,r){return L(e,n=>r(C(n)))}const Dr=F("Ginger.Current.Title",e=>e==null?void 0:e.title),Lr=F("Ginger.Current.Artist",e=>e==null?void 0:e.artist),Fr=L("Ginger.Current.Album",e=>Le(e)),Ur=F("Ginger.Current.Description",e=>e==null?void 0:e.description),Vr=L("Ginger.Current.Copyright",e=>{var n;const r=C(e);return(r==null?void 0:r.copyright)??((n=e.playlistMeta)==null?void 0:n.copyright)}),Br=F("Ginger.Current.Genre",e=>e==null?void 0:e.genre),$r=F("Ginger.Current.Label",e=>e==null?void 0:e.label),Or=F("Ginger.Current.Isrc",e=>e==null?void 0:e.isrc),Yr=F("Ginger.Current.TrackNumber",e=>(e==null?void 0:e.trackNumber)!=null?String(e.trackNumber):void 0);function Fe({className:e,style:r,fallback:n,empty:t,children:a,format:u}){var p;const o=h.useGingerState(),i=(p=C(o))==null?void 0:p.year;if(typeof i!="number"||!Number.isFinite(i)){const m=t??n??null;return m?c.jsx("span",{className:e,style:r,children:m}):null}const l=u?u(i):String(i);return a?c.jsx("span",{className:e,style:r,children:a(l,o)}):c.jsx("span",{className:e,style:r,children:l})}Fe.displayName="Ginger.Current.Year";function Ue({className:e,style:r,fallback:n,empty:t,children:a,preserveWhitespace:u=!0}){var m;const o=h.useGingerState(),i=((m=C(o))==null?void 0:m.lyrics)??"",l=u?i.replace(/^\s+|\s+$/g,""):i.trim();if(!l){const b=t??n??null;return b?c.jsx("span",{className:e,style:r,children:b}):null}const p=u?{whiteSpace:"pre-wrap"}:void 0;return a?c.jsx("span",{className:e,style:{...p,...r},children:a(l,o)}):c.jsx("span",{className:e,style:{...p,...r},children:l})}Ue.displayName="Ginger.Current.Lyrics";function Ve({visible:e=!1,className:r,style:n,fallback:t,empty:a,children:u}){var l;const o=h.useGingerState();if(!e)return null;const i=((l=C(o))==null?void 0:l.fileUrl)??"";if(!i){const p=a??t??null;return p?c.jsx("span",{className:r,style:n,children:p}):null}return u?c.jsx("span",{className:r,style:n,children:u(i,o)}):c.jsx("span",{className:r,style:n,children:i})}Ve.displayName="Ginger.Current.FileUrl";function Be({className:e,style:r,fallback:n,empty:t,sizes:a,loading:u,onError:o,decoding:i,unstyled:l=!1,imgStyle:p}){const m=h.useGingerState(),b=C(m),T=De(m);if(!T){const M=t??n??null;return M?c.jsx("span",{className:e,style:r,children:M}):null}const E=[b==null?void 0:b.title,b==null?void 0:b.artist].filter(Boolean).join(" — ")||"Artwork";return c.jsx("div",{className:e,style:l?{...r}:{background:"var(--ginger-artwork-bg, transparent)",borderRadius:"var(--ginger-artwork-radius, 0)",overflow:"hidden",...r},children:c.jsx("img",{src:T,alt:E,sizes:a,loading:u,decoding:i,onError:o,style:{display:l?void 0:"block",width:l?void 0:"100%",height:l?void 0:"100%",objectFit:l?void 0:"cover",...p}})})}Be.displayName="Ginger.Current.Artwork";function $e({base:e=0,className:r,style:n,fallback:t,empty:a,children:u}){const o=h.useGingerState();if(o.tracks.length===0){const p=a??t??null;return p?c.jsx("span",{className:r,style:n,children:p}):null}const l=String(o.currentIndex+e);return u?c.jsx("span",{className:r,style:n,children:u(l,o)}):c.jsx("span",{className:r,style:n,children:l})}$e.displayName="Ginger.Current.QueueIndex";function Oe({className:e,style:r,fallback:n,empty:t,children:a}){const u=h.useGingerState(),o=String(u.tracks.length);if(u.tracks.length===0){const i=t??n??null;return i?c.jsx("span",{className:e,style:r,children:i}):null}return a?c.jsx("span",{className:e,style:r,children:a(o,u)}):c.jsx("span",{className:e,style:r,children:o})}Oe.displayName="Ginger.Current.QueueLength";function Ye({base:e=0,separator:r=" / ",className:n,style:t,fallback:a,empty:u,children:o}){const i=h.useGingerState(),l=i.tracks.length;if(l===0){const T=u??a??null;return T?c.jsx("span",{className:n,style:t,children:T}):null}const p=String(i.currentIndex+e),m=String(l),b=`${p}${r}${m}`;return o?c.jsx("span",{className:n,style:t,children:o({index:p,length:m,label:b},i)}):c.jsx("span",{className:n,style:t,children:b})}Ye.displayName="Ginger.Current.QueuePosition";function xe(e){if(!Number.isFinite(e)||e<0)return"0:00";const r=Math.floor(e%60);return`${Math.floor(e/60)}:${r.toString().padStart(2,"0")}`}function Se(e,r,n){const{className:t,style:a,fallback:u,empty:o,children:i,format:l=xe}=n;if(!(e>=0)||!Number.isFinite(e)){const m=o??u??null;return m?c.jsx("span",{className:t,style:a,children:m}):null}const p=l(e);return i?c.jsx("span",{className:t,style:a,children:i(p,r)}):c.jsx("span",{className:t,style:a,children:p})}function Qe(e){const r=h.useGingerState();return Se(r.currentTime,r,e)}Qe.displayName="Ginger.Current.Elapsed";function He(e){const r=h.useGingerState();return Se(B(r),r,e)}He.displayName="Ginger.Current.Duration";function Xe(e){const r=h.useGingerState();return Se(we(r),r,e)}Xe.displayName="Ginger.Current.Remaining";function Ke({className:e,style:r,fallback:n,empty:t,children:a}){const u=h.useGingerState(),o=B(u),i=Pe(u);if(!(o>0)){const l=t??n??null;return l?c.jsx("span",{className:e,style:r,children:l}):null}return a?c.jsx("span",{className:e,style:r,children:a({fraction:i,currentTime:u.currentTime,duration:o},u)}):c.jsx("span",{className:e,style:r,children:`${Math.round(i*100)}%`})}Ke.displayName="Ginger.Current.Progress";function qe({className:e,style:r,height:n=4,showBuffered:t=!1,unstyled:a=!1}){const u=h.useGingerState(),o=`${Math.round(Pe(u)*100)}%`,i=`${Math.round(Math.min(1,Math.max(0,u.bufferedFraction))*100)}%`;return c.jsxs("div",{className:e,style:a?{...r}:{width:"100%",height:n,background:"var(--ginger-muted-color, #e5e7eb)",borderRadius:999,overflow:"hidden",position:"relative",...r},"aria-hidden":!0,children:[t?c.jsx("div",{style:{position:a?void 0:"absolute",left:a?void 0:0,top:a?void 0:0,height:a?void 0:"100%",width:i,background:a?void 0:"var(--ginger-buffer-color, rgba(107, 114, 128, 0.35))"}}):null,c.jsx("div",{style:{position:a?void 0:"relative",width:o,height:a?void 0:"100%",background:a?void 0:"var(--ginger-primary-color, #111827)"}})]})}qe.displayName="Ginger.Current.TimeRail";function We({className:e,style:r,height:n=4,unstyled:t=!1}){const a=h.useGingerState(),u=`${Math.round(Math.min(1,Math.max(0,a.bufferedFraction))*100)}%`;return c.jsx("div",{className:e,style:t?{...r}:{width:"100%",height:n,background:"var(--ginger-muted-color, #e5e7eb)",borderRadius:999,overflow:"hidden",...r},"aria-hidden":!0,children:c.jsx("div",{style:{width:u,height:t?void 0:"100%",background:t?void 0:"var(--ginger-buffer-color, rgba(107, 114, 128, 0.35))"}})})}We.displayName="Ginger.Current.BufferRail";function ze({className:e,style:r,fallback:n,empty:t,children:a}){const u=h.useGingerState(),o=Ie(u);return a?c.jsx("span",{className:e,style:r,children:a(o,u)}):c.jsx("span",{className:e,style:r,children:o})}ze.displayName="Ginger.Current.PlaybackState";function Je({className:e,style:r,fallback:n,empty:t,live:a="polite",children:u}){const o=h.useGingerState(),i=o.errorMessage??"";if(!i){const l=t??n??null;return l?c.jsx("span",{className:e,style:r,children:l}):null}return u?c.jsx("span",{className:e,style:r,"aria-live":a,children:u(i,o)}):c.jsx("span",{className:e,style:r,"aria-live":a,children:i})}Je.displayName="Ginger.Current.ErrorMessage";const O={seek:"Seek",volume:"Volume",playbackSpeed:"Playback speed",nextTrack:"Next track",previousTrack:"Previous track",shuffle:"Shuffle",mute:"Mute",unmute:"Unmute",play:"Play",pause:"Pause",repeat:{off:"Repeat off",all:"Repeat all",one:"Repeat one"},playbackRateNormal:"1× normal",playbackRateTimes:e=>`${e}×`};function Qr(e){return e?{...O,...e,repeat:{...O.repeat,...e.repeat}}:O}const Ze=d.createContext(O);function Hr({locale:e,children:r}){const n=Qr(e);return c.jsx(Ze.Provider,{value:n,children:r})}function S(){return d.useContext(Ze)}function er(){const e=h.useGingerPlayback(),r=h.useGingerMedia(),n=S(),t=d.useMemo(()=>h.gingerStateFromContextValues(e,r),[e,r]),a=B(t),u=a>0?t.currentTime:0,o=Number.isFinite(u)?u:0,i=a>0?`${xe(o)} of ${xe(a)}`:xe(o),l=p=>{r.seek(Number(p.currentTarget.value))};return{state:t,value:o,min:0,max:a>0?a:1,step:"any",ariaValueText:i,ariaLabel:n.seek,onSeekInput:l,onSeekChange:l}}function rr(){const e=h.useGingerPlayback(),r=h.useGingerMedia(),n=S(),t=d.useMemo(()=>h.gingerStateFromContextValues(e,r),[e,r]),a=u=>{r.setVolume(Number(u.currentTarget.value))};return{state:t,value:t.volume,min:0,max:1,step:"any",ariaValueText:`${Math.round(t.volume*100)}%`,ariaLabel:n.volume,onVolumeInput:a,onVolumeChange:a}}function nr(e){const r=h.useGingerPlayback(),n=S(),t=(e==null?void 0:e.playAriaLabel)??n.play,a=(e==null?void 0:e.pauseAriaLabel)??n.pause;return{isPaused:r.isPaused,toggle:r.togglePlayPause,ariaLabel:r.isPaused?t:a}}function tr({playLabel:e="Play",pauseLabel:r="Pause",playAriaLabel:n,pauseAriaLabel:t,type:a="button",onClick:u,...o}){const i=S(),l=typeof e=="string"?e:i.play,p=typeof r=="string"?r:i.pause,m=nr({playAriaLabel:n??l,pauseAriaLabel:t??p});return c.jsx("button",{...o,type:a,"aria-label":m.ariaLabel,onClick:b=>{m.toggle(),u==null||u(b)},children:m.isPaused?e:r})}tr.displayName="Ginger.Control.PlayPause";function ar({type:e="button",onClick:r,...n}){const{repeatMode:t,cycleRepeat:a}=h.useGingerPlayback(),o=S().repeat[t];return c.jsx("button",{...n,type:e,"aria-label":o,onClick:i=>{a(),r==null||r(i)},children:o})}ar.displayName="Ginger.Control.Repeat";function ur({type:e="button",children:r="Next",onClick:n,...t}){const{next:a}=h.useGingerPlayback(),u=S();return c.jsx("button",{...t,type:e,"aria-label":u.nextTrack,onClick:o=>{a(),n==null||n(o)},children:r})}ur.displayName="Ginger.Control.Next";function ir({type:e="button",children:r="Previous",onClick:n,...t}){const{prev:a}=h.useGingerPlayback(),u=S();return c.jsx("button",{...t,type:e,"aria-label":u.previousTrack,onClick:o=>{a(),n==null||n(o)},children:r})}ir.displayName="Ginger.Control.Previous";function or({type:e="button",children:r="Shuffle",onClick:n,...t}){const{isShuffled:a,toggleShuffle:u}=h.useGingerPlayback(),o=S();return c.jsx("button",{...t,type:e,"aria-pressed":a,"aria-label":o.shuffle,onClick:i=>{u(),n==null||n(i)},children:r})}or.displayName="Ginger.Control.Shuffle";function sr({inputStyle:e,style:r,unstyled:n=!1,...t}){const a=er(),u=n?{...r,...e}:{width:"100%",...r,...e};return c.jsx("input",{...t,type:"range",min:a.min,max:a.max,step:a.step,value:a.value,"aria-label":a.ariaLabel,"aria-valuetext":a.ariaValueText,onInput:a.onSeekInput,onChange:a.onSeekChange,style:u})}sr.displayName="Ginger.Control.SeekBar";function lr({inputStyle:e,style:r,unstyled:n=!1,...t}){const a=rr(),u=n?{...r,...e}:{width:"100%",...r,...e};return c.jsx("input",{...t,type:"range",min:a.min,max:a.max,step:a.step,value:a.value,"aria-label":a.ariaLabel,"aria-valuetext":a.ariaValueText,onInput:a.onVolumeInput,onChange:a.onVolumeChange,style:u})}lr.displayName="Ginger.Control.Volume";function cr({muteLabel:e,unmuteLabel:r,type:n="button",onClick:t,...a}){const{muted:u,toggleMute:o}=h.useGingerMedia(),i=S(),l=e??i.mute,p=r??i.unmute;return c.jsx("button",{...a,type:n,"aria-pressed":u,"aria-label":u?i.unmute:i.mute,onClick:m=>{o(),t==null||t(m)},children:u?p:l})}cr.displayName="Ginger.Control.Mute";const Xr=[.5,.75,1,1.25,1.5,2];function dr({rates:e=Xr,style:r,...n}){const{playbackRate:t,setPlaybackRate:a}=h.useGingerMedia(),u=S(),o=d.useMemo(()=>Array.from(new Set([...e,t])).sort((i,l)=>i-l),[e,t]);return c.jsx("select",{...n,"aria-label":u.playbackSpeed,value:String(t),style:r,onChange:i=>a(Number(i.currentTarget.value)),children:o.map(i=>c.jsx("option",{value:String(i),children:i===1?u.playbackRateNormal:u.playbackRateTimes(i)},i))})}dr.displayName="Ginger.Control.PlaybackRate";const Ee=d.createContext(null);function Kr(){const e=d.useContext(Ee);if(!e)throw new Error("Ginger.Playlist.Track must be used inside <Ginger.Playlist>");return e}function fr({children:e,unstyled:r=!1,rowStyle:n,renderTrack:t,playOnSelect:a=!0,style:u,...o}){const{tracks:i,currentIndex:l,playTrackAt:p,selectTrackAt:m}=h.useGingerPlayback(),b=r?{...u}:{listStyle:"none",margin:0,padding:0,fontFamily:"var(--ginger-font-family, system-ui, sans-serif)",fontSize:"var(--ginger-font-size, 14px)",color:"var(--ginger-primary-color, #111827)",...u};return e!==void 0?c.jsx(Ee.Provider,{value:{playOnSelect:a},children:c.jsx("ul",{style:b,...o,children:e})}):c.jsx(Ee.Provider,{value:{playOnSelect:a},children:c.jsx("ul",{style:b,...o,children:i.map((E,M)=>{const g=M===l;return c.jsx("li",{children:c.jsx("button",{type:"button",onClick:()=>{a?p(M):m(M)},style:{width:r?void 0:"100%",textAlign:r?void 0:"left",border:r?void 0:"none",background:r?void 0:g?"var(--ginger-playlist-active-bg, rgba(17, 24, 39, 0.06))":"transparent",color:r?void 0:"inherit",font:r?void 0:"inherit",cursor:r?void 0:"pointer",padding:r?void 0:"var(--ginger-playlist-row-padding, 6px 8px)",...n},children:t?t(E,M,g):c.jsxs("span",{children:[E.title,E.artist?` — ${E.artist}`:""]})})},`${M}-${Y(E)}`)})})})}fr.displayName="Ginger.Playlist";function pr({index:e,unstyled:r=!1,className:n,style:t,children:a,liProps:u,onClick:o,...i}){const{playOnSelect:l}=Kr(),{tracks:p,currentIndex:m,playTrackAt:b,selectTrackAt:T}=h.useGingerPlayback(),E=e===m,M=p[e],g=M!=null?c.jsxs("span",{children:[M.title,M.artist?` — ${M.artist}`:""]}):null;return c.jsx("li",{...u,children:c.jsx("button",{type:"button","aria-current":E?"true":void 0,"data-ginger-active":E||void 0,className:n,style:{width:r?void 0:"100%",textAlign:r?void 0:"left",border:r?void 0:"none",background:r?void 0:E?"var(--ginger-playlist-active-bg, rgba(17, 24, 39, 0.06))":"transparent",color:r?void 0:"inherit",font:r?void 0:"inherit",cursor:r?void 0:"pointer",padding:r?void 0:"var(--ginger-playlist-row-padding, 6px 8px)",...t},...i,onClick:y=>{o==null||o(y),!y.defaultPrevented&&(l?b(e):T(e))},children:a??g})})}pr.displayName="Ginger.Playlist.Track";const qr=Object.assign(fr,{Track:pr}),Wr=L("Ginger.Queue.Title",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.title}),zr=L("Ginger.Queue.Subtitle",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.subtitle}),Jr=L("Ginger.Queue.Description",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.description}),Zr=L("Ginger.Queue.Copyright",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.copyright});function gr({className:e,style:r,fallback:n,empty:t,unstyled:a=!1,imgStyle:u}){var p,m;const o=h.useGingerState(),i=(p=o.playlistMeta)==null?void 0:p.artworkUrl;if(!i){const b=t??n??null;return b?c.jsx("span",{className:e,style:r,children:b}):null}const l=((m=o.playlistMeta)==null?void 0:m.title)??"Playlist artwork";return c.jsx("span",{className:e,style:a?{...r}:{display:"inline-block",background:"var(--ginger-artwork-bg, #f3f4f6)",borderRadius:"var(--ginger-artwork-radius, 6px)",overflow:"hidden",...r},children:c.jsx("img",{src:i,alt:l,style:{display:a?void 0:"block",width:a?void 0:"100%",height:a?void 0:"100%",objectFit:a?void 0:"cover",...u}})})}gr.displayName="Ginger.Queue.Artwork";function Q(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):1}function he(e){return Number.isFinite(e)?Math.min(4,Math.max(.25,e)):1}const D={currentTime:0,duration:0,bufferedFraction:0,isBuffering:!1,errorMessage:null},en={...D,volume:1,muted:!1,playbackRate:1};function mr(e){const r=[...e.tracks];let n=I(e.currentIndex??0,r.length),t=null,a=r;return e.isShuffled&&r.length>1&&(t=[...r],a=_e(r,n),n=0),{tracks:a,currentIndex:n,playbackMode:e.playbackMode??"playlist",isPaused:e.isPaused??!0,isShuffled:!!(e.isShuffled&&a.length>1),repeatMode:e.repeatMode??"off",originalTracks:t,playlistMeta:e.playlistMeta??null,...en,volume:Q(e.volume??1),muted:e.muted??!1,playbackRate:he(e.playbackRate??1)}}function rn(e,r){switch(r.type){case"INIT":{const{tracks:n,currentIndex:t,playlistMeta:a,isPaused:u,isShuffled:o,repeatMode:i,playbackMode:l,volume:p,muted:m,playbackRate:b}=r.payload;return mr({tracks:n,currentIndex:t,playlistMeta:a??null,isPaused:u??!0,isShuffled:o??!1,repeatMode:i??"off",playbackMode:l??"playlist",volume:p,muted:m,playbackRate:b})}case"SET_QUEUE":{const{tracks:n,currentIndex:t}=r.payload,a=[...n],u=I(t??e.currentIndex,a.length);return{...e,tracks:a,currentIndex:u,isShuffled:!1,originalTracks:null,...D}}case"INSERT_TRACK":{const n=r.payload.index??e.tracks.length,t=Ne(e.tracks,r.payload.track,n);if(r.payload.autoPlay){const u=I(n,t.length);return{...e,tracks:t,currentIndex:u,isShuffled:!1,originalTracks:null,isPaused:!1,...D}}const a=n<=e.currentIndex?e.currentIndex+1:e.currentIndex;return{...e,tracks:t,isShuffled:!1,originalTracks:null,currentIndex:I(a,t.length)}}case"REMOVE_TRACK":{const n=r.payload.index,t=Sr(e.tracks,n),a=n<e.currentIndex?e.currentIndex-1:n===e.currentIndex?Math.min(e.currentIndex,Math.max(0,t.length-1)):e.currentIndex;return{...e,tracks:t,isShuffled:!1,originalTracks:null,currentIndex:I(a,t.length),...n===e.currentIndex?D:{}}}case"MOVE_TRACK":{const{fromIndex:n,toIndex:t}=r.payload,a=Ar(e.tracks,n,t);let u=e.currentIndex;return e.currentIndex===n?u=t:n<e.currentIndex&&t>=e.currentIndex?u-=1:n>e.currentIndex&&t<=e.currentIndex&&(u+=1),{...e,tracks:a,isShuffled:!1,originalTracks:null,currentIndex:I(u,a.length)}}case"ADD_NEXT":{const n=Rr(e.tracks,e.currentIndex,r.payload.track);return{...e,tracks:n,isShuffled:!1,originalTracks:null}}case"SET_INDEX":{const n=I(r.payload.index,e.tracks.length),t=r.payload.autoPlay,a=t===!0?!1:t===!1?!0:e.isPaused;return{...e,currentIndex:n,...D,isPaused:a}}case"PLAY":return{...e,isPaused:!1};case"PAUSE":return{...e,isPaused:!0};case"TOGGLE_PAUSE":return{...e,isPaused:!e.isPaused};case"SET_REPEAT":return{...e,repeatMode:r.payload};case"CYCLE_REPEAT":return{...e,repeatMode:_r(e.repeatMode)};case"TOGGLE_SHUFFLE":{if(e.tracks.length<=1)return{...e,isShuffled:!1,originalTracks:null};if(!e.isShuffled){const u=[...e.tracks],o=_e(u,e.currentIndex);return{...e,isShuffled:!0,originalTracks:u,tracks:o,currentIndex:0}}const n=e.originalTracks?[...e.originalTracks]:[...e.tracks],t=e.tracks[e.currentIndex],a=Pr(n,t);return{...e,isShuffled:!1,originalTracks:null,tracks:n,currentIndex:I(a,n.length)}}case"NEXT":{const n=Cr(e),t=n===e.currentIndex;return{...e,currentIndex:n,...t?{}:D,isPaused:t?e.isPaused:!1}}case"PREV":{const n=jr(e),t=n===e.currentIndex;return{...e,currentIndex:n,...t?{}:D,isPaused:t?e.isPaused:!1}}case"MEDIA_TIME_UPDATE":return{...e,currentTime:r.payload.currentTime,duration:Number.isFinite(r.payload.duration)?r.payload.duration:e.duration,bufferedFraction:r.payload.bufferedFraction,isBuffering:!1};case"MEDIA_LOADED_METADATA":return{...e,duration:Number.isFinite(r.payload.duration)?r.payload.duration:e.duration,bufferedFraction:r.payload.bufferedFraction,errorMessage:null};case"SET_PLAYLIST_META":return{...e,playlistMeta:r.payload};case"MEDIA_ERROR":return{...e,errorMessage:r.payload.message,isPaused:!0,isBuffering:!1};case"MEDIA_WAITING":return{...e,isBuffering:!0};case"MEDIA_CANPLAY":return{...e,isBuffering:!1,errorMessage:null};case"MEDIA_PLAY":return{...e,isPaused:!1,isBuffering:!1};case"MEDIA_PAUSE":return{...e,isPaused:!0};case"RESET_MEDIA_TIMES":return{...e,currentTime:0,duration:0,bufferedFraction:0};case"SET_VOLUME":return{...e,volume:Q(r.payload)};case"SET_MUTED":return{...e,muted:r.payload};case"TOGGLE_MUTE":return{...e,muted:!e.muted};case"SET_PLAYBACK_RATE":return{...e,playbackRate:he(r.payload)};case"MEDIA_VOLUME_SYNC":{const{volume:n,muted:t}=r.payload,a=Q(n);return a===e.volume&&t===e.muted?e:{...e,volume:a,muted:t}}default:return e}}function Te(){return typeof navigator>"u"||!("mediaSession"in navigator)?null:navigator.mediaSession}function nn(e,r,n){const t=r.tracks[r.currentIndex],a=t==null?void 0:t.title,u=t==null?void 0:t.artist,o=t==null?void 0:t.album,i=t==null?void 0:t.artworkUrl;d.useEffect(()=>{const l=Te();!e||!l||(l.metadata=new MediaMetadata({title:a??"Unknown track",artist:u,album:o,artwork:i?[{src:i}]:void 0}))},[e,a,u,o,i]),d.useEffect(()=>{const l=Te();!e||!l||(l.playbackState=r.isPaused?"paused":"playing")},[e,r.isPaused]),d.useEffect(()=>{const l=Te();if(!(!e||!l)){try{l.setActionHandler("play",n.play),l.setActionHandler("pause",n.pause),l.setActionHandler("nexttrack",n.next),l.setActionHandler("previoustrack",n.prev),l.setActionHandler("seekto",p=>{typeof p.seekTime=="number"&&Number.isFinite(p.seekTime)&&n.seek(p.seekTime)})}catch{}return()=>{try{l.setActionHandler("play",null),l.setActionHandler("pause",null),l.setActionHandler("nexttrack",null),l.setActionHandler("previoustrack",null),l.setActionHandler("seekto",null)}catch{}}}},[e,n])}const tn={"--ginger-primary-color":"#111827","--ginger-muted-color":"#6b7280","--ginger-font-size":"14px","--ginger-font-family":"system-ui, sans-serif","--ginger-playlist-row-padding":"6px 8px","--ginger-artwork-radius":"6px","--ginger-artwork-bg":"#f3f4f6","--ginger-playlist-active-bg":"rgba(17, 24, 39, 0.06)","--ginger-buffer-color":"rgba(107, 114, 128, 0.35)","--ginger-focus-ring":"0 0 0 2px rgba(59, 130, 246, 0.45)"};function an({children:e,initialTracks:r=[],initialIndex:n=0,initialPlaylistMeta:t=null,initialShuffle:a=!1,initialRepeatMode:u="off",initialPlaybackMode:o="playlist",initialPaused:i=!0,initialVolume:l=1,initialMuted:p=!1,initialPlaybackRate:m=1,initialStateKey:b,locale:T,mediaSession:E=!1,beforePlay:M,onPlayBlocked:g,persistence:y,hydrateOnMount:R=!1,resumeOnTrackChange:P=!1,unstyled:H=!1,className:ke,style:ve,onTrackChange:X,onPlay:K,onPause:q,onQueueEnd:W,onError:z}){var Ge;const w=d.useRef(null),[s,x]=d.useReducer(rn,void 0,()=>mr({tracks:r,currentIndex:n,playlistMeta:t,isPaused:i,isShuffled:a,repeatMode:u,playbackMode:o,volume:l,muted:p,playbackRate:m})),Ae=d.useRef(s),Me=d.useRef({tracks:r,currentIndex:n,playlistMeta:t,isPaused:i,isShuffled:a,repeatMode:u,playbackMode:o,volume:l,muted:p,playbackRate:m});Me.current={tracks:r,currentIndex:n,playlistMeta:t,isPaused:i,isShuffled:a,repeatMode:u,playbackMode:o,volume:l,muted:p,playbackRate:m};const $=d.useRef(void 0);d.useEffect(()=>{if(b===void 0){$.current=void 0;return}if($.current===void 0){$.current=b;return}if($.current===b)return;$.current=b;const f=Me.current;x({type:"INIT",payload:{tracks:f.tracks,currentIndex:f.currentIndex,playlistMeta:f.playlistMeta,isPaused:f.isPaused,isShuffled:f.isShuffled,repeatMode:f.repeatMode,playbackMode:f.playbackMode,volume:f.volume,muted:f.muted,playbackRate:f.playbackRate}})},[b,x]),d.useEffect(()=>{Ae.current=s},[s]);const Re=s.tracks[s.currentIndex]??null;d.useEffect(()=>{X==null||X(Re,s.currentIndex)},[Re,s.currentIndex,X]),d.useEffect(()=>{s.errorMessage&&(z==null||z(s.errorMessage))},[s.errorMessage,z]);const J=d.useRef(void 0);d.useEffect(()=>{if(J.current===void 0){J.current=s.isPaused;return}J.current!==s.isPaused&&(s.isPaused?q==null||q():K==null||K()),J.current=s.isPaused},[s.isPaused,q,K]);const j=d.useCallback(()=>{x({type:"PLAY"})},[]),_=d.useCallback(()=>{var f;x({type:"PAUSE"}),(f=w.current)==null||f.pause()},[]),Z=d.useCallback(()=>{s.isPaused?j():_()},[_,j,s.isPaused]),N=d.useCallback(f=>{const k=w.current;k&&Number.isFinite(f)&&(k.currentTime=Math.max(0,f))},[]),ee=d.useCallback(f=>{x({type:"SET_VOLUME",payload:Q(f)})},[]),re=d.useCallback(f=>{x({type:"SET_MUTED",payload:f})},[]),ne=d.useCallback(()=>{x({type:"TOGGLE_MUTE"})},[]),te=d.useCallback(f=>{x({type:"SET_PLAYBACK_RATE",payload:he(f)})},[]),U=d.useCallback(()=>{x({type:"NEXT"})},[]),V=d.useCallback(()=>{x({type:"PREV"})},[]),ae=d.useCallback(f=>{x({type:"SET_REPEAT",payload:f})},[]),ue=d.useCallback(()=>{x({type:"CYCLE_REPEAT"})},[]),ie=d.useCallback(()=>{x({type:"TOGGLE_SHUFFLE"})},[]),oe=d.useCallback((f,k)=>{x({type:"SET_QUEUE",payload:{tracks:f,currentIndex:k}})},[]),se=d.useCallback((f,k,v)=>{x({type:"INSERT_TRACK",payload:{track:f,index:k,autoPlay:v}})},[]),le=d.useCallback(f=>{x({type:"REMOVE_TRACK",payload:{index:f}})},[]),ce=d.useCallback((f,k)=>{x({type:"MOVE_TRACK",payload:{fromIndex:f,toIndex:k}})},[]),de=d.useCallback(f=>{x({type:"ADD_NEXT",payload:{track:f}})},[]),fe=d.useCallback(f=>{x({type:"SET_INDEX",payload:{index:f,autoPlay:!0}})},[]),pe=d.useCallback(f=>{x({type:"SET_INDEX",payload:{index:f,autoPlay:!1}})},[]),ge=d.useCallback(f=>{x({type:"SET_PLAYLIST_META",payload:f})},[]),me=d.useCallback(f=>{x({type:"INIT",payload:f})},[]);d.useEffect(()=>{if(!y||!R)return;const f=y.get("ginger:volume"),k=y.get("ginger:muted"),v=y.get("ginger:playbackRate"),G=y.get("ginger:repeatMode"),be=y.get("ginger:currentIndex"),A=Me.current;x({type:"INIT",payload:{tracks:A.tracks,playlistMeta:A.playlistMeta,isPaused:A.isPaused,isShuffled:A.isShuffled,playbackMode:A.playbackMode,currentIndex:typeof be=="number"?be:A.currentIndex,repeatMode:G==="off"||G==="all"||G==="one"?G:A.repeatMode,volume:typeof f=="number"?f:A.volume,muted:typeof k=="boolean"?k:A.muted,playbackRate:typeof v=="number"?v:A.playbackRate}})},[R,y]),d.useEffect(()=>{y&&(y.set("ginger:volume",s.volume),y.set("ginger:muted",s.muted),y.set("ginger:playbackRate",s.playbackRate),y.set("ginger:repeatMode",s.repeatMode),y.set("ginger:currentIndex",s.currentIndex))},[y,s.volume,s.muted,s.playbackRate,s.repeatMode,s.currentIndex]),d.useEffect(()=>{if(!y||!P)return;const f=s.tracks[s.currentIndex];if(!f)return;const k=`ginger:resume:${Y(f)}`,v=y.get(k);typeof v=="number"&&Number.isFinite(v)&&N(v)},[y,P,s.currentIndex,s.tracks,N]),d.useEffect(()=>{if(!y||!P)return;const f=s.tracks[s.currentIndex];if(!f||!(s.currentTime>=0))return;const k=`ginger:resume:${Y(f)}`,v=setTimeout(()=>y.set(k,s.currentTime),250);return()=>clearTimeout(v)},[y,P,s.currentIndex,s.tracks,s.currentTime]);const yr=(Ge=s.tracks[s.currentIndex])==null?void 0:Ge.fileUrl;d.useEffect(()=>{const f=w.current;if(!f)return;if(s.isPaused){f.pause();return}let k=!1;return(async()=>{if(M){let v=!1;try{v=await M()}catch(G){const be=G instanceof Error?G.message:"beforePlay rejected";x({type:"MEDIA_ERROR",payload:{message:be}});return}if(!v){k||(x({type:"PAUSE"}),g==null||g());return}}k||f.play().catch(v=>{const G=v instanceof Error?v.message:typeof v=="string"?v:"Playback failed (e.g. autoplay blocked or unavailable source)";x({type:"MEDIA_ERROR",payload:{message:G}})})})(),()=>{k=!0}},[M,yr,g,s.isPaused]);const ye=d.useCallback(()=>{const f=Gr(Ae.current);if(f.kind==="replay_same"){const v=w.current;v&&(v.currentTime=0),x({type:"PLAY"});return}if(f.kind==="stop"){x({type:"PAUSE"}),W==null||W();return}const k=f.nextIndex;x({type:"SET_INDEX",payload:{index:k,autoPlay:!0}})},[W]),br=d.useMemo(()=>({play:j,pause:_,next:U,prev:V,seek:N}),[j,_,U,V,N]);nn(!!E,s,br);const xr=T!=null&&T.seek&&/[\u0590-\u08FF]/.test(T.seek)?"rtl":"ltr",hr=d.useMemo(()=>({state:s,dispatch:x,audioRef:w,notifyEnded:ye,init:me,play:j,pause:_,togglePlayPause:Z,seek:N,setVolume:ee,setMuted:re,toggleMute:ne,setPlaybackRate:te,next:U,prev:V,setRepeatMode:ae,cycleRepeat:ue,toggleShuffle:ie,setQueue:oe,insertTrackAt:se,removeTrackAt:le,moveTrack:ce,enqueueNext:de,playTrackAt:fe,selectTrackAt:pe,setPlaylistMeta:ge}),[ue,x,me,U,ye,_,j,fe,se,le,ce,de,pe,V,N,re,te,oe,ae,ge,ee,s,ne,Z,ie]),kr=d.useMemo(()=>({tracks:s.tracks,currentIndex:s.currentIndex,isPaused:s.isPaused,isShuffled:s.isShuffled,repeatMode:s.repeatMode,originalTracks:s.originalTracks,playlistMeta:s.playlistMeta,init:me,play:j,pause:_,togglePlayPause:Z,next:U,prev:V,setRepeatMode:ae,cycleRepeat:ue,toggleShuffle:ie,playbackMode:s.playbackMode,setQueue:oe,insertTrackAt:se,removeTrackAt:le,moveTrack:ce,enqueueNext:de,playTrackAt:fe,selectTrackAt:pe,setPlaylistMeta:ge,dispatch:x}),[s.tracks,s.currentIndex,s.isPaused,s.isShuffled,s.repeatMode,s.playbackMode,s.originalTracks,s.playlistMeta,me,j,_,Z,U,V,ae,ue,ie,oe,se,le,ce,de,fe,pe,ge,x]),vr=d.useMemo(()=>({currentTime:s.currentTime,duration:s.duration,bufferedFraction:s.bufferedFraction,isBuffering:s.isBuffering,errorMessage:s.errorMessage,volume:s.volume,muted:s.muted,playbackRate:s.playbackRate,seek:N,setVolume:ee,setMuted:re,toggleMute:ne,setPlaybackRate:te,audioRef:w,notifyEnded:ye,dispatch:x}),[s.currentTime,s.duration,s.bufferedFraction,s.isBuffering,s.errorMessage,s.volume,s.muted,s.playbackRate,N,ee,re,ne,te,w,ye,x]),Mr=Ie(s),Tr=d.useMemo(()=>H?ve:{...tn,...ve},[ve,H]);return c.jsx(Hr,{locale:T,children:c.jsx(h.GingerPlaybackContext.Provider,{value:kr,children:c.jsx(h.GingerMediaContext.Provider,{value:vr,children:c.jsx(je.Provider,{value:hr,children:c.jsx("div",{className:ke,style:Tr,"data-ginger-playback":Mr,dir:xr,children:e})})})})})}const un={Provider:an,Player:Ir,Current:{Title:Dr,Artist:Lr,Album:Fr,Description:Ur,Copyright:Vr,Genre:Br,Label:$r,Isrc:Or,TrackNumber:Yr,Year:Fe,Lyrics:Ue,FileUrl:Ve,Artwork:Be,QueueIndex:$e,QueueLength:Oe,QueuePosition:Ye,Elapsed:Qe,Duration:He,Remaining:Xe,Progress:Ke,TimeRail:qe,BufferRail:We,PlaybackState:ze,ErrorMessage:Je},Queue:{Title:Wr,Subtitle:zr,Description:Jr,Copyright:Zr,Artwork:gr},Control:{PlayPause:tr,Repeat:ar,Next:ur,Previous:ir,Shuffle:or,SeekBar:sr,Volume:lr,Mute:cr,PlaybackRate:dr},Playlist:qr};exports.Ginger=un;exports.clampPlaybackRate=he;exports.clampVolume=Q;exports.defaultGingerLocale=O;exports.derivePlaybackUiState=Ie;exports.effectiveDuration=B;exports.effectiveRemaining=we;exports.getCurrentTrack=C;exports.progressFraction=Pe;exports.resolvedAlbumLine=Le;exports.resolvedArtwork=De;exports.useGingerLocale=S;exports.usePlayPauseBinding=nr;exports.useSeekBarBinding=er;exports.useVolumeSlider=rr;
|
|
2
|
+
//# sourceMappingURL=ginger-DYoHDn8T.cjs.map
|