@lucaismyname/ginger 0.0.1 → 0.0.3
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/dist/audio/GingerPlayer.d.ts.map +1 -1
- package/dist/components/controls/Controls.d.ts +24 -1
- package/dist/components/controls/Controls.d.ts.map +1 -1
- package/dist/components/playlist/GingerPlaylist.d.ts +28 -3
- package/dist/components/playlist/GingerPlaylist.d.ts.map +1 -1
- package/dist/context/GingerContext.d.ts +2 -0
- package/dist/context/GingerContext.d.ts.map +1 -1
- package/dist/context/GingerProvider.d.ts +1 -1
- package/dist/context/GingerProvider.d.ts.map +1 -1
- package/dist/core/playbackReducer.d.ts +5 -0
- package/dist/core/playbackReducer.d.ts.map +1 -1
- package/dist/ginger.d.ts +45 -41
- package/dist/ginger.d.ts.map +1 -1
- package/dist/hooks/useGinger.d.ts +2 -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 +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +678 -510
- 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 +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GingerPlayer.d.ts","sourceRoot":"","sources":["../../src/audio/GingerPlayer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAGhF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3D,WAAW,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,aAAa,CAAC,CAAC;CACpE,CAAC;AAQF,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAoB,EAAE,WAAW,EAAE,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"GingerPlayer.d.ts","sourceRoot":"","sources":["../../src/audio/GingerPlayer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAGhF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3D,WAAW,CAAC,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,aAAa,CAAC,CAAC;CACpE,CAAC;AAQF,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAoB,EAAE,WAAW,EAAE,EAAE,iBAAiB,2CAmFtG"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ButtonHTMLAttributes, CSSProperties, InputHTMLAttributes, ReactNode } from 'react';
|
|
1
|
+
import { ButtonHTMLAttributes, CSSProperties, InputHTMLAttributes, ReactNode, SelectHTMLAttributes } from 'react';
|
|
2
2
|
export type PlayPauseProps = ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
3
3
|
/** Optional labels; still headless—defaults are text for a11y */
|
|
4
4
|
playLabel?: ReactNode;
|
|
@@ -35,4 +35,27 @@ export declare function SeekBar({ inputStyle, style, ...rest }: SeekBarProps): i
|
|
|
35
35
|
export declare namespace SeekBar {
|
|
36
36
|
var displayName: string;
|
|
37
37
|
}
|
|
38
|
+
export type VolumeProps = Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "onChange"> & {
|
|
39
|
+
inputStyle?: CSSProperties;
|
|
40
|
+
};
|
|
41
|
+
export declare function Volume({ inputStyle, style, ...rest }: VolumeProps): import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
export declare namespace Volume {
|
|
43
|
+
var displayName: string;
|
|
44
|
+
}
|
|
45
|
+
export type MuteProps = ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
46
|
+
muteLabel?: ReactNode;
|
|
47
|
+
unmuteLabel?: ReactNode;
|
|
48
|
+
};
|
|
49
|
+
export declare function Mute({ muteLabel, unmuteLabel, type, ...rest }: MuteProps): import("react/jsx-runtime").JSX.Element;
|
|
50
|
+
export declare namespace Mute {
|
|
51
|
+
var displayName: string;
|
|
52
|
+
}
|
|
53
|
+
export type PlaybackRateProps = Omit<SelectHTMLAttributes<HTMLSelectElement>, "value" | "onChange"> & {
|
|
54
|
+
/** Playback speed options (default: 0.5 … 2) */
|
|
55
|
+
rates?: readonly number[];
|
|
56
|
+
};
|
|
57
|
+
export declare function PlaybackRate({ rates, style, ...rest }: PlaybackRateProps): import("react/jsx-runtime").JSX.Element;
|
|
58
|
+
export declare namespace PlaybackRate {
|
|
59
|
+
var displayName: string;
|
|
60
|
+
}
|
|
38
61
|
//# sourceMappingURL=Controls.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Controls.d.ts","sourceRoot":"","sources":["../../../src/components/controls/Controls.tsx"],"names":[],"mappings":"
|
|
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;AAIf,MAAM,MAAM,cAAc,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IACrE,iEAAiE;IACjE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EAAE,SAAkB,EAAE,UAAoB,EAAE,IAAe,EAAE,GAAG,IAAI,EAAE,EAAE,cAAc,2CAO/G;yBAPe,SAAS;;;AAiBzB,MAAM,MAAM,WAAW,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AAElE,wBAAgB,MAAM,CAAC,EAAE,IAAe,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,2CAO/D;yBAPe,MAAM;;;AAWtB,MAAM,MAAM,SAAS,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AAChE,wBAAgB,IAAI,CAAC,EAAE,IAAe,EAAE,QAAiB,EAAE,GAAG,IAAI,EAAE,EAAE,SAAS,2CAO9E;yBAPe,IAAI;;;AAUpB,MAAM,MAAM,aAAa,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AACpE,wBAAgB,QAAQ,CAAC,EAAE,IAAe,EAAE,QAAqB,EAAE,GAAG,IAAI,EAAE,EAAE,aAAa,2CAO1F;yBAPe,QAAQ;;;AAUxB,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;AACnE,wBAAgB,OAAO,CAAC,EAAE,IAAe,EAAE,QAAoB,EAAE,GAAG,IAAI,EAAE,EAAE,YAAY,2CAOvF;yBAPe,OAAO;;;AAUvB,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC,GAAG;IACtG,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,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC,GAAG;IACrG,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B,CAAC;AAEF,wBAAgB,MAAM,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,WAAW,2CAejE;yBAfe,MAAM;;;AAmBtB,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,SAAkB,EAClB,WAAsB,EACtB,IAAe,EACf,GAAG,IAAI,EACR,EAAE,SAAS,2CAaX;yBAlBe,IAAI;;;AAwBpB,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,2CAqBvF;yBArBe,YAAY"}
|
|
@@ -1,13 +1,38 @@
|
|
|
1
|
-
import { CSSProperties, HTMLAttributes, ReactNode } from 'react';
|
|
1
|
+
import { ButtonHTMLAttributes, CSSProperties, HTMLAttributes, LiHTMLAttributes, ReactNode } from 'react';
|
|
2
2
|
import { Track } from '../../types';
|
|
3
|
-
export type
|
|
3
|
+
export type GingerPlaylistConfig = {
|
|
4
|
+
playOnSelect: boolean;
|
|
5
|
+
};
|
|
6
|
+
export type GingerPlaylistProps = Omit<HTMLAttributes<HTMLUListElement>, "children"> & {
|
|
7
|
+
children?: ReactNode;
|
|
4
8
|
rowStyle?: CSSProperties;
|
|
9
|
+
/**
|
|
10
|
+
* Used only in **auto** mode (no custom `children`). Ignored when you pass custom `children`
|
|
11
|
+
* (manual mode); use `Ginger.Playlist.Track` for each row instead.
|
|
12
|
+
*/
|
|
5
13
|
renderTrack?: (track: Track, index: number, isActive: boolean) => ReactNode;
|
|
6
14
|
/** When true (default), clicking a row selects that index and starts playback */
|
|
7
15
|
playOnSelect?: boolean;
|
|
8
16
|
};
|
|
9
|
-
|
|
17
|
+
/**
|
|
18
|
+
* - **Auto mode** (no `children`): maps `state.tracks` to rows (optional `renderTrack`).
|
|
19
|
+
* - **Manual mode** (`children` defined): renders `<ul>{children}</ul>`; map `state.tracks` yourself
|
|
20
|
+
* with `Ginger.Playlist.Track` for each index.
|
|
21
|
+
*/
|
|
22
|
+
export declare function GingerPlaylist({ children, rowStyle, renderTrack, playOnSelect, style, ...rest }: GingerPlaylistProps): import("react/jsx-runtime").JSX.Element;
|
|
10
23
|
export declare namespace GingerPlaylist {
|
|
11
24
|
var displayName: string;
|
|
12
25
|
}
|
|
26
|
+
export type GingerPlaylistTrackProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "type"> & {
|
|
27
|
+
index: number;
|
|
28
|
+
/** Optional wrapper for the row; defaults to a plain `<li>` */
|
|
29
|
+
liProps?: LiHTMLAttributes<HTMLLIElement>;
|
|
30
|
+
};
|
|
31
|
+
export declare function GingerPlaylistTrack({ index, className, style, children, liProps, onClick, ...buttonRest }: GingerPlaylistTrackProps): import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
export declare namespace GingerPlaylistTrack {
|
|
33
|
+
var displayName: string;
|
|
34
|
+
}
|
|
35
|
+
export declare const GingerPlaylistCompound: typeof GingerPlaylist & {
|
|
36
|
+
Track: typeof GingerPlaylistTrack;
|
|
37
|
+
};
|
|
13
38
|
//# sourceMappingURL=GingerPlaylist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GingerPlaylist.d.ts","sourceRoot":"","sources":["../../../src/components/playlist/GingerPlaylist.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
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;AAEf,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"}
|
|
@@ -11,6 +11,8 @@ export type GingerContextValue = {
|
|
|
11
11
|
seek: (timeSeconds: number) => void;
|
|
12
12
|
setVolume: (volume: number) => void;
|
|
13
13
|
setMuted: (muted: boolean) => void;
|
|
14
|
+
toggleMute: () => void;
|
|
15
|
+
setPlaybackRate: (rate: number) => void;
|
|
14
16
|
next: () => void;
|
|
15
17
|
prev: () => void;
|
|
16
18
|
setRepeatMode: (mode: RepeatMode) => 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;AAE3F,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,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,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"}
|
|
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;AAE3F,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,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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { GingerProviderProps } from '../types';
|
|
2
|
-
export declare function GingerProvider({ children, initialTracks, initialIndex, initialPlaylistMeta, initialShuffle, initialRepeatMode, initialPaused, 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, 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":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAmC,MAAM,UAAU,CAAC;AAarF,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,aAAkB,EAClB,YAAgB,EAChB,mBAA0B,EAC1B,cAAsB,EACtB,iBAAyB,EACzB,aAAoB,EACpB,SAAS,EACT,KAAK,EACL,aAAa,EACb,MAAM,EACN,OAAO,EACP,UAAU,EACV,OAAO,GACR,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"GingerProvider.d.ts","sourceRoot":"","sources":["../../src/context/GingerProvider.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,mBAAmB,EAAmC,MAAM,UAAU,CAAC;AAarF,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,aAAkB,EAClB,YAAgB,EAChB,mBAA0B,EAC1B,cAAsB,EACtB,iBAAyB,EACzB,aAAoB,EACpB,aAAiB,EACjB,YAAoB,EACpB,mBAAuB,EACvB,SAAS,EACT,KAAK,EACL,aAAa,EACb,MAAM,EACN,OAAO,EACP,UAAU,EACV,OAAO,GACR,EAAE,mBAAmB,2CAyNrB"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { GingerAction, GingerState, RepeatMode, Track } from '../types';
|
|
2
|
+
export declare function clampVolume(v: number): number;
|
|
3
|
+
export declare function clampPlaybackRate(r: number): number;
|
|
2
4
|
export declare function createInitialState(params: {
|
|
3
5
|
tracks: Track[];
|
|
4
6
|
currentIndex?: number;
|
|
@@ -6,6 +8,9 @@ export declare function createInitialState(params: {
|
|
|
6
8
|
isPaused?: boolean;
|
|
7
9
|
isShuffled?: boolean;
|
|
8
10
|
repeatMode?: RepeatMode;
|
|
11
|
+
volume?: number;
|
|
12
|
+
muted?: boolean;
|
|
13
|
+
playbackRate?: number;
|
|
9
14
|
}): GingerState;
|
|
10
15
|
export declare function gingerReducer(state: GingerState, action: GingerAction): GingerState;
|
|
11
16
|
//# sourceMappingURL=playbackReducer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playbackReducer.d.ts","sourceRoot":"","sources":["../../src/core/playbackReducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"playbackReducer.d.ts","sourceRoot":"","sources":["../../src/core/playbackReducer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAI7E,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGnD;AAkBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,WAAW,CAyBd;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,WAAW,CA2JnF"}
|
package/dist/ginger.d.ts
CHANGED
|
@@ -1,52 +1,56 @@
|
|
|
1
1
|
import { GingerPlayer } from './audio/GingerPlayer';
|
|
2
|
-
import { GingerPlaylist } from './components/playlist/GingerPlaylist';
|
|
3
2
|
import { GingerProvider } from './context/GingerProvider';
|
|
4
3
|
import * as Current from "./components/current";
|
|
5
4
|
import * as Control from "./components/controls/Controls";
|
|
6
5
|
import * as Queue from "./components/queue/QueueDisplay";
|
|
7
6
|
export declare const Ginger: {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
7
|
+
Provider: typeof GingerProvider;
|
|
8
|
+
Player: typeof GingerPlayer;
|
|
9
|
+
Current: {
|
|
10
|
+
Title: (props: import('./components/current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
11
|
+
Artist: (props: import('./components/current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
12
|
+
Album: (props: import('./components/current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
13
|
+
Description: (props: import('./components/current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
14
|
+
Copyright: (props: import('./components/current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
15
|
+
Genre: (props: import('./components/current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
16
|
+
Label: (props: import('./components/current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
17
|
+
Isrc: (props: import('./components/current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
18
|
+
TrackNumber: (props: import('./components/current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
19
|
+
Year: typeof Current.Year;
|
|
20
|
+
Lyrics: typeof Current.Lyrics;
|
|
21
|
+
FileUrl: typeof Current.FileUrl;
|
|
22
|
+
Artwork: typeof Current.Artwork;
|
|
23
|
+
QueueIndex: typeof Current.QueueIndex;
|
|
24
|
+
QueueLength: typeof Current.QueueLength;
|
|
25
|
+
QueuePosition: typeof Current.QueuePosition;
|
|
26
|
+
Elapsed: typeof Current.Elapsed;
|
|
27
|
+
Duration: typeof Current.Duration;
|
|
28
|
+
Remaining: typeof Current.Remaining;
|
|
29
|
+
Progress: typeof Current.Progress;
|
|
30
|
+
TimeRail: typeof Current.TimeRail;
|
|
31
|
+
PlaybackState: typeof Current.PlaybackState;
|
|
32
|
+
ErrorMessage: typeof Current.ErrorMessage;
|
|
34
33
|
};
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
Queue: {
|
|
35
|
+
Title: (props: import('./components/current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
36
|
+
Subtitle: (props: import('./components/current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
37
|
+
Description: (props: import('./components/current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
38
|
+
Copyright: (props: import('./components/current/createTextDisplay').TextDisplayProps) => import('react').ReactElement | null;
|
|
39
|
+
Artwork: typeof Queue.Artwork;
|
|
41
40
|
};
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
41
|
+
Control: {
|
|
42
|
+
PlayPause: typeof Control.PlayPause;
|
|
43
|
+
Repeat: typeof Control.Repeat;
|
|
44
|
+
Next: typeof Control.Next;
|
|
45
|
+
Previous: typeof Control.Previous;
|
|
46
|
+
Shuffle: typeof Control.Shuffle;
|
|
47
|
+
SeekBar: typeof Control.SeekBar;
|
|
48
|
+
Volume: typeof Control.Volume;
|
|
49
|
+
Mute: typeof Control.Mute;
|
|
50
|
+
PlaybackRate: typeof Control.PlaybackRate;
|
|
51
|
+
};
|
|
52
|
+
Playlist: typeof import('./components/playlist/GingerPlaylist').GingerPlaylist & {
|
|
53
|
+
Track: typeof import('./components/playlist/GingerPlaylist').GingerPlaylistTrack;
|
|
49
54
|
};
|
|
50
|
-
readonly Playlist: typeof GingerPlaylist;
|
|
51
55
|
};
|
|
52
56
|
//# sourceMappingURL=ginger.d.ts.map
|
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;
|
|
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+ClB,CAAC"}
|
|
@@ -13,6 +13,8 @@ export declare function useGinger(): {
|
|
|
13
13
|
seek: (timeSeconds: number) => void;
|
|
14
14
|
setVolume: (volume: number) => void;
|
|
15
15
|
setMuted: (muted: boolean) => void;
|
|
16
|
+
toggleMute: () => void;
|
|
17
|
+
setPlaybackRate: (rate: number) => void;
|
|
16
18
|
next: () => void;
|
|
17
19
|
prev: () => void;
|
|
18
20
|
setRepeatMode: (mode: import('..').RepeatMode) => void;
|
|
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuDxB"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),p=require("react"),J=p.createContext(null);function y(){const e=p.useContext(J);if(!e)throw new Error("Ginger components must be used within <Ginger.Provider>");return e}function H(e){const{buffered:r,duration:n}=e;return!(n>0)||r.length===0?0:Math.min(1,r.end(r.length-1)/n)}function Re({className:e,style:r,preload:n="metadata",crossOrigin:t}){var d;const{audioRef:i,dispatch:u,state:s,notifyEnded:l}=y(),c=((d=s.tracks[s.currentIndex])==null?void 0:d.fileUrl)??"";return p.useEffect(()=>{const o=i.current;if(o){if(!c){o.removeAttribute("src");return}o.getAttribute("src")!==c&&(o.src=c,o.load())}},[i,s.currentIndex,s.tracks,c]),a.jsx("audio",{ref:i,className:e,style:r,preload:n,crossOrigin:t,controls:!1,onTimeUpdate:o=>{const g=o.currentTarget;u({type:"MEDIA_TIME_UPDATE",payload:{currentTime:g.currentTime,duration:g.duration,bufferedFraction:H(g)}})},onLoadedMetadata:o=>{const g=o.currentTarget;u({type:"MEDIA_LOADED_METADATA",payload:{duration:g.duration,bufferedFraction:H(g)}})},onEnded:()=>l(),onPlay:()=>u({type:"MEDIA_PLAY"}),onPause:()=>u({type:"MEDIA_PAUSE"}),onWaiting:()=>u({type:"MEDIA_WAITING"}),onCanPlay:()=>u({type:"MEDIA_CANPLAY"}),onError:()=>{var m;const o=i.current,g=(m=o==null?void 0:o.error)==null?void 0:m.code;u({type:"MEDIA_ERROR",payload:{message:g===1?"MEDIA_ERR_ABORTED":g===2?"MEDIA_ERR_NETWORK":g===3?"MEDIA_ERR_DECODE":g===4?"MEDIA_ERR_SRC_NOT_SUPPORTED":"MEDIA_ERR_UNKNOWN"}})}})}function I(e,r){return r<=0?0:Math.max(0,Math.min(r-1,e))}function Z(e,r){if(e.length<=1)return[...e];const n=e[r];if(!n)return[...e];const t=e.filter((i,u)=>u!==r);for(let i=t.length-1;i>0;i--){const u=Math.floor(Math.random()*(i+1));[t[i],t[u]]=[t[u],t[i]]}return[n,...t]}function je(e,r){const n=e.findIndex(t=>t.fileUrl===r);return n===-1?0:n}function Ge(e){const{tracks:r,currentIndex:n,repeatMode:t}=e,i=r.length;return i===0?{kind:"stop",nextIndex:0}:t==="one"?{kind:"replay_same"}:n<i-1?{kind:"advance",nextIndex:n+1}:t==="all"?{kind:"wrap",nextIndex:0}:{kind:"stop",nextIndex:I(n,i)}}function _e(e){const{tracks:r,currentIndex:n,repeatMode:t}=e,i=r.length;return i===0?0:n<i-1?n+1:t==="all"?0:I(n,i)}function De(e){const{tracks:r,currentIndex:n,repeatMode:t}=e,i=r.length;return i===0?0:n>0?n-1:t==="all"?i-1:0}function Ne(e){return e==="off"?"all":e==="all"?"one":"off"}function we(e,r){return(e==null?void 0:e.artworkUrl)??r??void 0}function Ue(e,r){return(e==null?void 0:e.album)??r??void 0}function A(e){return e.tracks[e.currentIndex]??null}function ee(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 t;const r=e.duration;if(Number.isFinite(r)&&r>0)return r;const n=(t=e.tracks[e.currentIndex])==null?void 0:t.durationSeconds;return typeof n=="number"&&Number.isFinite(n)&&n>0?n:0}function re(e){const n=C(e)-e.currentTime;return Number.isFinite(n)?Math.max(0,n):0}function G(e){const r=C(e);return r>0?Math.min(1,Math.max(0,e.currentTime/r)):0}function ne(e){var n;const r=A(e);return we(r,(n=e.playlistMeta)==null?void 0:n.artworkUrl)}function te(e){var n;const r=A(e);return Ue(r,(n=e.playlistMeta)==null?void 0:n.subtitle)}function T(e,r){function n(t){const{state:i}=y(),s=(r(i)??"").trim(),{className:l,style:c,fallback:d,empty:o,children:g}=t;if(!s){const k=o??d??null;return k?a.jsx("span",{className:l,style:c,children:k}):null}return g?a.jsx("span",{className:l,style:c,children:g(s,i)}):a.jsx("span",{className:l,style:c,children:s})}return n.displayName=e,n}function E(e,r){return T(e,n=>r(A(n)))}const Fe=E("Ginger.Current.Title",e=>e==null?void 0:e.title),Le=E("Ginger.Current.Artist",e=>e==null?void 0:e.artist),Qe=T("Ginger.Current.Album",e=>te(e)),Be=E("Ginger.Current.Description",e=>e==null?void 0:e.description),$e=T("Ginger.Current.Copyright",e=>{var n;const r=A(e);return(r==null?void 0:r.copyright)??((n=e.playlistMeta)==null?void 0:n.copyright)}),Oe=E("Ginger.Current.Genre",e=>e==null?void 0:e.genre),Ye=E("Ginger.Current.Label",e=>e==null?void 0:e.label),Ve=E("Ginger.Current.Isrc",e=>e==null?void 0:e.isrc),Xe=E("Ginger.Current.TrackNumber",e=>(e==null?void 0:e.trackNumber)!=null?String(e.trackNumber):void 0);function ie({className:e,style:r,fallback:n,empty:t,children:i,format:u}){var d;const{state:s}=y(),l=(d=A(s))==null?void 0:d.year;if(typeof l!="number"||!Number.isFinite(l)){const o=t??n??null;return o?a.jsx("span",{className:e,style:r,children:o}):null}const c=u?u(l):String(l);return i?a.jsx("span",{className:e,style:r,children:i(c,s)}):a.jsx("span",{className:e,style:r,children:c})}ie.displayName="Ginger.Current.Year";function ue({className:e,style:r,fallback:n,empty:t,children:i,preserveWhitespace:u=!0}){var o;const{state:s}=y(),l=((o=A(s))==null?void 0:o.lyrics)??"",c=u?l.replace(/^\s+|\s+$/g,""):l.trim();if(!c){const g=t??n??null;return g?a.jsx("span",{className:e,style:r,children:g}):null}const d=u?{whiteSpace:"pre-wrap"}:void 0;return i?a.jsx("span",{className:e,style:{...d,...r},children:i(c,s)}):a.jsx("span",{className:e,style:{...d,...r},children:c})}ue.displayName="Ginger.Current.Lyrics";function se({visible:e=!1,className:r,style:n,fallback:t,empty:i,children:u}){var c;const{state:s}=y();if(!e)return null;const l=((c=A(s))==null?void 0:c.fileUrl)??"";if(!l){const d=i??t??null;return d?a.jsx("span",{className:r,style:n,children:d}):null}return u?a.jsx("span",{className:r,style:n,children:u(l,s)}):a.jsx("span",{className:r,style:n,children:l})}se.displayName="Ginger.Current.FileUrl";function ae({className:e,style:r,fallback:n,empty:t,sizes:i,loading:u,onError:s,decoding:l,imgStyle:c}){const{state:d}=y(),o=A(d),g=ne(d);if(!g){const m=t??n??null;return m?a.jsx("span",{className:e,style:r,children:m}):null}const k=[o==null?void 0:o.title,o==null?void 0:o.artist].filter(Boolean).join(" — ")||"Artwork";return a.jsx("span",{className:e,style:{display:"inline-block",background:"var(--ginger-artwork-bg, #f3f4f6)",borderRadius:"var(--ginger-artwork-radius, 6px)",overflow:"hidden",...r},children:a.jsx("img",{src:g,alt:k,sizes:i,loading:u,decoding:l,onError:s,style:{display:"block",width:"100%",height:"100%",objectFit:"cover",...c}})})}ae.displayName="Ginger.Current.Artwork";function le({base:e=0,className:r,style:n,fallback:t,empty:i,children:u}){const{state:s}=y();if(s.tracks.length===0){const d=i??t??null;return d?a.jsx("span",{className:r,style:n,children:d}):null}const c=String(s.currentIndex+e);return u?a.jsx("span",{className:r,style:n,children:u(c,s)}):a.jsx("span",{className:r,style:n,children:c})}le.displayName="Ginger.Current.QueueIndex";function oe({className:e,style:r,fallback:n,empty:t,children:i}){const{state:u}=y(),s=String(u.tracks.length);if(u.tracks.length===0){const l=t??n??null;return l?a.jsx("span",{className:e,style:r,children:l}):null}return i?a.jsx("span",{className:e,style:r,children:i(s,u)}):a.jsx("span",{className:e,style:r,children:s})}oe.displayName="Ginger.Current.QueueLength";function ce({base:e=0,separator:r=" / ",className:n,style:t,fallback:i,empty:u,children:s}){const{state:l}=y(),c=l.tracks.length;if(c===0){const k=u??i??null;return k?a.jsx("span",{className:n,style:t,children:k}):null}const d=String(l.currentIndex+e),o=String(c),g=`${d}${r}${o}`;return s?a.jsx("span",{className:n,style:t,children:s({index:d,length:o,label:g},l)}):a.jsx("span",{className:n,style:t,children:g})}ce.displayName="Ginger.Current.QueuePosition";function We(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 _(e,r,n){const{className:t,style:i,fallback:u,empty:s,children:l,format:c=We}=n;if(!(e>=0)||!Number.isFinite(e)){const o=s??u??null;return o?a.jsx("span",{className:t,style:i,children:o}):null}const d=c(e);return l?a.jsx("span",{className:t,style:i,children:l(d,r)}):a.jsx("span",{className:t,style:i,children:d})}function de(e){const{state:r}=y();return _(r.currentTime,r,e)}de.displayName="Ginger.Current.Elapsed";function fe(e){const{state:r}=y();return _(C(r),r,e)}fe.displayName="Ginger.Current.Duration";function pe(e){const{state:r}=y();return _(re(r),r,e)}pe.displayName="Ginger.Current.Remaining";function ge({className:e,style:r,fallback:n,empty:t,children:i}){const{state:u}=y(),s=C(u),l=G(u);if(!(s>0)){const c=t??n??null;return c?a.jsx("span",{className:e,style:r,children:c}):null}return i?a.jsx("span",{className:e,style:r,children:i({fraction:l,currentTime:u.currentTime,duration:s},u)}):a.jsx("span",{className:e,style:r,children:`${Math.round(l*100)}%`})}ge.displayName="Ginger.Current.Progress";function ye({className:e,style:r,height:n=4}){const{state:t}=y(),i=`${Math.round(G(t)*100)}%`;return a.jsx("div",{className:e,style:{width:"100%",height:n,background:"var(--ginger-muted-color, #e5e7eb)",borderRadius:999,overflow:"hidden",...r},"aria-hidden":!0,children:a.jsx("div",{style:{width:i,height:"100%",background:"var(--ginger-primary-color, #111827)"}})})}ye.displayName="Ginger.Current.TimeRail";function xe({className:e,style:r,fallback:n,empty:t,children:i}){const{state:u}=y(),s=ee(u);return i?a.jsx("span",{className:e,style:r,children:i(s,u)}):a.jsx("span",{className:e,style:r,children:s})}xe.displayName="Ginger.Current.PlaybackState";function he({className:e,style:r,fallback:n,empty:t,children:i}){const{state:u}=y(),s=u.errorMessage??"";if(!s){const l=t??n??null;return l?a.jsx("span",{className:e,style:r,children:l}):null}return i?a.jsx("span",{className:e,style:r,children:i(s,u)}):a.jsx("span",{className:e,style:r,children:s})}he.displayName="Ginger.Current.ErrorMessage";function me({playLabel:e="Play",pauseLabel:r="Pause",type:n="button",...t}){const{state:i,togglePlayPause:u}=y();return a.jsx("button",{type:n,"aria-label":i.isPaused?"Play":"Pause",onClick:u,...t,children:i.isPaused?e:r})}me.displayName="Ginger.Control.PlayPause";const K={off:"Repeat off",all:"Repeat all",one:"Repeat one"};function be({type:e="button",...r}){const{state:n,cycleRepeat:t}=y();return a.jsx("button",{type:e,"aria-label":K[n.repeatMode],onClick:t,...r,children:K[n.repeatMode]})}be.displayName="Ginger.Control.Repeat";function ke({type:e="button",children:r="Next",...n}){const{next:t}=y();return a.jsx("button",{type:e,"aria-label":"Next track",onClick:t,...n,children:r})}ke.displayName="Ginger.Control.Next";function Pe({type:e="button",children:r="Previous",...n}){const{prev:t}=y();return a.jsx("button",{type:e,"aria-label":"Previous track",onClick:t,...n,children:r})}Pe.displayName="Ginger.Control.Previous";function Me({type:e="button",children:r="Shuffle",...n}){const{state:t,toggleShuffle:i}=y();return a.jsx("button",{type:e,"aria-pressed":t.isShuffled,"aria-label":"Shuffle",onClick:i,...n,children:r})}Me.displayName="Ginger.Control.Shuffle";function Ae({inputStyle:e,style:r,...n}){const{state:t,seek:i}=y(),u=Number.isFinite(t.duration)&&t.duration>0?t.duration:0,s=u>0?t.currentTime:0;return a.jsx("input",{type:"range",min:0,max:u>0?u:1,step:"any",value:Number.isFinite(s)?s:0,"aria-label":"Seek",onChange:l=>i(Number(l.currentTarget.value)),style:{width:"100%",...r,...e},...n})}Ae.displayName="Ginger.Control.SeekBar";function Te({rowStyle:e,renderTrack:r,playOnSelect:n=!0,style:t,...i}){const{state:u,playTrackAt:s,selectTrackAt:l}=y();return a.jsx("ul",{style:{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)",...t},...i,children:u.tracks.map((c,d)=>{const o=d===u.currentIndex;return a.jsx("li",{children:a.jsx("button",{type:"button",onClick:()=>{n?s(d):l(d)},style:{width:"100%",textAlign:"left",border:"none",background:o?"rgba(17, 24, 39, 0.06)":"transparent",color:"inherit",font:"inherit",cursor:"pointer",padding:"var(--ginger-playlist-row-padding, 6px 8px)",...e},children:r?r(c,d,o):a.jsxs("span",{children:[c.title,c.artist?` — ${c.artist}`:""]})})},`${c.fileUrl}-${d}`)})})}Te.displayName="Ginger.Playlist";const qe=T("Ginger.Queue.Title",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.title}),ze=T("Ginger.Queue.Subtitle",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.subtitle}),He=T("Ginger.Queue.Description",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.description}),Ke=T("Ginger.Queue.Copyright",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.copyright});function Ee({className:e,style:r,fallback:n,empty:t,imgStyle:i}){var c,d;const{state:u}=y(),s=(c=u.playlistMeta)==null?void 0:c.artworkUrl;if(!s){const o=t??n??null;return o?a.jsx("span",{className:e,style:r,children:o}):null}const l=((d=u.playlistMeta)==null?void 0:d.title)??"Playlist artwork";return a.jsx("span",{className:e,style:{display:"inline-block",background:"var(--ginger-artwork-bg, #f3f4f6)",borderRadius:"var(--ginger-artwork-radius, 6px)",overflow:"hidden",...r},children:a.jsx("img",{src:s,alt:l,style:{display:"block",width:"100%",height:"100%",objectFit:"cover",...i}})})}Ee.displayName="Ginger.Queue.Artwork";const S={currentTime:0,duration:0,bufferedFraction:0,isBuffering:!1,errorMessage:null};function Ie(e){const r=[...e.tracks];let n=I(e.currentIndex??0,r.length),t=null,i=r;return e.isShuffled&&r.length>1&&(t=[...r],i=Z(r,n),n=0),{tracks:i,currentIndex:n,isPaused:e.isPaused??!0,isShuffled:!!(e.isShuffled&&i.length>1),repeatMode:e.repeatMode??"off",originalTracks:t,playlistMeta:e.playlistMeta??null,...S}}function Je(e,r){switch(r.type){case"INIT":{const{tracks:n,currentIndex:t,playlistMeta:i,isPaused:u,isShuffled:s,repeatMode:l}=r.payload;return Ie({tracks:n,currentIndex:t,playlistMeta:i??null,isPaused:u??!0,isShuffled:s??!1,repeatMode:l??"off"})}case"SET_QUEUE":{const{tracks:n,currentIndex:t}=r.payload,i=[...n],u=I(t??e.currentIndex,i.length);return{...e,tracks:i,currentIndex:u,...S}}case"SET_INDEX":{const n=I(r.payload.index,e.tracks.length),t=r.payload.autoPlay,i=t===!0?!1:t===!1?!0:e.isPaused;return{...e,currentIndex:n,...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:Ne(e.repeatMode)};case"TOGGLE_SHUFFLE":{if(e.tracks.length<=1)return{...e,isShuffled:!1,originalTracks:null};if(!e.isShuffled){const s=[...e.tracks],l=Z(s,e.currentIndex);return{...e,isShuffled:!0,originalTracks:s,tracks:l,currentIndex:0}}const n=e.originalTracks?[...e.originalTracks]:[...e.tracks],t=e.tracks[e.currentIndex],i=(t==null?void 0:t.fileUrl)??"",u=je(n,i);return{...e,isShuffled:!1,originalTracks:null,tracks:n,currentIndex:I(u,n.length)}}case"NEXT":{const n=_e(e),t=n===e.currentIndex;return{...e,currentIndex:n,...t?{}:S,isPaused:t?e.isPaused:!1}}case"PREV":{const n=De(e),t=n===e.currentIndex;return{...e,currentIndex:n,...t?{}:S,isPaused:t?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};default:return e}}const Ze={"--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 er({children:e,initialTracks:r=[],initialIndex:n=0,initialPlaylistMeta:t=null,initialShuffle:i=!1,initialRepeatMode:u="off",initialPaused:s=!0,className:l,style:c,onTrackChange:d,onPlay:o,onPause:g,onQueueEnd:k,onError:m}){var z;const P=p.useRef(null),[x,b]=p.useReducer(Je,void 0,()=>Ie({tracks:r,currentIndex:n,playlistMeta:t,isPaused:s,isShuffled:i,repeatMode:u})),D=x.tracks[x.currentIndex]??null;p.useEffect(()=>{d==null||d(D,x.currentIndex)},[D,x.currentIndex,d]),p.useEffect(()=>{x.errorMessage&&(m==null||m(x.errorMessage))},[x.errorMessage,m]);const v=p.useRef(void 0);p.useEffect(()=>{if(v.current===void 0){v.current=x.isPaused;return}v.current!==x.isPaused&&(x.isPaused?g==null||g():o==null||o()),v.current=x.isPaused},[x.isPaused,g,o]);const R=p.useCallback(()=>{var f;b({type:"PLAY"}),(f=P.current)==null||f.play().catch(h=>{b({type:"PAUSE"});const M=h instanceof Error?h.message:"Playback failed";m==null||m(M)})},[m]),j=p.useCallback(()=>{var f;b({type:"PAUSE"}),(f=P.current)==null||f.pause()},[]),N=p.useCallback(()=>{x.isPaused?R():j()},[j,R,x.isPaused]),w=p.useCallback(f=>{const h=P.current;h&&Number.isFinite(f)&&(h.currentTime=Math.max(0,f))},[]),U=p.useCallback(f=>{const h=P.current;h&&(h.volume=Math.min(1,Math.max(0,f)))},[]),F=p.useCallback(f=>{const h=P.current;h&&(h.muted=f)},[]),L=p.useCallback(()=>{b({type:"NEXT"})},[]),Q=p.useCallback(()=>{b({type:"PREV"})},[]),B=p.useCallback(f=>{b({type:"SET_REPEAT",payload:f})},[]),$=p.useCallback(()=>{b({type:"CYCLE_REPEAT"})},[]),O=p.useCallback(()=>{b({type:"TOGGLE_SHUFFLE"})},[]),Y=p.useCallback((f,h)=>{b({type:"SET_QUEUE",payload:{tracks:f,currentIndex:h}})},[]),V=p.useCallback(f=>{b({type:"SET_INDEX",payload:{index:f,autoPlay:!0}}),queueMicrotask(()=>{var h;(h=P.current)==null||h.play().catch(()=>{})})},[]),X=p.useCallback(f=>{b({type:"SET_INDEX",payload:{index:f,autoPlay:!1}})},[]),W=p.useCallback(f=>{b({type:"SET_PLAYLIST_META",payload:f})},[]),Se=(z=x.tracks[x.currentIndex])==null?void 0:z.fileUrl;p.useEffect(()=>{const f=P.current;f&&(x.isPaused?f.pause():f.play().catch(h=>{b({type:"PAUSE"});const M=h instanceof Error?h.message:"Playback failed";m==null||m(M)}))},[x.isPaused,Se,m]);const q=p.useCallback(()=>{const f=Ge(x);if(f.kind==="replay_same"){const M=P.current;M&&(M.currentTime=0,M.play().catch(()=>{})),b({type:"PLAY"});return}if(f.kind==="stop"){b({type:"PAUSE"}),k==null||k();return}const h=f.nextIndex;b({type:"SET_INDEX",payload:{index:h,autoPlay:!0}}),queueMicrotask(()=>{var M;(M=P.current)==null||M.play().catch(()=>{})})},[k,x]),Ce=p.useMemo(()=>({state:x,dispatch:b,audioRef:P,notifyEnded:q,play:R,pause:j,togglePlayPause:N,seek:w,setVolume:U,setMuted:F,next:L,prev:Q,setRepeatMode:B,cycleRepeat:$,toggleShuffle:O,setQueue:Y,playTrackAt:V,selectTrackAt:X,setPlaylistMeta:W}),[$,b,L,q,j,R,V,X,Q,w,F,Y,B,W,U,x,N,O]),ve=p.useMemo(()=>({...Ze,...c}),[c]);return a.jsx(J.Provider,{value:Ce,children:a.jsx("div",{className:l,style:ve,children:e})})}const rr={Provider:er,Player:Re,Current:{Title:Fe,Artist:Le,Album:Qe,Description:Be,Copyright:$e,Genre:Oe,Label:Ye,Isrc:Ve,TrackNumber:Xe,Year:ie,Lyrics:ue,FileUrl:se,Artwork:ae,QueueIndex:le,QueueLength:oe,QueuePosition:ce,Elapsed:de,Duration:fe,Remaining:pe,Progress:ge,TimeRail:ye,PlaybackState:xe,ErrorMessage:he},Queue:{Title:qe,Subtitle:ze,Description:He,Copyright:Ke,Artwork:Ee},Control:{PlayPause:me,Repeat:be,Next:ke,Previous:Pe,Shuffle:Me,SeekBar:Ae},Playlist:Te};function nr(){const e=y(),{state:r}=e;return p.useMemo(()=>({state:r,currentTrack:A(r),playbackUi:ee(r),duration:C(r),remaining:re(r),progress:G(r),artworkUrl:ne(r),albumLine:te(r),play:e.play,pause:e.pause,togglePlayPause:e.togglePlayPause,seek:e.seek,setVolume:e.setVolume,setMuted:e.setMuted,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,dispatch:e.dispatch}),[e.cycleRepeat,e.dispatch,e.next,e.pause,e.play,e.playTrackAt,e.selectTrackAt,e.prev,e.seek,e.setMuted,e.setPlaylistMeta,e.setQueue,e.setRepeatMode,e.setVolume,e.togglePlayPause,e.toggleShuffle,r])}exports.Ginger=rr;exports.useGinger=nr;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),p=require("react"),ue=p.createContext(null);function y(){const e=p.useContext(ue);if(!e)throw new Error("Ginger components must be used within <Ginger.Provider>");return e}function ie(e){const{buffered:r,duration:t}=e;return!(t>0)||r.length===0?0:Math.min(1,r.end(r.length-1)/t)}function Be({className:e,style:r,preload:t="metadata",crossOrigin:n}){var f;const{audioRef:i,dispatch:a,state:u,notifyEnded:l}=y(),c=((f=u.tracks[u.currentIndex])==null?void 0:f.fileUrl)??"";return p.useEffect(()=>{const o=i.current;o&&(o.volume=u.volume,o.muted=u.muted,o.playbackRate=u.playbackRate)},[i,u.volume,u.muted,u.playbackRate]),p.useEffect(()=>{const o=i.current;if(o){if(!c){o.removeAttribute("src");return}o.getAttribute("src")!==c&&(o.src=c,o.load())}},[i,u.currentIndex,u.tracks,c]),s.jsx("audio",{ref:i,className:e,style:r,preload:t,crossOrigin:n,controls:!1,onTimeUpdate:o=>{const d=o.currentTarget;a({type:"MEDIA_TIME_UPDATE",payload:{currentTime:d.currentTime,duration:d.duration,bufferedFraction:ie(d)}})},onLoadedMetadata:o=>{const d=o.currentTarget;a({type:"MEDIA_LOADED_METADATA",payload:{duration:d.duration,bufferedFraction:ie(d)}})},onEnded:()=>l(),onPlay:()=>a({type:"MEDIA_PLAY"}),onPause:()=>a({type:"MEDIA_PAUSE"}),onWaiting:()=>a({type:"MEDIA_WAITING"}),onCanPlay:()=>a({type:"MEDIA_CANPLAY"}),onVolumeChange:o=>{const d=o.currentTarget;a({type:"MEDIA_VOLUME_SYNC",payload:{volume:d.volume,muted:d.muted}})},onError:()=>{var h;const o=i.current,d=(h=o==null?void 0:o.error)==null?void 0:h.code;a({type:"MEDIA_ERROR",payload:{message:d===1?"MEDIA_ERR_ABORTED":d===2?"MEDIA_ERR_NETWORK":d===3?"MEDIA_ERR_DECODE":d===4?"MEDIA_ERR_SRC_NOT_SUPPORTED":"MEDIA_ERR_UNKNOWN"}})}})}function C(e,r){return r<=0?0:Math.max(0,Math.min(r-1,e))}function se(e,r){if(e.length<=1)return[...e];const t=e[r];if(!t)return[...e];const n=e.filter((i,a)=>a!==r);for(let i=n.length-1;i>0;i--){const a=Math.floor(Math.random()*(i+1));[n[i],n[a]]=[n[a],n[i]]}return[t,...n]}function Ve(e,r){const t=e.findIndex(n=>n.fileUrl===r);return t===-1?0:t}function $e(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:C(t,i)}}function Qe(e){const{tracks:r,currentIndex:t,repeatMode:n}=e,i=r.length;return i===0?0:t<i-1?t+1:n==="all"?0:C(t,i)}function Xe(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 We(e){return e==="off"?"all":e==="all"?"one":"off"}function qe(e,r){return(e==null?void 0:e.artworkUrl)??r??void 0}function Ke(e,r){return(e==null?void 0:e.album)??r??void 0}function T(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 S(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 oe(e){const t=S(e)-e.currentTime;return Number.isFinite(t)?Math.max(0,t):0}function U(e){const r=S(e);return r>0?Math.min(1,Math.max(0,e.currentTime/r)):0}function ce(e){var t;const r=T(e);return qe(r,(t=e.playlistMeta)==null?void 0:t.artworkUrl)}function de(e){var t;const r=T(e);return Ke(r,(t=e.playlistMeta)==null?void 0:t.subtitle)}function v(e,r){function t(n){const{state:i}=y(),u=(r(i)??"").trim(),{className:l,style:c,fallback:f,empty:o,children:d}=n;if(!u){const m=o??f??null;return m?s.jsx("span",{className:l,style:c,children:m}):null}return d?s.jsx("span",{className:l,style:c,children:d(u,i)}):s.jsx("span",{className:l,style:c,children:u})}return t.displayName=e,t}function I(e,r){return v(e,t=>r(T(t)))}const ze=I("Ginger.Current.Title",e=>e==null?void 0:e.title),He=I("Ginger.Current.Artist",e=>e==null?void 0:e.artist),Je=v("Ginger.Current.Album",e=>de(e)),Ze=I("Ginger.Current.Description",e=>e==null?void 0:e.description),er=v("Ginger.Current.Copyright",e=>{var t;const r=T(e);return(r==null?void 0:r.copyright)??((t=e.playlistMeta)==null?void 0:t.copyright)}),rr=I("Ginger.Current.Genre",e=>e==null?void 0:e.genre),tr=I("Ginger.Current.Label",e=>e==null?void 0:e.label),nr=I("Ginger.Current.Isrc",e=>e==null?void 0:e.isrc),ir=I("Ginger.Current.TrackNumber",e=>(e==null?void 0:e.trackNumber)!=null?String(e.trackNumber):void 0);function fe({className:e,style:r,fallback:t,empty:n,children:i,format:a}){var f;const{state:u}=y(),l=(f=T(u))==null?void 0:f.year;if(typeof l!="number"||!Number.isFinite(l)){const o=n??t??null;return o?s.jsx("span",{className:e,style:r,children:o}):null}const c=a?a(l):String(l);return i?s.jsx("span",{className:e,style:r,children:i(c,u)}):s.jsx("span",{className:e,style:r,children:c})}fe.displayName="Ginger.Current.Year";function pe({className:e,style:r,fallback:t,empty:n,children:i,preserveWhitespace:a=!0}){var o;const{state:u}=y(),l=((o=T(u))==null?void 0:o.lyrics)??"",c=a?l.replace(/^\s+|\s+$/g,""):l.trim();if(!c){const d=n??t??null;return d?s.jsx("span",{className:e,style:r,children:d}):null}const f=a?{whiteSpace:"pre-wrap"}:void 0;return i?s.jsx("span",{className:e,style:{...f,...r},children:i(c,u)}):s.jsx("span",{className:e,style:{...f,...r},children:c})}pe.displayName="Ginger.Current.Lyrics";function ge({visible:e=!1,className:r,style:t,fallback:n,empty:i,children:a}){var c;const{state:u}=y();if(!e)return null;const l=((c=T(u))==null?void 0:c.fileUrl)??"";if(!l){const f=i??n??null;return f?s.jsx("span",{className:r,style:t,children:f}):null}return a?s.jsx("span",{className:r,style:t,children:a(l,u)}):s.jsx("span",{className:r,style:t,children:l})}ge.displayName="Ginger.Current.FileUrl";function ye({className:e,style:r,fallback:t,empty:n,sizes:i,loading:a,onError:u,decoding:l,imgStyle:c}){const{state:f}=y(),o=T(f),d=ce(f);if(!d){const h=n??t??null;return h?s.jsx("span",{className:e,style:r,children:h}):null}const m=[o==null?void 0:o.title,o==null?void 0:o.artist].filter(Boolean).join(" — ")||"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:d,alt:m,sizes:i,loading:a,decoding:l,onError:u,style:{display:"block",width:"100%",height:"100%",objectFit:"cover",...c}})})}ye.displayName="Ginger.Current.Artwork";function me({base:e=0,className:r,style:t,fallback:n,empty:i,children:a}){const{state:u}=y();if(u.tracks.length===0){const f=i??n??null;return f?s.jsx("span",{className:r,style:t,children:f}):null}const c=String(u.currentIndex+e);return a?s.jsx("span",{className:r,style:t,children:a(c,u)}):s.jsx("span",{className:r,style:t,children:c})}me.displayName="Ginger.Current.QueueIndex";function xe({className:e,style:r,fallback:t,empty:n,children:i}){const{state:a}=y(),u=String(a.tracks.length);if(a.tracks.length===0){const l=n??t??null;return l?s.jsx("span",{className:e,style:r,children:l}):null}return i?s.jsx("span",{className:e,style:r,children:i(u,a)}):s.jsx("span",{className:e,style:r,children:u})}xe.displayName="Ginger.Current.QueueLength";function be({base:e=0,separator:r=" / ",className:t,style:n,fallback:i,empty:a,children:u}){const{state:l}=y(),c=l.tracks.length;if(c===0){const m=a??i??null;return m?s.jsx("span",{className:t,style:n,children:m}):null}const f=String(l.currentIndex+e),o=String(c),d=`${f}${r}${o}`;return u?s.jsx("span",{className:t,style:n,children:u({index:f,length:o,label:d},l)}):s.jsx("span",{className:t,style:n,children:d})}be.displayName="Ginger.Current.QueuePosition";function ar(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:a,empty:u,children:l,format:c=ar}=t;if(!(e>=0)||!Number.isFinite(e)){const o=u??a??null;return o?s.jsx("span",{className:n,style:i,children:o}):null}const f=c(e);return l?s.jsx("span",{className:n,style:i,children:l(f,r)}):s.jsx("span",{className:n,style:i,children:f})}function he(e){const{state:r}=y();return L(r.currentTime,r,e)}he.displayName="Ginger.Current.Elapsed";function ke(e){const{state:r}=y();return L(S(r),r,e)}ke.displayName="Ginger.Current.Duration";function Pe(e){const{state:r}=y();return L(oe(r),r,e)}Pe.displayName="Ginger.Current.Remaining";function Me({className:e,style:r,fallback:t,empty:n,children:i}){const{state:a}=y(),u=S(a),l=U(a);if(!(u>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:l,currentTime:a.currentTime,duration:u},a)}):s.jsx("span",{className:e,style:r,children:`${Math.round(l*100)}%`})}Me.displayName="Ginger.Current.Progress";function Te({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)"}})})}Te.displayName="Ginger.Current.TimeRail";function Ee({className:e,style:r,fallback:t,empty:n,children:i}){const{state:a}=y(),u=le(a);return i?s.jsx("span",{className:e,style:r,children:i(u,a)}):s.jsx("span",{className:e,style:r,children:u})}Ee.displayName="Ginger.Current.PlaybackState";function Ae({className:e,style:r,fallback:t,empty:n,children:i}){const{state:a}=y(),u=a.errorMessage??"";if(!u){const l=n??t??null;return l?s.jsx("span",{className:e,style:r,children:l}):null}return i?s.jsx("span",{className:e,style:r,children:i(u,a)}):s.jsx("span",{className:e,style:r,children:u})}Ae.displayName="Ginger.Current.ErrorMessage";function ve({playLabel:e="Play",pauseLabel:r="Pause",type:t="button",...n}){const{state:i,togglePlayPause:a}=y();return s.jsx("button",{type:t,"aria-label":i.isPaused?"Play":"Pause",onClick:a,...n,children:i.isPaused?e:r})}ve.displayName="Ginger.Control.PlayPause";const ae={off:"Repeat off",all:"Repeat all",one:"Repeat one"};function Ie({type:e="button",...r}){const{state:t,cycleRepeat:n}=y();return s.jsx("button",{type:e,"aria-label":ae[t.repeatMode],onClick:n,...r,children:ae[t.repeatMode]})}Ie.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 Re({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})}Re.displayName="Ginger.Control.Previous";function Se({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})}Se.displayName="Ginger.Control.Shuffle";function je({inputStyle:e,style:r,...t}){const{state:n,seek:i}=y(),a=Number.isFinite(n.duration)&&n.duration>0?n.duration:0,u=a>0?n.currentTime:0;return s.jsx("input",{type:"range",min:0,max:a>0?a:1,step:"any",value:Number.isFinite(u)?u:0,"aria-label":"Seek",onChange:l=>i(Number(l.currentTarget.value)),style:{width:"100%",...r,...e},...t})}je.displayName="Ginger.Control.SeekBar";function Ge({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:a=>i(Number(a.currentTarget.value)),style:{width:"100%",...r,...e},...t})}Ge.displayName="Ginger.Control.Volume";function _e({muteLabel:e="Mute",unmuteLabel:r="Unmute",type:t="button",...n}){const{state:i,toggleMute:a}=y();return s.jsx("button",{type:t,"aria-pressed":i.muted,"aria-label":i.muted?"Unmute":"Mute",onClick:a,...n,children:i.muted?r:e})}_e.displayName="Ginger.Control.Mute";const ur=[.5,.75,1,1.25,1.5,2];function Ne({rates:e=ur,style:r,...t}){const{state:n,setPlaybackRate:i}=y(),a=p.useMemo(()=>Array.from(new Set([...e,n.playbackRate])).sort((u,l)=>u-l),[e,n.playbackRate]);return s.jsx("select",{"aria-label":"Playback speed",value:String(n.playbackRate),style:r,onChange:u=>i(Number(u.currentTarget.value)),...t,children:a.map(u=>s.jsx("option",{value:String(u),children:u===1?"1× normal":`${u}×`},u))})}Ne.displayName="Ginger.Control.PlaybackRate";const w=p.createContext(null);function sr(){const e=p.useContext(w);if(!e)throw new Error("Ginger.Playlist.Track must be used inside <Ginger.Playlist>");return e}function De({children:e,rowStyle:r,renderTrack:t,playOnSelect:n=!0,style:i,...a}){const{state:u,playTrackAt:l,selectTrackAt:c}=y(),f={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:f,...a,children:e})}):s.jsx(w.Provider,{value:{playOnSelect:n},children:s.jsx("ul",{style:f,...a,children:u.tracks.map((d,m)=>{const h=m===u.currentIndex;return s.jsx("li",{children:s.jsx("button",{type:"button",onClick:()=>{n?l(m):c(m)},style:{width:"100%",textAlign:"left",border:"none",background:h?"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(d,m,h):s.jsxs("span",{children:[d.title,d.artist?` — ${d.artist}`:""]})})},`${d.fileUrl}-${m}`)})})})}De.displayName="Ginger.Playlist";function we({index:e,className:r,style:t,children:n,liProps:i,onClick:a,...u}){const{playOnSelect:l}=sr(),{state:c,playTrackAt:f,selectTrackAt:o}=y(),d=e===c.currentIndex,m=c.tracks[e],h=m!=null?s.jsxs("span",{children:[m.title,m.artist?` — ${m.artist}`:""]}):null;return s.jsx("li",{...i,children:s.jsx("button",{type:"button","aria-current":d?"true":void 0,"data-ginger-active":d||void 0,className:r,style:{width:"100%",textAlign:"left",border:"none",background:d?"rgba(17, 24, 39, 0.06)":"transparent",color:"inherit",font:"inherit",cursor:"pointer",padding:"var(--ginger-playlist-row-padding, 6px 8px)",...t},...u,onClick:A=>{a==null||a(A),!A.defaultPrevented&&(l?f(e):o(e))},children:n??h})})}we.displayName="Ginger.Playlist.Track";const lr=Object.assign(De,{Track:we}),or=v("Ginger.Queue.Title",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.title}),cr=v("Ginger.Queue.Subtitle",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.subtitle}),dr=v("Ginger.Queue.Description",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.description}),fr=v("Ginger.Queue.Copyright",e=>{var r;return(r=e.playlistMeta)==null?void 0:r.copyright});function Ue({className:e,style:r,fallback:t,empty:n,imgStyle:i}){var c,f;const{state:a}=y(),u=(c=a.playlistMeta)==null?void 0:c.artworkUrl;if(!u){const o=n??t??null;return o?s.jsx("span",{className:e,style:r,children:o}):null}const l=((f=a.playlistMeta)==null?void 0:f.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:u,alt:l,style:{display:"block",width:"100%",height:"100%",objectFit:"cover",...i}})})}Ue.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 R={currentTime:0,duration:0,bufferedFraction:0,isBuffering:!1,errorMessage:null},pr={...R,volume:1,muted:!1,playbackRate:1};function Le(e){const r=[...e.tracks];let t=C(e.currentIndex??0,r.length),n=null,i=r;return e.isShuffled&&r.length>1&&(n=[...r],i=se(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,...pr,volume:D(e.volume??1),muted:e.muted??!1,playbackRate:F(e.playbackRate??1)}}function gr(e,r){switch(r.type){case"INIT":{const{tracks:t,currentIndex:n,playlistMeta:i,isPaused:a,isShuffled:u,repeatMode:l,volume:c,muted:f,playbackRate:o}=r.payload;return Le({tracks:t,currentIndex:n,playlistMeta:i??null,isPaused:a??!0,isShuffled:u??!1,repeatMode:l??"off",volume:c,muted:f,playbackRate:o})}case"SET_QUEUE":{const{tracks:t,currentIndex:n}=r.payload,i=[...t],a=C(n??e.currentIndex,i.length);return{...e,tracks:i,currentIndex:a,...R}}case"SET_INDEX":{const t=C(r.payload.index,e.tracks.length),n=r.payload.autoPlay,i=n===!0?!1:n===!1?!0:e.isPaused;return{...e,currentIndex:t,...R,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:We(e.repeatMode)};case"TOGGLE_SHUFFLE":{if(e.tracks.length<=1)return{...e,isShuffled:!1,originalTracks:null};if(!e.isShuffled){const u=[...e.tracks],l=se(u,e.currentIndex);return{...e,isShuffled:!0,originalTracks:u,tracks:l,currentIndex:0}}const t=e.originalTracks?[...e.originalTracks]:[...e.tracks],n=e.tracks[e.currentIndex],i=(n==null?void 0:n.fileUrl)??"",a=Ve(t,i);return{...e,isShuffled:!1,originalTracks:null,tracks:t,currentIndex:C(a,t.length)}}case"NEXT":{const t=Qe(e),n=t===e.currentIndex;return{...e,currentIndex:t,...n?{}:R,isPaused:n?e.isPaused:!1}}case"PREV":{const t=Xe(e),n=t===e.currentIndex;return{...e,currentIndex:t,...n?{}:R,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 yr={"--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 mr({children:e,initialTracks:r=[],initialIndex:t=0,initialPlaylistMeta:n=null,initialShuffle:i=!1,initialRepeatMode:a="off",initialPaused:u=!0,initialVolume:l=1,initialMuted:c=!1,initialPlaybackRate:f=1,className:o,style:d,onTrackChange:m,onPlay:h,onPause:A,onQueueEnd:j,onError:P}){var ne;const E=p.useRef(null),[x,b]=p.useReducer(gr,void 0,()=>Le({tracks:r,currentIndex:t,playlistMeta:n,isPaused:u,isShuffled:i,repeatMode:a,volume:l,muted:c,playbackRate:f})),O=x.tracks[x.currentIndex]??null;p.useEffect(()=>{m==null||m(O,x.currentIndex)},[O,x.currentIndex,m]),p.useEffect(()=>{x.errorMessage&&(P==null||P(x.errorMessage))},[x.errorMessage,P]);const G=p.useRef(void 0);p.useEffect(()=>{if(G.current===void 0){G.current=x.isPaused;return}G.current!==x.isPaused&&(x.isPaused?A==null||A():h==null||h()),G.current=x.isPaused},[x.isPaused,A,h]);const _=p.useCallback(()=>{var g;b({type:"PLAY"}),(g=E.current)==null||g.play().catch(k=>{b({type:"PAUSE"});const M=k instanceof Error?k.message:"Playback failed";P==null||P(M)})},[P]),N=p.useCallback(()=>{var g;b({type:"PAUSE"}),(g=E.current)==null||g.pause()},[]),Y=p.useCallback(()=>{x.isPaused?_():N()},[N,_,x.isPaused]),B=p.useCallback(g=>{const k=E.current;k&&Number.isFinite(g)&&(k.currentTime=Math.max(0,g))},[]),V=p.useCallback(g=>{b({type:"SET_VOLUME",payload:D(g)})},[]),$=p.useCallback(g=>{b({type:"SET_MUTED",payload:g})},[]),Q=p.useCallback(()=>{b({type:"TOGGLE_MUTE"})},[]),X=p.useCallback(g=>{b({type:"SET_PLAYBACK_RATE",payload:F(g)})},[]),W=p.useCallback(()=>{b({type:"NEXT"})},[]),q=p.useCallback(()=>{b({type:"PREV"})},[]),K=p.useCallback(g=>{b({type:"SET_REPEAT",payload:g})},[]),z=p.useCallback(()=>{b({type:"CYCLE_REPEAT"})},[]),H=p.useCallback(()=>{b({type:"TOGGLE_SHUFFLE"})},[]),J=p.useCallback((g,k)=>{b({type:"SET_QUEUE",payload:{tracks:g,currentIndex:k}})},[]),Z=p.useCallback(g=>{b({type:"SET_INDEX",payload:{index:g,autoPlay:!0}}),queueMicrotask(()=>{var k;(k=E.current)==null||k.play().catch(()=>{})})},[]),ee=p.useCallback(g=>{b({type:"SET_INDEX",payload:{index:g,autoPlay:!1}})},[]),re=p.useCallback(g=>{b({type:"SET_PLAYLIST_META",payload:g})},[]),Fe=(ne=x.tracks[x.currentIndex])==null?void 0:ne.fileUrl;p.useEffect(()=>{const g=E.current;g&&(x.isPaused?g.pause():g.play().catch(k=>{b({type:"PAUSE"});const M=k instanceof Error?k.message:"Playback failed";P==null||P(M)}))},[x.isPaused,Fe,P]);const te=p.useCallback(()=>{const g=$e(x);if(g.kind==="replay_same"){const M=E.current;M&&(M.currentTime=0,M.play().catch(()=>{})),b({type:"PLAY"});return}if(g.kind==="stop"){b({type:"PAUSE"}),j==null||j();return}const k=g.nextIndex;b({type:"SET_INDEX",payload:{index:k,autoPlay:!0}}),queueMicrotask(()=>{var M;(M=E.current)==null||M.play().catch(()=>{})})},[j,x]),Oe=p.useMemo(()=>({state:x,dispatch:b,audioRef:E,notifyEnded:te,play:_,pause:N,togglePlayPause:Y,seek:B,setVolume:V,setMuted:$,toggleMute:Q,setPlaybackRate:X,next:W,prev:q,setRepeatMode:K,cycleRepeat:z,toggleShuffle:H,setQueue:J,playTrackAt:Z,selectTrackAt:ee,setPlaylistMeta:re}),[z,b,W,te,N,_,Z,ee,q,B,$,X,J,K,re,V,x,Q,Y,H]),Ye=p.useMemo(()=>({...yr,...d}),[d]);return s.jsx(ue.Provider,{value:Oe,children:s.jsx("div",{className:o,style:Ye,children:e})})}const xr={Provider:mr,Player:Be,Current:{Title:ze,Artist:He,Album:Je,Description:Ze,Copyright:er,Genre:rr,Label:tr,Isrc:nr,TrackNumber:ir,Year:fe,Lyrics:pe,FileUrl:ge,Artwork:ye,QueueIndex:me,QueueLength:xe,QueuePosition:be,Elapsed:he,Duration:ke,Remaining:Pe,Progress:Me,TimeRail:Te,PlaybackState:Ee,ErrorMessage:Ae},Queue:{Title:or,Subtitle:cr,Description:dr,Copyright:fr,Artwork:Ue},Control:{PlayPause:ve,Repeat:Ie,Next:Ce,Previous:Re,Shuffle:Se,SeekBar:je,Volume:Ge,Mute:_e,PlaybackRate:Ne},Playlist:lr};function br(){const e=y(),{state:r}=e;return p.useMemo(()=>({state:r,currentTrack:T(r),playbackUi:le(r),duration:S(r),remaining:oe(r),progress:U(r),artworkUrl:ce(r),albumLine:de(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,dispatch:e.dispatch}),[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=xr;exports.useGinger=br;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|