@lucaismyname/ginger 0.0.43 → 0.0.45

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/CHANGELOG.md ADDED
@@ -0,0 +1,102 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@lucaismyname/ginger` are documented here.
4
+
5
+ ## 0.0.45
6
+
7
+ - Add crossfade module (`@lucaismyname/ginger/crossfade`)
8
+ - Adjust hook deps to follow active audio source
9
+ - Regenerate API docs with crossfade coverage
10
+
11
+ ## 0.0.44
12
+
13
+ - Update docs and landing UI controls
14
+ - Prevent replay loop at queue end
15
+
16
+ ## 0.0.41
17
+
18
+ - Polish landing UI
19
+ - Add verify script and Biome linting
20
+
21
+ ## 0.0.39
22
+
23
+ - Exclude ginger from Vite `optimizeDeps` in apps
24
+ - Link local ginger package; add docs and experimental gapless probe
25
+
26
+ ## 0.0.37
27
+
28
+ - Add audio demos and bundled demo MP3s
29
+ - Add Radix-based playback rate select
30
+ - Add app typechecks and chapter markers on seek bar
31
+ - Use ref for EQ bands to avoid effect deps
32
+ - Add docs for spatial, transcript, and remote modules
33
+
34
+ ## 0.0.33
35
+
36
+ - Add remote-control module (`@lucaismyname/ginger/remote`)
37
+ - Add spatial audio module (`@lucaismyname/ginger/spatial`)
38
+ - Add transcript sync module (`@lucaismyname/ginger/transcript`)
39
+ - Add equalizer module (`@lucaismyname/ginger/equalizer`)
40
+ - Add `useGingerPlaybackHistory` and `useGingerVolumeFade` hooks
41
+
42
+ ## 0.0.27
43
+
44
+ - Add `asChild` prop support on control components
45
+ - Add locale / i18n context (`useGingerLocale`)
46
+ - Add unstyled mode for zero-opinion styling
47
+ - Use inline Lucide icons for default controls
48
+ - Add live audio analyzer tests and `mockWebAudio` test helper
49
+
50
+ ## 0.0.24
51
+
52
+ - Add `children` prop to control components
53
+ - Add `react-scan` dev tooling
54
+
55
+ ## 0.0.22
56
+
57
+ - Add waveform player example and fix `playbackRate` bug
58
+
59
+ ## 0.0.20
60
+
61
+ - Add landing player controls
62
+ - Use `@lucaismyname/ginger` in landing app
63
+
64
+ ## 0.0.18
65
+
66
+ - Add CI workflow (GitHub Actions) and TypeDoc API docs
67
+ - Bump package version
68
+
69
+ ## 0.0.17
70
+
71
+ - Add chapter markers with `TrackChapter` type
72
+ - Add synced lyrics (`LyricsSynced`)
73
+ - Add `useNextTrackPrefetch` hook
74
+
75
+ ## 0.0.14
76
+
77
+ - Add test suite and `@lucaismyname/ginger/testing` subpath export
78
+ - Add `renderGinger` and `helpers` test utilities
79
+
80
+ ## 0.0.12
81
+
82
+ - Expose `setPlaybackMode`; clear media source on track removal
83
+ - Add live audio analysis (`useGingerLiveAnalyzer`) and FFT utilities
84
+
85
+ ## 0.0.10
86
+
87
+ - Add ginger-landing Vite app
88
+ - Add unstyled mode and playback options
89
+ - Add queue actions, playback modes, and persistence hooks
90
+ - Split contexts into playback vs media for performance
91
+
92
+ ## 0.0.5
93
+
94
+ - Add `GingerProvider`, `GingerPlayer`, and core reducer
95
+ - Add locale and control binding hooks
96
+ - Add init API, a11y improvements, and initial docs
97
+
98
+ ## 0.0.1
99
+
100
+ - Initialize monorepo with demo app
101
+ - Add volume, mute, and playback rate controls
102
+ - Add manual playlist mode
package/README.md CHANGED
@@ -51,6 +51,7 @@ Mount **`<Ginger.Player />`** once inside the same provider tree so the hidden a
51
51
 
52
52
  For docs beyond this README, use the repository links below:
53
53
 
54
+ - **Docs folder map** (Markdown vs generated API): [`docs/README.md`](https://github.com/lucaismyname/ginger/blob/main/packages/ginger/docs/README.md)
54
55
  - Getting started: [`docs/getting-started.md`](https://github.com/lucaismyname/ginger/blob/main/packages/ginger/docs/getting-started.md)
55
56
  - Testing guide: [`docs/guides/testing.md`](https://github.com/lucaismyname/ginger/blob/main/packages/ginger/docs/guides/testing.md)
56
57
  - Recipes: [`docs/guides/recipes.md`](https://github.com/lucaismyname/ginger/blob/main/packages/ginger/docs/guides/recipes.md)
@@ -58,7 +59,7 @@ For docs beyond this README, use the repository links below:
58
59
  - Streaming adapters: [`docs/guides/streaming-adapters.md`](https://github.com/lucaismyname/ginger/blob/main/packages/ginger/docs/guides/streaming-adapters.md)
59
60
  - Components reference: [`docs/reference/components.md`](https://github.com/lucaismyname/ginger/blob/main/packages/ginger/docs/reference/components.md)
60
61
  - Hooks reference: [`docs/reference/hooks.md`](https://github.com/lucaismyname/ginger/blob/main/packages/ginger/docs/reference/hooks.md)
61
- - Subpath exports (waveform, EQ, spatial, transcript, remote, …): [`docs/reference/subpaths.md`](https://github.com/lucaismyname/ginger/blob/main/packages/ginger/docs/reference/subpaths.md)
62
+ - Subpath exports (waveform, EQ, spatial, transcript, remote, crossfade, …): [`docs/reference/subpaths.md`](https://github.com/lucaismyname/ginger/blob/main/packages/ginger/docs/reference/subpaths.md)
62
63
  - Generated API docs: [`docs/api/index.html`](https://github.com/lucaismyname/ginger/blob/main/packages/ginger/docs/api/index.html)
63
64
 
64
65
  ## Subpath Exports
@@ -70,6 +71,7 @@ For docs beyond this README, use the repository links below:
70
71
  - `@lucaismyname/ginger/spatial`
71
72
  - `@lucaismyname/ginger/transcript`
72
73
  - `@lucaismyname/ginger/remote`
74
+ - `@lucaismyname/ginger/crossfade`
73
75
  - `@lucaismyname/ginger/experimental-gapless`
74
76
 
75
77
  ### Equalizer
@@ -1219,6 +1221,7 @@ Additional entrypoints:
1219
1221
  - `@lucaismyname/ginger/spatial`
1220
1222
  - `@lucaismyname/ginger/transcript`
1221
1223
  - `@lucaismyname/ginger/remote`
1224
+ - `@lucaismyname/ginger/crossfade`
1222
1225
  - `@lucaismyname/ginger/experimental-gapless`
1223
1226
 
1224
1227
  See [Subpath Exports](#subpath-exports) for **`spatial`**, **`transcript`**, and **`remote`** usage. `experimental-gapless` is explicitly non-production and does not alter core playback.
@@ -1 +1 @@
1
- {"version":3,"file":"useGingerLiveAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzer/useGingerLiveAnalyzer.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,4BAA4B,GAAG;IACzC,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,kHAAkH;IAClH,aAAa,EAAE,UAAU,CAAC;IAC1B,8DAA8D;IAC9D,cAAc,EAAE,UAAU,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAKF,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,4BAAiC,GACzC,2BAA2B,CAiK7B"}
1
+ {"version":3,"file":"useGingerLiveAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzer/useGingerLiveAnalyzer.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,4BAA4B,GAAG;IACzC,iFAAiF;IACjF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,kHAAkH;IAClH,aAAa,EAAE,UAAU,CAAC;IAC1B,8DAA8D;IAC9D,cAAc,EAAE,UAAU,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAKF,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,4BAAiC,GACzC,2BAA2B,CAmK7B"}
@@ -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,2CAoInB"}
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,2CA+HnB"}
package/dist/client.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ginger-Dv3iO_xQ.cjs"),s=require("./useGinger-4uvPoChz.cjs"),r=require("./useGingerChapterProgress-D2pdmyjg.cjs"),i=require("./liveAudioGraph-0cpHD_Ic.cjs"),n=require("./selectors-CEGlYoFu.cjs"),a=require("./GingerSplitContexts-C7puo0M7.cjs");exports.Chapters=e.Chapters;exports.Ginger=e.Ginger;exports.LyricsSynced=e.LyricsSynced;exports.Pause=e.Pause;exports.Play=e.Play;exports.RepeatGlyph=e.RepeatGlyph;exports.ShuffleIcon=e.ShuffleIcon;exports.SkipBack=e.SkipBack;exports.SkipForward=e.SkipForward;exports.Volume2=e.Volume2;exports.VolumeX=e.VolumeX;exports.Wrapper=e.Wrapper;exports.clampPlaybackRate=e.clampPlaybackRate;exports.clampVolume=e.clampVolume;exports.defaultGingerLocale=e.defaultGingerLocale;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.useGinger=s.useGinger;exports.createGingerStore=r.createGingerStore;exports.useGingerChapterProgress=r.useGingerChapterProgress;exports.useGingerDebugLog=r.useGingerDebugLog;exports.useGingerKeyboardShortcuts=r.useGingerKeyboardShortcuts;exports.useGingerLiveAnalyzer=r.useGingerLiveAnalyzer;exports.useGingerPlaybackHistory=r.useGingerPlaybackHistory;exports.useGingerSleepTimer=r.useGingerSleepTimer;exports.useGingerVolumeFade=r.useGingerVolumeFade;exports.useNextTrackPrefetch=r.useNextTrackPrefetch;exports.useSeekDrag=r.useSeekDrag;exports.attachLiveAnalyser=i.attachLiveAnalyser;exports.detachLiveAnalyser=i.detachLiveAnalyser;exports.setProcessingChain=i.setProcessingChain;exports.derivePlaybackUiState=n.derivePlaybackUiState;exports.gingerStateFromContextValues=a.gingerStateFromContextValues;exports.gingerStateFromContexts=a.gingerStateFromContexts;exports.useGingerMedia=a.useGingerMedia;exports.useGingerPlayback=a.useGingerPlayback;exports.useGingerState=a.useGingerState;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ginger-9lWCvbHv.cjs"),s=require("./useGinger-4uvPoChz.cjs"),r=require("./useGingerChapterProgress-Cqa9_CyH.cjs"),i=require("./liveAudioGraph-0cpHD_Ic.cjs"),n=require("./selectors-CEGlYoFu.cjs"),a=require("./GingerSplitContexts-C7puo0M7.cjs");exports.Chapters=e.Chapters;exports.Ginger=e.Ginger;exports.LyricsSynced=e.LyricsSynced;exports.Pause=e.Pause;exports.Play=e.Play;exports.RepeatGlyph=e.RepeatGlyph;exports.ShuffleIcon=e.ShuffleIcon;exports.SkipBack=e.SkipBack;exports.SkipForward=e.SkipForward;exports.Volume2=e.Volume2;exports.VolumeX=e.VolumeX;exports.Wrapper=e.Wrapper;exports.clampPlaybackRate=e.clampPlaybackRate;exports.clampVolume=e.clampVolume;exports.defaultGingerLocale=e.defaultGingerLocale;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.useGinger=s.useGinger;exports.createGingerStore=r.createGingerStore;exports.useGingerChapterProgress=r.useGingerChapterProgress;exports.useGingerDebugLog=r.useGingerDebugLog;exports.useGingerKeyboardShortcuts=r.useGingerKeyboardShortcuts;exports.useGingerLiveAnalyzer=r.useGingerLiveAnalyzer;exports.useGingerPlaybackHistory=r.useGingerPlaybackHistory;exports.useGingerSleepTimer=r.useGingerSleepTimer;exports.useGingerVolumeFade=r.useGingerVolumeFade;exports.useNextTrackPrefetch=r.useNextTrackPrefetch;exports.useSeekDrag=r.useSeekDrag;exports.attachLiveAnalyser=i.attachLiveAnalyser;exports.detachLiveAnalyser=i.detachLiveAnalyser;exports.setProcessingChain=i.setProcessingChain;exports.derivePlaybackUiState=n.derivePlaybackUiState;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,6 +1,6 @@
1
- import { C as s, G as r, L as i, P as t, a as u, R as n, S as o, b as g, c, V as l, d as p, W as G, e as m, f as y, g as S, p as d, u as f, h, i as P, j as k, k as L, l as b } from "./ginger-B2DgE-2a.js";
1
+ import { C as s, G as r, L as i, P as t, a as u, R as n, S as o, b as g, c, V as l, d as p, W as G, e as m, f as y, g as S, p as d, u as f, h, i as P, j as k, k as L, l as b } from "./ginger-XgXdGRB-.js";
2
2
  import { u as C } from "./useGinger-Dz0cPyD1.js";
3
- import { c as v, u as B, a as F, b as A, d as R, e as D, f as T, g as W, h as j, i as w } from "./useGingerChapterProgress-wxAmN_uo.js";
3
+ import { c as v, u as B, a as F, b as A, d as R, e as D, f as T, g as W, h as j, i as w } from "./useGingerChapterProgress-DgqqoY5F.js";
4
4
  import { a as H, d as I, s as K } from "./liveAudioGraph-DvPaxBCP.js";
5
5
  import { d as N } from "./selectors-BT3WSsKN.js";
6
6
  import { g as X, a as q, u as E, b as J, c as O } from "./GingerSplitContexts-BzBExb95.js";
@@ -1 +1 @@
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,GAAG,EAAE,OAAO,EACZ,2BAA+B,EAC/B,aAAa,EACb,MAAM,EACN,OAAO,EACP,UAAU,EACV,OAAO,EACP,cAAc,EACd,oBAAoB,EACpB,MAAM,GACP,EAAE,mBAAmB,2CAinBrB"}
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,GAAG,EAAE,OAAO,EACZ,2BAA+B,EAC/B,aAAa,EACb,MAAM,EACN,OAAO,EACP,UAAU,EACV,OAAO,EACP,cAAc,EACd,oBAAoB,EACpB,MAAM,GACP,EAAE,mBAAmB,2CA8mBrB"}
@@ -0,0 +1,2 @@
1
+ "use strict";const o=require("react/jsx-runtime"),l=require("react"),k=require("./GingerSplitContexts-C7puo0M7.cjs"),S=require("./selectors-CEGlYoFu.cjs"),M=require("./transitions-Dx08t68T.cjs"),rr=l.createContext(null);function Qr(){const e=l.useContext(rr);if(!e)throw new Error("Ginger components must be used within <Ginger.Provider>");return e}function Ze(e){const{buffered:r,duration:n}=e;return!(n>0)||r.length===0?0:Math.min(1,r.end(r.length-1)/n)}function zr({className:e,style:r,preload:n="metadata",crossOrigin:a,respectReducedMotion:t=!1}){var T;const{audioRef:i,dispatch:s,state:c,notifyEnded:d}=Qr(),g=((T=c.tracks[c.currentIndex])==null?void 0:T.fileUrl)??"",y=l.useRef({currentTime:-1,duration:-1,bufferedFraction:-1}),x=l.useRef(""),[v,f]=l.useState(!1);l.useEffect(()=>{if(!t||typeof window>"u")return;const m=window.matchMedia("(prefers-reduced-motion: reduce)"),P=()=>f(m.matches);return P(),m.addEventListener("change",P),()=>m.removeEventListener("change",P)},[t]);const h=(m,P=!1)=>{const A={currentTime:m.currentTime,duration:m.duration,bufferedFraction:Ze(m)},G=y.current,X=v?.5:.25,K=Math.abs(A.currentTime-G.currentTime)>=X||Math.abs(A.duration-G.duration)>=.01||Math.abs(A.bufferedFraction-G.bufferedFraction)>=.01;!P&&!K||(y.current=A,s({type:"MEDIA_TIME_UPDATE",payload:A}))};return l.useEffect(()=>{const m=i.current;m&&(m.volume=c.volume,m.muted=c.muted)},[i,c.volume,c.muted]),l.useEffect(()=>{const m=i.current;if(m){if(!g){m.removeAttribute("src"),y.current={currentTime:-1,duration:-1,bufferedFraction:-1},x.current!==""&&s({type:"MEDIA_SOURCE_CLEARED"}),x.current="";return}m.getAttribute("src")!==g&&(m.src=g,m.load(),y.current={currentTime:-1,duration:-1,bufferedFraction:-1}),x.current=g,m.playbackRate=c.playbackRate}},[i,s,g,c.playbackRate]),o.jsx("audio",{"data-ginger-component":"Player",ref:i,className:e,style:r,preload:n,crossOrigin:a,controls:!1,playsInline:!0,onTimeUpdate:m=>{h(m.currentTarget)},onLoadedMetadata:m=>{const P=m.currentTarget;y.current={currentTime:-1,duration:-1,bufferedFraction:-1},s({type:"MEDIA_LOADED_METADATA",payload:{duration:P.duration,bufferedFraction:Ze(P)}})},onSeeking:m=>h(m.currentTarget,!0),onSeeked:m=>h(m.currentTarget,!0),onEnded:()=>d(),onPlay:()=>s({type:"MEDIA_PLAY"}),onPause:()=>s({type:"MEDIA_PAUSE"}),onWaiting:()=>s({type:"MEDIA_WAITING"}),onCanPlay:()=>s({type:"MEDIA_CANPLAY"}),onProgress:m=>h(m.currentTarget,!0),onVolumeChange:m=>{const P=m.currentTarget;s({type:"MEDIA_VOLUME_SYNC",payload:{volume:P.volume,muted:P.muted}})},onError:()=>{var G;const m=i.current,P=(G=m==null?void 0:m.error)==null?void 0:G.code;s({type:"MEDIA_ERROR",payload:{message:P===1?"MEDIA_ERR_ABORTED":P===2?"MEDIA_ERR_NETWORK":P===3?"MEDIA_ERR_DECODE":P===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 Wr(e){return e?{...Q,...e,repeat:{...Q.repeat,...e.repeat}}:Q}const tr=l.createContext(Q);function Xr({locale:e,children:r}){const n=Wr(e);return o.jsx(tr.Provider,{value:n,children:r})}function j(){return l.useContext(tr)}function z(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 nr(){const e=k.useGingerPlayback(),r=k.useGingerMedia(),n=j(),a=l.useMemo(()=>k.gingerStateFromContextValues(e,r),[e,r]),t=S.effectiveDuration(a),i=t>0?a.currentTime:0,s=Number.isFinite(i)?i:0,c=t>0?`${z(s)} of ${z(t)}`:z(s),d=g=>{r.seek(Number(g.currentTarget.value))};return{state:a,value:s,min:0,max:t>0?t:1,step:"any",ariaValueText:c,ariaLabel:n.seek,onSeekInput:d,onSeekChange:d}}function ar(){const e=k.useGingerPlayback(),r=k.useGingerMedia(),n=j(),a=l.useMemo(()=>k.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 ir(e){const r=k.useGingerPlayback(),n=j(),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 C(e){const{className:r,width:n,height:a,viewBox:t,fill:i,stroke:s,strokeWidth:c,strokeLinecap:d,strokeLinejoin:g,children:y,...x}=e;return o.jsx("svg",{"data-ginger-component":"Wrapper",xmlns:"http://www.w3.org/2000/svg",width:n??24,height:a??24,viewBox:t??"0 0 24 24",fill:"none",stroke:s??"currentColor",strokeWidth:c??2,strokeLinecap:d??"round",strokeLinejoin:g??"round",className:r,"aria-hidden":!0,role:"presentation",...x,children:y})}function Ne(){return o.jsx(C,{children:o.jsx("path",{"data-ginger-component":"Pause",d:"M6 4h4v16H6zM14 4h4v16h-4z"})})}function _e(){return o.jsx(C,{children:o.jsx("path",{"data-ginger-component":"Play",d:"M5 3L19 12 5 21 5 3z"})})}function we(){return o.jsxs(o.Fragment,{children:[o.jsx("path",{d:"m17 2 4 4-4 4"}),o.jsx("path",{d:"M3 11v-1a4 4 0 0 1 4-4h14"}),o.jsx("path",{d:"m7 22-4-4 4-4"}),o.jsx("path",{d:"M21 13v1a4 4 0 0 1-4 4H3"})]})}function De({mode:e}){return e==="one"?o.jsxs(C,{children:[o.jsx(we,{}),o.jsx("path",{"data-ginger-component":"RepeatGlyph",d:"M11 10h1v4"})]}):e==="all"?o.jsx(C,{children:o.jsx(we,{})}):o.jsxs(C,{children:[o.jsx(we,{}),o.jsx("line",{"data-ginger-component":"RepeatGlyph",x1:"3",x2:"21",y1:"3",y2:"21"})]})}function Fe(){return o.jsxs(C,{children:[o.jsx("path",{d:"m18 14 4 4-4 4"}),o.jsx("path",{d:"m18 2 4 4-4 4"}),o.jsx("path",{"data-ginger-component":"ShuffleIcon",d:"M2 18h1.973a4 4 0 0 0 3.3-1.7l5.454-8.6a4 4 0 0 1 3.3-1.7H22"}),o.jsx("path",{d:"M2 6h1.972a4 4 0 0 1 3.6 2.2"}),o.jsx("path",{d:"M22 18h-6.041a4 4 0 0 1-3.3-1.8l-.359-.45"})]})}function Ue(){return o.jsxs(C,{children:[o.jsx("path",{"data-ginger-component":"SkipBack",d:"M17.971 4.285A2 2 0 0 1 21 6v12a2 2 0 0 1-3.029 1.715l-9.997-5.998a2 2 0 0 1-.003-3.432z"}),o.jsx("path",{d:"M3 20V4"})]})}function Be(){return o.jsxs(C,{children:[o.jsx("path",{d:"M21 4v16"}),o.jsx("path",{"data-ginger-component":"SkipForward",d:"M6.029 4.285A2 2 0 0 0 3 6v12a2 2 0 0 0 3.029 1.715l9.997-5.998a2 2 0 0 0 .003-3.432z"})]})}function Ve(){return o.jsxs(C,{children:[o.jsx("path",{"data-ginger-component":"Volume2",d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z"}),o.jsx("path",{d:"M16 9a5 5 0 0 1 0 6"}),o.jsx("path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728"})]})}function Oe(){return o.jsxs(C,{children:[o.jsx("path",{"data-ginger-component":"VolumeX",d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z"}),o.jsx("line",{x1:"22",x2:"16",y1:"9",y2:"15"}),o.jsx("line",{x1:"16",x2:"22",y1:"9",y2:"15"})]})}function or({playLabel:e="Play",pauseLabel:r="Pause",playAriaLabel:n,pauseAriaLabel:a,children:t,type:i="button",onClick:s,...c}){const d=j(),g=typeof e=="string"?e:d.play,y=typeof r=="string"?r:d.pause,x=ir({playAriaLabel:n??g,pauseAriaLabel:a??y});return o.jsx("button",{"data-ginger-component":"PlayPause",...c,type:i,"aria-label":x.ariaLabel,onClick:v=>{x.toggle(),s==null||s(v)},children:t??(x.isPaused?o.jsx(_e,{}):o.jsx(Ne,{}))})}or.displayName="Ginger.Control.PlayPause";function sr({type:e="button",ariaLabel:r,onClick:n,children:a,...t}){const{repeatMode:i,cycleRepeat:s}=k.useGingerPlayback(),d=j().repeat[i];return o.jsx("button",{"data-ginger-component":"Repeat",...t,type:e,"aria-label":r??d,onClick:g=>{s(),n==null||n(g)},children:a??o.jsx(De,{mode:i})})}sr.displayName="Ginger.Control.Repeat";function cr({type:e="button",children:r,ariaLabel:n,onClick:a,...t}){const{next:i}=k.useGingerPlayback(),s=j();return o.jsx("button",{"data-ginger-component":"Next",...t,type:e,"aria-label":n??s.nextTrack,onClick:c=>{i(),a==null||a(c)},children:r??o.jsx(Be,{})})}cr.displayName="Ginger.Control.Next";function ur({type:e="button",children:r,ariaLabel:n,onClick:a,...t}){const{prev:i}=k.useGingerPlayback(),s=j();return o.jsx("button",{"data-ginger-component":"Previous",...t,type:e,"aria-label":n??s.previousTrack,onClick:c=>{i(),a==null||a(c)},children:r??o.jsx(Ue,{})})}ur.displayName="Ginger.Control.Previous";function lr({type:e="button",children:r,ariaLabel:n,onClick:a,...t}){const{isShuffled:i,toggleShuffle:s}=k.useGingerPlayback(),c=j();return o.jsx("button",{"data-ginger-component":"Shuffle",...t,type:e,"aria-pressed":i,"aria-label":n??c.shuffle,onClick:d=>{s(),a==null||a(d)},children:r??o.jsx(Fe,{})})}lr.displayName="Ginger.Control.Shuffle";function dr({inputStyle:e,style:r,unstyled:n=!1,ariaLabel:a,...t}){const i=nr(),s=n?{...r,...e}:{width:"100%",...r,...e};return o.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:s})}dr.displayName="Ginger.Control.SeekBar";function gr({inputStyle:e,style:r,unstyled:n=!1,ariaLabel:a,...t}){const i=ar(),s=n?{...r,...e}:{width:"100%",...r,...e};return o.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:s})}gr.displayName="Ginger.Control.Volume";function pr({ariaLabel:e,muteLabel:r,unmuteLabel:n,type:a="button",onClick:t,children:i,...s}){const{muted:c,toggleMute:d}=k.useGingerMedia(),g=j();return o.jsx("button",{"data-ginger-component":"Mute",...s,type:a,"aria-pressed":c,"aria-label":e??(c?g.unmute:g.mute),onClick:y=>{d(),t==null||t(y)},children:i??(c?n??o.jsx(Oe,{}):r??o.jsx(Ve,{}))})}pr.displayName="Ginger.Control.Mute";const Kr=[.5,.75,1,1.25,1.5,2];function fr({rates:e=Kr,style:r,ariaLabel:n,children:a,...t}){const{playbackRate:i,setPlaybackRate:s}=k.useGingerMedia(),c=j(),d=l.useMemo(()=>Array.from(new Set([...e,i])).sort((g,y)=>g-y),[e,i]);return o.jsx("select",{"data-ginger-component":"PlaybackRate",...t,"aria-label":n??c.playbackSpeed,value:String(i),style:r,onChange:g=>s(Number(g.currentTarget.value)),children:a??d.map(g=>o.jsx("option",{value:String(g),children:g===1?c.playbackRateNormal:c.playbackRateTimes(g)},g))})}fr.displayName="Ginger.Control.PlaybackRate";function V(e,r){function n(a){const t=k.useGingerState(),s=(r(t)??"").trim(),{className:c,style:d,fallback:g,empty:y,children:x}=a;if(!s){const v=y??g??null;return v?o.jsx("span",{className:c,style:d,children:v}):null}return x?o.jsx("span",{className:c,style:d,children:x(s,t)}):o.jsx("span",{className:c,style:d,children:s})}return n.displayName=e,n}function O(e,r){return V(e,n=>r(S.getCurrentTrack(n)))}const qr=O("Ginger.Current.Title",e=>e==null?void 0:e.title),Jr=O("Ginger.Current.Artist",e=>e==null?void 0:e.artist),Zr=V("Ginger.Current.Album",e=>S.resolvedAlbumLine(e)),et=O("Ginger.Current.Description",e=>e==null?void 0:e.description),rt=V("Ginger.Current.Copyright",e=>{var n;const r=S.getCurrentTrack(e);return(r==null?void 0:r.copyright)??((n=e.playlistMeta)==null?void 0:n.copyright)}),tt=O("Ginger.Current.Genre",e=>e==null?void 0:e.genre),nt=O("Ginger.Current.Label",e=>e==null?void 0:e.label),at=O("Ginger.Current.Isrc",e=>e==null?void 0:e.isrc),it=O("Ginger.Current.TrackNumber",e=>(e==null?void 0:e.trackNumber)!=null?String(e.trackNumber):void 0);function mr({className:e,style:r,fallback:n,empty:a,children:t,format:i}){var g;const s=k.useGingerState(),c=(g=S.getCurrentTrack(s))==null?void 0:g.year;if(typeof c!="number"||!Number.isFinite(c)){const y=a??n??null;return y?o.jsx("span",{"data-ginger-component":"Year",className:e,style:r,children:y}):null}const d=i?i(c):String(c);return t?o.jsx("span",{"data-ginger-component":"Year",className:e,style:r,children:t(d,s)}):o.jsx("span",{"data-ginger-component":"Year",className:e,style:r,children:d})}mr.displayName="Ginger.Current.Year";function yr({className:e,style:r,fallback:n,empty:a,children:t,preserveWhitespace:i=!0,unstyled:s=!1}){var x;const c=k.useGingerState(),d=((x=S.getCurrentTrack(c))==null?void 0:x.lyrics)??"",g=i?d.replace(/^\s+|\s+$/g,""):d.trim();if(!g){const v=a??n??null;return v?o.jsx("span",{"data-ginger-component":"Lyrics",className:e,style:r,children:v}):null}const y=!s&&i?{whiteSpace:"pre-wrap"}:void 0;return t?o.jsx("span",{className:e,style:{...y,...r},children:t(g,c)}):o.jsx("span",{className:e,style:{...y,...r},children:g})}yr.displayName="Ginger.Current.Lyrics";const er=/\[(\d{1,2}):(\d{2})(?:\.(\d{1,3}))?\]/g;function xr(e){const r=[];for(const n of e.split(/\r?\n/)){const a=[...n.matchAll(er)];if(a.length===0)continue;const t=n.replace(er,"").trim();for(const i of a){const s=Number(i[1]??0),c=Number(i[2]??0),d=Number((i[3]??"0").padEnd(3,"0")),g=s*60+c+d/1e3;Number.isFinite(g)&&g>=0&&r.push({time:g,text:t})}}return r.sort((n,a)=>n.time-a.time)}function hr(){const{tracks:e,currentIndex:r}=k.useGingerPlayback(),{currentTime:n}=k.useGingerMedia(),a=e[r],t=l.useMemo(()=>a?Array.isArray(a.lyricsTimed)&&a.lyricsTimed.length>0?[...a.lyricsTimed].filter(s=>Number.isFinite(s.time)&&s.time>=0).sort((s,c)=>s.time-c.time):typeof a.lyrics=="string"?xr(a.lyrics):[]:[],[a]),i=l.useMemo(()=>{for(let s=t.length-1;s>=0;s-=1)if(n>=t[s].time)return s;return-1},[n,t]);return{lines:t,activeIndex:i,activeLine:i>=0?t[i]??null:null}}function $e({className:e,style:r,fallback:n,empty:a,unstyled:t=!1,activeClassName:i,lineClassName:s,children:c}){const d=k.useGingerState(),g=j(),{lines:y,activeIndex:x}=hr();if(y.length===0){const f=a??n??null;return f?o.jsx("span",{"data-ginger-component":"LyricsSynced",className:e,style:r,children:f}):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 o.jsx("ul",{className:e,style:{...v,...r},"aria-label":g.syncedLyricsList,children:y.map((f,h)=>{const T=h===x;return o.jsx("li",{"aria-current":T?"true":void 0,"data-ginger-active":T||void 0,className:[s,T?i:void 0].filter(Boolean).join(" ")||void 0,style:t?void 0:{padding:"var(--ginger-playlist-row-padding, 4px 8px)",fontWeight:T?600:400,opacity:T?1:.75},children:c?c(f,h,T,d):f.text},`${f.time}-${h}`)})})}$e.displayName="Ginger.Current.LyricsSynced";function kr(){const{tracks:e,currentIndex:r}=k.useGingerPlayback(),{currentTime:n,seek:a}=k.useGingerMedia(),t=l.useMemo(()=>{var c;return[...((c=e[r])==null?void 0:c.chapters)??[]].filter(d=>d&&Number.isFinite(d.startSeconds)&&d.startSeconds>=0).sort((d,g)=>d.startSeconds-g.startSeconds)},[r,e]),i=l.useMemo(()=>{if(t.length===0)return-1;for(let s=t.length-1;s>=0;s-=1)if(n>=t[s].startSeconds)return s;return-1},[n,t]);return{list:t,activeIndex:i,active:i>=0?t[i]??null:null,seekTo:s=>{const c=t[s];c&&a(c.startSeconds)}}}function He({className:e,style:r,fallback:n,empty:a,unstyled:t=!1,formatStart:i=z,children:s}){const c=k.useGingerState(),d=j(),{list:g,activeIndex:y,seekTo:x}=kr();if(g.length===0){const f=a??n??null;return f?o.jsx("span",{"data-ginger-component":"Chapters",className:e,style:r,children:f}):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 o.jsx("ul",{className:e,style:{...v,...r},"aria-label":d.chaptersList,children:g.map((f,h)=>{const T=h===y;return o.jsx("li",{children:o.jsx("button",{type:"button","aria-current":T?"true":void 0,"data-ginger-active":T||void 0,onClick:()=>x(h),style:{width:t?void 0:"100%",textAlign:t?void 0:"left",border:t?void 0:"none",background:t?void 0:T?"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:s?s(f,h,T,c):t?o.jsxs(o.Fragment,{children:[i(f.startSeconds)," ",f.title]}):o.jsxs("span",{children:[o.jsx("span",{style:{opacity:.75,marginRight:"0.35em"},children:i(f.startSeconds)}),f.title]})})},`${f.startSeconds}-${f.title}`)})})}He.displayName="Ginger.Current.Chapters";function br({visible:e=!1,className:r,style:n,fallback:a,empty:t,children:i}){var d;const s=k.useGingerState();if(!e)return null;const c=((d=S.getCurrentTrack(s))==null?void 0:d.fileUrl)??"";if(!c){const g=t??a??null;return g?o.jsx("span",{className:r,style:n,children:g}):null}return i?o.jsx("span",{"data-ginger-component":"FileUrl",className:r,style:n,children:i(c,s)}):o.jsx("span",{className:r,style:n,children:c})}br.displayName="Ginger.Current.FileUrl";function vr({className:e,style:r,fallback:n,empty:a,sizes:t,loading:i,onError:s,decoding:c,unstyled:d=!1,imgStyle:g}){const y=k.useGingerState(),x=S.getCurrentTrack(y),v=S.resolvedArtwork(y);if(!v){const h=a??n??null;return h?o.jsx("span",{className:e,style:r,children:h}):null}const f=[x==null?void 0:x.title,x==null?void 0:x.artist].filter(Boolean).join(" — ")||"Artwork";return o.jsx("div",{"data-ginger-component":"Artwork",className:e,style:d?{...r}:{background:"var(--ginger-artwork-bg, transparent)",borderRadius:"var(--ginger-artwork-radius, 0)",overflow:"hidden",...r},children:o.jsx("img",{src:v,alt:f,sizes:t,loading:i,decoding:c,onError:s,style:{display:d?void 0:"block",width:d?void 0:"100%",height:d?void 0:"100%",objectFit:d?void 0:"cover",...g}})})}vr.displayName="Ginger.Current.Artwork";function Tr({base:e=0,className:r,style:n,fallback:a,empty:t,children:i}){const s=k.useGingerState();if(s.tracks.length===0){const g=t??a??null;return g?o.jsx("span",{"data-ginger-component":"QueueIndex",className:r,style:n,children:g}):null}const d=String(s.currentIndex+e);return i?o.jsx("span",{"data-ginger-component":"QueueIndex",className:r,style:n,children:i(d,s)}):o.jsx("span",{"data-ginger-component":"QueueIndex",className:r,style:n,children:d})}Tr.displayName="Ginger.Current.QueueIndex";function Mr({className:e,style:r,fallback:n,empty:a,children:t}){const i=k.useGingerState(),s=String(i.tracks.length);if(i.tracks.length===0){const c=a??n??null;return c?o.jsx("span",{className:e,style:r,children:c}):null}return t?o.jsx("span",{"data-ginger-component":"QueueLength",className:e,style:r,children:t(s,i)}):o.jsx("span",{"data-ginger-component":"QueueLength",className:e,style:r,children:s})}Mr.displayName="Ginger.Current.QueueLength";function Er({base:e=0,separator:r=" / ",className:n,style:a,fallback:t,empty:i,children:s}){const c=k.useGingerState(),d=c.tracks.length;if(d===0){const v=i??t??null;return v?o.jsx("span",{className:n,style:a,children:v}):null}const g=String(c.currentIndex+e),y=String(d),x=`${g}${r}${y}`;return s?o.jsx("span",{"data-ginger-component":"QueuePosition",className:n,style:a,children:s({index:g,length:y,label:x},c)}):o.jsx("span",{"data-ginger-component":"QueuePosition",className:n,style:a,children:x})}Er.displayName="Ginger.Current.QueuePosition";function Ye(e,r,n){const{className:a,style:t,fallback:i,empty:s,children:c,format:d=z}=n;if(!(e>=0)||!Number.isFinite(e)){const y=s??i??null;return y?o.jsx("span",{"data-ginger-component":"TimeText",className:a,style:t,children:y}):null}const g=d(e);return c?o.jsx("span",{"data-ginger-component":"TimeText",className:a,style:t,children:c(g,r)}):o.jsx("span",{"data-ginger-component":"TimeText",className:a,style:t,children:g})}function Ir(e){const r=k.useGingerState();return Ye(r.currentTime,r,e)}Ir.displayName="Ginger.Current.Elapsed";function Pr(e){const r=k.useGingerState();return Ye(S.effectiveDuration(r),r,e)}Pr.displayName="Ginger.Current.Duration";function Sr(e){const r=k.useGingerState();return Ye(S.effectiveRemaining(r),r,e)}Sr.displayName="Ginger.Current.Remaining";function Ar({className:e,style:r,fallback:n,empty:a,children:t}){const i=k.useGingerState(),s=S.effectiveDuration(i),c=S.progressFraction(i);if(!(s>0)){const d=a??n??null;return d?o.jsx("span",{"data-ginger-component":"Progress",className:e,style:r,children:d}):null}return t?o.jsx("span",{"data-ginger-component":"Progress",className:e,style:r,children:t({fraction:c,currentTime:i.currentTime,duration:s},i)}):o.jsx("span",{"data-ginger-component":"Progress",className:e,style:r,children:`${Math.round(c*100)}%`})}Ar.displayName="Ginger.Current.Progress";function Rr({className:e,style:r,height:n=4,showBuffered:a=!1,unstyled:t=!1}){const i=k.useGingerState(),s=`${Math.round(S.progressFraction(i)*100)}%`,c=`${Math.round(Math.min(1,Math.max(0,i.bufferedFraction))*100)}%`;return o.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?o.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:c,background:t?void 0:"var(--ginger-buffer-color, rgba(107, 114, 128, 0.35))"}}):null,o.jsx("div",{"data-ginger-component":"TimeRail",style:{position:t?void 0:"relative",width:s,height:t?void 0:"100%",background:t?void 0:"var(--ginger-primary-color, #111827)"}})]})}Rr.displayName="Ginger.Current.TimeRail";function jr({className:e,style:r,height:n=4,unstyled:a=!1}){const t=k.useGingerState(),i=`${Math.round(Math.min(1,Math.max(0,t.bufferedFraction))*100)}%`;return o.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:o.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))"}})})}jr.displayName="Ginger.Current.BufferRail";function Gr({className:e,style:r,fallback:n,empty:a,children:t}){const i=k.useGingerState(),s=S.derivePlaybackUiState(i);return t?o.jsx("span",{"data-ginger-component":"PlaybackState",className:e,style:r,children:t(s,i)}):o.jsx("span",{"data-ginger-component":"PlaybackState",className:e,style:r,children:s})}Gr.displayName="Ginger.Current.PlaybackState";function Cr({className:e,style:r,fallback:n,empty:a,live:t="polite",children:i}){const s=k.useGingerState(),c=s.errorMessage??"";if(!c){const d=a??n??null;return d?o.jsx("span",{"data-ginger-component":"ErrorMessage",className:e,style:r,children:d}):null}return i?o.jsx("span",{"data-ginger-component":"ErrorMessage",className:e,style:r,"aria-live":t,children:i(c,s)}):o.jsx("span",{"data-ginger-component":"ErrorMessage",className:e,style:r,"aria-live":t,children:c})}Cr.displayName="Ginger.Current.ErrorMessage";const Le=l.createContext(null);function ot(){const e=l.useContext(Le);if(!e)throw new Error("Ginger.Playlist.Track must be used inside <Ginger.Playlist>");return e}function wr({children:e,unstyled:r=!1,rowStyle:n,renderTrack:a,playOnSelect:t=!0,style:i,...s}){const{tracks:c,currentIndex:d,playTrackAt:g,selectTrackAt:y}=k.useGingerPlayback(),x=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?o.jsx(Le.Provider,{value:{playOnSelect:t},children:o.jsx("ul",{"data-ginger-component":"Playlist",style:x,...s,children:e})}):o.jsx(Le.Provider,{value:{playOnSelect:t},children:o.jsx("ul",{"data-ginger-component":"Playlist",style:x,...s,children:c.map((f,h)=>{const T=h===d;return o.jsx("li",{children:o.jsx("button",{type:"button",onClick:()=>{t?g(h):y(h)},style:{width:r?void 0:"100%",textAlign:r?void 0:"left",border:r?void 0:"none",background:r?void 0:T?"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(f,h,T):o.jsxs("span",{children:[f.title,f.artist?` — ${f.artist}`:""]})})},`${h}-${M.trackIdentity(f)}`)})})})}wr.displayName="Ginger.Playlist";function Lr({index:e,unstyled:r=!1,className:n,style:a,children:t,liProps:i,onClick:s,...c}){const{playOnSelect:d}=ot(),{tracks:g,currentIndex:y,playTrackAt:x,selectTrackAt:v}=k.useGingerPlayback(),f=e===y,h=g[e],T=h!=null?o.jsxs("span",{"data-ginger-component":"PlaylistTrack",children:[h.title,h.artist?` — ${h.artist}`:""]}):null;return o.jsx("li",{...i,"data-ginger-component":"PlaylistTrack",children:o.jsx("button",{type:"button","data-ginger-component":"PlaylistTrackButton","aria-current":f?"true":void 0,"data-ginger-active":f||void 0,className:n,style:{width:r?void 0:"100%",textAlign:r?void 0:"left",border:r?void 0:"none",background:r?void 0:f?"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},...c,onClick:m=>{s==null||s(m),!m.defaultPrevented&&(d?x(e):v(e))},children:t??T})})}Lr.displayName="Ginger.Playlist.Track";const st=Object.assign(wr,{Track:Lr}),ct=V("Ginger.Queue.Title",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.title}),ut=V("Ginger.Queue.Subtitle",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.subtitle}),lt=V("Ginger.Queue.Description",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.description}),dt=V("Ginger.Queue.Copyright",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.copyright});function Nr({className:e,style:r,fallback:n,empty:a,unstyled:t=!1,imgStyle:i}){var g,y;const s=k.useGingerState(),c=(g=s.playlistMeta)==null?void 0:g.artworkUrl;if(!c){const x=a??n??null;return x?o.jsx("span",{"data-ginger-component":"Artwork",className:e,style:r,children:x}):null}const d=((y=s.playlistMeta)==null?void 0:y.title)??"Playlist artwork";return o.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:o.jsx("img",{src:c,alt:d,style:{display:t?void 0:"block",width:t?void 0:"100%",height:t?void 0:"100%",objectFit:t?void 0:"cover",...i}})})}Nr.displayName="Ginger.Queue.Artwork";function W(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):1}function Re(e){return Number.isFinite(e)?Math.min(4,Math.max(.25,e)):1}const B={currentTime:0,duration:0,bufferedFraction:0,isBuffering:!1,errorMessage:null},gt={...B,volume:1,muted:!1,playbackRate:1};function Qe(e){const r=[...e.tracks];let n=M.clampIndex(e.currentIndex??0,r.length),a=null,t=r;return e.isShuffled&&r.length>1&&(a=[...r],t=M.shuffleWithAnchor(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,...gt,volume:W(e.volume??1),muted:e.muted??!1,playbackRate:Re(e.playbackRate??1)}}function _r(e,r){switch(r.type){case"INIT":{const{tracks:n,currentIndex:a,playlistMeta:t,isPaused:i,isShuffled:s,repeatMode:c,playbackMode:d,volume:g,muted:y,playbackRate:x}=r.payload;return Qe({tracks:n,currentIndex:a,playlistMeta:t??null,isPaused:i??!0,isShuffled:s??!1,repeatMode:c??"off",playbackMode:d??"playlist",volume:g,muted:y,playbackRate:x})}case"SET_QUEUE":{const{tracks:n,currentIndex:a}=r.payload,t=[...n],i=M.clampIndex(a??e.currentIndex,t.length);return{...e,tracks:t,currentIndex:i,isShuffled:!1,originalTracks:null,...B}}case"INSERT_TRACK":{const n=r.payload.index??e.tracks.length,a=M.insertTrackAt(e.tracks,r.payload.track,n);if(r.payload.autoPlay){const s=M.clampIndex(n,a.length);return{...e,tracks:a,currentIndex:s,isShuffled:!1,originalTracks:null,isPaused:!1,...B}}const t=n<=e.currentIndex?e.currentIndex+1:e.currentIndex,i=e.isShuffled&&e.originalTracks?M.insertTrackAt(e.originalTracks,r.payload.track,e.originalTracks.length):e.originalTracks;return{...e,tracks:a,originalTracks:i,currentIndex:M.clampIndex(t,a.length)}}case"REMOVE_TRACK":{const n=r.payload.index,a=M.removeTrackAt(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,i=e.isShuffled&&e.originalTracks?(()=>{const c=e.tracks[n],d=M.findIndexByTrackIdentity(e.originalTracks,c);return M.removeTrackAt(e.originalTracks,d)})():e.originalTracks,s=e.isShuffled&&a.length>1;return{...e,tracks:a,isShuffled:s,originalTracks:s?i:null,currentIndex:M.clampIndex(t,a.length),...n===e.currentIndex?B:{}}}case"MOVE_TRACK":{const{fromIndex:n,toIndex:a}=r.payload,t=M.moveTrack(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:M.clampIndex(i,t.length)}}case"ADD_NEXT":{const n=M.addNextTrack(e.tracks,e.currentIndex,r.payload.track),a=e.isShuffled&&e.originalTracks?(()=>{const t=e.tracks[e.currentIndex],i=M.findIndexByTrackIdentity(e.originalTracks,t);return M.addNextTrack(e.originalTracks,i,r.payload.track)})():e.originalTracks;return{...e,tracks:n,originalTracks:a}}case"SET_INDEX":{const n=M.clampIndex(r.payload.index,e.tracks.length),a=r.payload.autoPlay,t=a===!0?!1:a===!1?!0:e.isPaused;return{...e,currentIndex:n,...B,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:M.cycleRepeatMode(e.repeatMode)};case"TOGGLE_SHUFFLE":{if(e.tracks.length<=1)return{...e,isShuffled:!1,originalTracks:null};if(!e.isShuffled){const i=[...e.tracks],s=M.shuffleWithAnchor(i,e.currentIndex);return{...e,isShuffled:!0,originalTracks:i,tracks:s,currentIndex:0}}const n=e.originalTracks?[...e.originalTracks]:[...e.tracks],a=e.tracks[e.currentIndex],t=M.findIndexByTrackIdentity(n,a);return{...e,isShuffled:!1,originalTracks:null,tracks:n,currentIndex:M.clampIndex(t,n.length)}}case"NEXT":{const n=M.computeNextIndex(e),a=n===e.currentIndex;return{...e,currentIndex:n,...a?{}:B,isPaused:a?e.isPaused:!1}}case"PREV":{const n=M.computePrevIndex(e),a=n===e.currentIndex;return{...e,currentIndex:n,...a?{}:B,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,...B};case"SET_VOLUME":return{...e,volume:W(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:Re(r.payload)};case"MEDIA_VOLUME_SYNC":{const{volume:n,muted:a}=r.payload,t=W(n);return t===e.volume&&a===e.muted?e:{...e,volume:t,muted:a}}default:return e}}function Ae(){return typeof navigator>"u"||!("mediaSession"in navigator)?null:navigator.mediaSession}function pt(e,r,n,a={}){var v;const t=l.useRef(r);t.current=r;const i=r.tracks[r.currentIndex],s=i==null?void 0:i.title,c=i==null?void 0:i.artist,d=i==null?void 0:i.album,g=M.resolveArtworkUrl(i,(v=r.playlistMeta)==null?void 0:v.artworkUrl);l.useEffect(()=>{const f=Ae();!e||!f||(f.metadata=new MediaMetadata({title:s??"Unknown track",artist:c,album:d,artwork:g?[{src:g}]:void 0}))},[e,s,c,d,g]),l.useEffect(()=>{const f=Ae();!e||!f||(f.playbackState=r.isPaused?"paused":"playing")},[e,r.isPaused]);const y=a.seekForwardSeconds,x=a.seekBackwardSeconds;l.useEffect(()=>{const f=Ae();if(!(!e||!f)){try{f.setActionHandler("play",n.play),f.setActionHandler("pause",n.pause),f.setActionHandler("nexttrack",n.next),f.setActionHandler("previoustrack",n.prev),f.setActionHandler("seekto",h=>{typeof h.seekTime=="number"&&Number.isFinite(h.seekTime)&&n.seek(h.seekTime)}),typeof y=="number"&&y>0?f.setActionHandler("seekforward",()=>{const h=t.current,T=h.currentTime+y,m=h.duration,P=Number.isFinite(m)&&m>0?m:T;n.seek(Math.min(T,P))}):f.setActionHandler("seekforward",null),typeof x=="number"&&x>0?f.setActionHandler("seekbackward",()=>{const h=t.current;n.seek(Math.max(0,h.currentTime-x))}):f.setActionHandler("seekbackward",null)}catch{}return()=>{try{f.setActionHandler("play",null),f.setActionHandler("pause",null),f.setActionHandler("nexttrack",null),f.setActionHandler("previoustrack",null),f.setActionHandler("seekto",null),f.setActionHandler("seekforward",null),f.setActionHandler("seekbackward",null)}catch{}}}},[e,n,y,x]),l.useEffect(()=>{var P,A;const f=Ae();if(!e||!f||!a.positionState)return;const h=r.duration,T=r.currentTime,m=r.playbackRate;try{if(!Number.isFinite(h)||h<=0){(P=f.setPositionState)==null||P.call(f);return}(A=f.setPositionState)==null||A.call(f,{duration:h,playbackRate:Number.isFinite(m)&&m>0?m:1,position:Math.min(Math.max(0,T),h)})}catch{}return()=>{var G;try{(G=f.setPositionState)==null||G.call(f)}catch{}}},[e,a.positionState,r.currentTime,r.duration,r.playbackRate])}const ft={"--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 mt({children:e,initialTracks:r=[],initialIndex:n=0,initialPlaylistMeta:a=null,initialShuffle:t=!1,initialRepeatMode:i="off",initialPlaybackMode:s="playlist",initialPaused:c=!0,initialVolume:d=1,initialMuted:g=!1,initialPlaybackRate:y=1,initialStateKey:x,locale:v,mediaSession:f=!1,beforePlay:h,onPlayBlocked:T,persistence:m,hydrateOnMount:P=!1,resumeOnTrackChange:A=!1,unstyled:G=!1,asChild:X=!1,className:K,style:je,dir:Dr,prevRestartThresholdSeconds:ze=3,onTrackChange:q,onPlay:J,onPause:Z,onQueueEnd:ee,onError:re,onVolumeChange:te,onPlaybackRateChange:ne,onSeek:N}){var Je;const _=l.useRef(null),[u,b]=l.useReducer(_r,void 0,()=>Qe({tracks:r,currentIndex:n,playlistMeta:a,isPaused:c,isShuffled:t,repeatMode:i,playbackMode:s,volume:d,muted:g,playbackRate:y})),Ge=l.useRef(u),Ce=l.useRef({tracks:r,currentIndex:n,playlistMeta:a,isPaused:c,isShuffled:t,repeatMode:i,playbackMode:s,volume:d,muted:g,playbackRate:y});Ce.current={tracks:r,currentIndex:n,playlistMeta:a,isPaused:c,isShuffled:t,repeatMode:i,playbackMode:s,volume:d,muted:g,playbackRate:y};const Y=l.useRef(void 0);l.useEffect(()=>{if(x===void 0){Y.current=void 0;return}if(Y.current===void 0){Y.current=x;return}if(Y.current===x)return;Y.current=x;const p=Ce.current;b({type:"INIT",payload:{tracks:p.tracks,currentIndex:p.currentIndex,playlistMeta:p.playlistMeta,isPaused:p.isPaused,isShuffled:p.isShuffled,repeatMode:p.repeatMode,playbackMode:p.playbackMode,volume:p.volume,muted:p.muted,playbackRate:p.playbackRate}})},[x]),l.useEffect(()=>{Ge.current=u},[u]);const We=u.tracks[u.currentIndex]??null;l.useEffect(()=>{q==null||q(We,u.currentIndex)},[We,u.currentIndex,q]),l.useEffect(()=>{u.errorMessage&&(re==null||re(u.errorMessage))},[u.errorMessage,re]);const ae=l.useRef(void 0);l.useEffect(()=>{if(ae.current===void 0){ae.current=u.isPaused;return}ae.current!==u.isPaused&&(u.isPaused?Z==null||Z():J==null||J()),ae.current=u.isPaused},[u.isPaused,Z,J]);const ie=l.useRef(void 0),oe=l.useRef(void 0);l.useEffect(()=>{if(ie.current===void 0||oe.current===void 0){ie.current=u.volume,oe.current=u.muted;return}(ie.current!==u.volume||oe.current!==u.muted)&&(te==null||te(u.volume,u.muted)),ie.current=u.volume,oe.current=u.muted},[u.volume,u.muted,te]);const se=l.useRef(void 0);l.useEffect(()=>{if(se.current===void 0){se.current=u.playbackRate;return}se.current!==u.playbackRate&&(ne==null||ne(u.playbackRate)),se.current=u.playbackRate},[u.playbackRate,ne]);const D=l.useCallback(()=>{b({type:"PLAY"})},[]),F=l.useCallback(()=>{var p;b({type:"PAUSE"}),(p=_.current)==null||p.pause()},[]),ce=l.useCallback(()=>{u.isPaused?D():F()},[F,D,u.isPaused]),U=l.useCallback(p=>{const E=_.current;E&&Number.isFinite(p)&&(E.currentTime=Math.max(0,p),N==null||N(Math.max(0,p)))},[N]),ue=l.useCallback(p=>{b({type:"SET_VOLUME",payload:W(p)})},[]),le=l.useCallback(p=>{b({type:"SET_MUTED",payload:p})},[]),de=l.useCallback(()=>{b({type:"TOGGLE_MUTE"})},[]),ge=l.useCallback(p=>{b({type:"SET_PLAYBACK_RATE",payload:Re(p)})},[]),$=l.useCallback(()=>{b({type:"NEXT"})},[]),H=l.useCallback(()=>{const p=_.current,E=ze??3;p&&E>0&&p.currentTime>E?(p.currentTime=0,N==null||N(0)):b({type:"PREV"})},[ze,N]),pe=l.useCallback(p=>{b({type:"SET_REPEAT",payload:p})},[]),fe=l.useCallback(()=>{b({type:"CYCLE_REPEAT"})},[]),me=l.useCallback(()=>{b({type:"TOGGLE_SHUFFLE"})},[]),ye=l.useCallback((p,E)=>{b({type:"SET_QUEUE",payload:{tracks:p,currentIndex:E}})},[]),xe=l.useCallback((p,E,I)=>{b({type:"INSERT_TRACK",payload:{track:p,index:E,autoPlay:I}})},[]),he=l.useCallback(p=>{b({type:"REMOVE_TRACK",payload:{index:p}})},[]),ke=l.useCallback((p,E)=>{b({type:"MOVE_TRACK",payload:{fromIndex:p,toIndex:E}})},[]),be=l.useCallback(p=>{b({type:"ADD_NEXT",payload:{track:p}})},[]),ve=l.useCallback(p=>{b({type:"SET_INDEX",payload:{index:p,autoPlay:!0}})},[]),Te=l.useCallback(p=>{b({type:"SET_INDEX",payload:{index:p,autoPlay:!1}})},[]),Me=l.useCallback(p=>{b({type:"SET_PLAYLIST_META",payload:p})},[]),Ee=l.useCallback(p=>{b({type:"SET_PLAYBACK_MODE",payload:p})},[]),Ie=l.useCallback(p=>{b({type:"INIT",payload:p})},[]);l.useEffect(()=>{if(!(!m||!P))try{const p=m.get("ginger:volume"),E=m.get("ginger:muted"),I=m.get("ginger:playbackRate"),R=m.get("ginger:repeatMode"),Se=m.get("ginger:currentIndex"),L=Ce.current;b({type:"INIT",payload:{tracks:L.tracks,playlistMeta:L.playlistMeta,isPaused:L.isPaused,isShuffled:L.isShuffled,playbackMode:L.playbackMode,currentIndex:typeof Se=="number"?Se:L.currentIndex,repeatMode:R==="off"||R==="all"||R==="one"?R:L.repeatMode,volume:typeof p=="number"?p:L.volume,muted:typeof E=="boolean"?E:L.muted,playbackRate:typeof I=="number"?I:L.playbackRate}})}catch(p){process.env.NODE_ENV!=="production"&&console.warn("[@lucaismyname/ginger] persistence.get() threw during hydration:",p)}},[P,m]),l.useEffect(()=>{if(m)try{m.set("ginger:volume",u.volume),m.set("ginger:muted",u.muted),m.set("ginger:playbackRate",u.playbackRate),m.set("ginger:repeatMode",u.repeatMode),m.set("ginger:currentIndex",u.currentIndex)}catch(p){process.env.NODE_ENV!=="production"&&console.warn("[@lucaismyname/ginger] persistence.set() threw:",p)}},[m,u.volume,u.muted,u.playbackRate,u.repeatMode,u.currentIndex]),l.useEffect(()=>{if(!m||!A)return;const p=u.tracks[u.currentIndex];if(!p)return;const E=`ginger:resume:${M.trackIdentity(p)}`;try{const I=m.get(E);typeof I=="number"&&Number.isFinite(I)&&U(I)}catch(I){process.env.NODE_ENV!=="production"&&console.warn("[@lucaismyname/ginger] persistence.get() threw during resume:",I)}},[m,A,u.currentIndex,u.tracks,U]),l.useEffect(()=>{if(!m||!A)return;const p=u.tracks[u.currentIndex];if(!p||!(u.currentTime>=0))return;const E=`ginger:resume:${M.trackIdentity(p)}`,I=setTimeout(()=>{try{m.set(E,u.currentTime)}catch(R){process.env.NODE_ENV!=="production"&&console.warn("[@lucaismyname/ginger] persistence.set() threw during resume save:",R)}},250);return()=>clearTimeout(I)},[m,A,u.currentIndex,u.tracks,u.currentTime]);const Fr=(Je=u.tracks[u.currentIndex])==null?void 0:Je.fileUrl;l.useEffect(()=>{const p=_.current;if(!p)return;if(u.isPaused){p.pause();return}if(p.ended&&M.computeEndedTransition(Ge.current).kind==="stop"){b({type:"PAUSE"});return}let E=!1;return(async()=>{if(h){let I=!1;try{I=await h()}catch(R){const Se=R instanceof Error?R.message:"beforePlay rejected";b({type:"MEDIA_ERROR",payload:{message:Se}});return}if(!I){E||(b({type:"PAUSE"}),T==null||T());return}}E||p.play().catch(I=>{const R=I instanceof Error?I.message:typeof I=="string"?I:"Playback failed (e.g. autoplay blocked or unavailable source)";b({type:"MEDIA_ERROR",payload:{message:R}})})})(),()=>{E=!0}},[h,Fr,T,u.isPaused]);const Pe=l.useCallback(()=>{var I;const p=M.computeEndedTransition(Ge.current);if(p.kind==="replay_same"){const R=_.current;R&&(R.currentTime=0),b({type:"PLAY"});return}if(p.kind==="stop"){(I=_.current)==null||I.pause(),b({type:"PAUSE"}),ee==null||ee();return}const E=p.nextIndex;b({type:"SET_INDEX",payload:{index:E,autoPlay:!0}})},[ee]),Ur=l.useMemo(()=>({play:D,pause:F,next:$,prev:H,seek:U}),[D,F,$,H,U]),Br=typeof f=="object"?!0:!!f,Vr=l.useMemo(()=>typeof f=="object"?f:{},[f]);pt(Br,u,Ur,Vr);const Xe=Dr??(v!=null&&v.seek&&/[\u0590-\u08FF]/.test(v.seek)?"rtl":"ltr"),Or=l.useMemo(()=>({state:u,dispatch:b,audioRef:_,notifyEnded:Pe,init:Ie,play:D,pause:F,togglePlayPause:ce,seek:U,setVolume:ue,setMuted:le,toggleMute:de,setPlaybackRate:ge,next:$,prev:H,setRepeatMode:pe,cycleRepeat:fe,toggleShuffle:me,setQueue:ye,insertTrackAt:xe,removeTrackAt:he,moveTrack:ke,enqueueNext:be,playTrackAt:ve,selectTrackAt:Te,setPlaylistMeta:Me,setPlaybackMode:Ee}),[fe,Ie,$,Pe,F,D,ve,xe,he,ke,be,Te,H,U,le,ge,ye,pe,Me,Ee,ue,u,de,ce,me]),$r=l.useMemo(()=>({tracks:u.tracks,currentIndex:u.currentIndex,isPaused:u.isPaused,isShuffled:u.isShuffled,repeatMode:u.repeatMode,originalTracks:u.originalTracks,playlistMeta:u.playlistMeta,init:Ie,play:D,pause:F,togglePlayPause:ce,next:$,prev:H,setRepeatMode:pe,cycleRepeat:fe,toggleShuffle:me,playbackMode:u.playbackMode,setQueue:ye,insertTrackAt:xe,removeTrackAt:he,moveTrack:ke,enqueueNext:be,playTrackAt:ve,selectTrackAt:Te,setPlaylistMeta:Me,setPlaybackMode:Ee,dispatch:b}),[u.tracks,u.currentIndex,u.isPaused,u.isShuffled,u.repeatMode,u.playbackMode,u.originalTracks,u.playlistMeta,Ie,D,F,ce,$,H,pe,fe,me,ye,xe,he,ke,be,ve,Te,Me,Ee]),Hr=l.useMemo(()=>({currentTime:u.currentTime,duration:u.duration,bufferedFraction:u.bufferedFraction,isBuffering:u.isBuffering,errorMessage:u.errorMessage,volume:u.volume,muted:u.muted,playbackRate:u.playbackRate,seek:U,setVolume:ue,setMuted:le,toggleMute:de,setPlaybackRate:ge,audioRef:_,notifyEnded:Pe,dispatch:b}),[u.currentTime,u.duration,u.bufferedFraction,u.isBuffering,u.errorMessage,u.volume,u.muted,u.playbackRate,U,ue,le,de,ge,Pe]),Ke=S.derivePlaybackUiState(u),qe=l.useMemo(()=>G?je:{...ft,...je},[je,G]),w=l.useMemo(()=>({className:K,style:qe,"data-ginger-playback":Ke,dir:Xe}),[K,qe,Ke,Xe]),Yr=l.useMemo(()=>{if(!X)return o.jsx("div",{className:w.className,style:w.style,"data-ginger-playback":w["data-ginger-playback"],dir:w.dir,children:e});const p=l.Children.only(e);if(!l.isValidElement(p))throw new Error("Ginger.Provider asChild expects a single React element child.");const E=p,I=E.props.style;return l.cloneElement(E,{className:yt(E.props.className,w.className),style:I&&typeof I=="object"?{...I,...w.style}:w.style,"data-ginger-playback":w["data-ginger-playback"],dir:w.dir})},[X,e,w]);return o.jsx(Xr,{locale:v,children:o.jsx(k.GingerPlaybackContext.Provider,{value:$r,children:o.jsx(k.GingerMediaContext.Provider,{value:Hr,children:o.jsx(rr.Provider,{value:Or,children:Yr})})})})}function yt(e,r){const n=[e,r].filter(Boolean).join(" ");return n===""?void 0:n}const xt={Provider:mt,Player:zr,Current:{Title:qr,Artist:Jr,Album:Zr,Description:et,Copyright:rt,Genre:tt,Label:nt,Isrc:at,TrackNumber:it,Year:mr,Lyrics:yr,LyricsSynced:$e,Chapters:He,FileUrl:br,Artwork:vr,QueueIndex:Tr,QueueLength:Mr,QueuePosition:Er,Elapsed:Ir,Duration:Pr,Remaining:Sr,Progress:Ar,TimeRail:Rr,BufferRail:jr,PlaybackState:Gr,ErrorMessage:Cr},Queue:{Title:ct,Subtitle:ut,Description:lt,Copyright:dt,Artwork:Nr},Control:{PlayPause:or,Repeat:sr,Next:cr,Previous:ur,Shuffle:lr,SeekBar:dr,Volume:gr,Mute:pr,PlaybackRate:fr},Icon:{Play:_e,Pause:Ne,SkipForward:Be,SkipBack:Ue,Shuffle:Fe,Volume2:Ve,VolumeX:Oe,RepeatGlyph:De,Wrapper:C},Playlist:st};exports.Chapters=He;exports.Ginger=xt;exports.LyricsSynced=$e;exports.Pause=Ne;exports.Play=_e;exports.RepeatGlyph=De;exports.ShuffleIcon=Fe;exports.SkipBack=Ue;exports.SkipForward=Be;exports.Volume2=Ve;exports.VolumeX=Oe;exports.Wrapper=C;exports.clampPlaybackRate=Re;exports.clampVolume=W;exports.createInitialState=Qe;exports.defaultGingerLocale=Q;exports.gingerReducer=_r;exports.parseLrc=xr;exports.useGingerChapters=kr;exports.useGingerLocale=j;exports.useGingerLyricsSync=hr;exports.usePlayPauseBinding=ir;exports.useSeekBarBinding=nr;exports.useVolumeSlider=ar;
2
+ //# sourceMappingURL=ginger-9lWCvbHv.cjs.map