@lucaismyname/ginger 0.0.5 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +745 -0
- package/dist/components/controls/Controls.d.ts +7 -3
- package/dist/components/controls/Controls.d.ts.map +1 -1
- package/dist/components/current/Artwork.d.ts.map +1 -1
- package/dist/components/current/Time.d.ts +11 -1
- package/dist/components/current/Time.d.ts.map +1 -1
- package/dist/components/current/index.d.ts +1 -1
- package/dist/components/current/index.d.ts.map +1 -1
- package/dist/components/playlist/GingerPlaylist.d.ts.map +1 -1
- package/dist/context/GingerContext.d.ts +3 -1
- package/dist/context/GingerContext.d.ts.map +1 -1
- package/dist/context/GingerLocaleContext.d.ts +9 -0
- package/dist/context/GingerLocaleContext.d.ts.map +1 -0
- package/dist/context/GingerProvider.d.ts +1 -1
- package/dist/context/GingerProvider.d.ts.map +1 -1
- package/dist/context/GingerSplitContexts.d.ts +42 -0
- package/dist/context/GingerSplitContexts.d.ts.map +1 -0
- package/dist/core/transitions.test.d.ts +2 -0
- package/dist/core/transitions.test.d.ts.map +1 -0
- package/dist/ginger.d.ts +1 -0
- package/dist/ginger.d.ts.map +1 -1
- package/dist/hooks/useControlBindings.d.ts +40 -0
- package/dist/hooks/useControlBindings.d.ts.map +1 -0
- package/dist/hooks/useGinger.d.ts +1 -0
- package/dist/hooks/useGinger.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +981 -638
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +31 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -3,8 +3,12 @@ export type PlayPauseProps = ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
|
3
3
|
/** Optional labels; still headless—defaults are text for a11y */
|
|
4
4
|
playLabel?: ReactNode;
|
|
5
5
|
pauseLabel?: ReactNode;
|
|
6
|
+
/** Screen-reader label when paused (playing would start); defaults to match `playLabel` when it is a string */
|
|
7
|
+
playAriaLabel?: string;
|
|
8
|
+
/** Screen-reader label when playing (action would pause); defaults to match `pauseLabel` when it is a string */
|
|
9
|
+
pauseAriaLabel?: string;
|
|
6
10
|
};
|
|
7
|
-
export declare function PlayPause({ playLabel, pauseLabel, type, ...rest }: PlayPauseProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export declare function PlayPause({ playLabel, pauseLabel, playAriaLabel, pauseAriaLabel, type, ...rest }: PlayPauseProps): import("react/jsx-runtime").JSX.Element;
|
|
8
12
|
export declare namespace PlayPause {
|
|
9
13
|
var displayName: string;
|
|
10
14
|
}
|
|
@@ -28,14 +32,14 @@ export declare function Shuffle({ type, children, ...rest }: ShuffleProps): impo
|
|
|
28
32
|
export declare namespace Shuffle {
|
|
29
33
|
var displayName: string;
|
|
30
34
|
}
|
|
31
|
-
export type SeekBarProps = Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "onChange"> & {
|
|
35
|
+
export type SeekBarProps = Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "onChange" | "onInput" | "min" | "max" | "step"> & {
|
|
32
36
|
inputStyle?: CSSProperties;
|
|
33
37
|
};
|
|
34
38
|
export declare function SeekBar({ inputStyle, style, ...rest }: SeekBarProps): import("react/jsx-runtime").JSX.Element;
|
|
35
39
|
export declare namespace SeekBar {
|
|
36
40
|
var displayName: string;
|
|
37
41
|
}
|
|
38
|
-
export type VolumeProps = Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "onChange"> & {
|
|
42
|
+
export type VolumeProps = Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "onChange" | "onInput" | "min" | "max" | "step"> & {
|
|
39
43
|
inputStyle?: CSSProperties;
|
|
40
44
|
};
|
|
41
45
|
export declare function Volume({ inputStyle, style, ...rest }: VolumeProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Controls.d.ts","sourceRoot":"","sources":["../../../src/components/controls/Controls.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACrB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Controls.d.ts","sourceRoot":"","sources":["../../../src/components/controls/Controls.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,oBAAoB,EACrB,MAAM,OAAO,CAAC;AAKf,MAAM,MAAM,cAAc,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IACrE,iEAAiE;IACjE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,+GAA+G;IAC/G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gHAAgH;IAChH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACxB,SAAkB,EAClB,UAAoB,EACpB,aAAa,EACb,cAAc,EACd,IAAe,EACf,GAAG,IAAI,EACR,EAAE,cAAc,2CAahB;yBApBe,SAAS;;;AAwBzB,MAAM,MAAM,WAAW,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AAElE,wBAAgB,MAAM,CAAC,EAAE,IAAe,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,2CAS/D;yBATe,MAAM;;;AAatB,MAAM,MAAM,SAAS,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AAChE,wBAAgB,IAAI,CAAC,EAAE,IAAe,EAAE,QAAiB,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,2CAQ9E;yBARe,IAAI;;;AAWpB,MAAM,MAAM,aAAa,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AACpE,wBAAgB,QAAQ,CAAC,EAAE,IAAe,EAAE,QAAqB,EAAE,GAAG,IAAI,EAAE,EAAE,aAAa,2CAQ1F;yBARe,QAAQ;;;AAWxB,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AACnE,wBAAgB,OAAO,CAAC,EAAE,IAAe,EAAE,QAAoB,EAAE,GAAG,IAAI,EAAE,EAAE,YAAY,2CAcvF;yBAde,OAAO;;;AAiBvB,MAAM,MAAM,YAAY,GAAG,IAAI,CAC7B,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CACnE,GAAG;IACF,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B,CAAC;AAEF,wBAAgB,OAAO,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,YAAY,2CAiBnE;yBAjBe,OAAO;;;AAqBvB,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CACnE,GAAG;IACF,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B,CAAC;AAEF,wBAAgB,MAAM,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,2CAiBjE;yBAjBe,MAAM;;;AAqBtB,MAAM,MAAM,SAAS,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAChE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB,CAAC;AAEF,wBAAgB,IAAI,CAAC,EACnB,SAAS,EACT,WAAW,EACX,IAAe,EACf,GAAG,IAAI,EACR,EAAE,SAAS,2CAgBX;yBArBe,IAAI;;;AA2BpB,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IACpG,gDAAgD;IAChD,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAAE,KAAoB,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,iBAAiB,2CAsBvF;yBAtBe,YAAY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Artwork.d.ts","sourceRoot":"","sources":["../../../src/components/current/Artwork.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,MAAM,MAAM,YAAY,GAAG,gBAAgB,GACzC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC,GAAG;IACxF,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEJ,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"Artwork.d.ts","sourceRoot":"","sources":["../../../src/components/current/Artwork.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,MAAM,MAAM,YAAY,GAAG,gBAAgB,GACzC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC,GAAG;IACxF,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEJ,wBAAgB,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,YAAY,kDAoCvH;yBApCe,OAAO"}
|
|
@@ -30,9 +30,19 @@ export declare namespace Progress {
|
|
|
30
30
|
export type TimeRailProps = DisplayBaseProps & {
|
|
31
31
|
/** 0-1 height in px for the rail */
|
|
32
32
|
height?: number;
|
|
33
|
+
/** When true, shows a buffered range behind the progress fill (uses `bufferedFraction`). */
|
|
34
|
+
showBuffered?: boolean;
|
|
33
35
|
};
|
|
34
|
-
export declare function TimeRail({ className, style, height }: TimeRailProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
export declare function TimeRail({ className, style, height, showBuffered }: TimeRailProps): import("react/jsx-runtime").JSX.Element;
|
|
35
37
|
export declare namespace TimeRail {
|
|
36
38
|
var displayName: string;
|
|
37
39
|
}
|
|
40
|
+
export type BufferRailProps = DisplayBaseProps & {
|
|
41
|
+
height?: number;
|
|
42
|
+
};
|
|
43
|
+
/** Buffered portion of the timeline (0…`bufferedFraction`); pair with `TimeRail` or use alone. */
|
|
44
|
+
export declare function BufferRail({ className, style, height }: BufferRailProps): import("react/jsx-runtime").JSX.Element;
|
|
45
|
+
export declare namespace BufferRail {
|
|
46
|
+
var displayName: string;
|
|
47
|
+
}
|
|
38
48
|
//# sourceMappingURL=Time.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Time.d.ts","sourceRoot":"","sources":["../../../src/components/current/Time.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAKjE,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAC7C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;CAC7D,CAAC;AAqBF,wBAAgB,OAAO,CAAC,KAAK,EAAE,aAAa,iFAG3C;yBAHe,OAAO;;;AAOvB,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,iFAG5C;yBAHe,QAAQ;;;AAOxB,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,iFAG7C;yBAHe,SAAS;;;AAOzB,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAC7C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;CAClH,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,aAAa,kDAmBtF;yBAnBe,QAAQ;;;AAuBxB,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAC7C,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Time.d.ts","sourceRoot":"","sources":["../../../src/components/current/Time.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAKjE,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAC7C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;CAC7D,CAAC;AAqBF,wBAAgB,OAAO,CAAC,KAAK,EAAE,aAAa,iFAG3C;yBAHe,OAAO;;;AAOvB,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,iFAG5C;yBAHe,QAAQ;;;AAOxB,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,iFAG7C;yBAHe,SAAS;;;AAOzB,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAC7C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,EAAE,WAAW,KAAK,SAAS,CAAC;CAClH,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,aAAa,kDAmBtF;yBAnBe,QAAQ;;;AAuBxB,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAC7C,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4FAA4F;IAC5F,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAU,EAAE,YAAoB,EAAE,EAAE,aAAa,2CAwC7F;yBAxCe,QAAQ;;;AA4CxB,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,kGAAkG;AAClG,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAU,EAAE,EAAE,eAAe,2CAyB3E;yBAzBe,UAAU"}
|
|
@@ -4,6 +4,6 @@ export { Lyrics } from './Lyrics';
|
|
|
4
4
|
export { FileUrl } from './FileUrl';
|
|
5
5
|
export { Artwork } from './Artwork';
|
|
6
6
|
export { QueueIndex, QueueLength, QueuePosition } from './QueueMeta';
|
|
7
|
-
export { Elapsed, Duration, Remaining, Progress, TimeRail } from './Time';
|
|
7
|
+
export { BufferRail, Elapsed, Duration, Remaining, Progress, TimeRail } from './Time';
|
|
8
8
|
export { PlaybackState, ErrorMessage } from './Playback';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/current/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/current/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GingerPlaylist.d.ts","sourceRoot":"","sources":["../../../src/components/playlist/GingerPlaylist.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"GingerPlaylist.d.ts","sourceRoot":"","sources":["../../../src/components/playlist/GingerPlaylist.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,EAAE,OAAO,CAAC;CACvB,CAAC;AAYF,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,GAAG;IACrF,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,SAAS,CAAC;IAC5E,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,YAAmB,EACnB,KAAK,EACL,GAAG,IAAI,EACR,EAAE,mBAAmB,2CAiErB;yBAxEe,cAAc;;;AA4E9B,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,GAAG;IAC7F,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,OAAO,CAAC,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;CAC3C,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,SAAS,EACT,KAAK,EACL,QAAQ,EACR,OAAO,EACP,OAAO,EACP,GAAG,UAAU,EACd,EAAE,wBAAwB,2CA2C1B;yBAnDe,mBAAmB;;;AAuDnC,eAAO,MAAM,sBAAsB;;CAEjC,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { Dispatch, MutableRefObject } from 'react';
|
|
2
|
-
import { GingerAction, GingerState, PlaylistMeta, RepeatMode, Track } from '../types';
|
|
2
|
+
import { GingerAction, GingerInitPayload, GingerState, PlaylistMeta, RepeatMode, Track } from '../types';
|
|
3
3
|
export type GingerContextValue = {
|
|
4
4
|
state: GingerState;
|
|
5
5
|
dispatch: Dispatch<GingerAction>;
|
|
6
6
|
audioRef: MutableRefObject<HTMLAudioElement | null>;
|
|
7
7
|
notifyEnded: () => void;
|
|
8
|
+
/** Full reset to match `createInitialState` / provider `initial*` props. */
|
|
9
|
+
init: (payload: GingerInitPayload) => void;
|
|
8
10
|
play: () => void;
|
|
9
11
|
pause: () => void;
|
|
10
12
|
togglePlayPause: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GingerContext.d.ts","sourceRoot":"","sources":["../../src/context/GingerContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"GingerContext.d.ts","sourceRoot":"","sources":["../../src/context/GingerContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAE9G,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACjC,QAAQ,EAAE,gBAAgB,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACpD,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,4EAA4E;IAC5E,IAAI,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC3C,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,eAAe,EAAE,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,QAAA,MAAM,aAAa,oDAAiD,CAAC;AAErE,wBAAgB,gBAAgB,IAAI,kBAAkB,CAIrD;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { GingerLocaleMessages } from '../types';
|
|
3
|
+
export declare const defaultGingerLocale: GingerLocaleMessages;
|
|
4
|
+
export declare function GingerLocaleProvider({ locale, children, }: {
|
|
5
|
+
locale?: Partial<GingerLocaleMessages>;
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare function useGingerLocale(): GingerLocaleMessages;
|
|
9
|
+
//# sourceMappingURL=GingerLocaleContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GingerLocaleContext.d.ts","sourceRoot":"","sources":["../../src/context/GingerLocaleContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD,eAAO,MAAM,mBAAmB,EAAE,oBAkBjC,CAAC;AAaF,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvC,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAGA;AAED,wBAAgB,eAAe,IAAI,oBAAoB,CAEtD"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { GingerProviderProps } from '../types';
|
|
2
|
-
export declare function GingerProvider({ children, initialTracks, initialIndex, initialPlaylistMeta, initialShuffle, initialRepeatMode, initialPaused, initialVolume, initialMuted, initialPlaybackRate, className, style, onTrackChange, onPlay, onPause, onQueueEnd, onError, }: GingerProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare function GingerProvider({ children, initialTracks, initialIndex, initialPlaylistMeta, initialShuffle, initialRepeatMode, initialPaused, initialVolume, initialMuted, initialPlaybackRate, initialStateKey, locale, className, style, onTrackChange, onPlay, onPause, onQueueEnd, onError, }: GingerProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=GingerProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GingerProvider.d.ts","sourceRoot":"","sources":["../../src/context/GingerProvider.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GingerProvider.d.ts","sourceRoot":"","sources":["../../src/context/GingerProvider.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAqB,mBAAmB,EAAmC,MAAM,UAAU,CAAC;AAkBxG,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,aAAkB,EAClB,YAAgB,EAChB,mBAA0B,EAC1B,cAAsB,EACtB,iBAAyB,EACzB,aAAoB,EACpB,aAAiB,EACjB,YAAoB,EACpB,mBAAuB,EACvB,eAAe,EACf,MAAM,EACN,SAAS,EACT,KAAK,EACL,aAAa,EACb,MAAM,EACN,OAAO,EACP,UAAU,EACV,OAAO,GACR,EAAE,mBAAmB,2CAqXrB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Dispatch, MutableRefObject } from 'react';
|
|
2
|
+
import { GingerAction, GingerInitPayload, GingerMediaSlice, GingerPlaybackSlice, GingerState, PlaylistMeta, RepeatMode, Track } from '../types';
|
|
3
|
+
export type GingerPlaybackActions = {
|
|
4
|
+
init: (payload: GingerInitPayload) => void;
|
|
5
|
+
play: () => void;
|
|
6
|
+
pause: () => void;
|
|
7
|
+
togglePlayPause: () => void;
|
|
8
|
+
next: () => void;
|
|
9
|
+
prev: () => void;
|
|
10
|
+
setRepeatMode: (mode: RepeatMode) => void;
|
|
11
|
+
cycleRepeat: () => void;
|
|
12
|
+
toggleShuffle: () => void;
|
|
13
|
+
setQueue: (tracks: Track[], currentIndex?: number) => void;
|
|
14
|
+
playTrackAt: (index: number) => void;
|
|
15
|
+
selectTrackAt: (index: number) => void;
|
|
16
|
+
setPlaylistMeta: (meta: PlaylistMeta | null) => void;
|
|
17
|
+
dispatch: Dispatch<GingerAction>;
|
|
18
|
+
};
|
|
19
|
+
export type GingerPlaybackContextValue = GingerPlaybackSlice & GingerPlaybackActions;
|
|
20
|
+
export type GingerMediaActions = {
|
|
21
|
+
seek: (timeSeconds: number) => void;
|
|
22
|
+
setVolume: (volume: number) => void;
|
|
23
|
+
setMuted: (muted: boolean) => void;
|
|
24
|
+
toggleMute: () => void;
|
|
25
|
+
setPlaybackRate: (rate: number) => void;
|
|
26
|
+
audioRef: MutableRefObject<HTMLAudioElement | null>;
|
|
27
|
+
notifyEnded: () => void;
|
|
28
|
+
dispatch: Dispatch<GingerAction>;
|
|
29
|
+
};
|
|
30
|
+
export type GingerMediaContextValue = GingerMediaSlice & GingerMediaActions;
|
|
31
|
+
declare const GingerPlaybackContext: import('react').Context<GingerPlaybackContextValue | null>;
|
|
32
|
+
declare const GingerMediaContext: import('react').Context<GingerMediaContextValue | null>;
|
|
33
|
+
export declare function useGingerPlayback(): GingerPlaybackContextValue;
|
|
34
|
+
export declare function useGingerMedia(): GingerMediaContextValue;
|
|
35
|
+
/** Full merged state; prefer over `useGingerContext().state` so updates follow playback vs media splits. */
|
|
36
|
+
export declare function useGingerState(): GingerState;
|
|
37
|
+
/** Merge playback + media slices (for selectors and `useGinger`). */
|
|
38
|
+
export declare function gingerStateFromContexts(playback: GingerPlaybackSlice, media: GingerMediaSlice): GingerState;
|
|
39
|
+
/** Merge full context values into `GingerState` (strips action fields). */
|
|
40
|
+
export declare function gingerStateFromContextValues(pb: GingerPlaybackContextValue, md: GingerMediaContextValue): GingerState;
|
|
41
|
+
export { GingerPlaybackContext, GingerMediaContext };
|
|
42
|
+
//# sourceMappingURL=GingerSplitContexts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GingerSplitContexts.d.ts","sourceRoot":"","sources":["../../src/context/GingerSplitContexts.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACjG,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,KAAK,EACN,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC3C,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,aAAa,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,eAAe,EAAE,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,mBAAmB,GAAG,qBAAqB,CAAC;AAErF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,gBAAgB,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACpD,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;AAE5E,QAAA,MAAM,qBAAqB,4DAAyD,CAAC;AACrF,QAAA,MAAM,kBAAkB,yDAAsD,CAAC;AAE/E,wBAAgB,iBAAiB,IAAI,0BAA0B,CAI9D;AAED,wBAAgB,cAAc,IAAI,uBAAuB,CAIxD;AAED,4GAA4G;AAC5G,wBAAgB,cAAc,IAAI,WAAW,CAI5C;AAED,qEAAqE;AACrE,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,mBAAmB,EAC7B,KAAK,EAAE,gBAAgB,GACtB,WAAW,CAEb;AAED,2EAA2E;AAC3E,wBAAgB,4BAA4B,CAC1C,EAAE,EAAE,0BAA0B,EAC9B,EAAE,EAAE,uBAAuB,GAC1B,WAAW,CA8Bb;AAED,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transitions.test.d.ts","sourceRoot":"","sources":["../../src/core/transitions.test.ts"],"names":[],"mappings":""}
|
package/dist/ginger.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ export declare const Ginger: {
|
|
|
28
28
|
Remaining: typeof Current.Remaining;
|
|
29
29
|
Progress: typeof Current.Progress;
|
|
30
30
|
TimeRail: typeof Current.TimeRail;
|
|
31
|
+
BufferRail: typeof Current.BufferRail;
|
|
31
32
|
PlaybackState: typeof Current.PlaybackState;
|
|
32
33
|
ErrorMessage: typeof Current.ErrorMessage;
|
|
33
34
|
};
|
package/dist/ginger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ginger.d.ts","sourceRoot":"","sources":["../src/ginger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,OAAO,MAAM,gCAAgC,CAAC;AAE1D,OAAO,KAAK,KAAK,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"ginger.d.ts","sourceRoot":"","sources":["../src/ginger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,OAAO,MAAM,gCAAgC,CAAC;AAE1D,OAAO,KAAK,KAAK,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDlB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { FormEvent } from 'react';
|
|
2
|
+
import { GingerState } from '../types';
|
|
3
|
+
export type SeekBarBinding = {
|
|
4
|
+
state: GingerState;
|
|
5
|
+
value: number;
|
|
6
|
+
min: number;
|
|
7
|
+
max: number;
|
|
8
|
+
step: "any";
|
|
9
|
+
ariaValueText: string;
|
|
10
|
+
ariaLabel: string;
|
|
11
|
+
onSeekInput: (e: FormEvent<HTMLInputElement>) => void;
|
|
12
|
+
onSeekChange: (e: FormEvent<HTMLInputElement>) => void;
|
|
13
|
+
};
|
|
14
|
+
/** Headless seek slider: bind return value to `<input type="range" />` or your own component. */
|
|
15
|
+
export declare function useSeekBarBinding(): SeekBarBinding;
|
|
16
|
+
export type VolumeBinding = {
|
|
17
|
+
state: GingerState;
|
|
18
|
+
value: number;
|
|
19
|
+
min: number;
|
|
20
|
+
max: number;
|
|
21
|
+
step: "any";
|
|
22
|
+
ariaValueText: string;
|
|
23
|
+
ariaLabel: string;
|
|
24
|
+
onVolumeInput: (e: FormEvent<HTMLInputElement>) => void;
|
|
25
|
+
onVolumeChange: (e: FormEvent<HTMLInputElement>) => void;
|
|
26
|
+
};
|
|
27
|
+
/** Headless volume slider. */
|
|
28
|
+
export declare function useVolumeSlider(): VolumeBinding;
|
|
29
|
+
export type PlayPauseBinding = {
|
|
30
|
+
isPaused: boolean;
|
|
31
|
+
toggle: () => void;
|
|
32
|
+
/** Resolved aria label for the button’s *next* action (play vs pause). */
|
|
33
|
+
ariaLabel: string;
|
|
34
|
+
};
|
|
35
|
+
/** Headless play/pause control; use with `playAriaLabel` / `pauseAriaLabel` from locale or custom strings. */
|
|
36
|
+
export declare function usePlayPauseBinding(options?: {
|
|
37
|
+
playAriaLabel?: string;
|
|
38
|
+
pauseAriaLabel?: string;
|
|
39
|
+
}): PlayPauseBinding;
|
|
40
|
+
//# sourceMappingURL=useControlBindings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useControlBindings.d.ts","sourceRoot":"","sources":["../../src/hooks/useControlBindings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAM5C,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,KAAK,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;CACxD,CAAC;AAEF,iGAAiG;AACjG,wBAAgB,iBAAiB,IAAI,cAAc,CA4BlD;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,KAAK,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACxD,cAAc,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;CAC1D,CAAC;AAEF,8BAA8B;AAC9B,wBAAgB,eAAe,IAAI,aAAa,CAqB/C;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,8GAA8G;AAC9G,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,gBAAgB,CAUnB"}
|
|
@@ -24,6 +24,7 @@ export declare function useGinger(): {
|
|
|
24
24
|
playTrackAt: (index: number) => void;
|
|
25
25
|
selectTrackAt: (index: number) => void;
|
|
26
26
|
setPlaylistMeta: (meta: import('..').PlaylistMeta | null) => void;
|
|
27
|
+
init: (payload: import('..').GingerInitPayload) => void;
|
|
27
28
|
audioRef: import('react').MutableRefObject<HTMLAudioElement | null>;
|
|
28
29
|
dispatch: import('react').Dispatch<import('..').GingerAction>;
|
|
29
30
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGinger.d.ts","sourceRoot":"","sources":["../../src/hooks/useGinger.ts"],"names":[],"mappings":"AAYA,wBAAgB,SAAS
|
|
1
|
+
{"version":3,"file":"useGinger.d.ts","sourceRoot":"","sources":["../../src/hooks/useGinger.ts"],"names":[],"mappings":"AAYA,wBAAgB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwCxB"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),f=require("react"),le=f.createContext(null);function y(){const e=f.useContext(le);if(!e)throw new Error("Ginger components must be used within <Ginger.Provider>");return e}function ue(e){const{buffered:r,duration:t}=e;return!(t>0)||r.length===0?0:Math.min(1,r.end(r.length-1)/t)}function Ve({className:e,style:r,preload:t="metadata",crossOrigin:n}){var m;const{audioRef:i,dispatch:u,state:a,notifyEnded:o}=y(),c=((m=a.tracks[a.currentIndex])==null?void 0:m.fileUrl)??"",d=f.useRef({currentTime:-1,duration:-1,bufferedFraction:-1}),p=(l,b=!1)=>{const k={currentTime:l.currentTime,duration:l.duration,bufferedFraction:ue(l)},P=d.current,M=Math.abs(k.currentTime-P.currentTime)>=.25||Math.abs(k.duration-P.duration)>=.01||Math.abs(k.bufferedFraction-P.bufferedFraction)>=.01;!b&&!M||(d.current=k,u({type:"MEDIA_TIME_UPDATE",payload:k}))};return f.useEffect(()=>{const l=i.current;l&&(l.volume=a.volume,l.muted=a.muted,l.playbackRate=a.playbackRate)},[i,a.volume,a.muted,a.playbackRate]),f.useEffect(()=>{const l=i.current;if(l){if(!c){l.removeAttribute("src"),d.current={currentTime:-1,duration:-1,bufferedFraction:-1};return}l.getAttribute("src")!==c&&(l.src=c,l.load(),d.current={currentTime:-1,duration:-1,bufferedFraction:-1})}},[i,a.currentIndex,a.tracks,c]),s.jsx("audio",{ref:i,className:e,style:r,preload:t,crossOrigin:n,controls:!1,playsInline:!0,onTimeUpdate:l=>{p(l.currentTarget)},onLoadedMetadata:l=>{const b=l.currentTarget;d.current={currentTime:-1,duration:-1,bufferedFraction:-1},u({type:"MEDIA_LOADED_METADATA",payload:{duration:b.duration,bufferedFraction:ue(b)}})},onSeeking:l=>p(l.currentTarget,!0),onSeeked:l=>p(l.currentTarget,!0),onEnded:()=>o(),onPlay:()=>u({type:"MEDIA_PLAY"}),onPause:()=>u({type:"MEDIA_PAUSE"}),onWaiting:()=>u({type:"MEDIA_WAITING"}),onCanPlay:()=>u({type:"MEDIA_CANPLAY"}),onProgress:l=>p(l.currentTarget,!0),onVolumeChange:l=>{const b=l.currentTarget;u({type:"MEDIA_VOLUME_SYNC",payload:{volume:b.volume,muted:b.muted}})},onError:()=>{var P;const l=i.current,b=(P=l==null?void 0:l.error)==null?void 0:P.code;u({type:"MEDIA_ERROR",payload:{message:b===1?"MEDIA_ERR_ABORTED":b===2?"MEDIA_ERR_NETWORK":b===3?"MEDIA_ERR_DECODE":b===4?"MEDIA_ERR_SRC_NOT_SUPPORTED":"MEDIA_ERR_UNKNOWN"}})}})}function R(e,r){return r<=0?0:Math.max(0,Math.min(r-1,e))}function oe(e,r){if(e.length<=1)return[...e];const t=e[r];if(!t)return[...e];const n=e.filter((i,u)=>u!==r);for(let i=n.length-1;i>0;i--){const u=Math.floor(Math.random()*(i+1));[n[i],n[u]]=[n[u],n[i]]}return[t,...n]}function ae(e){return e?e.id!=null&&e.id!==""?`id:${e.id}`:`file:${e.fileUrl}`:""}function Qe(e,r){const t=ae(r);if(!t)return 0;const n=e.findIndex(i=>ae(i)===t);return n===-1?0:n}function Xe(e){const{tracks:r,currentIndex:t,repeatMode:n}=e,i=r.length;return i===0?{kind:"stop",nextIndex:0}:n==="one"?{kind:"replay_same"}:t<i-1?{kind:"advance",nextIndex:t+1}:n==="all"?{kind:"wrap",nextIndex:0}:{kind:"stop",nextIndex:R(t,i)}}function We(e){const{tracks:r,currentIndex:t,repeatMode:n}=e,i=r.length;return i===0?0:t<i-1?t+1:n==="all"?0:R(t,i)}function Ke(e){const{tracks:r,currentIndex:t,repeatMode:n}=e,i=r.length;return i===0?0:t>0?t-1:n==="all"?i-1:0}function ze(e){return e==="off"?"all":e==="all"?"one":"off"}function qe(e,r){return(e==null?void 0:e.artworkUrl)??r??void 0}function He(e,r){return(e==null?void 0:e.album)??r??void 0}function E(e){return e.tracks[e.currentIndex]??null}function ce(e){return e.errorMessage?"error":e.tracks.length===0?"idle":e.isBuffering?"loading":e.isPaused?Number.isFinite(e.duration)&&e.duration>0&&e.currentTime>=e.duration-.05?"ended":"paused":"playing"}function C(e){var n;const r=e.duration;if(Number.isFinite(r)&&r>0)return r;const t=(n=e.tracks[e.currentIndex])==null?void 0:n.durationSeconds;return typeof t=="number"&&Number.isFinite(t)&&t>0?t:0}function de(e){const t=C(e)-e.currentTime;return Number.isFinite(t)?Math.max(0,t):0}function U(e){const r=C(e);return r>0?Math.min(1,Math.max(0,e.currentTime/r)):0}function fe(e){var t;const r=E(e);return qe(r,(t=e.playlistMeta)==null?void 0:t.artworkUrl)}function pe(e){var t;const r=E(e);return He(r,(t=e.playlistMeta)==null?void 0:t.subtitle)}function A(e,r){function t(n){const{state:i}=y(),a=(r(i)??"").trim(),{className:o,style:c,fallback:d,empty:p,children:m}=n;if(!a){const l=p??d??null;return l?s.jsx("span",{className:o,style:c,children:l}):null}return m?s.jsx("span",{className:o,style:c,children:m(a,i)}):s.jsx("span",{className:o,style:c,children:a})}return t.displayName=e,t}function v(e,r){return A(e,t=>r(E(t)))}const Je=v("Ginger.Current.Title",e=>e==null?void 0:e.title),Ze=v("Ginger.Current.Artist",e=>e==null?void 0:e.artist),er=A("Ginger.Current.Album",e=>pe(e)),rr=v("Ginger.Current.Description",e=>e==null?void 0:e.description),tr=A("Ginger.Current.Copyright",e=>{var t;const r=E(e);return(r==null?void 0:r.copyright)??((t=e.playlistMeta)==null?void 0:t.copyright)}),nr=v("Ginger.Current.Genre",e=>e==null?void 0:e.genre),ir=v("Ginger.Current.Label",e=>e==null?void 0:e.label),ur=v("Ginger.Current.Isrc",e=>e==null?void 0:e.isrc),ar=v("Ginger.Current.TrackNumber",e=>(e==null?void 0:e.trackNumber)!=null?String(e.trackNumber):void 0);function ge({className:e,style:r,fallback:t,empty:n,children:i,format:u}){var d;const{state:a}=y(),o=(d=E(a))==null?void 0:d.year;if(typeof o!="number"||!Number.isFinite(o)){const p=n??t??null;return p?s.jsx("span",{className:e,style:r,children:p}):null}const c=u?u(o):String(o);return i?s.jsx("span",{className:e,style:r,children:i(c,a)}):s.jsx("span",{className:e,style:r,children:c})}ge.displayName="Ginger.Current.Year";function ye({className:e,style:r,fallback:t,empty:n,children:i,preserveWhitespace:u=!0}){var p;const{state:a}=y(),o=((p=E(a))==null?void 0:p.lyrics)??"",c=u?o.replace(/^\s+|\s+$/g,""):o.trim();if(!c){const m=n??t??null;return m?s.jsx("span",{className:e,style:r,children:m}):null}const d=u?{whiteSpace:"pre-wrap"}:void 0;return i?s.jsx("span",{className:e,style:{...d,...r},children:i(c,a)}):s.jsx("span",{className:e,style:{...d,...r},children:c})}ye.displayName="Ginger.Current.Lyrics";function me({visible:e=!1,className:r,style:t,fallback:n,empty:i,children:u}){var c;const{state:a}=y();if(!e)return null;const o=((c=E(a))==null?void 0:c.fileUrl)??"";if(!o){const d=i??n??null;return d?s.jsx("span",{className:r,style:t,children:d}):null}return u?s.jsx("span",{className:r,style:t,children:u(o,a)}):s.jsx("span",{className:r,style:t,children:o})}me.displayName="Ginger.Current.FileUrl";function be({className:e,style:r,fallback:t,empty:n,sizes:i,loading:u,onError:a,decoding:o,imgStyle:c}){const{state:d}=y(),p=E(d),m=fe(d);if(!m){const b=n??t??null;return b?s.jsx("span",{className:e,style:r,children:b}):null}const l=[p==null?void 0:p.title,p==null?void 0:p.artist].filter(Boolean).join(" — ")||"Artwork";return s.jsx("span",{className:e,style:{display:"inline-block",background:"var(--ginger-artwork-bg, transparent)",borderRadius:"var(--ginger-artwork-radius, 0)",overflow:"hidden",...r},children:s.jsx("img",{src:m,alt:l,sizes:i,loading:u,decoding:o,onError:a,style:{display:"block",width:"100%",height:"100%",objectFit:"cover",...c}})})}be.displayName="Ginger.Current.Artwork";function xe({base:e=0,className:r,style:t,fallback:n,empty:i,children:u}){const{state:a}=y();if(a.tracks.length===0){const d=i??n??null;return d?s.jsx("span",{className:r,style:t,children:d}):null}const c=String(a.currentIndex+e);return u?s.jsx("span",{className:r,style:t,children:u(c,a)}):s.jsx("span",{className:r,style:t,children:c})}xe.displayName="Ginger.Current.QueueIndex";function he({className:e,style:r,fallback:t,empty:n,children:i}){const{state:u}=y(),a=String(u.tracks.length);if(u.tracks.length===0){const o=n??t??null;return o?s.jsx("span",{className:e,style:r,children:o}):null}return i?s.jsx("span",{className:e,style:r,children:i(a,u)}):s.jsx("span",{className:e,style:r,children:a})}he.displayName="Ginger.Current.QueueLength";function ke({base:e=0,separator:r=" / ",className:t,style:n,fallback:i,empty:u,children:a}){const{state:o}=y(),c=o.tracks.length;if(c===0){const l=u??i??null;return l?s.jsx("span",{className:t,style:n,children:l}):null}const d=String(o.currentIndex+e),p=String(c),m=`${d}${r}${p}`;return a?s.jsx("span",{className:t,style:n,children:a({index:d,length:p,label:m},o)}):s.jsx("span",{className:t,style:n,children:m})}ke.displayName="Ginger.Current.QueuePosition";function sr(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 L(e,r,t){const{className:n,style:i,fallback:u,empty:a,children:o,format:c=sr}=t;if(!(e>=0)||!Number.isFinite(e)){const p=a??u??null;return p?s.jsx("span",{className:n,style:i,children:p}):null}const d=c(e);return o?s.jsx("span",{className:n,style:i,children:o(d,r)}):s.jsx("span",{className:n,style:i,children:d})}function Pe(e){const{state:r}=y();return L(r.currentTime,r,e)}Pe.displayName="Ginger.Current.Elapsed";function Me(e){const{state:r}=y();return L(C(r),r,e)}Me.displayName="Ginger.Current.Duration";function Te(e){const{state:r}=y();return L(de(r),r,e)}Te.displayName="Ginger.Current.Remaining";function Ee({className:e,style:r,fallback:t,empty:n,children:i}){const{state:u}=y(),a=C(u),o=U(u);if(!(a>0)){const c=n??t??null;return c?s.jsx("span",{className:e,style:r,children:c}):null}return i?s.jsx("span",{className:e,style:r,children:i({fraction:o,currentTime:u.currentTime,duration:a},u)}):s.jsx("span",{className:e,style:r,children:`${Math.round(o*100)}%`})}Ee.displayName="Ginger.Current.Progress";function Ae({className:e,style:r,height:t=4}){const{state:n}=y(),i=`${Math.round(U(n)*100)}%`;return s.jsx("div",{className:e,style:{width:"100%",height:t,background:"var(--ginger-muted-color, #e5e7eb)",borderRadius:999,overflow:"hidden",...r},"aria-hidden":!0,children:s.jsx("div",{style:{width:i,height:"100%",background:"var(--ginger-primary-color, #111827)"}})})}Ae.displayName="Ginger.Current.TimeRail";function ve({className:e,style:r,fallback:t,empty:n,children:i}){const{state:u}=y(),a=ce(u);return i?s.jsx("span",{className:e,style:r,children:i(a,u)}):s.jsx("span",{className:e,style:r,children:a})}ve.displayName="Ginger.Current.PlaybackState";function Re({className:e,style:r,fallback:t,empty:n,children:i}){const{state:u}=y(),a=u.errorMessage??"";if(!a){const o=n??t??null;return o?s.jsx("span",{className:e,style:r,children:o}):null}return i?s.jsx("span",{className:e,style:r,children:i(a,u)}):s.jsx("span",{className:e,style:r,children:a})}Re.displayName="Ginger.Current.ErrorMessage";function Ie({playLabel:e="Play",pauseLabel:r="Pause",type:t="button",...n}){const{state:i,togglePlayPause:u}=y();return s.jsx("button",{type:t,"aria-label":i.isPaused?"Play":"Pause",onClick:u,...n,children:i.isPaused?e:r})}Ie.displayName="Ginger.Control.PlayPause";const se={off:"Repeat off",all:"Repeat all",one:"Repeat one"};function Se({type:e="button",...r}){const{state:t,cycleRepeat:n}=y();return s.jsx("button",{type:e,"aria-label":se[t.repeatMode],onClick:n,...r,children:se[t.repeatMode]})}Se.displayName="Ginger.Control.Repeat";function Ce({type:e="button",children:r="Next",...t}){const{next:n}=y();return s.jsx("button",{type:e,"aria-label":"Next track",onClick:n,...t,children:r})}Ce.displayName="Ginger.Control.Next";function je({type:e="button",children:r="Previous",...t}){const{prev:n}=y();return s.jsx("button",{type:e,"aria-label":"Previous track",onClick:n,...t,children:r})}je.displayName="Ginger.Control.Previous";function Ge({type:e="button",children:r="Shuffle",...t}){const{state:n,toggleShuffle:i}=y();return s.jsx("button",{type:e,"aria-pressed":n.isShuffled,"aria-label":"Shuffle",onClick:i,...t,children:r})}Ge.displayName="Ginger.Control.Shuffle";function _e({inputStyle:e,style:r,...t}){const{state:n,seek:i}=y(),u=Number.isFinite(n.duration)&&n.duration>0?n.duration:0,a=u>0?n.currentTime:0;return s.jsx("input",{type:"range",min:0,max:u>0?u:1,step:"any",value:Number.isFinite(a)?a:0,"aria-label":"Seek",onChange:o=>i(Number(o.currentTarget.value)),style:{width:"100%",...r,...e},...t})}_e.displayName="Ginger.Control.SeekBar";function Ne({inputStyle:e,style:r,...t}){const{state:n,setVolume:i}=y();return s.jsx("input",{type:"range",min:0,max:1,step:"any",value:n.volume,"aria-label":"Volume",onChange:u=>i(Number(u.currentTarget.value)),style:{width:"100%",...r,...e},...t})}Ne.displayName="Ginger.Control.Volume";function De({muteLabel:e="Mute",unmuteLabel:r="Unmute",type:t="button",...n}){const{state:i,toggleMute:u}=y();return s.jsx("button",{type:t,"aria-pressed":i.muted,"aria-label":i.muted?"Unmute":"Mute",onClick:u,...n,children:i.muted?r:e})}De.displayName="Ginger.Control.Mute";const lr=[.5,.75,1,1.25,1.5,2];function we({rates:e=lr,style:r,...t}){const{state:n,setPlaybackRate:i}=y(),u=f.useMemo(()=>Array.from(new Set([...e,n.playbackRate])).sort((a,o)=>a-o),[e,n.playbackRate]);return s.jsx("select",{"aria-label":"Playback speed",value:String(n.playbackRate),style:r,onChange:a=>i(Number(a.currentTarget.value)),...t,children:u.map(a=>s.jsx("option",{value:String(a),children:a===1?"1× normal":`${a}×`},a))})}we.displayName="Ginger.Control.PlaybackRate";const w=f.createContext(null);function or(){const e=f.useContext(w);if(!e)throw new Error("Ginger.Playlist.Track must be used inside <Ginger.Playlist>");return e}function Ue({children:e,rowStyle:r,renderTrack:t,playOnSelect:n=!0,style:i,...u}){const{state:a,playTrackAt:o,selectTrackAt:c}=y(),d={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?s.jsx(w.Provider,{value:{playOnSelect:n},children:s.jsx("ul",{style:d,...u,children:e})}):s.jsx(w.Provider,{value:{playOnSelect:n},children:s.jsx("ul",{style:d,...u,children:a.tracks.map((m,l)=>{const b=l===a.currentIndex;return s.jsx("li",{children:s.jsx("button",{type:"button",onClick:()=>{n?o(l):c(l)},style:{width:"100%",textAlign:"left",border:"none",background:b?"rgba(17, 24, 39, 0.06)":"transparent",color:"inherit",font:"inherit",cursor:"pointer",padding:"var(--ginger-playlist-row-padding, 6px 8px)",...r},children:t?t(m,l,b):s.jsxs("span",{children:[m.title,m.artist?` — ${m.artist}`:""]})})},`${m.fileUrl}-${l}`)})})})}Ue.displayName="Ginger.Playlist";function Le({index:e,className:r,style:t,children:n,liProps:i,onClick:u,...a}){const{playOnSelect:o}=or(),{state:c,playTrackAt:d,selectTrackAt:p}=y(),m=e===c.currentIndex,l=c.tracks[e],b=l!=null?s.jsxs("span",{children:[l.title,l.artist?` — ${l.artist}`:""]}):null;return s.jsx("li",{...i,children:s.jsx("button",{type:"button","aria-current":m?"true":void 0,"data-ginger-active":m||void 0,className:r,style:{width:"100%",textAlign:"left",border:"none",background:m?"rgba(17, 24, 39, 0.06)":"transparent",color:"inherit",font:"inherit",cursor:"pointer",padding:"var(--ginger-playlist-row-padding, 6px 8px)",...t},...a,onClick:k=>{u==null||u(k),!k.defaultPrevented&&(o?d(e):p(e))},children:n??b})})}Le.displayName="Ginger.Playlist.Track";const cr=Object.assign(Ue,{Track:Le}),dr=A("Ginger.Queue.Title",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.title}),fr=A("Ginger.Queue.Subtitle",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.subtitle}),pr=A("Ginger.Queue.Description",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.description}),gr=A("Ginger.Queue.Copyright",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.copyright});function Fe({className:e,style:r,fallback:t,empty:n,imgStyle:i}){var c,d;const{state:u}=y(),a=(c=u.playlistMeta)==null?void 0:c.artworkUrl;if(!a){const p=n??t??null;return p?s.jsx("span",{className:e,style:r,children:p}):null}const o=((d=u.playlistMeta)==null?void 0:d.title)??"Playlist artwork";return s.jsx("span",{className:e,style:{display:"inline-block",background:"var(--ginger-artwork-bg, #f3f4f6)",borderRadius:"var(--ginger-artwork-radius, 6px)",overflow:"hidden",...r},children:s.jsx("img",{src:a,alt:o,style:{display:"block",width:"100%",height:"100%",objectFit:"cover",...i}})})}Fe.displayName="Ginger.Queue.Artwork";function D(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):1}function F(e){return Number.isFinite(e)?Math.min(4,Math.max(.25,e)):1}const S={currentTime:0,duration:0,bufferedFraction:0,isBuffering:!1,errorMessage:null},yr={...S,volume:1,muted:!1,playbackRate:1};function Oe(e){const r=[...e.tracks];let t=R(e.currentIndex??0,r.length),n=null,i=r;return e.isShuffled&&r.length>1&&(n=[...r],i=oe(r,t),t=0),{tracks:i,currentIndex:t,isPaused:e.isPaused??!0,isShuffled:!!(e.isShuffled&&i.length>1),repeatMode:e.repeatMode??"off",originalTracks:n,playlistMeta:e.playlistMeta??null,...yr,volume:D(e.volume??1),muted:e.muted??!1,playbackRate:F(e.playbackRate??1)}}function mr(e,r){switch(r.type){case"INIT":{const{tracks:t,currentIndex:n,playlistMeta:i,isPaused:u,isShuffled:a,repeatMode:o,volume:c,muted:d,playbackRate:p}=r.payload;return Oe({tracks:t,currentIndex:n,playlistMeta:i??null,isPaused:u??!0,isShuffled:a??!1,repeatMode:o??"off",volume:c,muted:d,playbackRate:p})}case"SET_QUEUE":{const{tracks:t,currentIndex:n}=r.payload,i=[...t],u=R(n??e.currentIndex,i.length);return{...e,tracks:i,currentIndex:u,isShuffled:!1,originalTracks:null,...S}}case"SET_INDEX":{const t=R(r.payload.index,e.tracks.length),n=r.payload.autoPlay,i=n===!0?!1:n===!1?!0:e.isPaused;return{...e,currentIndex:t,...S,isPaused:i}}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:ze(e.repeatMode)};case"TOGGLE_SHUFFLE":{if(e.tracks.length<=1)return{...e,isShuffled:!1,originalTracks:null};if(!e.isShuffled){const u=[...e.tracks],a=oe(u,e.currentIndex);return{...e,isShuffled:!0,originalTracks:u,tracks:a,currentIndex:0}}const t=e.originalTracks?[...e.originalTracks]:[...e.tracks],n=e.tracks[e.currentIndex],i=Qe(t,n);return{...e,isShuffled:!1,originalTracks:null,tracks:t,currentIndex:R(i,t.length)}}case"NEXT":{const t=We(e),n=t===e.currentIndex;return{...e,currentIndex:t,...n?{}:S,isPaused:n?e.isPaused:!1}}case"PREV":{const t=Ke(e),n=t===e.currentIndex;return{...e,currentIndex:t,...n?{}:S,isPaused:n?e.isPaused:!1}}case"MEDIA_TIME_UPDATE":return{...e,currentTime:r.payload.currentTime,duration:Number.isFinite(r.payload.duration)?r.payload.duration:e.duration,bufferedFraction:r.payload.bufferedFraction,isBuffering:!1};case"MEDIA_LOADED_METADATA":return{...e,duration:Number.isFinite(r.payload.duration)?r.payload.duration:e.duration,bufferedFraction:r.payload.bufferedFraction,errorMessage:null};case"SET_PLAYLIST_META":return{...e,playlistMeta:r.payload};case"MEDIA_ERROR":return{...e,errorMessage:r.payload.message,isPaused:!0,isBuffering:!1};case"MEDIA_WAITING":return{...e,isBuffering:!0};case"MEDIA_CANPLAY":return{...e,isBuffering:!1,errorMessage:null};case"MEDIA_PLAY":return{...e,isPaused:!1,isBuffering:!1};case"MEDIA_PAUSE":return{...e,isPaused:!0};case"RESET_MEDIA_TIMES":return{...e,currentTime:0,duration:0,bufferedFraction:0};case"SET_VOLUME":return{...e,volume:D(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:F(r.payload)};case"MEDIA_VOLUME_SYNC":{const{volume:t,muted:n}=r.payload,i=D(t);return i===e.volume&&n===e.muted?e:{...e,volume:i,muted:n}}default:return e}}const br={"--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"};function xr({children:e,initialTracks:r=[],initialIndex:t=0,initialPlaylistMeta:n=null,initialShuffle:i=!1,initialRepeatMode:u="off",initialPaused:a=!0,initialVolume:o=1,initialMuted:c=!1,initialPlaybackRate:d=1,className:p,style:m,onTrackChange:l,onPlay:b,onPause:k,onQueueEnd:P,onError:M}){var ie;const I=f.useRef(null),[x,h]=f.useReducer(mr,void 0,()=>Oe({tracks:r,currentIndex:t,playlistMeta:n,isPaused:a,isShuffled:i,repeatMode:u,volume:o,muted:c,playbackRate:d})),O=f.useRef(x);f.useEffect(()=>{O.current=x},[x]);const $=x.tracks[x.currentIndex]??null;f.useEffect(()=>{l==null||l($,x.currentIndex)},[$,x.currentIndex,l]),f.useEffect(()=>{x.errorMessage&&(M==null||M(x.errorMessage))},[x.errorMessage,M]);const j=f.useRef(void 0);f.useEffect(()=>{if(j.current===void 0){j.current=x.isPaused;return}j.current!==x.isPaused&&(x.isPaused?k==null||k():b==null||b()),j.current=x.isPaused},[x.isPaused,k,b]);const G=f.useCallback(()=>{h({type:"PLAY"})},[]),_=f.useCallback(()=>{var g;h({type:"PAUSE"}),(g=I.current)==null||g.pause()},[]),Y=f.useCallback(()=>{x.isPaused?G():_()},[_,G,x.isPaused]),B=f.useCallback(g=>{const T=I.current;T&&Number.isFinite(g)&&(T.currentTime=Math.max(0,g))},[]),V=f.useCallback(g=>{h({type:"SET_VOLUME",payload:D(g)})},[]),Q=f.useCallback(g=>{h({type:"SET_MUTED",payload:g})},[]),X=f.useCallback(()=>{h({type:"TOGGLE_MUTE"})},[]),W=f.useCallback(g=>{h({type:"SET_PLAYBACK_RATE",payload:F(g)})},[]),K=f.useCallback(()=>{h({type:"NEXT"})},[]),z=f.useCallback(()=>{h({type:"PREV"})},[]),q=f.useCallback(g=>{h({type:"SET_REPEAT",payload:g})},[]),H=f.useCallback(()=>{h({type:"CYCLE_REPEAT"})},[]),J=f.useCallback(()=>{h({type:"TOGGLE_SHUFFLE"})},[]),Z=f.useCallback((g,T)=>{h({type:"SET_QUEUE",payload:{tracks:g,currentIndex:T}})},[]),ee=f.useCallback(g=>{h({type:"SET_INDEX",payload:{index:g,autoPlay:!0}})},[]),re=f.useCallback(g=>{h({type:"SET_INDEX",payload:{index:g,autoPlay:!1}})},[]),te=f.useCallback(g=>{h({type:"SET_PLAYLIST_META",payload:g})},[]),$e=(ie=x.tracks[x.currentIndex])==null?void 0:ie.fileUrl;f.useEffect(()=>{const g=I.current;g&&(x.isPaused?g.pause():g.play().catch(T=>{h({type:"PAUSE"});const N=T instanceof Error?T.message:"Playback failed";M==null||M(N)}))},[x.isPaused,$e,M]);const ne=f.useCallback(()=>{const g=Xe(O.current);if(g.kind==="replay_same"){const N=I.current;N&&(N.currentTime=0),h({type:"PLAY"});return}if(g.kind==="stop"){h({type:"PAUSE"}),P==null||P();return}const T=g.nextIndex;h({type:"SET_INDEX",payload:{index:T,autoPlay:!0}})},[P]),Ye=f.useMemo(()=>({state:x,dispatch:h,audioRef:I,notifyEnded:ne,play:G,pause:_,togglePlayPause:Y,seek:B,setVolume:V,setMuted:Q,toggleMute:X,setPlaybackRate:W,next:K,prev:z,setRepeatMode:q,cycleRepeat:H,toggleShuffle:J,setQueue:Z,playTrackAt:ee,selectTrackAt:re,setPlaylistMeta:te}),[H,h,K,ne,_,G,ee,re,z,B,Q,W,Z,q,te,V,x,X,Y,J]),Be=f.useMemo(()=>({...br,...m}),[m]);return s.jsx(le.Provider,{value:Ye,children:s.jsx("div",{className:p,style:Be,children:e})})}const hr={Provider:xr,Player:Ve,Current:{Title:Je,Artist:Ze,Album:er,Description:rr,Copyright:tr,Genre:nr,Label:ir,Isrc:ur,TrackNumber:ar,Year:ge,Lyrics:ye,FileUrl:me,Artwork:be,QueueIndex:xe,QueueLength:he,QueuePosition:ke,Elapsed:Pe,Duration:Me,Remaining:Te,Progress:Ee,TimeRail:Ae,PlaybackState:ve,ErrorMessage:Re},Queue:{Title:dr,Subtitle:fr,Description:pr,Copyright:gr,Artwork:Fe},Control:{PlayPause:Ie,Repeat:Se,Next:Ce,Previous:je,Shuffle:Ge,SeekBar:_e,Volume:Ne,Mute:De,PlaybackRate:we},Playlist:cr};function kr(){const e=y(),{state:r}=e;return f.useMemo(()=>({state:r,currentTrack:E(r),playbackUi:ce(r),duration:C(r),remaining:de(r),progress:U(r),artworkUrl:fe(r),albumLine:pe(r),play:e.play,pause:e.pause,togglePlayPause:e.togglePlayPause,seek:e.seek,setVolume:e.setVolume,setMuted:e.setMuted,toggleMute:e.toggleMute,setPlaybackRate:e.setPlaybackRate,next:e.next,prev:e.prev,setRepeatMode:e.setRepeatMode,cycleRepeat:e.cycleRepeat,toggleShuffle:e.toggleShuffle,setQueue:e.setQueue,playTrackAt:e.playTrackAt,selectTrackAt:e.selectTrackAt,setPlaylistMeta:e.setPlaylistMeta,audioRef:e.audioRef,dispatch:e.dispatch}),[e.audioRef,e.cycleRepeat,e.dispatch,e.next,e.pause,e.play,e.playTrackAt,e.selectTrackAt,e.prev,e.seek,e.setMuted,e.setPlaybackRate,e.setPlaylistMeta,e.setQueue,e.setRepeatMode,e.setVolume,e.toggleMute,e.togglePlayPause,e.toggleShuffle,r])}exports.Ginger=hr;exports.useGinger=kr;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),d=require("react"),he=d.createContext(null);function cr(){const e=d.useContext(he);if(!e)throw new Error("Ginger components must be used within <Ginger.Provider>");return e}function xe(e){const{buffered:r,duration:t}=e;return!(t>0)||r.length===0?0:Math.min(1,r.end(r.length-1)/t)}function dr({className:e,style:r,preload:t="metadata",crossOrigin:n}){var x;const{audioRef:a,dispatch:u,state:i,notifyEnded:o}=cr(),c=((x=i.tracks[i.currentIndex])==null?void 0:x.fileUrl)??"",p=d.useRef({currentTime:-1,duration:-1,bufferedFraction:-1}),g=(f,m=!1)=>{const k={currentTime:f.currentTime,duration:f.duration,bufferedFraction:xe(f)},M=p.current,R=Math.abs(k.currentTime-M.currentTime)>=.25||Math.abs(k.duration-M.duration)>=.01||Math.abs(k.bufferedFraction-M.bufferedFraction)>=.01;!m&&!R||(p.current=k,u({type:"MEDIA_TIME_UPDATE",payload:k}))};return d.useEffect(()=>{const f=a.current;f&&(f.volume=i.volume,f.muted=i.muted,f.playbackRate=i.playbackRate)},[a,i.volume,i.muted,i.playbackRate]),d.useEffect(()=>{const f=a.current;if(f){if(!c){f.removeAttribute("src"),p.current={currentTime:-1,duration:-1,bufferedFraction:-1};return}f.getAttribute("src")!==c&&(f.src=c,f.load(),p.current={currentTime:-1,duration:-1,bufferedFraction:-1})}},[a,i.currentIndex,i.tracks,c]),s.jsx("audio",{ref:a,className:e,style:r,preload:t,crossOrigin:n,controls:!1,playsInline:!0,onTimeUpdate:f=>{g(f.currentTarget)},onLoadedMetadata:f=>{const m=f.currentTarget;p.current={currentTime:-1,duration:-1,bufferedFraction:-1},u({type:"MEDIA_LOADED_METADATA",payload:{duration:m.duration,bufferedFraction:xe(m)}})},onSeeking:f=>g(f.currentTarget,!0),onSeeked:f=>g(f.currentTarget,!0),onEnded:()=>o(),onPlay:()=>u({type:"MEDIA_PLAY"}),onPause:()=>u({type:"MEDIA_PAUSE"}),onWaiting:()=>u({type:"MEDIA_WAITING"}),onCanPlay:()=>u({type:"MEDIA_CANPLAY"}),onProgress:f=>g(f.currentTarget,!0),onVolumeChange:f=>{const m=f.currentTarget;u({type:"MEDIA_VOLUME_SYNC",payload:{volume:m.volume,muted:m.muted}})},onError:()=>{var M;const f=a.current,m=(M=f==null?void 0:f.error)==null?void 0:M.code;u({type:"MEDIA_ERROR",payload:{message:m===1?"MEDIA_ERR_ABORTED":m===2?"MEDIA_ERR_NETWORK":m===3?"MEDIA_ERR_DECODE":m===4?"MEDIA_ERR_SRC_NOT_SUPPORTED":"MEDIA_ERR_UNKNOWN"}})}})}function N(e,r){return r<=0?0:Math.max(0,Math.min(r-1,e))}function ke(e,r){if(e.length<=1)return[...e];const t=e[r];if(!t)return[...e];const n=e.filter((a,u)=>u!==r);for(let a=n.length-1;a>0;a--){const u=Math.floor(Math.random()*(a+1));[n[a],n[u]]=[n[u],n[a]]}return[t,...n]}function pe(e){return e?e.id!=null&&e.id!==""?`id:${e.id}`:`file:${e.fileUrl}`:""}function fr(e,r){const t=pe(r);if(!t)return 0;const n=e.findIndex(a=>pe(a)===t);return n===-1?0:n}function pr(e){const{tracks:r,currentIndex:t,repeatMode:n}=e,a=r.length;return a===0?{kind:"stop",nextIndex:0}:n==="one"?{kind:"replay_same"}:t<a-1?{kind:"advance",nextIndex:t+1}:n==="all"?{kind:"wrap",nextIndex:0}:{kind:"stop",nextIndex:N(t,a)}}function gr(e){const{tracks:r,currentIndex:t,repeatMode:n}=e,a=r.length;return a===0?0:t<a-1?t+1:n==="all"?0:N(t,a)}function yr(e){const{tracks:r,currentIndex:t,repeatMode:n}=e,a=r.length;return a===0?0:t>0?t-1:n==="all"?a-1:0}function mr(e){return e==="off"?"all":e==="all"?"one":"off"}function br(e,r){return(e==null?void 0:e.artworkUrl)??r??void 0}function xr(e,r){return(e==null?void 0:e.album)??r??void 0}function E(e){return e.tracks[e.currentIndex]??null}function le(e){return e.errorMessage?"error":e.tracks.length===0?"idle":e.isBuffering?"loading":e.isPaused?Number.isFinite(e.duration)&&e.duration>0&&e.currentTime>=e.duration-.05?"ended":"paused":"playing"}function w(e){var n;const r=e.duration;if(Number.isFinite(r)&&r>0)return r;const t=(n=e.tracks[e.currentIndex])==null?void 0:n.durationSeconds;return typeof t=="number"&&Number.isFinite(t)&&t>0?t:0}function Me(e){const t=w(e)-e.currentTime;return Number.isFinite(t)?Math.max(0,t):0}function ye(e){const r=w(e);return r>0?Math.min(1,Math.max(0,e.currentTime/r)):0}function Pe(e){var t;const r=E(e);return br(r,(t=e.playlistMeta)==null?void 0:t.artworkUrl)}function ve(e){var t;const r=E(e);return xr(r,(t=e.playlistMeta)==null?void 0:t.subtitle)}const Te=d.createContext(null),Ee=d.createContext(null);function P(){const e=d.useContext(Te);if(!e)throw new Error("Ginger hooks must be used within <Ginger.Provider>");return e}function A(){const e=d.useContext(Ee);if(!e)throw new Error("Ginger hooks must be used within <Ginger.Provider>");return e}function h(){const e=P(),r=A();return d.useMemo(()=>B(e,r),[e,r])}function hr(e,r){return{...e,...r}}function B(e,r){const{init:t,play:n,pause:a,togglePlayPause:u,next:i,prev:o,setRepeatMode:c,cycleRepeat:p,toggleShuffle:g,setQueue:x,playTrackAt:f,selectTrackAt:m,setPlaylistMeta:k,dispatch:M,...R}=e,{seek:L,setVolume:D,setMuted:I,toggleMute:l,setPlaybackRate:b,audioRef:de,notifyEnded:fe,dispatch:G,...$}=r;return{...R,...$}}function S(e,r){function t(n){const a=h(),i=(r(a)??"").trim(),{className:o,style:c,fallback:p,empty:g,children:x}=n;if(!i){const f=g??p??null;return f?s.jsx("span",{className:o,style:c,children:f}):null}return x?s.jsx("span",{className:o,style:c,children:x(i,a)}):s.jsx("span",{className:o,style:c,children:i})}return t.displayName=e,t}function C(e,r){return S(e,t=>r(E(t)))}const kr=C("Ginger.Current.Title",e=>e==null?void 0:e.title),Mr=C("Ginger.Current.Artist",e=>e==null?void 0:e.artist),Pr=S("Ginger.Current.Album",e=>ve(e)),vr=C("Ginger.Current.Description",e=>e==null?void 0:e.description),Tr=S("Ginger.Current.Copyright",e=>{var t;const r=E(e);return(r==null?void 0:r.copyright)??((t=e.playlistMeta)==null?void 0:t.copyright)}),Er=C("Ginger.Current.Genre",e=>e==null?void 0:e.genre),Rr=C("Ginger.Current.Label",e=>e==null?void 0:e.label),Ir=C("Ginger.Current.Isrc",e=>e==null?void 0:e.isrc),Ar=C("Ginger.Current.TrackNumber",e=>(e==null?void 0:e.trackNumber)!=null?String(e.trackNumber):void 0);function Re({className:e,style:r,fallback:t,empty:n,children:a,format:u}){var p;const i=h(),o=(p=E(i))==null?void 0:p.year;if(typeof o!="number"||!Number.isFinite(o)){const g=n??t??null;return g?s.jsx("span",{className:e,style:r,children:g}):null}const c=u?u(o):String(o);return a?s.jsx("span",{className:e,style:r,children:a(c,i)}):s.jsx("span",{className:e,style:r,children:c})}Re.displayName="Ginger.Current.Year";function Ie({className:e,style:r,fallback:t,empty:n,children:a,preserveWhitespace:u=!0}){var g;const i=h(),o=((g=E(i))==null?void 0:g.lyrics)??"",c=u?o.replace(/^\s+|\s+$/g,""):o.trim();if(!c){const x=n??t??null;return x?s.jsx("span",{className:e,style:r,children:x}):null}const p=u?{whiteSpace:"pre-wrap"}:void 0;return a?s.jsx("span",{className:e,style:{...p,...r},children:a(c,i)}):s.jsx("span",{className:e,style:{...p,...r},children:c})}Ie.displayName="Ginger.Current.Lyrics";function Ae({visible:e=!1,className:r,style:t,fallback:n,empty:a,children:u}){var c;const i=h();if(!e)return null;const o=((c=E(i))==null?void 0:c.fileUrl)??"";if(!o){const p=a??n??null;return p?s.jsx("span",{className:r,style:t,children:p}):null}return u?s.jsx("span",{className:r,style:t,children:u(o,i)}):s.jsx("span",{className:r,style:t,children:o})}Ae.displayName="Ginger.Current.FileUrl";function Se({className:e,style:r,fallback:t,empty:n,sizes:a,loading:u,onError:i,decoding:o,imgStyle:c}){const p=h(),g=E(p),x=Pe(p);if(!x){const m=n??t??null;return m?s.jsx("span",{className:e,style:r,children:m}):null}const f=[g==null?void 0:g.title,g==null?void 0:g.artist].filter(Boolean).join(" — ")||"Artwork";return s.jsx("div",{className:e,style:{background:"var(--ginger-artwork-bg, transparent)",borderRadius:"var(--ginger-artwork-radius, 0)",overflow:"hidden",...r},children:s.jsx("img",{src:x,alt:f,sizes:a,loading:u,decoding:o,onError:i,style:{display:"block",width:"100%",height:"100%",objectFit:"cover",...c}})})}Se.displayName="Ginger.Current.Artwork";function Ce({base:e=0,className:r,style:t,fallback:n,empty:a,children:u}){const i=h();if(i.tracks.length===0){const p=a??n??null;return p?s.jsx("span",{className:r,style:t,children:p}):null}const c=String(i.currentIndex+e);return u?s.jsx("span",{className:r,style:t,children:u(c,i)}):s.jsx("span",{className:r,style:t,children:c})}Ce.displayName="Ginger.Current.QueueIndex";function Ge({className:e,style:r,fallback:t,empty:n,children:a}){const u=h(),i=String(u.tracks.length);if(u.tracks.length===0){const o=n??t??null;return o?s.jsx("span",{className:e,style:r,children:o}):null}return a?s.jsx("span",{className:e,style:r,children:a(i,u)}):s.jsx("span",{className:e,style:r,children:i})}Ge.displayName="Ginger.Current.QueueLength";function _e({base:e=0,separator:r=" / ",className:t,style:n,fallback:a,empty:u,children:i}){const o=h(),c=o.tracks.length;if(c===0){const f=u??a??null;return f?s.jsx("span",{className:t,style:n,children:f}):null}const p=String(o.currentIndex+e),g=String(c),x=`${p}${r}${g}`;return i?s.jsx("span",{className:t,style:n,children:i({index:p,length:g,label:x},o)}):s.jsx("span",{className:t,style:n,children:x})}_e.displayName="Ginger.Current.QueuePosition";function oe(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 me(e,r,t){const{className:n,style:a,fallback:u,empty:i,children:o,format:c=oe}=t;if(!(e>=0)||!Number.isFinite(e)){const g=i??u??null;return g?s.jsx("span",{className:n,style:a,children:g}):null}const p=c(e);return o?s.jsx("span",{className:n,style:a,children:o(p,r)}):s.jsx("span",{className:n,style:a,children:p})}function je(e){const r=h();return me(r.currentTime,r,e)}je.displayName="Ginger.Current.Elapsed";function Ne(e){const r=h();return me(w(r),r,e)}Ne.displayName="Ginger.Current.Duration";function we(e){const r=h();return me(Me(r),r,e)}we.displayName="Ginger.Current.Remaining";function Le({className:e,style:r,fallback:t,empty:n,children:a}){const u=h(),i=w(u),o=ye(u);if(!(i>0)){const c=n??t??null;return c?s.jsx("span",{className:e,style:r,children:c}):null}return a?s.jsx("span",{className:e,style:r,children:a({fraction:o,currentTime:u.currentTime,duration:i},u)}):s.jsx("span",{className:e,style:r,children:`${Math.round(o*100)}%`})}Le.displayName="Ginger.Current.Progress";function De({className:e,style:r,height:t=4,showBuffered:n=!1}){const a=h(),u=`${Math.round(ye(a)*100)}%`,i=`${Math.round(Math.min(1,Math.max(0,a.bufferedFraction))*100)}%`;return s.jsxs("div",{className:e,style:{width:"100%",height:t,background:"var(--ginger-muted-color, #e5e7eb)",borderRadius:999,overflow:"hidden",position:"relative",...r},"aria-hidden":!0,children:[n?s.jsx("div",{style:{position:"absolute",left:0,top:0,height:"100%",width:i,background:"var(--ginger-buffer-color, rgba(107, 114, 128, 0.35))"}}):null,s.jsx("div",{style:{position:"relative",width:u,height:"100%",background:"var(--ginger-primary-color, #111827)"}})]})}De.displayName="Ginger.Current.TimeRail";function Fe({className:e,style:r,height:t=4}){const n=h(),a=`${Math.round(Math.min(1,Math.max(0,n.bufferedFraction))*100)}%`;return s.jsx("div",{className:e,style:{width:"100%",height:t,background:"var(--ginger-muted-color, #e5e7eb)",borderRadius:999,overflow:"hidden",...r},"aria-hidden":!0,children:s.jsx("div",{style:{width:a,height:"100%",background:"var(--ginger-buffer-color, rgba(107, 114, 128, 0.35))"}})})}Fe.displayName="Ginger.Current.BufferRail";function Ue({className:e,style:r,fallback:t,empty:n,children:a}){const u=h(),i=le(u);return a?s.jsx("span",{className:e,style:r,children:a(i,u)}):s.jsx("span",{className:e,style:r,children:i})}Ue.displayName="Ginger.Current.PlaybackState";function Ve({className:e,style:r,fallback:t,empty:n,children:a}){const u=h(),i=u.errorMessage??"";if(!i){const o=n??t??null;return o?s.jsx("span",{className:e,style:r,children:o}):null}return a?s.jsx("span",{className:e,style:r,children:a(i,u)}):s.jsx("span",{className:e,style:r,children:i})}Ve.displayName="Ginger.Current.ErrorMessage";const U={seek:"Seek",volume:"Volume",playbackSpeed:"Playback speed",nextTrack:"Next track",previousTrack:"Previous track",shuffle:"Shuffle",mute:"Mute",unmute:"Unmute",play:"Play",pause:"Pause",repeat:{off:"Repeat off",all:"Repeat all",one:"Repeat one"},playbackRateNormal:"1× normal",playbackRateTimes:e=>`${e}×`};function Sr(e){return e?{...U,...e,repeat:{...U.repeat,...e.repeat}}:U}const Be=d.createContext(U);function Cr({locale:e,children:r}){const t=Sr(e);return s.jsx(Be.Provider,{value:t,children:r})}function T(){return d.useContext(Be)}function $e(){const e=P(),r=A(),t=T(),n=d.useMemo(()=>B(e,r),[e,r]),a=w(n),u=a>0?n.currentTime:0,i=Number.isFinite(u)?u:0,o=a>0?`${oe(i)} of ${oe(a)}`:oe(i),c=p=>{r.seek(Number(p.currentTarget.value))};return{state:n,value:i,min:0,max:a>0?a:1,step:"any",ariaValueText:o,ariaLabel:t.seek,onSeekInput:c,onSeekChange:c}}function Oe(){const e=P(),r=A(),t=T(),n=d.useMemo(()=>B(e,r),[e,r]),a=u=>{r.setVolume(Number(u.currentTarget.value))};return{state:n,value:n.volume,min:0,max:1,step:"any",ariaValueText:`${Math.round(n.volume*100)}%`,ariaLabel:t.volume,onVolumeInput:a,onVolumeChange:a}}function Ye(e){const r=P(),t=T(),n=(e==null?void 0:e.playAriaLabel)??t.play,a=(e==null?void 0:e.pauseAriaLabel)??t.pause;return{isPaused:r.isPaused,toggle:r.togglePlayPause,ariaLabel:r.isPaused?n:a}}function Qe({playLabel:e="Play",pauseLabel:r="Pause",playAriaLabel:t,pauseAriaLabel:n,type:a="button",...u}){const i=T(),o=typeof e=="string"?e:i.play,c=typeof r=="string"?r:i.pause,p=Ye({playAriaLabel:t??o,pauseAriaLabel:n??c});return s.jsx("button",{type:a,"aria-label":p.ariaLabel,onClick:p.toggle,...u,children:p.isPaused?e:r})}Qe.displayName="Ginger.Control.PlayPause";function Xe({type:e="button",...r}){const{repeatMode:t,cycleRepeat:n}=P(),u=T().repeat[t];return s.jsx("button",{type:e,"aria-label":u,onClick:n,...r,children:u})}Xe.displayName="Ginger.Control.Repeat";function We({type:e="button",children:r="Next",...t}){const{next:n}=P(),a=T();return s.jsx("button",{type:e,"aria-label":a.nextTrack,onClick:n,...t,children:r})}We.displayName="Ginger.Control.Next";function qe({type:e="button",children:r="Previous",...t}){const{prev:n}=P(),a=T();return s.jsx("button",{type:e,"aria-label":a.previousTrack,onClick:n,...t,children:r})}qe.displayName="Ginger.Control.Previous";function ze({type:e="button",children:r="Shuffle",...t}){const{isShuffled:n,toggleShuffle:a}=P(),u=T();return s.jsx("button",{type:e,"aria-pressed":n,"aria-label":u.shuffle,onClick:a,...t,children:r})}ze.displayName="Ginger.Control.Shuffle";function He({inputStyle:e,style:r,...t}){const n=$e();return s.jsx("input",{...t,type:"range",min:n.min,max:n.max,step:n.step,value:n.value,"aria-label":n.ariaLabel,"aria-valuetext":n.ariaValueText,onInput:n.onSeekInput,onChange:n.onSeekChange,style:{width:"100%",...r,...e}})}He.displayName="Ginger.Control.SeekBar";function Ke({inputStyle:e,style:r,...t}){const n=Oe();return s.jsx("input",{...t,type:"range",min:n.min,max:n.max,step:n.step,value:n.value,"aria-label":n.ariaLabel,"aria-valuetext":n.ariaValueText,onInput:n.onVolumeInput,onChange:n.onVolumeChange,style:{width:"100%",...r,...e}})}Ke.displayName="Ginger.Control.Volume";function Je({muteLabel:e,unmuteLabel:r,type:t="button",...n}){const{muted:a,toggleMute:u}=A(),i=T(),o=e??i.mute,c=r??i.unmute;return s.jsx("button",{type:t,"aria-pressed":a,"aria-label":a?i.unmute:i.mute,onClick:u,...n,children:a?c:o})}Je.displayName="Ginger.Control.Mute";const Gr=[.5,.75,1,1.25,1.5,2];function Ze({rates:e=Gr,style:r,...t}){const{playbackRate:n,setPlaybackRate:a}=A(),u=T(),i=d.useMemo(()=>Array.from(new Set([...e,n])).sort((o,c)=>o-c),[e,n]);return s.jsx("select",{...t,"aria-label":u.playbackSpeed,value:String(n),style:r,onChange:o=>a(Number(o.currentTarget.value)),children:i.map(o=>s.jsx("option",{value:String(o),children:o===1?u.playbackRateNormal:u.playbackRateTimes(o)},o))})}Ze.displayName="Ginger.Control.PlaybackRate";const ge=d.createContext(null);function _r(){const e=d.useContext(ge);if(!e)throw new Error("Ginger.Playlist.Track must be used inside <Ginger.Playlist>");return e}function er({children:e,rowStyle:r,renderTrack:t,playOnSelect:n=!0,style:a,...u}){const{tracks:i,currentIndex:o,playTrackAt:c,selectTrackAt:p}=P(),g={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)",...a};return e!==void 0?s.jsx(ge.Provider,{value:{playOnSelect:n},children:s.jsx("ul",{style:g,...u,children:e})}):s.jsx(ge.Provider,{value:{playOnSelect:n},children:s.jsx("ul",{style:g,...u,children:i.map((f,m)=>{const k=m===o;return s.jsx("li",{children:s.jsx("button",{type:"button",onClick:()=>{n?c(m):p(m)},style:{width:"100%",textAlign:"left",border:"none",background:k?"var(--ginger-playlist-active-bg, rgba(17, 24, 39, 0.06))":"transparent",color:"inherit",font:"inherit",cursor:"pointer",padding:"var(--ginger-playlist-row-padding, 6px 8px)",...r},children:t?t(f,m,k):s.jsxs("span",{children:[f.title,f.artist?` — ${f.artist}`:""]})})},`${m}-${pe(f)}`)})})})}er.displayName="Ginger.Playlist";function rr({index:e,className:r,style:t,children:n,liProps:a,onClick:u,...i}){const{playOnSelect:o}=_r(),{tracks:c,currentIndex:p,playTrackAt:g,selectTrackAt:x}=P(),f=e===p,m=c[e],k=m!=null?s.jsxs("span",{children:[m.title,m.artist?` — ${m.artist}`:""]}):null;return s.jsx("li",{...a,children:s.jsx("button",{type:"button","aria-current":f?"true":void 0,"data-ginger-active":f||void 0,className:r,style:{width:"100%",textAlign:"left",border:"none",background:f?"var(--ginger-playlist-active-bg, rgba(17, 24, 39, 0.06))":"transparent",color:"inherit",font:"inherit",cursor:"pointer",padding:"var(--ginger-playlist-row-padding, 6px 8px)",...t},...i,onClick:M=>{u==null||u(M),!M.defaultPrevented&&(o?g(e):x(e))},children:n??k})})}rr.displayName="Ginger.Playlist.Track";const jr=Object.assign(er,{Track:rr}),Nr=S("Ginger.Queue.Title",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.title}),wr=S("Ginger.Queue.Subtitle",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.subtitle}),Lr=S("Ginger.Queue.Description",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.description}),Dr=S("Ginger.Queue.Copyright",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.copyright});function tr({className:e,style:r,fallback:t,empty:n,imgStyle:a}){var c,p;const u=h(),i=(c=u.playlistMeta)==null?void 0:c.artworkUrl;if(!i){const g=n??t??null;return g?s.jsx("span",{className:e,style:r,children:g}):null}const o=((p=u.playlistMeta)==null?void 0:p.title)??"Playlist artwork";return s.jsx("span",{className:e,style:{display:"inline-block",background:"var(--ginger-artwork-bg, #f3f4f6)",borderRadius:"var(--ginger-artwork-radius, 6px)",overflow:"hidden",...r},children:s.jsx("img",{src:i,alt:o,style:{display:"block",width:"100%",height:"100%",objectFit:"cover",...a}})})}tr.displayName="Ginger.Queue.Artwork";function V(e){return Number.isFinite(e)?Math.min(1,Math.max(0,e)):1}function ce(e){return Number.isFinite(e)?Math.min(4,Math.max(.25,e)):1}const F={currentTime:0,duration:0,bufferedFraction:0,isBuffering:!1,errorMessage:null},Fr={...F,volume:1,muted:!1,playbackRate:1};function nr(e){const r=[...e.tracks];let t=N(e.currentIndex??0,r.length),n=null,a=r;return e.isShuffled&&r.length>1&&(n=[...r],a=ke(r,t),t=0),{tracks:a,currentIndex:t,isPaused:e.isPaused??!0,isShuffled:!!(e.isShuffled&&a.length>1),repeatMode:e.repeatMode??"off",originalTracks:n,playlistMeta:e.playlistMeta??null,...Fr,volume:V(e.volume??1),muted:e.muted??!1,playbackRate:ce(e.playbackRate??1)}}function Ur(e,r){switch(r.type){case"INIT":{const{tracks:t,currentIndex:n,playlistMeta:a,isPaused:u,isShuffled:i,repeatMode:o,volume:c,muted:p,playbackRate:g}=r.payload;return nr({tracks:t,currentIndex:n,playlistMeta:a??null,isPaused:u??!0,isShuffled:i??!1,repeatMode:o??"off",volume:c,muted:p,playbackRate:g})}case"SET_QUEUE":{const{tracks:t,currentIndex:n}=r.payload,a=[...t],u=N(n??e.currentIndex,a.length);return{...e,tracks:a,currentIndex:u,isShuffled:!1,originalTracks:null,...F}}case"SET_INDEX":{const t=N(r.payload.index,e.tracks.length),n=r.payload.autoPlay,a=n===!0?!1:n===!1?!0:e.isPaused;return{...e,currentIndex:t,...F,isPaused:a}}case"PLAY":return{...e,isPaused:!1};case"PAUSE":return{...e,isPaused:!0};case"TOGGLE_PAUSE":return{...e,isPaused:!e.isPaused};case"SET_REPEAT":return{...e,repeatMode:r.payload};case"CYCLE_REPEAT":return{...e,repeatMode:mr(e.repeatMode)};case"TOGGLE_SHUFFLE":{if(e.tracks.length<=1)return{...e,isShuffled:!1,originalTracks:null};if(!e.isShuffled){const u=[...e.tracks],i=ke(u,e.currentIndex);return{...e,isShuffled:!0,originalTracks:u,tracks:i,currentIndex:0}}const t=e.originalTracks?[...e.originalTracks]:[...e.tracks],n=e.tracks[e.currentIndex],a=fr(t,n);return{...e,isShuffled:!1,originalTracks:null,tracks:t,currentIndex:N(a,t.length)}}case"NEXT":{const t=gr(e),n=t===e.currentIndex;return{...e,currentIndex:t,...n?{}:F,isPaused:n?e.isPaused:!1}}case"PREV":{const t=yr(e),n=t===e.currentIndex;return{...e,currentIndex:t,...n?{}:F,isPaused:n?e.isPaused:!1}}case"MEDIA_TIME_UPDATE":return{...e,currentTime:r.payload.currentTime,duration:Number.isFinite(r.payload.duration)?r.payload.duration:e.duration,bufferedFraction:r.payload.bufferedFraction,isBuffering:!1};case"MEDIA_LOADED_METADATA":return{...e,duration:Number.isFinite(r.payload.duration)?r.payload.duration:e.duration,bufferedFraction:r.payload.bufferedFraction,errorMessage:null};case"SET_PLAYLIST_META":return{...e,playlistMeta:r.payload};case"MEDIA_ERROR":return{...e,errorMessage:r.payload.message,isPaused:!0,isBuffering:!1};case"MEDIA_WAITING":return{...e,isBuffering:!0};case"MEDIA_CANPLAY":return{...e,isBuffering:!1,errorMessage:null};case"MEDIA_PLAY":return{...e,isPaused:!1,isBuffering:!1};case"MEDIA_PAUSE":return{...e,isPaused:!0};case"RESET_MEDIA_TIMES":return{...e,currentTime:0,duration:0,bufferedFraction:0};case"SET_VOLUME":return{...e,volume:V(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:ce(r.payload)};case"MEDIA_VOLUME_SYNC":{const{volume:t,muted:n}=r.payload,a=V(t);return a===e.volume&&n===e.muted?e:{...e,volume:a,muted:n}}default:return e}}const Vr={"--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 Br({children:e,initialTracks:r=[],initialIndex:t=0,initialPlaylistMeta:n=null,initialShuffle:a=!1,initialRepeatMode:u="off",initialPaused:i=!0,initialVolume:o=1,initialMuted:c=!1,initialPlaybackRate:p=1,initialStateKey:g,locale:x,className:f,style:m,onTrackChange:k,onPlay:M,onPause:R,onQueueEnd:L,onError:D}){var be;const I=d.useRef(null),[l,b]=d.useReducer(Ur,void 0,()=>nr({tracks:r,currentIndex:t,playlistMeta:n,isPaused:i,isShuffled:a,repeatMode:u,volume:o,muted:c,playbackRate:p})),de=d.useRef(l),fe=d.useRef({tracks:r,currentIndex:t,playlistMeta:n,isPaused:i,isShuffled:a,repeatMode:u,volume:o,muted:c,playbackRate:p});fe.current={tracks:r,currentIndex:t,playlistMeta:n,isPaused:i,isShuffled:a,repeatMode:u,volume:o,muted:c,playbackRate:p};const G=d.useRef(void 0);d.useEffect(()=>{if(g===void 0){G.current=void 0;return}if(G.current===void 0){G.current=g;return}if(G.current===g)return;G.current=g;const y=fe.current;b({type:"INIT",payload:{tracks:y.tracks,currentIndex:y.currentIndex,playlistMeta:y.playlistMeta,isPaused:y.isPaused,isShuffled:y.isShuffled,repeatMode:y.repeatMode,volume:y.volume,muted:y.muted,playbackRate:y.playbackRate}})},[g]),d.useEffect(()=>{de.current=l},[l]);const $=l.tracks[l.currentIndex]??null;d.useEffect(()=>{k==null||k($,l.currentIndex)},[$,l.currentIndex,k]),d.useEffect(()=>{l.errorMessage&&(D==null||D(l.errorMessage))},[l.errorMessage,D]);const O=d.useRef(void 0);d.useEffect(()=>{if(O.current===void 0){O.current=l.isPaused;return}O.current!==l.isPaused&&(l.isPaused?R==null||R():M==null||M()),O.current=l.isPaused},[l.isPaused,R,M]);const _=d.useCallback(()=>{b({type:"PLAY"})},[]),j=d.useCallback(()=>{var y;b({type:"PAUSE"}),(y=I.current)==null||y.pause()},[]),Y=d.useCallback(()=>{l.isPaused?_():j()},[j,_,l.isPaused]),Q=d.useCallback(y=>{const v=I.current;v&&Number.isFinite(y)&&(v.currentTime=Math.max(0,y))},[]),X=d.useCallback(y=>{b({type:"SET_VOLUME",payload:V(y)})},[]),W=d.useCallback(y=>{b({type:"SET_MUTED",payload:y})},[]),q=d.useCallback(()=>{b({type:"TOGGLE_MUTE"})},[]),z=d.useCallback(y=>{b({type:"SET_PLAYBACK_RATE",payload:ce(y)})},[]),H=d.useCallback(()=>{b({type:"NEXT"})},[]),K=d.useCallback(()=>{b({type:"PREV"})},[]),J=d.useCallback(y=>{b({type:"SET_REPEAT",payload:y})},[]),Z=d.useCallback(()=>{b({type:"CYCLE_REPEAT"})},[]),ee=d.useCallback(()=>{b({type:"TOGGLE_SHUFFLE"})},[]),re=d.useCallback((y,v)=>{b({type:"SET_QUEUE",payload:{tracks:y,currentIndex:v}})},[]),te=d.useCallback(y=>{b({type:"SET_INDEX",payload:{index:y,autoPlay:!0}})},[]),ne=d.useCallback(y=>{b({type:"SET_INDEX",payload:{index:y,autoPlay:!1}})},[]),ae=d.useCallback(y=>{b({type:"SET_PLAYLIST_META",payload:y})},[]),ue=d.useCallback(y=>{b({type:"INIT",payload:y})},[]),ar=(be=l.tracks[l.currentIndex])==null?void 0:be.fileUrl;d.useEffect(()=>{const y=I.current;y&&(l.isPaused?y.pause():y.play().catch(v=>{const se=v instanceof Error?v.message:typeof v=="string"?v:"Playback failed (e.g. autoplay blocked or unavailable source)";b({type:"MEDIA_ERROR",payload:{message:se}})}))},[l.isPaused,ar]);const ie=d.useCallback(()=>{const y=pr(de.current);if(y.kind==="replay_same"){const se=I.current;se&&(se.currentTime=0),b({type:"PLAY"});return}if(y.kind==="stop"){b({type:"PAUSE"}),L==null||L();return}const v=y.nextIndex;b({type:"SET_INDEX",payload:{index:v,autoPlay:!0}})},[L]),ur=d.useMemo(()=>({state:l,dispatch:b,audioRef:I,notifyEnded:ie,init:ue,play:_,pause:j,togglePlayPause:Y,seek:Q,setVolume:X,setMuted:W,toggleMute:q,setPlaybackRate:z,next:H,prev:K,setRepeatMode:J,cycleRepeat:Z,toggleShuffle:ee,setQueue:re,playTrackAt:te,selectTrackAt:ne,setPlaylistMeta:ae}),[Z,b,ue,H,ie,j,_,te,ne,K,Q,W,z,re,J,ae,X,l,q,Y,ee]),ir=d.useMemo(()=>({tracks:l.tracks,currentIndex:l.currentIndex,isPaused:l.isPaused,isShuffled:l.isShuffled,repeatMode:l.repeatMode,originalTracks:l.originalTracks,playlistMeta:l.playlistMeta,init:ue,play:_,pause:j,togglePlayPause:Y,next:H,prev:K,setRepeatMode:J,cycleRepeat:Z,toggleShuffle:ee,setQueue:re,playTrackAt:te,selectTrackAt:ne,setPlaylistMeta:ae,dispatch:b}),[l.tracks,l.currentIndex,l.isPaused,l.isShuffled,l.repeatMode,l.originalTracks,l.playlistMeta,ue,_,j,Y,H,K,J,Z,ee,re,te,ne,ae,b]),sr=d.useMemo(()=>({currentTime:l.currentTime,duration:l.duration,bufferedFraction:l.bufferedFraction,isBuffering:l.isBuffering,errorMessage:l.errorMessage,volume:l.volume,muted:l.muted,playbackRate:l.playbackRate,seek:Q,setVolume:X,setMuted:W,toggleMute:q,setPlaybackRate:z,audioRef:I,notifyEnded:ie,dispatch:b}),[l.currentTime,l.duration,l.bufferedFraction,l.isBuffering,l.errorMessage,l.volume,l.muted,l.playbackRate,Q,X,W,q,z,I,ie,b]),or=le(l),lr=d.useMemo(()=>({...Vr,...m}),[m]);return s.jsx(Cr,{locale:x,children:s.jsx(Te.Provider,{value:ir,children:s.jsx(Ee.Provider,{value:sr,children:s.jsx(he.Provider,{value:ur,children:s.jsx("div",{className:f,style:lr,"data-ginger-playback":or,children:e})})})})})}const $r={Provider:Br,Player:dr,Current:{Title:kr,Artist:Mr,Album:Pr,Description:vr,Copyright:Tr,Genre:Er,Label:Rr,Isrc:Ir,TrackNumber:Ar,Year:Re,Lyrics:Ie,FileUrl:Ae,Artwork:Se,QueueIndex:Ce,QueueLength:Ge,QueuePosition:_e,Elapsed:je,Duration:Ne,Remaining:we,Progress:Le,TimeRail:De,BufferRail:Fe,PlaybackState:Ue,ErrorMessage:Ve},Queue:{Title:Nr,Subtitle:wr,Description:Lr,Copyright:Dr,Artwork:tr},Control:{PlayPause:Qe,Repeat:Xe,Next:We,Previous:qe,Shuffle:ze,SeekBar:He,Volume:Ke,Mute:Je,PlaybackRate:Ze},Playlist:jr};function Or(){const e=P(),r=A();return d.useMemo(()=>{const t=B(e,r);return{state:t,currentTrack:E(t),playbackUi:le(t),duration:w(t),remaining:Me(t),progress:ye(t),artworkUrl:Pe(t),albumLine:ve(t),play:e.play,pause:e.pause,togglePlayPause:e.togglePlayPause,seek:r.seek,setVolume:r.setVolume,setMuted:r.setMuted,toggleMute:r.toggleMute,setPlaybackRate:r.setPlaybackRate,next:e.next,prev:e.prev,setRepeatMode:e.setRepeatMode,cycleRepeat:e.cycleRepeat,toggleShuffle:e.toggleShuffle,setQueue:e.setQueue,playTrackAt:e.playTrackAt,selectTrackAt:e.selectTrackAt,setPlaylistMeta:e.setPlaylistMeta,init:e.init,audioRef:r.audioRef,dispatch:e.dispatch}},[e,r])}exports.Ginger=$r;exports.clampPlaybackRate=ce;exports.clampVolume=V;exports.defaultGingerLocale=U;exports.derivePlaybackUiState=le;exports.gingerStateFromContextValues=B;exports.gingerStateFromContexts=hr;exports.useGinger=Or;exports.useGingerLocale=T;exports.useGingerMedia=A;exports.useGingerPlayback=P;exports.useGingerState=h;exports.usePlayPauseBinding=Ye;exports.useSeekBarBinding=$e;exports.useVolumeSlider=Oe;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|