@lucaismyname/ginger 0.0.17 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +76 -0
  2. package/dist/client.cjs +1 -1
  3. package/dist/client.js +2 -2
  4. package/dist/client.test.d.ts +2 -0
  5. package/dist/client.test.d.ts.map +1 -0
  6. package/dist/components/controls/Controls.d.ts +26 -13
  7. package/dist/components/controls/Controls.d.ts.map +1 -1
  8. package/dist/experimental-gapless/index.cjs.map +1 -1
  9. package/dist/experimental-gapless/index.d.ts +3 -1
  10. package/dist/experimental-gapless/index.d.ts.map +1 -1
  11. package/dist/experimental-gapless/index.js.map +1 -1
  12. package/dist/{ginger-F4UDi2Qf.js → ginger-8x4WzVmw.js} +196 -144
  13. package/dist/ginger-8x4WzVmw.js.map +1 -0
  14. package/dist/ginger-CMbd3s8C.cjs +2 -0
  15. package/dist/ginger-CMbd3s8C.cjs.map +1 -0
  16. package/dist/index.cjs +1 -1
  17. package/dist/index.d.ts +44 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -2
  20. package/dist/testing/helpers.d.ts +29 -0
  21. package/dist/testing/helpers.d.ts.map +1 -1
  22. package/dist/testing/helpers.test.d.ts +2 -0
  23. package/dist/testing/helpers.test.d.ts.map +1 -0
  24. package/dist/testing/index.cjs +48 -43
  25. package/dist/testing/index.cjs.map +1 -1
  26. package/dist/testing/index.d.ts +1 -1
  27. package/dist/testing/index.d.ts.map +1 -1
  28. package/dist/testing/index.js +6888 -3749
  29. package/dist/testing/index.js.map +1 -1
  30. package/dist/testing/index.test.d.ts +2 -0
  31. package/dist/testing/index.test.d.ts.map +1 -0
  32. package/dist/testing/renderGinger.d.ts.map +1 -1
  33. package/dist/{useNextTrackPrefetch-BeAKS3SR.cjs → useNextTrackPrefetch-CFoUynDv.cjs} +2 -2
  34. package/dist/{useNextTrackPrefetch-BeAKS3SR.cjs.map → useNextTrackPrefetch-CFoUynDv.cjs.map} +1 -1
  35. package/dist/{useNextTrackPrefetch-gKls_h_N.js → useNextTrackPrefetch-CV1khU0h.js} +2 -2
  36. package/dist/{useNextTrackPrefetch-gKls_h_N.js.map → useNextTrackPrefetch-CV1khU0h.js.map} +1 -1
  37. package/package.json +9 -1
  38. package/dist/ginger-DWOyCog6.cjs +0 -2
  39. package/dist/ginger-DWOyCog6.cjs.map +0 -1
  40. package/dist/ginger-F4UDi2Qf.js.map +0 -1
