react-modern-audio-player 2.2.0 → 2.3.1
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 +75 -57
- package/dist/index.css +1 -1
- package/dist/index.es.js +994 -835
- package/dist/types/api/useAudioPlayer.d.ts +2 -0
- package/dist/types/api/useAudioPlayerPlayback.d.ts +2 -0
- package/dist/types/components/AudioPlayer/Context/PlaybackContext.d.ts +1 -0
- package/dist/types/components/AudioPlayer/Context/StateContext/audio.d.ts +2 -0
- package/dist/types/components/AudioPlayer/Context/StateContext/element.d.ts +1 -0
- package/dist/types/components/AudioPlayer/Context/StateContext/index.d.ts +2 -1
- package/dist/types/components/AudioPlayer/Context/StateContext/placement.d.ts +7 -5
- package/dist/types/components/AudioPlayer/Context/UIContext.d.ts +2 -1
- package/dist/types/components/AudioPlayer/Context/dispatchContext.d.ts +5 -2
- package/dist/types/components/AudioPlayer/Context/providerProps.d.ts +2 -1
- package/dist/types/components/AudioPlayer/Interface/Controller/SpeedSelector/SpeedSelector.d.ts +10 -0
- package/dist/types/components/AudioPlayer/Interface/Controller/SpeedSelector/index.d.ts +2 -0
- package/dist/types/components/AudioPlayer/Interface/Controller/Tooltip/Volume/index.d.ts +5 -1
- package/dist/types/components/AudioPlayer/Interface/hooks/index.d.ts +2 -0
- package/dist/types/components/AudioPlayer/Interface/hooks/useDropdownAutoPlacement.d.ts +5 -0
- package/dist/types/components/AudioPlayer/Interface/hooks/useResolvedDropdownProps.d.ts +18 -0
- package/dist/types/components/AudioPlayer/Player/index.d.ts +2 -2
- package/dist/types/components/AudioPlayer/Provider/AudioPlayerStateProvider.d.ts +2 -2
- package/dist/types/components/AudioPlayer/index.d.ts +5 -3
- package/package.json +1 -1
- package/dist/types/components/AudioPlayer/Interface/Controller/Tooltip/Volume/useVolume.d.ts +0 -5
|
@@ -6,6 +6,7 @@ export interface AudioPlayerControls {
|
|
|
6
6
|
duration: number;
|
|
7
7
|
repeatType: RepeatType;
|
|
8
8
|
muted: boolean;
|
|
9
|
+
playbackRate: number;
|
|
9
10
|
currentTrack: AudioData | null;
|
|
10
11
|
currentIndex: number;
|
|
11
12
|
playList: ReadonlyArray<AudioData>;
|
|
@@ -18,6 +19,7 @@ export interface AudioPlayerControls {
|
|
|
18
19
|
setVolume: (volume: number) => void;
|
|
19
20
|
toggleMute: () => void;
|
|
20
21
|
setTrack: (index: number) => void;
|
|
22
|
+
setPlaybackRate: (rate: number) => void;
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
25
|
* Convenience facade that composes all domain sub-hooks into a single flat
|
|
@@ -2,8 +2,10 @@ import { RepeatType } from '../components/AudioPlayer/Context/StateContext';
|
|
|
2
2
|
export interface AudioPlayerPlaybackControls {
|
|
3
3
|
isPlaying: boolean;
|
|
4
4
|
repeatType: RepeatType;
|
|
5
|
+
playbackRate: number;
|
|
5
6
|
play: () => void;
|
|
6
7
|
pause: () => void;
|
|
7
8
|
togglePlay: () => void;
|
|
9
|
+
setPlaybackRate: (rate: number) => void;
|
|
8
10
|
}
|
|
9
11
|
export declare const useAudioPlayerPlayback: () => AudioPlayerPlaybackControls;
|
|
@@ -8,6 +8,7 @@ export type AudioCustomProps = {
|
|
|
8
8
|
volume?: number;
|
|
9
9
|
currentTime?: number;
|
|
10
10
|
duration?: number;
|
|
11
|
+
playbackRate?: number;
|
|
11
12
|
};
|
|
12
13
|
export declare const DEFAULT_AUDIO_STATE: {
|
|
13
14
|
readonly isPlaying: false;
|
|
@@ -16,6 +17,7 @@ export declare const DEFAULT_AUDIO_STATE: {
|
|
|
16
17
|
readonly repeatType: RepeatType;
|
|
17
18
|
readonly currentTime: 0;
|
|
18
19
|
readonly duration: 0;
|
|
20
|
+
readonly playbackRate: 1;
|
|
19
21
|
};
|
|
20
22
|
export type AudioData = {
|
|
21
23
|
src: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AudioState } from './audio';
|
|
2
2
|
import { ActiveUI, CoverImgsCss, ElementRefs, CustomIcons, PlayList } from './element';
|
|
3
|
-
import { PlayListPlacement, InterfacePlacement, PlayerPlacement, VolumeSliderPlacement } from './placement';
|
|
3
|
+
import { PlayListPlacement, InterfacePlacement, PlayerPlacement, SpeedSelectorPlacement, VolumeSliderPlacement } from './placement';
|
|
4
4
|
export interface AudioPlayerStateContext {
|
|
5
5
|
playList: PlayList;
|
|
6
6
|
curPlayId: number;
|
|
@@ -11,6 +11,7 @@ export interface AudioPlayerStateContext {
|
|
|
11
11
|
playerPlacement?: PlayerPlacement;
|
|
12
12
|
interfacePlacement?: InterfacePlacement;
|
|
13
13
|
volumeSliderPlacement?: VolumeSliderPlacement;
|
|
14
|
+
speedSelectorPlacement?: SpeedSelectorPlacement;
|
|
14
15
|
elementRefs?: ElementRefs;
|
|
15
16
|
customIcons?: CustomIcons;
|
|
16
17
|
coverImgsCss?: CoverImgsCss;
|
|
@@ -2,24 +2,26 @@ import { DropdownContentPlacement } from '../../../Dropdown';
|
|
|
2
2
|
import { NumbersToUnionNum } from '../../../../utils/generateUnionNumType';
|
|
3
3
|
import { ActiveUI } from './element';
|
|
4
4
|
export type VolumeSliderPlacement = DropdownContentPlacement;
|
|
5
|
+
export type SpeedSelectorPlacement = DropdownContentPlacement;
|
|
5
6
|
export type PlayListPlacement = "bottom" | "top";
|
|
6
7
|
export type PlayerPlacement = "bottom" | "top" | "bottom-left" | "bottom-right" | "top-left" | "top-right" | "static";
|
|
7
|
-
export declare const
|
|
8
|
+
export declare const DEFAULT_INTERFACE_GRID_BOUND = 11;
|
|
8
9
|
export type InterfacePlacementKey = Exclude<keyof ActiveUI, "all" | "prevNnext" | "trackTime" | "volumeSlider"> | "trackTimeCurrent" | "trackTimeDuration";
|
|
9
|
-
export type InterfaceGridTemplateArea<TMaxLength extends number = typeof
|
|
10
|
+
export type InterfaceGridTemplateArea<TMaxLength extends number = typeof DEFAULT_INTERFACE_GRID_BOUND> = Partial<Record<InterfacePlacementKey, `row${NumbersToUnionNum<TMaxLength>}-${NumbersToUnionNum<TMaxLength>}`>>;
|
|
10
11
|
export type InterfaceGridCustomComponentsArea<TMaxLength extends number> = Partial<Record<string, `row${NumbersToUnionNum<TMaxLength>}-${NumbersToUnionNum<TMaxLength>}`>>;
|
|
11
12
|
export type InterfaceGridItemArea = Partial<Record<InterfacePlacementKey, string>>;
|
|
12
|
-
export type InterfacePlacement<TMaxLength extends number = typeof
|
|
13
|
+
export type InterfacePlacement<TMaxLength extends number = typeof DEFAULT_INTERFACE_GRID_BOUND> = {
|
|
13
14
|
templateArea?: InterfaceGridTemplateArea<TMaxLength>;
|
|
14
15
|
customComponentsArea?: InterfaceGridCustomComponentsArea<TMaxLength>;
|
|
15
16
|
itemCustomArea?: InterfaceGridItemArea;
|
|
16
17
|
};
|
|
17
18
|
export declare const defaultInterfacePlacement: {
|
|
18
|
-
templateArea: Required<InterfaceGridTemplateArea<typeof
|
|
19
|
+
templateArea: Required<InterfaceGridTemplateArea<typeof DEFAULT_INTERFACE_GRID_BOUND>>;
|
|
19
20
|
};
|
|
20
|
-
export interface Placements<TInterfacePlacementLength extends number = typeof
|
|
21
|
+
export interface Placements<TInterfacePlacementLength extends number = typeof DEFAULT_INTERFACE_GRID_BOUND> {
|
|
21
22
|
playListPlacement: PlayListPlacement;
|
|
22
23
|
interfacePlacement: InterfacePlacement<TInterfacePlacementLength>;
|
|
23
24
|
volumeSliderPlacement: VolumeSliderPlacement | undefined;
|
|
25
|
+
speedSelectorPlacement: SpeedSelectorPlacement | undefined;
|
|
24
26
|
playerPlacement: PlayerPlacement | undefined;
|
|
25
27
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ActiveUI, InterfacePlacement, PlayListPlacement, PlayerPlacement, VolumeSliderPlacement } from './StateContext';
|
|
1
|
+
import { ActiveUI, InterfacePlacement, PlayListPlacement, PlayerPlacement, SpeedSelectorPlacement, VolumeSliderPlacement } from './StateContext';
|
|
2
2
|
export type ColorScheme = "light" | "dark";
|
|
3
3
|
export interface UIContext {
|
|
4
4
|
activeUI: ActiveUI;
|
|
@@ -6,6 +6,7 @@ export interface UIContext {
|
|
|
6
6
|
playerPlacement?: PlayerPlacement;
|
|
7
7
|
interfacePlacement?: InterfacePlacement;
|
|
8
8
|
volumeSliderPlacement?: VolumeSliderPlacement;
|
|
9
|
+
speedSelectorPlacement?: SpeedSelectorPlacement;
|
|
9
10
|
colorScheme?: ColorScheme;
|
|
10
11
|
playListExpanded?: boolean;
|
|
11
12
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Dispatch } from 'react';
|
|
2
|
-
import { RepeatType, PlayList, PlayListPlacement, PlayerPlacement, ActiveUI, ElementRefs, CustomIcons, InterfacePlacement, CoverImgsCss, VolumeSliderPlacement,
|
|
3
|
-
export type AudioContextAction<TInterfacePlacementLength extends number = typeof
|
|
2
|
+
import { RepeatType, PlayList, PlayListPlacement, PlayerPlacement, ActiveUI, ElementRefs, CustomIcons, InterfacePlacement, CoverImgsCss, VolumeSliderPlacement, DEFAULT_INTERFACE_GRID_BOUND, AudioState } from './StateContext';
|
|
3
|
+
export type AudioContextAction<TInterfacePlacementLength extends number = typeof DEFAULT_INTERFACE_GRID_BOUND> = {
|
|
4
4
|
type: "NEXT_AUDIO";
|
|
5
5
|
} | {
|
|
6
6
|
type: "PREV_AUDIO";
|
|
@@ -34,6 +34,9 @@ export type AudioContextAction<TInterfacePlacementLength extends number = typeof
|
|
|
34
34
|
} | {
|
|
35
35
|
type: "SET_MUTED";
|
|
36
36
|
muted: boolean;
|
|
37
|
+
} | {
|
|
38
|
+
type: "SET_PLAYBACK_RATE";
|
|
39
|
+
playbackRate: number;
|
|
37
40
|
} | {
|
|
38
41
|
type: "SET_ACTIVE_UI";
|
|
39
42
|
activeUI: ActiveUI;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ActiveUI, CoverImgsCss, CustomIcons, InitialStates, InterfacePlacement, PlayList, PlayListPlacement, PlayerPlacement, VolumeSliderPlacement } from './StateContext';
|
|
1
|
+
import { ActiveUI, CoverImgsCss, CustomIcons, InitialStates, InterfacePlacement, PlayList, PlayListPlacement, PlayerPlacement, SpeedSelectorPlacement, VolumeSliderPlacement } from './StateContext';
|
|
2
2
|
export interface AudioPlayerStateProviderProps<TInterfacePlacementLength extends number> {
|
|
3
3
|
playList: PlayList;
|
|
4
4
|
audioInitialState?: InitialStates;
|
|
@@ -10,5 +10,6 @@ export interface AudioPlayerStateProviderProps<TInterfacePlacementLength extends
|
|
|
10
10
|
playList?: PlayListPlacement;
|
|
11
11
|
interface?: InterfacePlacement<TInterfacePlacementLength>;
|
|
12
12
|
volumeSlider?: VolumeSliderPlacement;
|
|
13
|
+
speedSelector?: SpeedSelectorPlacement;
|
|
13
14
|
};
|
|
14
15
|
}
|
package/dist/types/components/AudioPlayer/Interface/Controller/SpeedSelector/SpeedSelector.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { GridItemLayoutProps } from '../../../../Grid';
|
|
3
|
+
import { SpeedSelectorPlacement } from '../../../Context/StateContext';
|
|
4
|
+
export interface SpeedSelectorProps extends GridItemLayoutProps {
|
|
5
|
+
options?: number[];
|
|
6
|
+
formatRate?: (rate: number) => string;
|
|
7
|
+
triggerType?: "click" | "hover";
|
|
8
|
+
placement?: SpeedSelectorPlacement;
|
|
9
|
+
}
|
|
10
|
+
export declare const SpeedSelector: FC<SpeedSelectorProps>;
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
2
|
import { GridItemLayoutProps } from '../../../../../Grid';
|
|
3
|
-
|
|
3
|
+
import { VolumeSliderPlacement } from '../../../../Context/StateContext';
|
|
4
|
+
export interface VolumeProps extends GridItemLayoutProps {
|
|
5
|
+
triggerType?: "click" | "hover";
|
|
6
|
+
placement?: VolumeSliderPlacement;
|
|
7
|
+
}
|
|
4
8
|
export declare const Volume: FC<VolumeProps>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DropdownContentPlacement } from '../../../Dropdown';
|
|
2
|
+
type TriggerType = "click" | "hover";
|
|
3
|
+
interface UseResolvedDropdownPropsParams {
|
|
4
|
+
triggerType: TriggerType | undefined;
|
|
5
|
+
placement: DropdownContentPlacement | undefined;
|
|
6
|
+
contextPlacement: DropdownContentPlacement | undefined;
|
|
7
|
+
triggerRef: React.RefObject<HTMLElement>;
|
|
8
|
+
defaults: {
|
|
9
|
+
triggerType: TriggerType;
|
|
10
|
+
placement: DropdownContentPlacement;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export declare const useResolvedDropdownProps: ({ triggerType, placement, contextPlacement, triggerRef, defaults, }: UseResolvedDropdownPropsParams) => {
|
|
14
|
+
triggerType: TriggerType;
|
|
15
|
+
placement: DropdownContentPlacement;
|
|
16
|
+
contentRole: "dialog" | "tooltip";
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AudioPlayerStateProviderProps,
|
|
1
|
+
import { AudioPlayerStateProviderProps, DEFAULT_INTERFACE_GRID_BOUND } from '../Context';
|
|
2
2
|
export interface AudioPlayerProps<TInterfacePlacementLength extends number> extends AudioPlayerStateProviderProps<TInterfacePlacementLength> {
|
|
3
3
|
children?: React.ReactNode;
|
|
4
4
|
audioRef?: React.MutableRefObject<HTMLAudioElement>;
|
|
@@ -9,4 +9,4 @@ export interface AudioPlayerProps<TInterfacePlacementLength extends number> exte
|
|
|
9
9
|
*/
|
|
10
10
|
colorScheme?: "light" | "dark";
|
|
11
11
|
}
|
|
12
|
-
export declare const AudioPlayer: <TInterfacePlacementLength extends number = typeof
|
|
12
|
+
export declare const AudioPlayer: <TInterfacePlacementLength extends number = typeof DEFAULT_INTERFACE_GRID_BOUND>({ audioRef, children, ...restProps }: AudioPlayerProps<TInterfacePlacementLength>) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DEFAULT_INTERFACE_GRID_BOUND, AudioPlayerStateProviderProps } from '../Context';
|
|
2
2
|
import { PropsWithChildren } from 'react';
|
|
3
3
|
interface AudioPlayerStateProviderOwnProps<T extends number = number> extends AudioPlayerStateProviderProps<T> {
|
|
4
4
|
colorScheme?: "light" | "dark";
|
|
5
5
|
}
|
|
6
|
-
export declare const AudioPlayerStateProvider: <TInterfacePlacementLength extends number = typeof
|
|
6
|
+
export declare const AudioPlayerStateProvider: <TInterfacePlacementLength extends number = typeof DEFAULT_INTERFACE_GRID_BOUND>({ children, colorScheme, ...initProps }: PropsWithChildren<AudioPlayerStateProviderOwnProps<TInterfacePlacementLength>>) => import("react/jsx-runtime").JSX.Element;
|
|
7
7
|
export {};
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { AudioPlayerContainerProps } from './Container';
|
|
2
|
-
import {
|
|
2
|
+
import { DEFAULT_INTERFACE_GRID_BOUND } from './Context';
|
|
3
3
|
import { CustomComponent } from './Interface/CustomComponent';
|
|
4
4
|
import { PlayListEmpty } from './Interface/PlayListEmpty';
|
|
5
5
|
import { AudioPlayerProps } from './Player';
|
|
6
6
|
import { Progress } from './Interface/Controller/Input';
|
|
7
7
|
import { Volume } from './Interface/Controller/Tooltip';
|
|
8
8
|
import { SortablePlayList } from './Interface/Controller/Drawer';
|
|
9
|
+
import { SpeedSelector } from './Interface/Controller/SpeedSelector';
|
|
9
10
|
import { TransportControls, RepeatTypeBtn } from './Interface/Controller/Button';
|
|
10
11
|
import { Artwork } from './Interface/Information/Artwork';
|
|
11
12
|
import { TrackInfo } from './Interface/Information/TrackInfo';
|
|
12
13
|
import { TrackTime } from './Interface/Information/TrackTime';
|
|
13
|
-
export type RMAudioPlayerProps<TInterfacePlacementLength extends number = typeof
|
|
14
|
-
declare function AudioPlayerWithProviders<TInterfacePlacementLength extends number = typeof
|
|
14
|
+
export type RMAudioPlayerProps<TInterfacePlacementLength extends number = typeof DEFAULT_INTERFACE_GRID_BOUND> = AudioPlayerProps<TInterfacePlacementLength> & AudioPlayerContainerProps;
|
|
15
|
+
declare function AudioPlayerWithProviders<TInterfacePlacementLength extends number = typeof DEFAULT_INTERFACE_GRID_BOUND>({ rootContainerProps, ...audioPlayProps }: RMAudioPlayerProps<TInterfacePlacementLength>): import("react/jsx-runtime").JSX.Element;
|
|
15
16
|
declare namespace AudioPlayerWithProviders {
|
|
16
17
|
var displayName: string;
|
|
17
18
|
}
|
|
@@ -22,6 +23,7 @@ type AudioPlayerComponent = typeof AudioPlayerWithProviders & {
|
|
|
22
23
|
PlayListEmpty: typeof PlayListEmpty;
|
|
23
24
|
PlayButton: typeof TransportControls;
|
|
24
25
|
RepeatButton: typeof RepeatTypeBtn;
|
|
26
|
+
SpeedSelector: typeof SpeedSelector;
|
|
25
27
|
Artwork: typeof Artwork;
|
|
26
28
|
TrackInfo: typeof TrackInfo;
|
|
27
29
|
TrackTime: typeof TrackTime;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-modern-audio-player",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.1",
|
|
4
4
|
"description": "Modern, customizable React audio player with waveform visualization, drag-and-drop playlist, WAI-ARIA accessibility, TypeScript-first API, and Next.js App Router (Server Components) support.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "MAXX",
|
package/dist/types/components/AudioPlayer/Interface/Controller/Tooltip/Volume/useVolume.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { VolumeSliderPlacement } from '../../../../Context';
|
|
2
|
-
export declare const useVolumeSliderPlacement: ({ triggerRef, initialState, }: {
|
|
3
|
-
triggerRef: React.RefObject<HTMLElement>;
|
|
4
|
-
initialState: VolumeSliderPlacement;
|
|
5
|
-
}) => import('../../../../../Dropdown').DropdownContentPlacement;
|