@lucaismyname/ginger 0.0.37 → 0.0.40
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 +18 -0
- package/README.md +16 -17
- package/dist/client.cjs +1 -1
- package/dist/client.js +2 -2
- 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.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/playlist/GingerPlaylist.d.ts.map +1 -1
- package/dist/components/queue/QueueDisplay.d.ts.map +1 -1
- package/dist/context/GingerProvider.d.ts.map +1 -1
- package/dist/equalizer/index.cjs +1 -1
- package/dist/equalizer/index.cjs.map +1 -1
- package/dist/equalizer/index.js +27 -22
- package/dist/equalizer/index.js.map +1 -1
- package/dist/equalizer/useGingerEqualizer.d.ts.map +1 -1
- package/dist/equalizer/useGingerEqualizer.test.d.ts +2 -0
- package/dist/equalizer/useGingerEqualizer.test.d.ts.map +1 -0
- package/dist/experimental-gapless/index.cjs +1 -1
- package/dist/experimental-gapless/index.cjs.map +1 -1
- package/dist/experimental-gapless/index.d.ts +12 -7
- package/dist/experimental-gapless/index.d.ts.map +1 -1
- package/dist/experimental-gapless/index.js +48 -12
- package/dist/experimental-gapless/index.js.map +1 -1
- package/dist/experimental-gapless/probeGaplessCapability.d.ts +33 -0
- package/dist/experimental-gapless/probeGaplessCapability.d.ts.map +1 -0
- package/dist/experimental-gapless/probeGaplessCapability.test.d.ts +2 -0
- package/dist/experimental-gapless/probeGaplessCapability.test.d.ts.map +1 -0
- package/dist/ginger-Ca8910_n.js +2050 -0
- package/dist/ginger-Ca8910_n.js.map +1 -0
- package/dist/ginger-DrD8F4HX.cjs +2 -0
- package/dist/ginger-DrD8F4HX.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/media/useMediaSession.d.ts +2 -2
- package/dist/media/useMediaSession.d.ts.map +1 -1
- package/dist/remote/useGingerRemote.test.d.ts.map +1 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.test.d.ts +2 -0
- package/dist/store.test.d.ts.map +1 -0
- package/dist/testing/helpers.d.ts +2 -0
- package/dist/testing/helpers.d.ts.map +1 -1
- package/dist/testing/index.cjs +2 -2
- package/dist/testing/index.cjs.map +1 -1
- package/dist/testing/index.js +16 -10
- package/dist/testing/index.js.map +1 -1
- package/dist/transcript/index.cjs +7 -7
- package/dist/transcript/index.cjs.map +1 -1
- package/dist/transcript/index.js +57 -52
- package/dist/transcript/index.js.map +1 -1
- package/dist/transcript/useGingerTranscriptSync.d.ts.map +1 -1
- package/dist/transcript/useGingerTranscriptSync.test.d.ts +2 -0
- package/dist/transcript/useGingerTranscriptSync.test.d.ts.map +1 -0
- package/dist/types.d.ts +20 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/{useGingerChapterProgress-BW6v65wN.js → useGingerChapterProgress-Dbwiwnko.js} +2 -2
- package/dist/useGingerChapterProgress-Dbwiwnko.js.map +1 -0
- package/dist/{useGingerChapterProgress-B2-J3dSP.cjs → useGingerChapterProgress-TeWWJ8Fd.cjs} +2 -2
- package/dist/useGingerChapterProgress-TeWWJ8Fd.cjs.map +1 -0
- package/dist/waveform/index.cjs +1 -1
- package/dist/waveform/index.cjs.map +1 -1
- package/dist/waveform/index.d.ts +1 -1
- package/dist/waveform/index.d.ts.map +1 -1
- package/dist/waveform/index.js +129 -129
- package/dist/waveform/index.js.map +1 -1
- package/dist/waveform/useAudioPeaks.d.ts +14 -1
- package/dist/waveform/useAudioPeaks.d.ts.map +1 -1
- package/package.json +6 -3
- package/dist/ginger-DlCkxDXs.js +0 -2223
- package/dist/ginger-DlCkxDXs.js.map +0 -1
- package/dist/ginger-jToP7EpI.cjs +0 -2
- package/dist/ginger-jToP7EpI.cjs.map +0 -1
- package/dist/useGingerChapterProgress-B2-J3dSP.cjs.map +0 -1
- package/dist/useGingerChapterProgress-BW6v65wN.js.map +0 -1
|
@@ -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
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/experimental-gapless/probeGaplessCapability.ts","../../src/experimental-gapless/index.ts"],"sourcesContent":["/**\n * Milestone 1 gapless probe: detects whether the **browser** exposes the minimum APIs\n * for a future Web Audio decode + schedule path. Ginger does not implement gapless\n * playback yet; this never touches the live `HTMLAudioElement` or playback.\n */\n\nexport type GaplessHints = {\n /**\n * Use on `HTMLMediaElement` (and matching `fetch`) when audio is cross-origin so\n * decoded samples can be routed without tainting (required for Web Audio).\n */\n crossOrigin: \"anonymous\" | \"use-credentials\" | null;\n /**\n * Short guidance on containers/codecs and fetch constraints for a decode path.\n */\n format: string;\n};\n\nexport type GaplessCapabilityResult = {\n /**\n * True when `AudioContext` (or legacy equivalent) and `decodeAudioData` appear\n * available in a secure context — i.e. the environment could support a decode-based\n * gapless implementation. Does **not** mean Ginger ships gapless playback.\n */\n supported: boolean;\n /** Human-readable explanation, including caveats and fallback behavior. */\n reason: string;\n hints: GaplessHints;\n};\n\nconst DEFAULT_HINTS: GaplessHints = {\n crossOrigin: \"anonymous\",\n format:\n \"Full-file fetch + decode is the portable path; Media Source Extensions help only when you control containerized segments. Prefer HTTP(S) or blob: URLs; cross-origin media needs CORS and matching crossOrigin on <audio>. Codec support (MP3, AAC/MP4, Opus, …) is browser-specific.\",\n};\n\nfunction hasDecodeAudioDataOnPrototype(ctor: typeof AudioContext | undefined): boolean {\n return Boolean(ctor && typeof ctor.prototype.decodeAudioData === \"function\");\n}\n\n/**\n * Inspect globals only (no `AudioContext` construction) so it is safe to call during SSR\n * or in tests without user gesture.\n */\nexport function probeGaplessCapability(): GaplessCapabilityResult {\n if (typeof globalThis === \"undefined\") {\n return {\n supported: false,\n reason: \"No global object (probe unsupported in this runtime).\",\n hints: DEFAULT_HINTS,\n };\n }\n\n const g = globalThis as unknown as {\n window?: Window;\n isSecureContext?: boolean;\n AudioContext?: typeof AudioContext;\n webkitAudioContext?: typeof AudioContext;\n MediaSource?: typeof MediaSource;\n };\n\n if (typeof g.window === \"undefined\") {\n return {\n supported: false,\n reason:\n \"No window (SSR or non-browser). Run the probe in the browser if you need live results.\",\n hints: DEFAULT_HINTS,\n };\n }\n\n const secure =\n typeof g.isSecureContext === \"boolean\" ? g.isSecureContext : g.window.isSecureContext !== false;\n if (!secure) {\n return {\n supported: false,\n reason:\n \"A secure context (HTTPS or localhost) is required for Web Audio in most browsers. Gapless decode path would not be available here.\",\n hints: DEFAULT_HINTS,\n };\n }\n\n const Ctor = g.AudioContext ?? g.webkitAudioContext;\n if (!Ctor || !hasDecodeAudioDataOnPrototype(Ctor)) {\n return {\n supported: false,\n reason:\n \"Web Audio API is unavailable or decodeAudioData is missing. A gapless decode path cannot run in this environment.\",\n hints: DEFAULT_HINTS,\n };\n }\n\n const mse = typeof g.MediaSource !== \"undefined\";\n const mseNote = mse\n ? \"MediaSource is available for segment-based strategies; Ginger still uses a single <audio> for playback today.\"\n : \"MediaSource is not exposed; only full-buffer decode (or progressive chunking in user code) applies.\";\n\n return {\n supported: true,\n reason: `Browser exposes Web Audio decode primitives (${mseNote}). Ginger does not yet schedule gapless transitions — keep using Ginger.Player and existing queue actions.`,\n hints: DEFAULT_HINTS,\n };\n}\n","import { useMemo } from \"react\";\nimport { useGingerPlayback } from \"../context/GingerSplitContexts\";\nimport { type GaplessCapabilityResult, probeGaplessCapability } from \"./probeGaplessCapability\";\n\nexport type { GaplessCapabilityResult, GaplessHints } from \"./probeGaplessCapability\";\nexport { probeGaplessCapability } from \"./probeGaplessCapability\";\n\nexport type ExperimentalGaplessState = GaplessCapabilityResult & {\n /**\n * Ginger does not yet implement gapless scheduling; playback always uses\n * the usual `Ginger.Player` + `<audio>` pipeline.\n */\n gingerGaplessPlayback: false;\n /** Track identifiers for prefetch / experimentation (id, else file URL). */\n preloadedTrackIds: string[];\n};\n\n/**\n * Reports **environment** capability for a future gapless decode path plus queue ids.\n * Does not change Ginger playback behavior.\n */\nexport function useExperimentalGapless(): ExperimentalGaplessState {\n const { tracks } = useGingerPlayback();\n return useMemo(() => {\n const probe = probeGaplessCapability();\n return {\n ...probe,\n gingerGaplessPlayback: false as const,\n preloadedTrackIds: tracks.map((track) => track.id ?? track.fileUrl),\n };\n }, [tracks]);\n}\n"],"names":["DEFAULT_HINTS","hasDecodeAudioDataOnPrototype","ctor","probeGaplessCapability","g","Ctor","useExperimentalGapless","tracks","useGingerPlayback","useMemo","track"],"mappings":";;AA8BA,MAAMA,IAA8B;AAAA,EAClC,aAAa;AAAA,EACb,QACE;AACJ;AAEA,SAASC,EAA8BC,GAAgD;AACrF,SAAO,GAAQA,KAAQ,OAAOA,EAAK,UAAU,mBAAoB;AACnE;AAMO,SAASC,IAAkD;AAChE,MAAI,OAAO,aAAe;AACxB,WAAO;AAAA,MACL,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,OAAOH;AAAA,IAAA;AAIX,QAAMI,IAAI;AAQV,MAAI,OAAOA,EAAE,SAAW;AACtB,WAAO;AAAA,MACL,WAAW;AAAA,MACX,QACE;AAAA,MACF,OAAOJ;AAAA,IAAA;AAMX,MAAI,EADF,OAAOI,EAAE,mBAAoB,YAAYA,EAAE,kBAAkBA,EAAE,OAAO,oBAAoB;AAE1F,WAAO;AAAA,MACL,WAAW;AAAA,MACX,QACE;AAAA,MACF,OAAOJ;AAAA,IAAA;AAIX,QAAMK,IAAOD,EAAE,gBAAgBA,EAAE;AACjC,SAAI,CAACC,KAAQ,CAACJ,EAA8BI,CAAI,IACvC;AAAA,IACL,WAAW;AAAA,IACX,QACE;AAAA,IACF,OAAOL;AAAA,EAAA,IASJ;AAAA,IACL,WAAW;AAAA,IACX,QAAQ,gDAPE,OAAOI,EAAE,cAAgB,MAEjC,kHACA,qGAI6D;AAAA,IAC/D,OAAOJ;AAAA,EAAA;AAEX;AChFO,SAASM,IAAmD;AACjE,QAAM,EAAE,QAAAC,EAAA,IAAWC,EAAA;AACnB,SAAOC,EAAQ,OAEN;AAAA,IACL,GAFYN,EAAA;AAAA,IAGZ,uBAAuB;AAAA,IACvB,mBAAmBI,EAAO,IAAI,CAACG,MAAUA,EAAM,MAAMA,EAAM,OAAO;AAAA,EAAA,IAEnE,CAACH,CAAM,CAAC;AACb;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Milestone 1 gapless probe: detects whether the **browser** exposes the minimum APIs
|
|
3
|
+
* for a future Web Audio decode + schedule path. Ginger does not implement gapless
|
|
4
|
+
* playback yet; this never touches the live `HTMLAudioElement` or playback.
|
|
5
|
+
*/
|
|
6
|
+
export type GaplessHints = {
|
|
7
|
+
/**
|
|
8
|
+
* Use on `HTMLMediaElement` (and matching `fetch`) when audio is cross-origin so
|
|
9
|
+
* decoded samples can be routed without tainting (required for Web Audio).
|
|
10
|
+
*/
|
|
11
|
+
crossOrigin: "anonymous" | "use-credentials" | null;
|
|
12
|
+
/**
|
|
13
|
+
* Short guidance on containers/codecs and fetch constraints for a decode path.
|
|
14
|
+
*/
|
|
15
|
+
format: string;
|
|
16
|
+
};
|
|
17
|
+
export type GaplessCapabilityResult = {
|
|
18
|
+
/**
|
|
19
|
+
* True when `AudioContext` (or legacy equivalent) and `decodeAudioData` appear
|
|
20
|
+
* available in a secure context — i.e. the environment could support a decode-based
|
|
21
|
+
* gapless implementation. Does **not** mean Ginger ships gapless playback.
|
|
22
|
+
*/
|
|
23
|
+
supported: boolean;
|
|
24
|
+
/** Human-readable explanation, including caveats and fallback behavior. */
|
|
25
|
+
reason: string;
|
|
26
|
+
hints: GaplessHints;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Inspect globals only (no `AudioContext` construction) so it is safe to call during SSR
|
|
30
|
+
* or in tests without user gesture.
|
|
31
|
+
*/
|
|
32
|
+
export declare function probeGaplessCapability(): GaplessCapabilityResult;
|
|
33
|
+
//# sourceMappingURL=probeGaplessCapability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probeGaplessCapability.d.ts","sourceRoot":"","sources":["../../src/experimental-gapless/probeGaplessCapability.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,YAAY,GAAG;IACzB;;;OAGG;IACH,WAAW,EAAE,WAAW,GAAG,iBAAiB,GAAG,IAAI,CAAC;IACpD;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,CAAC;CACrB,CAAC;AAYF;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,uBAAuB,CAyDhE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probeGaplessCapability.test.d.ts","sourceRoot":"","sources":["../../src/experimental-gapless/probeGaplessCapability.test.ts"],"names":[],"mappings":""}
|