@lucaismyname/ginger 0.0.26 → 0.0.28
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 +34 -68
- package/dist/analyzer/liveAudioGraph.test.d.ts +2 -0
- package/dist/analyzer/liveAudioGraph.test.d.ts.map +1 -0
- package/dist/analyzer/useGingerLiveAnalyzer.test.d.ts +2 -0
- package/dist/analyzer/useGingerLiveAnalyzer.test.d.ts.map +1 -0
- package/dist/audio/GingerPlayer.d.ts.map +1 -1
- package/dist/client.cjs +1 -1
- package/dist/client.js +2 -2
- package/dist/components/controls/Controls.d.ts.map +1 -1
- package/dist/components/current/Artwork.d.ts.map +1 -1
- package/dist/components/current/Chapters.d.ts.map +1 -1
- package/dist/components/current/Lyrics.d.ts +3 -1
- package/dist/components/current/Lyrics.d.ts.map +1 -1
- package/dist/components/current/LyricsSynced.d.ts.map +1 -1
- package/dist/components/current/Playback.d.ts +1 -1
- package/dist/components/current/Playback.d.ts.map +1 -1
- package/dist/components/current/QueueMeta.d.ts +1 -1
- package/dist/components/current/QueueMeta.d.ts.map +1 -1
- package/dist/components/current/Time.d.ts +2 -2
- package/dist/components/current/Time.d.ts.map +1 -1
- package/dist/components/current/Year.d.ts +1 -1
- package/dist/components/current/Year.d.ts.map +1 -1
- package/dist/components/icons/Pause.d.ts +2 -0
- package/dist/components/icons/Pause.d.ts.map +1 -0
- package/dist/components/icons/Play.d.ts +2 -0
- package/dist/components/icons/Play.d.ts.map +1 -0
- package/dist/components/icons/Wrapper.d.ts +14 -0
- package/dist/components/icons/Wrapper.d.ts.map +1 -0
- package/dist/components/queue/QueueDisplay.d.ts.map +1 -1
- package/dist/context/GingerLocaleContext.d.ts.map +1 -1
- package/dist/context/GingerProvider.d.ts +1 -1
- package/dist/context/GingerProvider.d.ts.map +1 -1
- package/dist/ginger-CVwaVLpC.cjs +2 -0
- package/dist/ginger-CVwaVLpC.cjs.map +1 -0
- package/dist/ginger-G5-3BYSb.js +2165 -0
- package/dist/ginger-G5-3BYSb.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/testing/helpers.d.ts +1 -1
- package/dist/testing/helpers.d.ts.map +1 -1
- package/dist/testing/index.cjs +1 -1
- package/dist/testing/index.cjs.map +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/mockWebAudio.d.ts +47 -0
- package/dist/testing/mockWebAudio.d.ts.map +1 -0
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/{useNextTrackPrefetch-Cs4A1oFv.cjs → useNextTrackPrefetch-CtZp7EgH.cjs} +2 -2
- package/dist/{useNextTrackPrefetch-Cs4A1oFv.cjs.map → useNextTrackPrefetch-CtZp7EgH.cjs.map} +1 -1
- package/dist/{useNextTrackPrefetch-eR_p__O2.js → useNextTrackPrefetch-Mj8dQLYR.js} +2 -2
- package/dist/{useNextTrackPrefetch-eR_p__O2.js.map → useNextTrackPrefetch-Mj8dQLYR.js.map} +1 -1
- package/package.json +2 -2
- package/dist/ginger-DE4TKdCR.js +0 -1877
- package/dist/ginger-DE4TKdCR.js.map +0 -1
- package/dist/ginger-yY4Y5liv.cjs +0 -2
- package/dist/ginger-yY4Y5liv.cjs.map +0 -1
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# @lucaismyname/ginger
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Batteries-included** React audio primitives for music and podcast UIs on the native **`<audio>`** element: a reducer-backed provider, composable **`Ginger.*`** components, and **`useGinger()`** for full control. Many pieces ship sensible defaults (CSS variables, layout helpers); use **`unstyled`** (and related flags below) when you want **behavior and data only**, with your own styling.
|
|
4
|
+
|
|
5
|
+
**Peer dependencies:** **`react` ≥ 18** (required). **`react-dom` ≥ 18** is listed as a peer for typical DOM apps; it is **optional** in `peerDependenciesMeta`, so setups that do not use `react-dom` can omit it when appropriate.
|
|
4
6
|
|
|
5
7
|
## Install
|
|
6
8
|
|
|
@@ -8,33 +10,43 @@ Headless React audio player primitives for building custom music and podcast UIs
|
|
|
8
10
|
npm install @lucaismyname/ginger
|
|
9
11
|
```
|
|
10
12
|
|
|
11
|
-
Peer dependencies:
|
|
12
|
-
|
|
13
|
-
- `react >= 18`
|
|
14
|
-
- `react-dom >= 18`
|
|
15
|
-
|
|
16
13
|
## Quick Start
|
|
17
14
|
|
|
18
15
|
```tsx
|
|
19
16
|
import { Ginger } from "@lucaismyname/ginger";
|
|
20
17
|
|
|
21
|
-
const tracks = [
|
|
18
|
+
const tracks = [
|
|
19
|
+
{
|
|
20
|
+
id: "one",
|
|
21
|
+
title: "One",
|
|
22
|
+
artist: "Demo Artist",
|
|
23
|
+
fileUrl: "https://example.com/audio/one.mp3",
|
|
24
|
+
artworkUrl: "https://example.com/art/one.jpg",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: "two",
|
|
28
|
+
title: "Two",
|
|
29
|
+
artist: "Demo Artist",
|
|
30
|
+
fileUrl: "https://example.com/audio/two.mp3",
|
|
31
|
+
},
|
|
32
|
+
];
|
|
22
33
|
|
|
23
|
-
export function
|
|
34
|
+
export function App() {
|
|
24
35
|
return (
|
|
25
|
-
<Ginger.Provider initialTracks={tracks}>
|
|
36
|
+
<Ginger.Provider initialTracks={tracks} initialPlaylistMeta={{ title: "My Playlist" }}>
|
|
26
37
|
<Ginger.Player />
|
|
38
|
+
<Ginger.Current.Title />
|
|
39
|
+
<Ginger.Current.Artist />
|
|
27
40
|
<Ginger.Control.PlayPause />
|
|
28
|
-
<Ginger.Control.Previous />
|
|
29
41
|
<Ginger.Control.Next />
|
|
30
|
-
<Ginger.
|
|
31
|
-
<Ginger.Control.Volume />
|
|
32
|
-
<Ginger.Current.Title fallback="No track" />
|
|
42
|
+
<Ginger.Playlist />
|
|
33
43
|
</Ginger.Provider>
|
|
34
44
|
);
|
|
35
45
|
}
|
|
36
46
|
```
|
|
37
47
|
|
|
48
|
+
Mount **`<Ginger.Player />`** once inside the same provider tree so the hidden audio element exists. Everything else is optional and can be replaced with your own UI (including hooks only).
|
|
49
|
+
|
|
38
50
|
## Documentation
|
|
39
51
|
|
|
40
52
|
- Getting started: [`docs/getting-started.md`](./docs/getting-started.md)
|
|
@@ -74,58 +86,6 @@ npm run lint
|
|
|
74
86
|
npm run docs:api
|
|
75
87
|
```
|
|
76
88
|
|
|
77
|
-
# ginger
|
|
78
|
-
|
|
79
|
-
**`@lucaismyname/ginger`** is a headless React audio player built on the native **`<audio>`** element. It gives you a provider, a hidden media element, a typed state/control hook, and composable React components for transport controls, track metadata, queue metadata, and playlists.
|
|
80
|
-
|
|
81
|
-
## Install
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
npm install @lucaismyname/ginger
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
Peer dependencies:
|
|
88
|
-
|
|
89
|
-
- `react >= 18`
|
|
90
|
-
- `react-dom >= 18`
|
|
91
|
-
|
|
92
|
-
## Quick Start
|
|
93
|
-
|
|
94
|
-
```tsx
|
|
95
|
-
import { Ginger } from "@lucaismyname/ginger";
|
|
96
|
-
|
|
97
|
-
const tracks = [
|
|
98
|
-
{
|
|
99
|
-
id: "one",
|
|
100
|
-
title: "One",
|
|
101
|
-
artist: "Demo Artist",
|
|
102
|
-
fileUrl: "https://example.com/audio/one.mp3",
|
|
103
|
-
artworkUrl: "https://example.com/art/one.jpg",
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
id: "two",
|
|
107
|
-
title: "Two",
|
|
108
|
-
artist: "Demo Artist",
|
|
109
|
-
fileUrl: "https://example.com/audio/two.mp3",
|
|
110
|
-
},
|
|
111
|
-
];
|
|
112
|
-
|
|
113
|
-
export function App() {
|
|
114
|
-
return (
|
|
115
|
-
<Ginger.Provider initialTracks={tracks} initialPlaylistMeta={{ title: "My Playlist" }}>
|
|
116
|
-
<Ginger.Player />
|
|
117
|
-
<Ginger.Current.Title />
|
|
118
|
-
<Ginger.Current.Artist />
|
|
119
|
-
<Ginger.Control.PlayPause />
|
|
120
|
-
<Ginger.Control.Next />
|
|
121
|
-
<Ginger.Playlist />
|
|
122
|
-
</Ginger.Provider>
|
|
123
|
-
);
|
|
124
|
-
}
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
Mount **`<Ginger.Player />`** once inside the same provider tree so the hidden audio element exists. Everything else is optional and can be replaced with your own UI.
|
|
128
|
-
|
|
129
89
|
## Copy/Paste Examples
|
|
130
90
|
|
|
131
91
|
### Small Audio Player With Tailwind
|
|
@@ -419,6 +379,7 @@ Props:
|
|
|
419
379
|
| `initialMuted` | `boolean` | `false` | Initial muted state |
|
|
420
380
|
| `initialPlaybackRate` | `number` | `1` | Initial playback rate, clamped `0.25..4` |
|
|
421
381
|
| `initialStateKey` | `string \| number` | `undefined` | Re-dispatches `INIT` when this key changes |
|
|
382
|
+
| `locale` | `Partial<GingerLocaleMessages>` | `undefined` | Override built-in strings (controls, chapter list, synced lyrics list, …) |
|
|
422
383
|
| `mediaSession` | `boolean` | `false` | Enables Media Session lock-screen/OS controls |
|
|
423
384
|
| `beforePlay` | `() => boolean \| Promise<boolean>` | `undefined` | Policy hook run before playback starts |
|
|
424
385
|
| `onPlayBlocked` | `() => void` | `undefined` | Called when `beforePlay` returns `false` |
|
|
@@ -426,7 +387,8 @@ Props:
|
|
|
426
387
|
| `hydrateOnMount` | `boolean` | `false` | Hydrate persisted values into initial provider state |
|
|
427
388
|
| `resumeOnTrackChange` | `boolean` | `false` | Restore/save per-track playback position |
|
|
428
389
|
| `unstyled` | `boolean` | `false` | Skip provider default CSS variable/theme styles |
|
|
429
|
-
| `
|
|
390
|
+
| `asChild` | `boolean` | `false` | Merge shell props (`className`, `style`, `data-ginger-playback`, `dir`) onto the single child element instead of a wrapper `div` |
|
|
391
|
+
| `className` | `string` | `undefined` | Class for the provider wrapper (merged when `asChild`) |
|
|
430
392
|
| `style` | `CSSProperties` | `undefined` | Inline styles / CSS variables |
|
|
431
393
|
| `onTrackChange` | `(track, index) => void` | `undefined` | Fires when current track changes |
|
|
432
394
|
| `onPlay` | `() => void` | `undefined` | Fires when state changes to playing |
|
|
@@ -566,7 +528,7 @@ Other current-track components:
|
|
|
566
528
|
| Component | Description | Important props |
|
|
567
529
|
|-----------|-------------|-----------------|
|
|
568
530
|
| `Ginger.Current.Artwork` | Current track artwork or playlist artwork fallback | `unstyled`, `imgStyle`, `sizes`, `loading`, `decoding`, `onError`, display-base props |
|
|
569
|
-
| `Ginger.Current.Lyrics` | Track lyrics | `preserveWhitespace`, render-prop `children` |
|
|
531
|
+
| `Ginger.Current.Lyrics` | Track lyrics | `preserveWhitespace`, `unstyled`, render-prop `children` |
|
|
570
532
|
| `Ginger.Current.LyricsSynced` | Timed / LRC lyrics with active line | `activeClassName`, `lineClassName`, `unstyled`, render-prop `children` |
|
|
571
533
|
| `Ginger.Current.Chapters` | Chapter list; click seeks to `startSeconds` | `formatStart`, `unstyled`, render-prop `children` |
|
|
572
534
|
| `Ginger.Current.FileUrl` | Track `fileUrl`, hidden unless explicitly enabled | `visible`, display-base props |
|
|
@@ -768,7 +730,7 @@ Example:
|
|
|
768
730
|
|
|
769
731
|
- **Advanced hooks** — **`useGingerKeyboardShortcuts()`**, **`useGingerSleepTimer()`**, **`useSeekDrag()`**, **`useNextTrackPrefetch()`**, **`useGingerChapters()`**, **`useGingerLyricsSync()`**, and **`useGingerDebugLog()`** are available for custom UX and diagnostics.
|
|
770
732
|
|
|
771
|
-
- **Locale** — Pass **`locale={partialMessages}`** on `Ginger.Provider` (type **`GingerLocaleMessages`**) to translate built-in control strings; **`useGingerLocale()`** reads the merged messages anywhere under the provider.
|
|
733
|
+
- **Locale** — Pass **`locale={partialMessages}`** on `Ginger.Provider` (type **`GingerLocaleMessages`**) to translate built-in control strings, chapter list labels, and synced lyrics list names; **`useGingerLocale()`** reads the merged messages anywhere under the provider.
|
|
772
734
|
|
|
773
735
|
- **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.
|
|
774
736
|
|
|
@@ -996,10 +958,14 @@ Use `useGingerDebugLog(true)` during development to log core state transitions i
|
|
|
996
958
|
### Fully unstyled mode
|
|
997
959
|
|
|
998
960
|
- `Ginger.Provider unstyled` disables provider theme defaults (CSS variable injection).
|
|
961
|
+
- `Ginger.Provider asChild` merges the same shell props onto **one** child element (no extra wrapper `div`).
|
|
999
962
|
- `Ginger.Control.SeekBar` and `Ginger.Control.Volume` accept `unstyled`.
|
|
1000
963
|
- `Ginger.Current.Artwork`, `Ginger.Queue.Artwork`, `Ginger.Current.TimeRail`, and `Ginger.Current.BufferRail` accept `unstyled`.
|
|
1001
964
|
- `Ginger.Playlist` and `Ginger.Playlist.Track` accept `unstyled`.
|
|
1002
965
|
- `Ginger.Current.Chapters` and `Ginger.Current.LyricsSynced` accept `unstyled`.
|
|
966
|
+
- `Ginger.Current.Lyrics` accepts `unstyled` to skip default `whiteSpace: pre-wrap` when using `preserveWhitespace` (apply typography via `className` / `style` instead).
|
|
967
|
+
|
|
968
|
+
With `Ginger.Current.TimeRail` / `showBuffered`, **`unstyled`** removes positioning and background layers; you still get percentage widths on inner segments—supply your own layout (e.g. `position: relative` on the rail, bar heights) so the headless variant lays out correctly.
|
|
1003
969
|
|
|
1004
970
|
This gives you a pure state+behavior layer while keeping convenience components available.
|
|
1005
971
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"liveAudioGraph.test.d.ts","sourceRoot":"","sources":["../../src/analyzer/liveAudioGraph.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGingerLiveAnalyzer.test.d.ts","sourceRoot":"","sources":["../../src/analyzer/useGingerLiveAnalyzer.test.tsx"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GingerPlayer.d.ts","sourceRoot":"","sources":["../../src/audio/GingerPlayer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAA+B,MAAM,OAAO,CAAC;AAGlG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3D,WAAW,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,aAAa,CAAC,CAAC;IACnE,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAQF,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,KAAK,EACL,OAAoB,EACpB,WAAW,EACX,oBAA4B,GAC7B,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"GingerPlayer.d.ts","sourceRoot":"","sources":["../../src/audio/GingerPlayer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAA+B,MAAM,OAAO,CAAC;AAGlG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3D,WAAW,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,aAAa,CAAC,CAAC;IACnE,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAQF,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,KAAK,EACL,OAAoB,EACpB,WAAW,EACX,oBAA4B,GAC7B,EAAE,iBAAiB,2CAoInB"}
|
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-CVwaVLpC.cjs"),r=require("./useNextTrackPrefetch-CtZp7EgH.cjs"),a=require("./GingerSplitContexts-C7puo0M7.cjs");exports.Chapters=e.Chapters;exports.Ginger=e.Ginger;exports.LyricsSynced=e.LyricsSynced;exports.clampPlaybackRate=e.clampPlaybackRate;exports.clampVolume=e.clampVolume;exports.defaultGingerLocale=e.defaultGingerLocale;exports.derivePlaybackUiState=e.derivePlaybackUiState;exports.parseLrc=e.parseLrc;exports.useGingerChapters=e.useGingerChapters;exports.useGingerLocale=e.useGingerLocale;exports.useGingerLyricsSync=e.useGingerLyricsSync;exports.usePlayPauseBinding=e.usePlayPauseBinding;exports.useSeekBarBinding=e.useSeekBarBinding;exports.useVolumeSlider=e.useVolumeSlider;exports.attachLiveAnalyser=r.attachLiveAnalyser;exports.detachLiveAnalyser=r.detachLiveAnalyser;exports.useGinger=r.useGinger;exports.useGingerDebugLog=r.useGingerDebugLog;exports.useGingerKeyboardShortcuts=r.useGingerKeyboardShortcuts;exports.useGingerLiveAnalyzer=r.useGingerLiveAnalyzer;exports.useGingerSleepTimer=r.useGingerSleepTimer;exports.useNextTrackPrefetch=r.useNextTrackPrefetch;exports.useSeekDrag=r.useSeekDrag;exports.gingerStateFromContextValues=a.gingerStateFromContextValues;exports.gingerStateFromContexts=a.gingerStateFromContexts;exports.useGingerMedia=a.useGingerMedia;exports.useGingerPlayback=a.useGingerPlayback;exports.useGingerState=a.useGingerState;
|
|
2
2
|
//# sourceMappingURL=client.cjs.map
|
package/dist/client.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { C as s, G as r, L as i, c as n, a as t, d as u, b as g, p as c, u as l, e as o, f as G, g as y, h as d, i as S } from "./ginger-
|
|
2
|
-
import { a as p, d as L, u as b, b as h, c as f, e as k, f as x, g as P, h as C } from "./useNextTrackPrefetch-
|
|
1
|
+
import { C as s, G as r, L as i, c as n, a as t, d as u, b as g, p as c, u as l, e as o, f as G, g as y, h as d, i as S } from "./ginger-G5-3BYSb.js";
|
|
2
|
+
import { a as p, d as L, u as b, b as h, c as f, e as k, f as x, g as P, h as C } from "./useNextTrackPrefetch-Mj8dQLYR.js";
|
|
3
3
|
import { g as A, a as B, u as V, b as D, c as F } from "./GingerSplitContexts-BzBExb95.js";
|
|
4
4
|
export {
|
|
5
5
|
s as Chapters,
|
|
@@ -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;
|
|
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;AAYf,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;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACxB,SAAkB,EAClB,UAAoB,EACpB,aAAa,EACb,cAAc,EACd,QAAQ,EACR,IAAe,EACf,OAAO,EACP,GAAG,IAAI,EACR,EAAE,cAAc,2CAwBhB;yBAjCe,SAAS;;;AAqCzB,MAAM,MAAM,WAAW,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,MAAM,CAAC,EACrB,IAAe,EACf,SAAS,EACT,OAAO,EACP,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,WAAW,2CAkBb;yBAxBe,MAAM;;;AA4BtB,MAAM,MAAM,SAAS,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,wBAAgB,IAAI,CAAC,EACnB,IAAe,EACf,QAAiB,EACjB,SAAS,EACT,OAAO,EACP,GAAG,IAAI,EACR,EAAE,SAAS,2CAiBX;yBAvBe,IAAI;;;AA0BpB,MAAM,MAAM,aAAa,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,wBAAgB,QAAQ,CAAC,EACvB,IAAe,EACf,QAAqB,EACrB,SAAS,EACT,OAAO,EACP,GAAG,IAAI,EACR,EAAE,aAAa,2CAiBf;yBAvBe,QAAQ;;;AA0BxB,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,wBAAgB,OAAO,CAAC,EACtB,IAAe,EACf,QAAoB,EACpB,SAAS,EACT,OAAO,EACP,GAAG,IAAI,EACR,EAAE,YAAY,2CAkBd;yBAxBe,OAAO;;;AA2BvB,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,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B,CAAC;AAEF,wBAAgB,OAAO,CAAC,EACtB,UAAU,EACV,KAAK,EACL,QAAgB,EAChB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,YAAY,2CAqBd;yBA3Be,OAAO;;;AA+BvB,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,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B,CAAC;AAEF,wBAAgB,MAAM,CAAC,EACrB,UAAU,EACV,KAAK,EACL,QAAgB,EAChB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,WAAW,2CAqBb;yBA3Be,MAAM;;;AA+BtB,MAAM,MAAM,SAAS,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,IAAI,CAAC,EACnB,SAAS,EACT,SAAS,EACT,WAAW,EACX,IAAe,EACf,OAAO,EACP,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,SAAS,2CAoBX;yBA5Be,IAAI;;;AAkCpB,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,OAAO,GAAG,UAAU,CACrB,GAAG;IACF,gDAAgD;IAChD,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,KAAoB,EACpB,KAAK,EACL,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,iBAAiB,2CAwBnB;yBA9Be,YAAY"}
|
|
@@ -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;AAG9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,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,
|
|
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;AAG9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,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,kDA8Cd;yBAzDe,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chapters.d.ts","sourceRoot":"","sources":["../../../src/components/current/Chapters.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Chapters.d.ts","sourceRoot":"","sources":["../../../src/components/current/Chapters.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtD,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG;IAC/D,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C,QAAQ,CAAC,EAAE,CACT,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,WAAW,KACf,SAAS,CAAC;CAChB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAgB,EAChB,WAAwB,EACxB,QAAQ,GACT,EAAE,aAAa,kDAiFf;yBAzFe,QAAQ"}
|
|
@@ -4,8 +4,10 @@ export type LyricsProps = DisplayBaseProps & {
|
|
|
4
4
|
children?: (value: string, state: GingerState) => ReactNode;
|
|
5
5
|
/** When true, preserves internal newlines; trims only leading/trailing whitespace */
|
|
6
6
|
preserveWhitespace?: boolean;
|
|
7
|
+
/** When true, skips default `whiteSpace: pre-wrap` when `preserveWhitespace` is true (use `className` / `style` instead). */
|
|
8
|
+
unstyled?: boolean;
|
|
7
9
|
};
|
|
8
|
-
export declare function Lyrics({ className, style, fallback, empty, children, preserveWhitespace, }: LyricsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
10
|
+
export declare function Lyrics({ className, style, fallback, empty, children, preserveWhitespace, unstyled, }: LyricsProps): import("react/jsx-runtime").JSX.Element | null;
|
|
9
11
|
export declare namespace Lyrics {
|
|
10
12
|
var displayName: string;
|
|
11
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Lyrics.d.ts","sourceRoot":"","sources":["../../../src/components/current/Lyrics.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG;IAC3C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;IAC5D,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Lyrics.d.ts","sourceRoot":"","sources":["../../../src/components/current/Lyrics.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAGtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG;IAC3C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;IAC5D,qFAAqF;IACrF,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,6HAA6H;IAC7H,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,wBAAgB,MAAM,CAAC,EACrB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,kBAAyB,EACzB,QAAgB,GACjB,EAAE,WAAW,kDA2Bb;yBAnCe,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LyricsSynced.d.ts","sourceRoot":"","sources":["../../../src/components/current/LyricsSynced.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"LyricsSynced.d.ts","sourceRoot":"","sources":["../../../src/components/current/LyricsSynced.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAItD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CACT,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,WAAW,KACf,SAAS,CAAC;CAChB,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAgB,EAChB,eAAe,EACf,aAAa,EACb,QAAQ,GACT,EAAE,iBAAiB,kDA4DnB;yBArEe,YAAY"}
|
|
@@ -3,7 +3,7 @@ import { DisplayBaseProps, GingerState, PlaybackUiState } from '../../types';
|
|
|
3
3
|
export type PlaybackStateProps = DisplayBaseProps & {
|
|
4
4
|
children?: (value: PlaybackUiState, state: GingerState) => ReactNode;
|
|
5
5
|
};
|
|
6
|
-
export declare function PlaybackState({ className, style, fallback, empty, children }: PlaybackStateProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare function PlaybackState({ className, style, fallback, empty, children, }: PlaybackStateProps): import("react/jsx-runtime").JSX.Element;
|
|
7
7
|
export declare namespace PlaybackState {
|
|
8
8
|
var displayName: string;
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Playback.d.ts","sourceRoot":"","sources":["../../../src/components/current/Playback.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Playback.d.ts","sourceRoot":"","sources":["../../../src/components/current/Playback.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EACX,eAAe,EAChB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,GAAG;IAClD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;CACtE,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE,kBAAkB,2CAsBpB;yBA5Be,aAAa;;;AAgC7B,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG;IACjD,IAAI,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC;IACtC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;CAC7D,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAe,EACf,QAAQ,GACT,EAAE,iBAAiB,kDAqCnB;yBA5Ce,YAAY"}
|
|
@@ -11,7 +11,7 @@ export declare namespace QueueIndex {
|
|
|
11
11
|
export type QueueLengthProps = DisplayBaseProps & {
|
|
12
12
|
children?: (value: string, state: GingerState) => ReactNode;
|
|
13
13
|
};
|
|
14
|
-
export declare function QueueLength({ className, style, fallback, empty, children }: QueueLengthProps): import("react/jsx-runtime").JSX.Element | null;
|
|
14
|
+
export declare function QueueLength({ className, style, fallback, empty, children, }: QueueLengthProps): import("react/jsx-runtime").JSX.Element | null;
|
|
15
15
|
export declare namespace QueueLength {
|
|
16
16
|
var displayName: string;
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueueMeta.d.ts","sourceRoot":"","sources":["../../../src/components/current/QueueMeta.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG;IAC/C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;CAC7D,CAAC;AAEF,wBAAgB,UAAU,CAAC,EACzB,IAAQ,EACR,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"QueueMeta.d.ts","sourceRoot":"","sources":["../../../src/components/current/QueueMeta.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG;IAC/C,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;CAC7D,CAAC;AAEF,wBAAgB,UAAU,CAAC,EACzB,IAAQ,EACR,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE,eAAe,kDAmCjB;yBA1Ce,UAAU;;;AA8C1B,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,GAAG;IAChD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;CAC7D,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE,gBAAgB,kDA8BlB;yBApCe,WAAW;;;AAwC3B,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,GAAG;IAClD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,CACT,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EACvD,KAAK,EAAE,WAAW,KACf,SAAS,CAAC;CAChB,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAC5B,IAAQ,EACR,SAAiB,EACjB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE,kBAAkB,kDAiCpB;yBAzCe,aAAa"}
|
|
@@ -23,7 +23,7 @@ export type ProgressProps = DisplayBaseProps & {
|
|
|
23
23
|
duration: number;
|
|
24
24
|
}, state: GingerState) => ReactNode;
|
|
25
25
|
};
|
|
26
|
-
export declare function Progress({ className, style, fallback, empty, children }: ProgressProps): import("react/jsx-runtime").JSX.Element | null;
|
|
26
|
+
export declare function Progress({ className, style, fallback, empty, children, }: ProgressProps): import("react/jsx-runtime").JSX.Element | null;
|
|
27
27
|
export declare namespace Progress {
|
|
28
28
|
var displayName: string;
|
|
29
29
|
}
|
|
@@ -45,7 +45,7 @@ export type BufferRailProps = DisplayBaseProps & {
|
|
|
45
45
|
unstyled?: boolean;
|
|
46
46
|
};
|
|
47
47
|
/** Buffered portion of the timeline (0…`bufferedFraction`); pair with `TimeRail` or use alone. */
|
|
48
|
-
export declare function BufferRail({ className, style, height, unstyled }: BufferRailProps): import("react/jsx-runtime").JSX.Element;
|
|
48
|
+
export declare function BufferRail({ className, style, height, unstyled, }: BufferRailProps): import("react/jsx-runtime").JSX.Element;
|
|
49
49
|
export declare namespace BufferRail {
|
|
50
50
|
var displayName: string;
|
|
51
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;
|
|
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;AAQrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,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;AA6CF,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,CACT,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAClE,KAAK,EAAE,WAAW,KACf,SAAS,CAAC;CAChB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EACvB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,GACT,EAAE,aAAa,kDAkCf;yBAxCe,QAAQ;;;AA4CxB,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,2CAmDf;yBAzDe,QAAQ;;;AA6DxB,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,EACzB,SAAS,EACT,KAAK,EACL,MAAU,EACV,QAAgB,GACjB,EAAE,eAAe,2CAiCjB;yBAtCe,UAAU"}
|
|
@@ -2,7 +2,7 @@ import { TextDisplayProps } from './createTextDisplay';
|
|
|
2
2
|
export type YearProps = TextDisplayProps & {
|
|
3
3
|
format?: (year: number) => string;
|
|
4
4
|
};
|
|
5
|
-
export declare function Year({ className, style, fallback, empty, children, format }: YearProps): import("react/jsx-runtime").JSX.Element | null;
|
|
5
|
+
export declare function Year({ className, style, fallback, empty, children, format, }: YearProps): import("react/jsx-runtime").JSX.Element | null;
|
|
6
6
|
export declare namespace Year {
|
|
7
7
|
var displayName: string;
|
|
8
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Year.d.ts","sourceRoot":"","sources":["../../../src/components/current/Year.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,MAAM,SAAS,GAAG,gBAAgB,GAAG;IACzC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACnC,CAAC;AAEF,wBAAgB,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"Year.d.ts","sourceRoot":"","sources":["../../../src/components/current/Year.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,MAAM,SAAS,GAAG,gBAAgB,GAAG;IACzC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACnC,CAAC;AAEF,wBAAgB,IAAI,CAAC,EACnB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,MAAM,GACP,EAAE,SAAS,kDAuBX;yBA9Be,IAAI"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pause.d.ts","sourceRoot":"","sources":["../../../src/components/icons/Pause.tsx"],"names":[],"mappings":"AAEA,wBAAgB,KAAK,4CAMpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Play.d.ts","sourceRoot":"","sources":["../../../src/components/icons/Play.tsx"],"names":[],"mappings":"AACA,wBAAgB,IAAI,4CAMnB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ReactNode, SVGProps } from 'react';
|
|
2
|
+
export declare function Wrapper(props: SVGProps<SVGSVGElement> & {
|
|
3
|
+
className?: string;
|
|
4
|
+
width?: number;
|
|
5
|
+
height?: number;
|
|
6
|
+
viewBox?: string;
|
|
7
|
+
fill?: string;
|
|
8
|
+
stroke?: string;
|
|
9
|
+
strokeWidth?: number;
|
|
10
|
+
strokeLinecap?: string;
|
|
11
|
+
strokeLinejoin?: string;
|
|
12
|
+
children?: ReactNode;
|
|
13
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=Wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Wrapper.d.ts","sourceRoot":"","sources":["../../../src/components/icons/Wrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjD,wBAAgB,OAAO,CACrB,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,2CAiCF"}
|
|
@@ -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;AAE3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,eAAO,MAAM,KAAK,
|
|
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;AAE3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,eAAO,MAAM,KAAK,yGAGjB,CAAC;AACF,eAAO,MAAM,QAAQ,yGAGpB,CAAC;AACF,eAAO,MAAM,WAAW,yGAGvB,CAAC;AACF,eAAO,MAAM,SAAS,yGAGrB,CAAC;AAEF,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,EACtB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAgB,EAChB,QAAQ,GACT,EAAE,iBAAiB,kDAyCnB;yBAhDe,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GingerLocaleContext.d.ts","sourceRoot":"","sources":["../../src/context/GingerLocaleContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD,eAAO,MAAM,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"GingerLocaleContext.d.ts","sourceRoot":"","sources":["../../src/context/GingerLocaleContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD,eAAO,MAAM,mBAAmB,EAAE,oBAoBjC,CAAC;AAaF,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvC,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAGA;AAED,wBAAgB,eAAe,IAAI,oBAAoB,CAEtD"}
|
|
@@ -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, unstyled, 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, asChild, 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":"
|
|
1
|
+
{"version":3,"file":"GingerProvider.d.ts","sourceRoot":"","sources":["../../src/context/GingerProvider.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAEV,mBAAmB,EAKpB,MAAM,UAAU,CAAC;AAuBlB,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,OAAe,EACf,SAAS,EACT,KAAK,EACL,aAAa,EACb,MAAM,EACN,OAAO,EACP,UAAU,EACV,OAAO,GACR,EAAE,mBAAmB,2CAqiBrB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const l=require("react/jsx-runtime"),f=require("react"),b=require("./GingerSplitContexts-C7puo0M7.cjs"),Be=f.createContext(null);function wr(){const e=f.useContext(Be);if(!e)throw new Error("Ginger components must be used within <Ginger.Provider>");return e}function Ue(e){const{buffered:r,duration:n}=e;return!(n>0)||r.length===0?0:Math.min(1,r.end(r.length-1)/n)}function Dr({className:e,style:r,preload:n="metadata",crossOrigin:a,respectReducedMotion:t=!1}){var E;const{audioRef:i,dispatch:o,state:u,notifyEnded:c}=wr(),s=((E=u.tracks[u.currentIndex])==null?void 0:E.fileUrl)??"",m=f.useRef({currentTime:-1,duration:-1,bufferedFraction:-1}),y=f.useRef(""),[v,h]=f.useState(!1);f.useEffect(()=>{if(!t||typeof window>"u")return;const p=window.matchMedia("(prefers-reduced-motion: reduce)"),S=()=>h(p.matches);return S(),p.addEventListener("change",S),()=>p.removeEventListener("change",S)},[t]);const k=(p,S=!1)=>{const A={currentTime:p.currentTime,duration:p.duration,bufferedFraction:Ue(p)},C=m.current,q=v?.5:.25,z=Math.abs(A.currentTime-C.currentTime)>=q||Math.abs(A.duration-C.duration)>=.01||Math.abs(A.bufferedFraction-C.bufferedFraction)>=.01;!S&&!z||(m.current=A,o({type:"MEDIA_TIME_UPDATE",payload:A}))};return f.useEffect(()=>{const p=i.current;p&&(p.volume=u.volume,p.muted=u.muted)},[i,u.volume,u.muted]),f.useEffect(()=>{const p=i.current;if(p){if(!s){p.removeAttribute("src"),m.current={currentTime:-1,duration:-1,bufferedFraction:-1},y.current!==""&&o({type:"MEDIA_SOURCE_CLEARED"}),y.current="";return}p.getAttribute("src")!==s&&(p.src=s,p.load(),m.current={currentTime:-1,duration:-1,bufferedFraction:-1}),y.current=s}},[i,o,u.currentIndex,u.tracks,s]),f.useEffect(()=>{const p=i.current;p&&(p.playbackRate=u.playbackRate)},[i,u.playbackRate,s]),l.jsx("audio",{"data-ginger-component":"Player",ref:i,className:e,style:r,preload:n,crossOrigin:a,controls:!1,playsInline:!0,onTimeUpdate:p=>{k(p.currentTarget)},onLoadedMetadata:p=>{const S=p.currentTarget;m.current={currentTime:-1,duration:-1,bufferedFraction:-1},o({type:"MEDIA_LOADED_METADATA",payload:{duration:S.duration,bufferedFraction:Ue(S)}})},onSeeking:p=>k(p.currentTarget,!0),onSeeked:p=>k(p.currentTarget,!0),onEnded:()=>c(),onPlay:()=>o({type:"MEDIA_PLAY"}),onPause:()=>o({type:"MEDIA_PAUSE"}),onWaiting:()=>o({type:"MEDIA_WAITING"}),onCanPlay:()=>o({type:"MEDIA_CANPLAY"}),onProgress:p=>k(p.currentTarget,!0),onVolumeChange:p=>{const S=p.currentTarget;o({type:"MEDIA_VOLUME_SYNC",payload:{volume:S.volume,muted:S.muted}})},onError:()=>{var C;const p=i.current,S=(C=p==null?void 0:p.error)==null?void 0:C.code;o({type:"MEDIA_ERROR",payload:{message:S===1?"MEDIA_ERR_ABORTED":S===2?"MEDIA_ERR_NETWORK":S===3?"MEDIA_ERR_DECODE":S===4?"MEDIA_ERR_SRC_NOT_SUPPORTED":"MEDIA_ERR_UNKNOWN"}})}})}const Q={seek:"Seek",volume:"Volume",playbackSpeed:"Playback speed",chaptersList:"Chapters",syncedLyricsList:"Synced lyrics",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 Fr(e){return e?{...Q,...e,repeat:{...Q.repeat,...e.repeat}}:Q}const $e=f.createContext(Q);function Ur({locale:e,children:r}){const n=Fr(e);return l.jsx($e.Provider,{value:n,children:r})}function I(){return f.useContext($e)}function H(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 P(e,r){return r<=0?0:Math.max(0,Math.min(r-1,e))}function Oe(e,r){if(e.length<=1)return[...e];const n=e[r];if(!n)return[...e];const a=e.filter((t,i)=>i!==r);for(let t=a.length-1;t>0;t--){const i=Math.floor(Math.random()*(t+1));[a[t],a[i]]=[a[i],a[t]]}return[n,...a]}function K(e){return e?e.id!=null&&e.id!==""?`id:${e.id}`:`file:${e.fileUrl}`:""}function Vr(e,r){var o,u;if(!r)return 0;const n=e.findIndex(c=>c===r);if(n!==-1)return n;const a=K(r);if(!a)return 0;const t=[];for(let c=0;c<e.length;c+=1)K(e[c])===a&&t.push(c);if(t.length===0)return 0;if(t.length===1)return t[0];const i=typeof globalThis<"u"&&"process"in globalThis?(u=(o=globalThis.process)==null?void 0:o.env)==null?void 0:u.NODE_ENV:void 0;return i!=null&&i!=="production"&&console.warn("[@lucaismyname/ginger] Ambiguous track identity: multiple queue rows share the same fileUrl without a unique `id`. Resolving to the first match."),t[0]}function Ye(e,r,n){const a=[...e],t=Math.max(0,Math.min(a.length,n??a.length));return a.splice(t,0,r),a}function Br(e,r){if(r<0||r>=e.length)return[...e];const n=[...e];return n.splice(r,1),n}function $r(e,r,n){if(r===n||r<0||r>=e.length||n<0||n>=e.length)return[...e];const a=[...e],[t]=a.splice(r,1);return t?(a.splice(n,0,t),a):[...e]}function Or(e,r,n){return Ye(e,n,Math.max(0,Math.min(e.length,r+1)))}function Yr(e){const{tracks:r,currentIndex:n,repeatMode:a,playbackMode:t}=e,i=r.length;return i===0?{kind:"stop",nextIndex:0}:a==="one"?{kind:"replay_same"}:t==="single"?{kind:"stop",nextIndex:P(n,i)}:n<i-1?{kind:"advance",nextIndex:n+1}:a==="all"?{kind:"wrap",nextIndex:0}:{kind:"stop",nextIndex:P(n,i)}}function Qe(e){const{tracks:r,currentIndex:n,repeatMode:a,playbackMode:t}=e,i=r.length;return i===0?0:t==="single"?P(n,i):n<i-1?n+1:a==="all"?0:P(n,i)}function Qr(e){const{tracks:r,currentIndex:n,repeatMode:a,playbackMode:t}=e,i=r.length;return i===0?0:t==="single"?P(n,i):n>0?n-1:a==="all"?i-1:0}function Hr(e){return e==="off"?"all":e==="all"?"one":"off"}function He(e,r){return(e==null?void 0:e.artworkUrl)??r??void 0}function Kr(e,r){return(e==null?void 0:e.album)??r??void 0}function N(e){return e.tracks[e.currentIndex]??null}function Ae(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 O(e){var a;const r=e.duration;if(Number.isFinite(r)&&r>0)return r;const n=(a=e.tracks[e.currentIndex])==null?void 0:a.durationSeconds;return typeof n=="number"&&Number.isFinite(n)&&n>0?n:0}function Ke(e){const n=O(e)-e.currentTime;return Number.isFinite(n)?Math.max(0,n):0}function Re(e){const r=O(e);return r>0?Math.min(1,Math.max(0,e.currentTime/r)):0}function Xe(e){var n;const r=N(e);return He(r,(n=e.playlistMeta)==null?void 0:n.artworkUrl)}function qe(e){var n;const r=N(e);return Kr(r,(n=e.playlistMeta)==null?void 0:n.subtitle)}function ze(){const e=b.useGingerPlayback(),r=b.useGingerMedia(),n=I(),a=f.useMemo(()=>b.gingerStateFromContextValues(e,r),[e,r]),t=O(a),i=t>0?a.currentTime:0,o=Number.isFinite(i)?i:0,u=t>0?`${H(o)} of ${H(t)}`:H(o),c=s=>{r.seek(Number(s.currentTarget.value))};return{state:a,value:o,min:0,max:t>0?t:1,step:"any",ariaValueText:u,ariaLabel:n.seek,onSeekInput:c,onSeekChange:c}}function We(){const e=b.useGingerPlayback(),r=b.useGingerMedia(),n=I(),a=f.useMemo(()=>b.gingerStateFromContextValues(e,r),[e,r]),t=i=>{r.setVolume(Number(i.currentTarget.value))};return{state:a,value:a.volume,min:0,max:1,step:"any",ariaValueText:`${Math.round(a.volume*100)}%`,ariaLabel:n.volume,onVolumeInput:t,onVolumeChange:t}}function Je(e){const r=b.useGingerPlayback(),n=I(),a=(e==null?void 0:e.playAriaLabel)??n.play,t=(e==null?void 0:e.pauseAriaLabel)??n.pause;return{isPaused:r.isPaused,toggle:r.togglePlayPause,ariaLabel:r.isPaused?a:t}}function Ze({playLabel:e="Play",pauseLabel:r="Pause",playAriaLabel:n,pauseAriaLabel:a,children:t,type:i="button",onClick:o,...u}){const c=I(),s=typeof e=="string"?e:c.play,m=typeof r=="string"?r:c.pause,y=Je({playAriaLabel:n??s,pauseAriaLabel:a??m});return l.jsx("button",{"data-ginger-component":"PlayPause",...u,type:i,"aria-label":y.ariaLabel,onClick:v=>{y.toggle(),o==null||o(v)},children:t??(y.isPaused?e:r)})}Ze.displayName="Ginger.Control.PlayPause";function er({type:e="button",ariaLabel:r,onClick:n,children:a,...t}){const{repeatMode:i,cycleRepeat:o}=b.useGingerPlayback(),c=I().repeat[i];return l.jsx("button",{"data-ginger-component":"Repeat",...t,type:e,"aria-label":r??c,onClick:s=>{o(),n==null||n(s)},children:a??c})}er.displayName="Ginger.Control.Repeat";function rr({type:e="button",children:r="Next",ariaLabel:n,onClick:a,...t}){const{next:i}=b.useGingerPlayback(),o=I();return l.jsx("button",{"data-ginger-component":"Next",...t,type:e,"aria-label":n??o.nextTrack,onClick:u=>{i(),a==null||a(u)},children:r??o.nextTrack})}rr.displayName="Ginger.Control.Next";function nr({type:e="button",children:r="Previous",ariaLabel:n,onClick:a,...t}){const{prev:i}=b.useGingerPlayback(),o=I();return l.jsx("button",{"data-ginger-component":"Previous",...t,type:e,"aria-label":n??o.previousTrack,onClick:u=>{i(),a==null||a(u)},children:r})}nr.displayName="Ginger.Control.Previous";function tr({type:e="button",children:r="Shuffle",ariaLabel:n,onClick:a,...t}){const{isShuffled:i,toggleShuffle:o}=b.useGingerPlayback(),u=I();return l.jsx("button",{"data-ginger-component":"Shuffle",...t,type:e,"aria-pressed":i,"aria-label":n??u.shuffle,onClick:c=>{o(),a==null||a(c)},children:r??u.shuffle})}tr.displayName="Ginger.Control.Shuffle";function ar({inputStyle:e,style:r,unstyled:n=!1,ariaLabel:a,...t}){const i=ze(),o=n?{...r,...e}:{width:"100%",...r,...e};return l.jsx("input",{"data-ginger-component":"SeekBar",...t,type:"range",min:i.min,max:i.max,step:i.step,value:i.value,"aria-label":a??i.ariaLabel,"aria-valuetext":i.ariaValueText,onInput:i.onSeekInput,onChange:i.onSeekChange,style:o})}ar.displayName="Ginger.Control.SeekBar";function ir({inputStyle:e,style:r,unstyled:n=!1,ariaLabel:a,...t}){const i=We(),o=n?{...r,...e}:{width:"100%",...r,...e};return l.jsx("input",{"data-ginger-component":"Volume",...t,type:"range",min:i.min,max:i.max,step:i.step,value:i.value,"aria-label":a??i.ariaLabel,"aria-valuetext":i.ariaValueText,onInput:i.onVolumeInput,onChange:i.onVolumeChange,style:o})}ir.displayName="Ginger.Control.Volume";function or({ariaLabel:e,muteLabel:r,unmuteLabel:n,type:a="button",onClick:t,children:i,...o}){const{muted:u,toggleMute:c}=b.useGingerMedia(),s=I(),m=r??s.mute,y=n??s.unmute;return l.jsx("button",{"data-ginger-component":"Mute",...o,type:a,"aria-pressed":u,"aria-label":e??(u?s.unmute:s.mute),onClick:v=>{c(),t==null||t(v)},children:i??(u?y:m)})}or.displayName="Ginger.Control.Mute";const Xr=[.5,.75,1,1.25,1.5,2];function ur({rates:e=Xr,style:r,ariaLabel:n,children:a,...t}){const{playbackRate:i,setPlaybackRate:o}=b.useGingerMedia(),u=I(),c=f.useMemo(()=>Array.from(new Set([...e,i])).sort((s,m)=>s-m),[e,i]);return l.jsx("select",{"data-ginger-component":"PlaybackRate",...t,"aria-label":n??u.playbackSpeed,value:String(i),style:r,onChange:s=>o(Number(s.currentTarget.value)),children:a??c.map(s=>l.jsx("option",{value:String(s),children:s===1?u.playbackRateNormal:u.playbackRateTimes(s)},s))})}ur.displayName="Ginger.Control.PlaybackRate";function U(e,r){function n(a){const t=b.useGingerState(),o=(r(t)??"").trim(),{className:u,style:c,fallback:s,empty:m,children:y}=a;if(!o){const v=m??s??null;return v?l.jsx("span",{className:u,style:c,children:v}):null}return y?l.jsx("span",{className:u,style:c,children:y(o,t)}):l.jsx("span",{className:u,style:c,children:o})}return n.displayName=e,n}function V(e,r){return U(e,n=>r(N(n)))}const qr=V("Ginger.Current.Title",e=>e==null?void 0:e.title),zr=V("Ginger.Current.Artist",e=>e==null?void 0:e.artist),Wr=U("Ginger.Current.Album",e=>qe(e)),Jr=V("Ginger.Current.Description",e=>e==null?void 0:e.description),Zr=U("Ginger.Current.Copyright",e=>{var n;const r=N(e);return(r==null?void 0:r.copyright)??((n=e.playlistMeta)==null?void 0:n.copyright)}),en=V("Ginger.Current.Genre",e=>e==null?void 0:e.genre),rn=V("Ginger.Current.Label",e=>e==null?void 0:e.label),nn=V("Ginger.Current.Isrc",e=>e==null?void 0:e.isrc),tn=V("Ginger.Current.TrackNumber",e=>(e==null?void 0:e.trackNumber)!=null?String(e.trackNumber):void 0);function sr({className:e,style:r,fallback:n,empty:a,children:t,format:i}){var s;const o=b.useGingerState(),u=(s=N(o))==null?void 0:s.year;if(typeof u!="number"||!Number.isFinite(u)){const m=a??n??null;return m?l.jsx("span",{"data-ginger-component":"Year",className:e,style:r,children:m}):null}const c=i?i(u):String(u);return t?l.jsx("span",{"data-ginger-component":"Year",className:e,style:r,children:t(c,o)}):l.jsx("span",{"data-ginger-component":"Year",className:e,style:r,children:c})}sr.displayName="Ginger.Current.Year";function cr({className:e,style:r,fallback:n,empty:a,children:t,preserveWhitespace:i=!0,unstyled:o=!1}){var y;const u=b.useGingerState(),c=((y=N(u))==null?void 0:y.lyrics)??"",s=i?c.replace(/^\s+|\s+$/g,""):c.trim();if(!s){const v=a??n??null;return v?l.jsx("span",{"data-ginger-component":"Lyrics",className:e,style:r,children:v}):null}const m=!o&&i?{whiteSpace:"pre-wrap"}:void 0;return t?l.jsx("span",{className:e,style:{...m,...r},children:t(s,u)}):l.jsx("span",{className:e,style:{...m,...r},children:s})}cr.displayName="Ginger.Current.Lyrics";const Ve=/\[(\d{1,2}):(\d{2})(?:\.(\d{1,3}))?\]/g;function lr(e){const r=[];for(const n of e.split(/\r?\n/)){const a=[...n.matchAll(Ve)];if(a.length===0)continue;const t=n.replace(Ve,"").trim();for(const i of a){const o=Number(i[1]??0),u=Number(i[2]??0),c=Number((i[3]??"0").padEnd(3,"0")),s=o*60+u+c/1e3;Number.isFinite(s)&&s>=0&&r.push({time:s,text:t})}}return r.sort((n,a)=>n.time-a.time)}function dr(){const{tracks:e,currentIndex:r}=b.useGingerPlayback(),{currentTime:n}=b.useGingerMedia(),a=e[r],t=f.useMemo(()=>a?Array.isArray(a.lyricsTimed)&&a.lyricsTimed.length>0?[...a.lyricsTimed].filter(o=>Number.isFinite(o.time)&&o.time>=0).sort((o,u)=>o.time-u.time):typeof a.lyrics=="string"?lr(a.lyrics):[]:[],[a]),i=f.useMemo(()=>{for(let o=t.length-1;o>=0;o-=1)if(n>=t[o].time)return o;return-1},[n,t]);return{lines:t,activeIndex:i,activeLine:i>=0?t[i]??null:null}}function Ge({className:e,style:r,fallback:n,empty:a,unstyled:t=!1,activeClassName:i,lineClassName:o,children:u}){const c=b.useGingerState(),s=I(),{lines:m,activeIndex:y}=dr();if(m.length===0){const h=a??n??null;return h?l.jsx("span",{"data-ginger-component":"LyricsSynced",className:e,style:r,children:h}):null}const v=t?{}:{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)"};return l.jsx("ul",{className:e,style:{...v,...r},"aria-label":s.syncedLyricsList,children:m.map((h,k)=>{const E=k===y;return l.jsx("li",{"aria-current":E?"true":void 0,"data-ginger-active":E||void 0,className:[o,E?i:void 0].filter(Boolean).join(" ")||void 0,style:t?void 0:{padding:"var(--ginger-playlist-row-padding, 4px 8px)",fontWeight:E?600:400,opacity:E?1:.75},children:u?u(h,k,E,c):h.text},`${h.time}-${k}`)})})}Ge.displayName="Ginger.Current.LyricsSynced";function fr(){const{tracks:e,currentIndex:r}=b.useGingerPlayback(),{currentTime:n,seek:a}=b.useGingerMedia(),t=f.useMemo(()=>{var u;return[...((u=e[r])==null?void 0:u.chapters)??[]].filter(c=>c&&Number.isFinite(c.startSeconds)&&c.startSeconds>=0).sort((c,s)=>c.startSeconds-s.startSeconds)},[r,e]),i=f.useMemo(()=>{if(t.length===0)return-1;for(let o=t.length-1;o>=0;o-=1)if(n>=t[o].startSeconds)return o;return-1},[n,t]);return{list:t,activeIndex:i,active:i>=0?t[i]??null:null,seekTo:o=>{const u=t[o];u&&a(u.startSeconds)}}}function Ce({className:e,style:r,fallback:n,empty:a,unstyled:t=!1,formatStart:i=H,children:o}){const u=b.useGingerState(),c=I(),{list:s,activeIndex:m,seekTo:y}=fr();if(s.length===0){const h=a??n??null;return h?l.jsx("span",{"data-ginger-component":"Chapters",className:e,style:r,children:h}):null}const v=t?{}:{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)"};return l.jsx("ul",{className:e,style:{...v,...r},"aria-label":c.chaptersList,children:s.map((h,k)=>{const E=k===m;return l.jsx("li",{children:l.jsx("button",{type:"button","aria-current":E?"true":void 0,"data-ginger-active":E||void 0,onClick:()=>y(k),style:{width:t?void 0:"100%",textAlign:t?void 0:"left",border:t?void 0:"none",background:t?void 0:E?"var(--ginger-playlist-active-bg, rgba(17, 24, 39, 0.06))":"transparent",color:t?void 0:"inherit",font:t?void 0:"inherit",cursor:t?void 0:"pointer",padding:t?void 0:"var(--ginger-playlist-row-padding, 6px 8px)"},children:o?o(h,k,E,u):t?l.jsxs(l.Fragment,{children:[i(h.startSeconds)," ",h.title]}):l.jsxs("span",{children:[l.jsx("span",{style:{opacity:.75,marginRight:"0.35em"},children:i(h.startSeconds)}),h.title]})})},`${h.startSeconds}-${h.title}`)})})}Ce.displayName="Ginger.Current.Chapters";function gr({visible:e=!1,className:r,style:n,fallback:a,empty:t,children:i}){var c;const o=b.useGingerState();if(!e)return null;const u=((c=N(o))==null?void 0:c.fileUrl)??"";if(!u){const s=t??a??null;return s?l.jsx("span",{className:r,style:n,children:s}):null}return i?l.jsx("span",{"data-ginger-component":"FileUrl",className:r,style:n,children:i(u,o)}):l.jsx("span",{className:r,style:n,children:u})}gr.displayName="Ginger.Current.FileUrl";function pr({className:e,style:r,fallback:n,empty:a,sizes:t,loading:i,onError:o,decoding:u,unstyled:c=!1,imgStyle:s}){const m=b.useGingerState(),y=N(m),v=Xe(m);if(!v){const k=a??n??null;return k?l.jsx("span",{className:e,style:r,children:k}):null}const h=[y==null?void 0:y.title,y==null?void 0:y.artist].filter(Boolean).join(" — ")||"Artwork";return l.jsx("div",{"data-ginger-component":"Artwork",className:e,style:c?{...r}:{background:"var(--ginger-artwork-bg, transparent)",borderRadius:"var(--ginger-artwork-radius, 0)",overflow:"hidden",...r},children:l.jsx("img",{src:v,alt:h,sizes:t,loading:i,decoding:u,onError:o,style:{display:c?void 0:"block",width:c?void 0:"100%",height:c?void 0:"100%",objectFit:c?void 0:"cover",...s}})})}pr.displayName="Ginger.Current.Artwork";function mr({base:e=0,className:r,style:n,fallback:a,empty:t,children:i}){const o=b.useGingerState();if(o.tracks.length===0){const s=t??a??null;return s?l.jsx("span",{"data-ginger-component":"QueueIndex",className:r,style:n,children:s}):null}const c=String(o.currentIndex+e);return i?l.jsx("span",{"data-ginger-component":"QueueIndex",className:r,style:n,children:i(c,o)}):l.jsx("span",{"data-ginger-component":"QueueIndex",className:r,style:n,children:c})}mr.displayName="Ginger.Current.QueueIndex";function yr({className:e,style:r,fallback:n,empty:a,children:t}){const i=b.useGingerState(),o=String(i.tracks.length);if(i.tracks.length===0){const u=a??n??null;return u?l.jsx("span",{className:e,style:r,children:u}):null}return t?l.jsx("span",{"data-ginger-component":"QueueLength",className:e,style:r,children:t(o,i)}):l.jsx("span",{"data-ginger-component":"QueueLength",className:e,style:r,children:o})}yr.displayName="Ginger.Current.QueueLength";function br({base:e=0,separator:r=" / ",className:n,style:a,fallback:t,empty:i,children:o}){const u=b.useGingerState(),c=u.tracks.length;if(c===0){const v=i??t??null;return v?l.jsx("span",{className:n,style:a,children:v}):null}const s=String(u.currentIndex+e),m=String(c),y=`${s}${r}${m}`;return o?l.jsx("span",{"data-ginger-component":"QueuePosition",className:n,style:a,children:o({index:s,length:m,label:y},u)}):l.jsx("span",{"data-ginger-component":"QueuePosition",className:n,style:a,children:y})}br.displayName="Ginger.Current.QueuePosition";function je(e,r,n){const{className:a,style:t,fallback:i,empty:o,children:u,format:c=H}=n;if(!(e>=0)||!Number.isFinite(e)){const m=o??i??null;return m?l.jsx("span",{"data-ginger-component":"TimeText",className:a,style:t,children:m}):null}const s=c(e);return u?l.jsx("span",{"data-ginger-component":"TimeText",className:a,style:t,children:u(s,r)}):l.jsx("span",{"data-ginger-component":"TimeText",className:a,style:t,children:s})}function xr(e){const r=b.useGingerState();return je(r.currentTime,r,e)}xr.displayName="Ginger.Current.Elapsed";function hr(e){const r=b.useGingerState();return je(O(r),r,e)}hr.displayName="Ginger.Current.Duration";function vr(e){const r=b.useGingerState();return je(Ke(r),r,e)}vr.displayName="Ginger.Current.Remaining";function kr({className:e,style:r,fallback:n,empty:a,children:t}){const i=b.useGingerState(),o=O(i),u=Re(i);if(!(o>0)){const c=a??n??null;return c?l.jsx("span",{"data-ginger-component":"Progress",className:e,style:r,children:c}):null}return t?l.jsx("span",{"data-ginger-component":"Progress",className:e,style:r,children:t({fraction:u,currentTime:i.currentTime,duration:o},i)}):l.jsx("span",{"data-ginger-component":"Progress",className:e,style:r,children:`${Math.round(u*100)}%`})}kr.displayName="Ginger.Current.Progress";function Mr({className:e,style:r,height:n=4,showBuffered:a=!1,unstyled:t=!1}){const i=b.useGingerState(),o=`${Math.round(Re(i)*100)}%`,u=`${Math.round(Math.min(1,Math.max(0,i.bufferedFraction))*100)}%`;return l.jsxs("div",{"data-ginger-component":"TimeRail",className:e,style:t?{...r}:{width:"100%",height:n,background:"var(--ginger-muted-color, #e5e7eb)",borderRadius:999,overflow:"hidden",position:"relative",...r},"aria-hidden":!0,children:[a?l.jsx("div",{"data-ginger-component":"TimeRail",style:{position:t?void 0:"absolute",left:t?void 0:0,top:t?void 0:0,height:t?void 0:"100%",width:u,background:t?void 0:"var(--ginger-buffer-color, rgba(107, 114, 128, 0.35))"}}):null,l.jsx("div",{"data-ginger-component":"TimeRail",style:{position:t?void 0:"relative",width:o,height:t?void 0:"100%",background:t?void 0:"var(--ginger-primary-color, #111827)"}})]})}Mr.displayName="Ginger.Current.TimeRail";function Tr({className:e,style:r,height:n=4,unstyled:a=!1}){const t=b.useGingerState(),i=`${Math.round(Math.min(1,Math.max(0,t.bufferedFraction))*100)}%`;return l.jsx("div",{"data-ginger-component":"BufferRail",className:e,style:a?{...r}:{width:"100%",height:n,background:"var(--ginger-muted-color, #e5e7eb)",borderRadius:999,overflow:"hidden",...r},"aria-hidden":!0,children:l.jsx("div",{"data-ginger-component":"BufferRail",style:{width:i,height:a?void 0:"100%",background:a?void 0:"var(--ginger-buffer-color, rgba(107, 114, 128, 0.35))"}})})}Tr.displayName="Ginger.Current.BufferRail";function Er({className:e,style:r,fallback:n,empty:a,children:t}){const i=b.useGingerState(),o=Ae(i);return t?l.jsx("span",{"data-ginger-component":"PlaybackState",className:e,style:r,children:t(o,i)}):l.jsx("span",{"data-ginger-component":"PlaybackState",className:e,style:r,children:o})}Er.displayName="Ginger.Current.PlaybackState";function Sr({className:e,style:r,fallback:n,empty:a,live:t="polite",children:i}){const o=b.useGingerState(),u=o.errorMessage??"";if(!u){const c=a??n??null;return c?l.jsx("span",{"data-ginger-component":"ErrorMessage",className:e,style:r,children:c}):null}return i?l.jsx("span",{"data-ginger-component":"ErrorMessage",className:e,style:r,"aria-live":t,children:i(u,o)}):l.jsx("span",{"data-ginger-component":"ErrorMessage",className:e,style:r,"aria-live":t,children:u})}Sr.displayName="Ginger.Current.ErrorMessage";const Ie=f.createContext(null);function an(){const e=f.useContext(Ie);if(!e)throw new Error("Ginger.Playlist.Track must be used inside <Ginger.Playlist>");return e}function Pr({children:e,unstyled:r=!1,rowStyle:n,renderTrack:a,playOnSelect:t=!0,style:i,...o}){const{tracks:u,currentIndex:c,playTrackAt:s,selectTrackAt:m}=b.useGingerPlayback(),y=r?{...i}:{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)",...i};return e!==void 0?l.jsx(Ie.Provider,{value:{playOnSelect:t},children:l.jsx("ul",{style:y,...o,children:e})}):l.jsx(Ie.Provider,{value:{playOnSelect:t},children:l.jsx("ul",{"data-ginger-component":"Playlist",style:y,...o,children:u.map((h,k)=>{const E=k===c;return l.jsx("li",{children:l.jsx("button",{type:"button",onClick:()=>{t?s(k):m(k)},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)",...n},children:a?a(h,k,E):l.jsxs("span",{children:[h.title,h.artist?` — ${h.artist}`:""]})})},`${k}-${K(h)}`)})})})}Pr.displayName="Ginger.Playlist";function Ir({index:e,unstyled:r=!1,className:n,style:a,children:t,liProps:i,onClick:o,...u}){const{playOnSelect:c}=an(),{tracks:s,currentIndex:m,playTrackAt:y,selectTrackAt:v}=b.useGingerPlayback(),h=e===m,k=s[e],E=k!=null?l.jsxs("span",{children:[k.title,k.artist?` — ${k.artist}`:""]}):null;return l.jsx("li",{...i,children:l.jsx("button",{type:"button","aria-current":h?"true":void 0,"data-ginger-active":h||void 0,className:n,style:{width:r?void 0:"100%",textAlign:r?void 0:"left",border:r?void 0:"none",background:r?void 0:h?"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)",...a},...u,onClick:p=>{o==null||o(p),!p.defaultPrevented&&(c?y(e):v(e))},children:t??E})})}Ir.displayName="Ginger.Playlist.Track";const on=Object.assign(Pr,{Track:Ir}),un=U("Ginger.Queue.Title",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.title}),sn=U("Ginger.Queue.Subtitle",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.subtitle}),cn=U("Ginger.Queue.Description",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.description}),ln=U("Ginger.Queue.Copyright",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.copyright});function Ar({className:e,style:r,fallback:n,empty:a,unstyled:t=!1,imgStyle:i}){var s,m;const o=b.useGingerState(),u=(s=o.playlistMeta)==null?void 0:s.artworkUrl;if(!u){const y=a??n??null;return y?l.jsx("span",{className:e,style:r,children:y}):null}const c=((m=o.playlistMeta)==null?void 0:m.title)??"Playlist artwork";return l.jsx("span",{"data-ginger-component":"Artwork",className:e,style:t?{...r}:{display:"inline-block",background:"var(--ginger-artwork-bg, #f3f4f6)",borderRadius:"var(--ginger-artwork-radius, 6px)",overflow:"hidden",...r},children:l.jsx("img",{src:u,alt:c,style:{display:t?void 0:"block",width:t?void 0:"100%",height:t?void 0:"100%",objectFit:t?void 0:"cover",...i}})})}Ar.displayName="Ginger.Queue.Artwork";function X(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):1}function Te(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},dn={...D,volume:1,muted:!1,playbackRate:1};function Rr(e){const r=[...e.tracks];let n=P(e.currentIndex??0,r.length),a=null,t=r;return e.isShuffled&&r.length>1&&(a=[...r],t=Oe(r,n),n=0),{tracks:t,currentIndex:n,playbackMode:e.playbackMode??"playlist",isPaused:e.isPaused??!0,isShuffled:!!(e.isShuffled&&t.length>1),repeatMode:e.repeatMode??"off",originalTracks:a,playlistMeta:e.playlistMeta??null,...dn,volume:X(e.volume??1),muted:e.muted??!1,playbackRate:Te(e.playbackRate??1)}}function fn(e,r){switch(r.type){case"INIT":{const{tracks:n,currentIndex:a,playlistMeta:t,isPaused:i,isShuffled:o,repeatMode:u,playbackMode:c,volume:s,muted:m,playbackRate:y}=r.payload;return Rr({tracks:n,currentIndex:a,playlistMeta:t??null,isPaused:i??!0,isShuffled:o??!1,repeatMode:u??"off",playbackMode:c??"playlist",volume:s,muted:m,playbackRate:y})}case"SET_QUEUE":{const{tracks:n,currentIndex:a}=r.payload,t=[...n],i=P(a??e.currentIndex,t.length);return{...e,tracks:t,currentIndex:i,isShuffled:!1,originalTracks:null,...D}}case"INSERT_TRACK":{const n=r.payload.index??e.tracks.length,a=Ye(e.tracks,r.payload.track,n);if(r.payload.autoPlay){const i=P(n,a.length);return{...e,tracks:a,currentIndex:i,isShuffled:!1,originalTracks:null,isPaused:!1,...D}}const t=n<=e.currentIndex?e.currentIndex+1:e.currentIndex;return{...e,tracks:a,isShuffled:!1,originalTracks:null,currentIndex:P(t,a.length)}}case"REMOVE_TRACK":{const n=r.payload.index,a=Br(e.tracks,n),t=n<e.currentIndex?e.currentIndex-1:n===e.currentIndex?Math.min(e.currentIndex,Math.max(0,a.length-1)):e.currentIndex;return{...e,tracks:a,isShuffled:!1,originalTracks:null,currentIndex:P(t,a.length),...n===e.currentIndex?D:{}}}case"MOVE_TRACK":{const{fromIndex:n,toIndex:a}=r.payload,t=$r(e.tracks,n,a);let i=e.currentIndex;return e.currentIndex===n?i=a:n<e.currentIndex&&a>=e.currentIndex?i-=1:n>e.currentIndex&&a<=e.currentIndex&&(i+=1),{...e,tracks:t,isShuffled:!1,originalTracks:null,currentIndex:P(i,t.length)}}case"ADD_NEXT":{const n=Or(e.tracks,e.currentIndex,r.payload.track);return{...e,tracks:n,isShuffled:!1,originalTracks:null}}case"SET_INDEX":{const n=P(r.payload.index,e.tracks.length),a=r.payload.autoPlay,t=a===!0?!1:a===!1?!0:e.isPaused;return{...e,currentIndex:n,...D,isPaused:t}}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:Hr(e.repeatMode)};case"TOGGLE_SHUFFLE":{if(e.tracks.length<=1)return{...e,isShuffled:!1,originalTracks:null};if(!e.isShuffled){const i=[...e.tracks],o=Oe(i,e.currentIndex);return{...e,isShuffled:!0,originalTracks:i,tracks:o,currentIndex:0}}const n=e.originalTracks?[...e.originalTracks]:[...e.tracks],a=e.tracks[e.currentIndex],t=Vr(n,a);return{...e,isShuffled:!1,originalTracks:null,tracks:n,currentIndex:P(t,n.length)}}case"NEXT":{const n=Qe(e),a=n===e.currentIndex;return{...e,currentIndex:n,...a?{}:D,isPaused:a?e.isPaused:!1}}case"PREV":{const n=Qr(e),a=n===e.currentIndex;return{...e,currentIndex:n,...a?{}:D,isPaused:a?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"SET_PLAYBACK_MODE":return{...e,playbackMode: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"MEDIA_SOURCE_CLEARED":return{...e,...D};case"SET_VOLUME":return{...e,volume:X(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:Te(r.payload)};case"MEDIA_VOLUME_SYNC":{const{volume:n,muted:a}=r.payload,t=X(n);return t===e.volume&&a===e.muted?e:{...e,volume:t,muted:a}}default:return e}}function Pe(){return typeof navigator>"u"||!("mediaSession"in navigator)?null:navigator.mediaSession}function gn(e,r,n){var c;const a=r.tracks[r.currentIndex],t=a==null?void 0:a.title,i=a==null?void 0:a.artist,o=a==null?void 0:a.album,u=He(a,(c=r.playlistMeta)==null?void 0:c.artworkUrl);f.useEffect(()=>{const s=Pe();!e||!s||(s.metadata=new MediaMetadata({title:t??"Unknown track",artist:i,album:o,artwork:u?[{src:u}]:void 0}))},[e,t,i,o,u]),f.useEffect(()=>{const s=Pe();!e||!s||(s.playbackState=r.isPaused?"paused":"playing")},[e,r.isPaused]),f.useEffect(()=>{const s=Pe();if(!(!e||!s)){try{s.setActionHandler("play",n.play),s.setActionHandler("pause",n.pause),s.setActionHandler("nexttrack",n.next),s.setActionHandler("previoustrack",n.prev),s.setActionHandler("seekto",m=>{typeof m.seekTime=="number"&&Number.isFinite(m.seekTime)&&n.seek(m.seekTime)})}catch{}return()=>{try{s.setActionHandler("play",null),s.setActionHandler("pause",null),s.setActionHandler("nexttrack",null),s.setActionHandler("previoustrack",null),s.setActionHandler("seekto",null)}catch{}}}},[e,n])}const pn={"--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 mn({children:e,initialTracks:r=[],initialIndex:n=0,initialPlaylistMeta:a=null,initialShuffle:t=!1,initialRepeatMode:i="off",initialPlaybackMode:o="playlist",initialPaused:u=!0,initialVolume:c=1,initialMuted:s=!1,initialPlaybackRate:m=1,initialStateKey:y,locale:v,mediaSession:h=!1,beforePlay:k,onPlayBlocked:E,persistence:p,hydrateOnMount:S=!1,resumeOnTrackChange:A=!1,unstyled:C=!1,asChild:q=!1,className:z,style:Ee,onTrackChange:W,onPlay:J,onPause:Z,onQueueEnd:ee,onError:re}){var Fe;const F=f.useRef(null),[d,x]=f.useReducer(fn,void 0,()=>Rr({tracks:r,currentIndex:n,playlistMeta:a,isPaused:u,isShuffled:t,repeatMode:i,playbackMode:o,volume:c,muted:s,playbackRate:m})),Ne=f.useRef(d),Se=f.useRef({tracks:r,currentIndex:n,playlistMeta:a,isPaused:u,isShuffled:t,repeatMode:i,playbackMode:o,volume:c,muted:s,playbackRate:m});Se.current={tracks:r,currentIndex:n,playlistMeta:a,isPaused:u,isShuffled:t,repeatMode:i,playbackMode:o,volume:c,muted:s,playbackRate:m};const Y=f.useRef(void 0);f.useEffect(()=>{if(y===void 0){Y.current=void 0;return}if(Y.current===void 0){Y.current=y;return}if(Y.current===y)return;Y.current=y;const g=Se.current;x({type:"INIT",payload:{tracks:g.tracks,currentIndex:g.currentIndex,playlistMeta:g.playlistMeta,isPaused:g.isPaused,isShuffled:g.isShuffled,repeatMode:g.repeatMode,playbackMode:g.playbackMode,volume:g.volume,muted:g.muted,playbackRate:g.playbackRate}})},[y,x]),f.useEffect(()=>{Ne.current=d},[d]);const _e=d.tracks[d.currentIndex]??null;f.useEffect(()=>{W==null||W(_e,d.currentIndex)},[_e,d.currentIndex,W]),f.useEffect(()=>{d.errorMessage&&(re==null||re(d.errorMessage))},[d.errorMessage,re]);const ne=f.useRef(void 0);f.useEffect(()=>{if(ne.current===void 0){ne.current=d.isPaused;return}ne.current!==d.isPaused&&(d.isPaused?Z==null||Z():J==null||J()),ne.current=d.isPaused},[d.isPaused,Z,J]);const _=f.useCallback(()=>{x({type:"PLAY"})},[]),L=f.useCallback(()=>{var g;x({type:"PAUSE"}),(g=F.current)==null||g.pause()},[]),te=f.useCallback(()=>{d.isPaused?_():L()},[L,_,d.isPaused]),w=f.useCallback(g=>{const M=F.current;M&&Number.isFinite(g)&&(M.currentTime=Math.max(0,g))},[]),ae=f.useCallback(g=>{x({type:"SET_VOLUME",payload:X(g)})},[]),ie=f.useCallback(g=>{x({type:"SET_MUTED",payload:g})},[]),oe=f.useCallback(()=>{x({type:"TOGGLE_MUTE"})},[]),ue=f.useCallback(g=>{x({type:"SET_PLAYBACK_RATE",payload:Te(g)})},[]),B=f.useCallback(()=>{x({type:"NEXT"})},[]),$=f.useCallback(()=>{x({type:"PREV"})},[]),se=f.useCallback(g=>{x({type:"SET_REPEAT",payload:g})},[]),ce=f.useCallback(()=>{x({type:"CYCLE_REPEAT"})},[]),le=f.useCallback(()=>{x({type:"TOGGLE_SHUFFLE"})},[]),de=f.useCallback((g,M)=>{x({type:"SET_QUEUE",payload:{tracks:g,currentIndex:M}})},[]),fe=f.useCallback((g,M,T)=>{x({type:"INSERT_TRACK",payload:{track:g,index:M,autoPlay:T}})},[]),ge=f.useCallback(g=>{x({type:"REMOVE_TRACK",payload:{index:g}})},[]),pe=f.useCallback((g,M)=>{x({type:"MOVE_TRACK",payload:{fromIndex:g,toIndex:M}})},[]),me=f.useCallback(g=>{x({type:"ADD_NEXT",payload:{track:g}})},[]),ye=f.useCallback(g=>{x({type:"SET_INDEX",payload:{index:g,autoPlay:!0}})},[]),be=f.useCallback(g=>{x({type:"SET_INDEX",payload:{index:g,autoPlay:!1}})},[]),xe=f.useCallback(g=>{x({type:"SET_PLAYLIST_META",payload:g})},[]),he=f.useCallback(g=>{x({type:"SET_PLAYBACK_MODE",payload:g})},[]),ve=f.useCallback(g=>{x({type:"INIT",payload:g})},[]);f.useEffect(()=>{if(!p||!S)return;const g=p.get("ginger:volume"),M=p.get("ginger:muted"),T=p.get("ginger:playbackRate"),j=p.get("ginger:repeatMode"),Me=p.get("ginger:currentIndex"),G=Se.current;x({type:"INIT",payload:{tracks:G.tracks,playlistMeta:G.playlistMeta,isPaused:G.isPaused,isShuffled:G.isShuffled,playbackMode:G.playbackMode,currentIndex:typeof Me=="number"?Me:G.currentIndex,repeatMode:j==="off"||j==="all"||j==="one"?j:G.repeatMode,volume:typeof g=="number"?g:G.volume,muted:typeof M=="boolean"?M:G.muted,playbackRate:typeof T=="number"?T:G.playbackRate}})},[S,p]),f.useEffect(()=>{p&&(p.set("ginger:volume",d.volume),p.set("ginger:muted",d.muted),p.set("ginger:playbackRate",d.playbackRate),p.set("ginger:repeatMode",d.repeatMode),p.set("ginger:currentIndex",d.currentIndex))},[p,d.volume,d.muted,d.playbackRate,d.repeatMode,d.currentIndex]),f.useEffect(()=>{if(!p||!A)return;const g=d.tracks[d.currentIndex];if(!g)return;const M=`ginger:resume:${K(g)}`,T=p.get(M);typeof T=="number"&&Number.isFinite(T)&&w(T)},[p,A,d.currentIndex,d.tracks,w]),f.useEffect(()=>{if(!p||!A)return;const g=d.tracks[d.currentIndex];if(!g||!(d.currentTime>=0))return;const M=`ginger:resume:${K(g)}`,T=setTimeout(()=>p.set(M,d.currentTime),250);return()=>clearTimeout(T)},[p,A,d.currentIndex,d.tracks,d.currentTime]);const Gr=(Fe=d.tracks[d.currentIndex])==null?void 0:Fe.fileUrl;f.useEffect(()=>{const g=F.current;if(!g)return;if(d.isPaused){g.pause();return}let M=!1;return(async()=>{if(k){let T=!1;try{T=await k()}catch(j){const Me=j instanceof Error?j.message:"beforePlay rejected";x({type:"MEDIA_ERROR",payload:{message:Me}});return}if(!T){M||(x({type:"PAUSE"}),E==null||E());return}}M||g.play().catch(T=>{const j=T instanceof Error?T.message:typeof T=="string"?T:"Playback failed (e.g. autoplay blocked or unavailable source)";x({type:"MEDIA_ERROR",payload:{message:j}})})})(),()=>{M=!0}},[k,Gr,E,d.isPaused]);const ke=f.useCallback(()=>{const g=Yr(Ne.current);if(g.kind==="replay_same"){const T=F.current;T&&(T.currentTime=0),x({type:"PLAY"});return}if(g.kind==="stop"){x({type:"PAUSE"}),ee==null||ee();return}const M=g.nextIndex;x({type:"SET_INDEX",payload:{index:M,autoPlay:!0}})},[ee]),Cr=f.useMemo(()=>({play:_,pause:L,next:B,prev:$,seek:w}),[_,L,B,$,w]);gn(!!h,d,Cr);const Le=v!=null&&v.seek&&/[\u0590-\u08FF]/.test(v.seek)?"rtl":"ltr",jr=f.useMemo(()=>({state:d,dispatch:x,audioRef:F,notifyEnded:ke,init:ve,play:_,pause:L,togglePlayPause:te,seek:w,setVolume:ae,setMuted:ie,toggleMute:oe,setPlaybackRate:ue,next:B,prev:$,setRepeatMode:se,cycleRepeat:ce,toggleShuffle:le,setQueue:de,insertTrackAt:fe,removeTrackAt:ge,moveTrack:pe,enqueueNext:me,playTrackAt:ye,selectTrackAt:be,setPlaylistMeta:xe,setPlaybackMode:he}),[ce,x,ve,B,ke,L,_,ye,fe,ge,pe,me,be,$,w,ie,ue,de,se,xe,he,ae,d,oe,te,le]),Nr=f.useMemo(()=>({tracks:d.tracks,currentIndex:d.currentIndex,isPaused:d.isPaused,isShuffled:d.isShuffled,repeatMode:d.repeatMode,originalTracks:d.originalTracks,playlistMeta:d.playlistMeta,init:ve,play:_,pause:L,togglePlayPause:te,next:B,prev:$,setRepeatMode:se,cycleRepeat:ce,toggleShuffle:le,playbackMode:d.playbackMode,setQueue:de,insertTrackAt:fe,removeTrackAt:ge,moveTrack:pe,enqueueNext:me,playTrackAt:ye,selectTrackAt:be,setPlaylistMeta:xe,setPlaybackMode:he,dispatch:x}),[d.tracks,d.currentIndex,d.isPaused,d.isShuffled,d.repeatMode,d.playbackMode,d.originalTracks,d.playlistMeta,ve,_,L,te,B,$,se,ce,le,de,fe,ge,pe,me,ye,be,xe,he,x]),_r=f.useMemo(()=>({currentTime:d.currentTime,duration:d.duration,bufferedFraction:d.bufferedFraction,isBuffering:d.isBuffering,errorMessage:d.errorMessage,volume:d.volume,muted:d.muted,playbackRate:d.playbackRate,seek:w,setVolume:ae,setMuted:ie,toggleMute:oe,setPlaybackRate:ue,audioRef:F,notifyEnded:ke,dispatch:x}),[d.currentTime,d.duration,d.bufferedFraction,d.isBuffering,d.errorMessage,d.volume,d.muted,d.playbackRate,w,ae,ie,oe,ue,F,ke,x]),we=Ae(d),De=f.useMemo(()=>C?Ee:{...pn,...Ee},[Ee,C]),R=f.useMemo(()=>({className:z,style:De,"data-ginger-playback":we,dir:Le}),[z,De,we,Le]),Lr=f.useMemo(()=>{if(!q)return l.jsx("div",{className:R.className,style:R.style,"data-ginger-playback":R["data-ginger-playback"],dir:R.dir,children:e});const g=f.Children.only(e);if(!f.isValidElement(g))throw new Error("Ginger.Provider asChild expects a single React element child.");const M=g,T=M.props.style;return f.cloneElement(M,{className:yn(M.props.className,R.className),style:T&&typeof T=="object"?{...T,...R.style}:R.style,"data-ginger-playback":R["data-ginger-playback"],dir:R.dir})},[q,e,R]);return l.jsx(Ur,{locale:v,children:l.jsx(b.GingerPlaybackContext.Provider,{value:Nr,children:l.jsx(b.GingerMediaContext.Provider,{value:_r,children:l.jsx(Be.Provider,{value:jr,children:Lr})})})})}function yn(e,r){const n=[e,r].filter(Boolean).join(" ");return n===""?void 0:n}const bn={Provider:mn,Player:Dr,Current:{Title:qr,Artist:zr,Album:Wr,Description:Jr,Copyright:Zr,Genre:en,Label:rn,Isrc:nn,TrackNumber:tn,Year:sr,Lyrics:cr,LyricsSynced:Ge,Chapters:Ce,FileUrl:gr,Artwork:pr,QueueIndex:mr,QueueLength:yr,QueuePosition:br,Elapsed:xr,Duration:hr,Remaining:vr,Progress:kr,TimeRail:Mr,BufferRail:Tr,PlaybackState:Er,ErrorMessage:Sr},Queue:{Title:un,Subtitle:sn,Description:cn,Copyright:ln,Artwork:Ar},Control:{PlayPause:Ze,Repeat:er,Next:rr,Previous:nr,Shuffle:tr,SeekBar:ar,Volume:ir,Mute:or,PlaybackRate:ur},Playlist:on};exports.Chapters=Ce;exports.Ginger=bn;exports.LyricsSynced=Ge;exports.clampPlaybackRate=Te;exports.clampVolume=X;exports.computeNextIndex=Qe;exports.defaultGingerLocale=Q;exports.derivePlaybackUiState=Ae;exports.effectiveDuration=O;exports.effectiveRemaining=Ke;exports.getCurrentTrack=N;exports.parseLrc=lr;exports.progressFraction=Re;exports.resolvedAlbumLine=qe;exports.resolvedArtwork=Xe;exports.useGingerChapters=fr;exports.useGingerLocale=I;exports.useGingerLyricsSync=dr;exports.usePlayPauseBinding=Je;exports.useSeekBarBinding=ze;exports.useVolumeSlider=We;
|
|
2
|
+
//# sourceMappingURL=ginger-CVwaVLpC.cjs.map
|