UNPKG

react-h5-audio-player

Version:

A customizable React audio player. Written in TypeScript. Mobile compatible. Keyboard friendly

160 lines (159 loc) 5.02 kB
import React, { Component, ReactNode, CSSProperties, ReactElement, Key } from 'react'; import { RHAP_UI, MAIN_LAYOUT, AUDIO_PRELOAD_ATTRIBUTE, TIME_FORMAT } from './constants'; type CustomUIModule = RHAP_UI | ReactElement; type CustomUIModules = Array<CustomUIModule>; type OnSeek = (audio: HTMLAudioElement, time: number) => Promise<void>; interface MSEPropsObject { onSeek: OnSeek; onEcrypted?: (e: unknown) => void; srcDuration: number; } interface PlayerProps { /** * HTML5 Audio tag autoPlay property */ autoPlay?: boolean; /** * Whether to play audio after src prop is changed */ autoPlayAfterSrcChange?: boolean; /** * custom classNames */ className?: string; /** * The time interval to trigger onListen */ listenInterval?: number; progressJumpStep?: number; progressJumpSteps?: { backward?: number; forward?: number; }; volumeJumpStep?: number; loop?: boolean; muted?: boolean; crossOrigin?: React.AudioHTMLAttributes<HTMLAudioElement>['crossOrigin']; mediaGroup?: string; hasDefaultKeyBindings?: boolean; onAbort?: (e: Event) => void; onCanPlay?: (e: Event) => void; onCanPlayThrough?: (e: Event) => void; onEnded?: (e: Event) => void; onPlaying?: (e: Event) => void; onSeeking?: (e: Event) => void; onSeeked?: (e: Event) => void; onStalled?: (e: Event) => void; onSuspend?: (e: Event) => void; onLoadStart?: (e: Event) => void; onLoadedMetaData?: (e: Event) => void; onLoadedData?: (e: Event) => void; onWaiting?: (e: Event) => void; onEmptied?: (e: Event) => void; onError?: (e: Event) => void; onListen?: (e: Event) => void; onVolumeChange?: (e: Event) => void; onPause?: (e: Event) => void; onPlay?: (e: Event) => void; onClickPrevious?: (e: React.SyntheticEvent) => void; onClickNext?: (e: React.SyntheticEvent) => void; onPlayError?: (err: Error) => void; onChangeCurrentTimeError?: (err: Error) => void; mse?: MSEPropsObject; /** * HTML5 Audio tag preload property */ preload?: AUDIO_PRELOAD_ATTRIBUTE; /** * Pregress indicator refresh interval */ progressUpdateInterval?: number; /** * HTML5 Audio tag src property */ src?: string; defaultCurrentTime?: ReactNode; defaultDuration?: ReactNode; volume?: number; showJumpControls?: boolean; showSkipControls?: boolean; showDownloadProgress?: boolean; showFilledProgress?: boolean; showFilledVolume?: boolean; timeFormat?: TIME_FORMAT; header?: ReactNode; footer?: ReactNode; customIcons?: CustomIcons; layout?: MAIN_LAYOUT; customProgressBarSection?: CustomUIModules; customControlsSection?: CustomUIModules; customAdditionalControls?: CustomUIModules; customVolumeControls?: CustomUIModules; i18nAriaLabels?: I18nAriaLabels; children?: ReactNode; style?: CSSProperties; } interface CustomIcons { play?: ReactNode; pause?: ReactNode; rewind?: ReactNode; forward?: ReactNode; previous?: ReactNode; next?: ReactNode; loop?: ReactNode; loopOff?: ReactNode; volume?: ReactNode; volumeMute?: ReactNode; } interface I18nAriaLabels { player?: string; progressControl?: string; volumeControl?: string; play?: string; pause?: string; rewind?: string; forward?: string; previous?: string; next?: string; loop?: string; loopOff?: string; volume?: string; volumeMute?: string; } declare class H5AudioPlayer extends Component<PlayerProps> { static defaultI18nAriaLabels: I18nAriaLabels; audio: React.RefObject<HTMLAudioElement>; progressBar: React.RefObject<HTMLDivElement>; container: React.RefObject<HTMLDivElement>; lastVolume: number; listenTracker?: number; volumeAnimationTimer?: number; downloadProgressAnimationTimer?: number; togglePlay: (e: React.SyntheticEvent) => void; /** * Safely play audio * * Reference: https://developers.google.com/web/updates/2017/06/play-request-was-interrupted */ playAudioPromise: () => void; isPlaying: () => boolean; handlePlay: (e: Event) => void; handlePause: (e: Event) => void; handleEnded: (e: Event) => void; handleAbort: (e: Event) => void; handleClickVolumeButton: () => void; handleMuteChange: () => void; handleClickLoopButton: () => void; handleClickRewind: () => void; handleClickForward: () => void; setJumpTime: (time: number) => void; setJumpVolume: (volume: number) => void; handleKeyDown: (e: React.KeyboardEvent) => void; renderUIModules: (modules: CustomUIModules) => Array<ReactElement>; renderUIModule: (comp: CustomUIModule, key: Key) => ReactElement; componentDidMount(): void; componentDidUpdate(prevProps: PlayerProps): void; render(): ReactNode; } export default H5AudioPlayer; export { RHAP_UI, OnSeek };