package/README.md CHANGED
@@ -1,3 +1,79 @@
1
+ # @lucaismyname/ginger
2
+
3
+ Headless React audio player primitives for building custom music and podcast UIs.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @lucaismyname/ginger
9
+ ```
10
+
11
+ Peer dependencies:
12
+
13
+ - `react >= 18`
14
+ - `react-dom >= 18`
15
+
16
+ ## Quick Start
17
+
18
+ ```tsx
19
+ import { Ginger } from "@lucaismyname/ginger";
20
+
21
+ const tracks = [{ id: "a", title: "Track A", fileUrl: "/audio/a.mp3" }];
22
+
23
+ export function Player() {
24
+ return (
25
+ <Ginger.Provider initialTracks={tracks}>
26
+ <Ginger.Player />
27
+ <Ginger.Control.PlayPause />
28
+ <Ginger.Control.Previous />
29
+ <Ginger.Control.Next />
30
+ <Ginger.Control.SeekBar />
31
+ <Ginger.Control.Volume />
32
+ <Ginger.Current.Title fallback="No track" />
33
+ </Ginger.Provider>
34
+ );
35
+ }
36
+ ```
37
+
38
+ ## Documentation
39
+
40
+ - Getting started: [`docs/getting-started.md`](./docs/getting-started.md)
41
+ - Testing guide: [`docs/guides/testing.md`](./docs/guides/testing.md)
42
+ - Recipes: [`docs/guides/recipes.md`](./docs/guides/recipes.md)
43
+ - Accessibility checklist: [`docs/guides/accessibility.md`](./docs/guides/accessibility.md)
44
+ - Streaming adapters: [`docs/guides/streaming-adapters.md`](./docs/guides/streaming-adapters.md)
45
+ - Components reference: [`docs/reference/components.md`](./docs/reference/components.md)
46
+ - Hooks reference: [`docs/reference/hooks.md`](./docs/reference/hooks.md)
47
+ - Subpath exports: [`docs/reference/subpaths.md`](./docs/reference/subpaths.md)
48
+ - Generated API docs: [`docs/api/index.html`](./docs/api/index.html)
49
+
50
+ ## Subpath Exports
51
+
52
+ - `@lucaismyname/ginger/client`
53
+ - `@lucaismyname/ginger/testing`
54
+ - `@lucaismyname/ginger/waveform`
55
+ - `@lucaismyname/ginger/experimental-gapless`
56
+
57
+ ### Experimental Notice
58
+
59
+ `@lucaismyname/ginger/experimental-gapless` is intentionally non-production.
60
+ It currently provides capability metadata only and does not alter playback behavior.
61
+
62
+ ## Release Process
63
+
64
+ - Changelog: [`CHANGELOG.md`](./CHANGELOG.md)
65
+ - Release note template: [`../../.github/release-template.md`](../../.github/release-template.md)
66
+
67
+ Before publishing:
68
+
69
+ ```bash
70
+ npm run build
71
+ npm run test
72
+ npm run typecheck
73
+ npm run lint
74
+ npm run docs:api
75
+ ```
76
+
1
77
  # ginger
2
78
 
3
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.
package/dist/client.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ginger-DWOyCog6.cjs"),r=require("./useNextTrackPrefetch-BeAKS3SR.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;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./ginger-CMbd3s8C.cjs"),r=require("./useNextTrackPrefetch-CFoUynDv.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-F4UDi2Qf.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-gKls_h_N.js";
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-8x4WzVmw.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-CV1khU0h.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,
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../src/client.test.ts"],"names":[],"mappings":""}
@@ -7,62 +7,75 @@ export type PlayPauseProps = ButtonHTMLAttributes<HTMLButtonElement> & {
7
7
  playAriaLabel?: string;
8
8
  /** Screen-reader label when playing (action would pause); defaults to match `pauseLabel` when it is a string */
9
9
  pauseAriaLabel?: string;
10
+ children?: ReactNode;
10
11
  };
11
- export declare function PlayPause({ playLabel, pauseLabel, playAriaLabel, pauseAriaLabel, type, onClick, ...rest }: PlayPauseProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare function PlayPause({ playLabel, pauseLabel, playAriaLabel, pauseAriaLabel, children, type, onClick, ...rest }: PlayPauseProps): import("react/jsx-runtime").JSX.Element;
12
13
  export declare namespace PlayPause {
13
14
  var displayName: string;
14
15
  }
15
- export type RepeatProps = ButtonHTMLAttributes<HTMLButtonElement>;
16
- export declare function Repeat({ type, onClick, ...rest }: RepeatProps): import("react/jsx-runtime").JSX.Element;
16
+ export type RepeatProps = ButtonHTMLAttributes<HTMLButtonElement> & {
17
+ ariaLabel?: string;
18
+ };
19
+ export declare function Repeat({ type, ariaLabel, onClick, ...rest }: RepeatProps): import("react/jsx-runtime").JSX.Element;
17
20
  export declare namespace Repeat {
18
21
  var displayName: string;
19
22
  }
20
- export type NextProps = ButtonHTMLAttributes<HTMLButtonElement>;
21
- export declare function Next({ type, children, onClick, ...rest }: NextProps): import("react/jsx-runtime").JSX.Element;
23
+ export type NextProps = ButtonHTMLAttributes<HTMLButtonElement> & {
24
+ ariaLabel?: string;
25
+ };
26
+ export declare function Next({ type, children, ariaLabel, onClick, ...rest }: NextProps): import("react/jsx-runtime").JSX.Element;
22
27
  export declare namespace Next {
23
28
  var displayName: string;
24
29
  }
25
- export type PreviousProps = ButtonHTMLAttributes<HTMLButtonElement>;
26
- export declare function Previous({ type, children, onClick, ...rest }: PreviousProps): import("react/jsx-runtime").JSX.Element;
30
+ export type PreviousProps = ButtonHTMLAttributes<HTMLButtonElement> & {
31
+ ariaLabel?: string;
32
+ };
33
+ export declare function Previous({ type, children, ariaLabel, onClick, ...rest }: PreviousProps): import("react/jsx-runtime").JSX.Element;
27
34
  export declare namespace Previous {
28
35
  var displayName: string;
29
36
  }
30
- export type ShuffleProps = ButtonHTMLAttributes<HTMLButtonElement>;
31
- export declare function Shuffle({ type, children, onClick, ...rest }: ShuffleProps): import("react/jsx-runtime").JSX.Element;
37
+ export type ShuffleProps = ButtonHTMLAttributes<HTMLButtonElement> & {
38
+ ariaLabel?: string;
39
+ };
40
+ export declare function Shuffle({ type, children, ariaLabel, onClick, ...rest }: ShuffleProps): import("react/jsx-runtime").JSX.Element;
32
41
  export declare namespace Shuffle {
33
42
  var displayName: string;
34
43
  }
35
44
  export type SeekBarProps = Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "onChange" | "onInput" | "min" | "max" | "step"> & {
36
45
  /** Remove default width style for fully custom styling. */
37
46
  unstyled?: boolean;
47
+ ariaLabel?: string;
38
48
  inputStyle?: CSSProperties;
39
49
  };
40
- export declare function SeekBar({ inputStyle, style, unstyled, ...rest }: SeekBarProps): import("react/jsx-runtime").JSX.Element;
50
+ export declare function SeekBar({ inputStyle, style, unstyled, ariaLabel, ...rest }: SeekBarProps): import("react/jsx-runtime").JSX.Element;
41
51
  export declare namespace SeekBar {
42
52
  var displayName: string;
43
53
  }
44
54
  export type VolumeProps = Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "onChange" | "onInput" | "min" | "max" | "step"> & {
45
55
  /** Remove default width style for fully custom styling. */
46
56
  unstyled?: boolean;
57
+ ariaLabel?: string;
47
58
  inputStyle?: CSSProperties;
48
59
  };
49
- export declare function Volume({ inputStyle, style, unstyled, ...rest }: VolumeProps): import("react/jsx-runtime").JSX.Element;
60
+ export declare function Volume({ inputStyle, style, unstyled, ariaLabel, ...rest }: VolumeProps): import("react/jsx-runtime").JSX.Element;
50
61
  export declare namespace Volume {
51
62
  var displayName: string;
52
63
  }
53
64
  export type MuteProps = ButtonHTMLAttributes<HTMLButtonElement> & {
65
+ ariaLabel?: string;
54
66
  muteLabel?: ReactNode;
55
67
  unmuteLabel?: ReactNode;
56
68
  };
57
- export declare function Mute({ muteLabel, unmuteLabel, type, onClick, ...rest }: MuteProps): import("react/jsx-runtime").JSX.Element;
69
+ export declare function Mute({ ariaLabel, muteLabel, unmuteLabel, type, onClick, ...rest }: MuteProps): import("react/jsx-runtime").JSX.Element;
58
70
  export declare namespace Mute {
59
71
  var displayName: string;
60
72
  }
61
73
  export type PlaybackRateProps = Omit<SelectHTMLAttributes<HTMLSelectElement>, "value" | "onChange"> & {
62
74
  /** Playback speed options (default: 0.5 … 2) */
63
75
  rates?: readonly number[];
76
+ ariaLabel?: string;
64
77
  };
65
- export declare function PlaybackRate({ rates, style, ...rest }: PlaybackRateProps): import("react/jsx-runtime").JSX.Element;
78
+ export declare function PlaybackRate({ rates, style, ariaLabel, ...rest }: PlaybackRateProps): import("react/jsx-runtime").JSX.Element;
66
79
  export declare namespace PlaybackRate {
67
80
  var displayName: string;
68
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Controls.d.ts","sourceRoot":"","sources":["../../../src/components/controls/Controls.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Controls.d.ts","sourceRoot":"","sources":["../../../src/components/controls/Controls.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/experimental-gapless/index.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useGingerPlayback } from \"../context/GingerSplitContexts\";\n\nexport type ExperimentalGaplessState = {\n supported: false;\n reason: string;\n preloadedTrackIds: string[];\n};\n\n/**\n * Experimental-only helper surface.\n * This does not alter Ginger playback behavior.\n */\nexport function useExperimentalGapless(): ExperimentalGaplessState {\n const { tracks } = useGingerPlayback();\n return useMemo(\n () => ({\n supported: false as const,\n reason: \"Gapless playback requires dedicated Web Audio graph orchestration.\",\n preloadedTrackIds: tracks.map((track) => track.id ?? track.fileUrl),\n }),\n [tracks],\n );\n}\n"],"names":["useExperimentalGapless","tracks","useGingerPlayback","useMemo","track"],"mappings":"0JAaO,SAASA,GAAmD,CACjE,KAAM,CAAE,OAAAC,CAAA,EAAWC,oBAAA,EACnB,OAAOC,EAAAA,QACL,KAAO,CACL,UAAW,GACX,OAAQ,qEACR,kBAAmBF,EAAO,IAAKG,GAAUA,EAAM,IAAMA,EAAM,OAAO,CAAA,GAEpE,CAACH,CAAM,CAAA,CAEX"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/experimental-gapless/index.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useGingerPlayback } from \"../context/GingerSplitContexts\";\n\nexport type ExperimentalGaplessState = {\n supported: false;\n reason: string;\n preloadedTrackIds: string[];\n};\n\n/**\n * Experimental-only helper surface.\n *\n * @deprecated This export is intentionally non-production and currently reports capabilities only.\n * It does not alter Ginger playback behavior.\n */\nexport function useExperimentalGapless(): ExperimentalGaplessState {\n const { tracks } = useGingerPlayback();\n return useMemo(\n () => ({\n supported: false as const,\n reason: \"Gapless playback requires dedicated Web Audio graph orchestration.\",\n preloadedTrackIds: tracks.map((track) => track.id ?? track.fileUrl),\n }),\n [tracks],\n );\n}\n"],"names":["useExperimentalGapless","tracks","useGingerPlayback","useMemo","track"],"mappings":"0JAeO,SAASA,GAAmD,CACjE,KAAM,CAAE,OAAAC,CAAA,EAAWC,oBAAA,EACnB,OAAOC,EAAAA,QACL,KAAO,CACL,UAAW,GACX,OAAQ,qEACR,kBAAmBF,EAAO,IAAKG,GAAUA,EAAM,IAAMA,EAAM,OAAO,CAAA,GAEpE,CAACH,CAAM,CAAA,CAEX"}
@@ -5,7 +5,9 @@ export type ExperimentalGaplessState = {
5
5
  };
6
6
  /**
7
7
  * Experimental-only helper surface.
8
- * This does not alter Ginger playback behavior.
8
+ *
9
+ * @deprecated This export is intentionally non-production and currently reports capabilities only.
10
+ * It does not alter Ginger playback behavior.
9
11
  */
10
12
  export declare function useExperimentalGapless(): ExperimentalGaplessState;
11
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/experimental-gapless/index.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,wBAAwB,CAUjE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/experimental-gapless/index.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,KAAK,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,wBAAwB,CAUjE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/experimental-gapless/index.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useGingerPlayback } from \"../context/GingerSplitContexts\";\n\nexport type ExperimentalGaplessState = {\n supported: false;\n reason: string;\n preloadedTrackIds: string[];\n};\n\n/**\n * Experimental-only helper surface.\n * This does not alter Ginger playback behavior.\n */\nexport function useExperimentalGapless(): ExperimentalGaplessState {\n const { tracks } = useGingerPlayback();\n return useMemo(\n () => ({\n supported: false as const,\n reason: \"Gapless playback requires dedicated Web Audio graph orchestration.\",\n preloadedTrackIds: tracks.map((track) => track.id ?? track.fileUrl),\n }),\n [tracks],\n );\n}\n"],"names":["useExperimentalGapless","tracks","useGingerPlayback","useMemo","track"],"mappings":";;AAaO,SAASA,IAAmD;AACjE,QAAM,EAAE,QAAAC,EAAA,IAAWC,EAAA;AACnB,SAAOC;AAAA,IACL,OAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,mBAAmBF,EAAO,IAAI,CAACG,MAAUA,EAAM,MAAMA,EAAM,OAAO;AAAA,IAAA;AAAA,IAEpE,CAACH,CAAM;AAAA,EAAA;AAEX;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/experimental-gapless/index.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useGingerPlayback } from \"../context/GingerSplitContexts\";\n\nexport type ExperimentalGaplessState = {\n supported: false;\n reason: string;\n preloadedTrackIds: string[];\n};\n\n/**\n * Experimental-only helper surface.\n *\n * @deprecated This export is intentionally non-production and currently reports capabilities only.\n * It does not alter Ginger playback behavior.\n */\nexport function useExperimentalGapless(): ExperimentalGaplessState {\n const { tracks } = useGingerPlayback();\n return useMemo(\n () => ({\n supported: false as const,\n reason: \"Gapless playback requires dedicated Web Audio graph orchestration.\",\n preloadedTrackIds: tracks.map((track) => track.id ?? track.fileUrl),\n }),\n [tracks],\n );\n}\n"],"names":["useExperimentalGapless","tracks","useGingerPlayback","useMemo","track"],"mappings":";;AAeO,SAASA,IAAmD;AACjE,QAAM,EAAE,QAAAC,EAAA,IAAWC,EAAA;AACnB,SAAOC;AAAA,IACL,OAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,mBAAmBF,EAAO,IAAI,CAACG,MAAUA,EAAM,MAAMA,EAAM,OAAO;AAAA,IAAA;AAAA,IAEpE,CAACH,CAAM;AAAA,EAAA;AAEX;"}