@popmenu/audio-player 0.126.0 → 0.126.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/build/esm/_virtual/index.js +4 -0
- package/build/esm/_virtual/index.js.map +1 -0
- package/build/{components → esm/components}/AudioPlayer/AudioPlayer.d.ts +3 -3
- package/build/esm/components/AudioPlayer/AudioPlayer.js +67 -0
- package/build/esm/components/AudioPlayer/AudioPlayer.js.map +1 -0
- package/build/{components → esm/components}/AudioPlayer/AudioPlayerProps.d.ts +10 -10
- package/build/{components → esm/components}/AudioPlayer/index.d.ts +2 -2
- package/build/{components → esm/components}/AudioPlayer/util/audioPlayerReducer.d.ts +11 -11
- package/build/esm/components/AudioPlayer/util/audioPlayerReducer.js +113 -0
- package/build/esm/components/AudioPlayer/util/audioPlayerReducer.js.map +1 -0
- package/build/{components → esm/components}/AudioPlayer/util/formatTime.d.ts +1 -1
- package/build/esm/components/AudioPlayer/util/formatTime.js +13 -0
- package/build/esm/components/AudioPlayer/util/formatTime.js.map +1 -0
- package/build/{components → esm/components}/AudioPlayer/util/index.d.ts +5 -5
- package/build/{components → esm/components}/AudioPlayer/util/setupAudioRef.d.ts +8 -8
- package/build/esm/components/AudioPlayer/util/setupAudioRef.js +34 -0
- package/build/esm/components/AudioPlayer/util/setupAudioRef.js.map +1 -0
- package/build/{components → esm/components}/AudioPlayer/util/types.d.ts +77 -77
- package/build/esm/components/AudioPlayer/util/types.js +33 -0
- package/build/esm/components/AudioPlayer/util/types.js.map +1 -0
- package/build/{components → esm/components}/AudioPlayer/util/useVolumeIcon.d.ts +2 -2
- package/build/esm/components/AudioPlayer/util/useVolumeIcon.js +23 -0
- package/build/esm/components/AudioPlayer/util/useVolumeIcon.js.map +1 -0
- package/build/{components → esm/components}/index.d.ts +1 -1
- package/build/{index.d.ts → esm/index.d.ts} +1 -1
- package/build/esm/index.js +2 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/node_modules/classnames/index.js +81 -0
- package/build/esm/node_modules/classnames/index.js.map +1 -0
- package/build/index.js +281 -1235
- package/build/index.js.map +1 -1
- package/package.json +7 -4
- package/build/index.es.js +0 -1258
- package/build/index.es.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
2
|
-
import { AudioPlayerProps } from './AudioPlayerProps';
|
|
3
|
-
export declare const AudioPlayer: FC<AudioPlayerProps>;
|
|
1
|
+
import { FC } from 'react';
|
|
2
|
+
import { AudioPlayerProps } from './AudioPlayerProps';
|
|
3
|
+
export declare const AudioPlayer: FC<AudioPlayerProps>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { __assign } from 'tslib';
|
|
2
|
+
import React, { useRef, useState, useReducer, useEffect, useMemo } from 'react';
|
|
3
|
+
import classNames from '../../node_modules/classnames/index.js';
|
|
4
|
+
import { Play, Pause } from '@popmenu/web-icons';
|
|
5
|
+
import { useTheme, Grow, Slider } from '@material-ui/core';
|
|
6
|
+
import { Box, IconButton, Icon, Popper, Paper, Typography } from '@popmenu/common-ui';
|
|
7
|
+
import { audioPlayerReducer, initialAudioPlayerState } from './util/audioPlayerReducer.js';
|
|
8
|
+
import { useVolumeIcon } from './util/useVolumeIcon.js';
|
|
9
|
+
import { formatTime } from './util/formatTime.js';
|
|
10
|
+
import { setupAudioRef } from './util/setupAudioRef.js';
|
|
11
|
+
import { VOLUME_CONTROL_STATES, PLAYBACK_STATES, AUDIO_PLAYER_EVENT_TYPES } from './util/types.js';
|
|
12
|
+
|
|
13
|
+
var getPlaybackIcon = function (status) {
|
|
14
|
+
var icon;
|
|
15
|
+
switch (status) {
|
|
16
|
+
case PLAYBACK_STATES.PAUSED:
|
|
17
|
+
icon = Play;
|
|
18
|
+
break;
|
|
19
|
+
case PLAYBACK_STATES.PLAYING:
|
|
20
|
+
icon = Pause;
|
|
21
|
+
break;
|
|
22
|
+
case PLAYBACK_STATES.NONE:
|
|
23
|
+
icon = Play;
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
return icon;
|
|
27
|
+
};
|
|
28
|
+
var AudioPlayer = function (props) {
|
|
29
|
+
var _a, _b, _c, _d, _f, _g;
|
|
30
|
+
var src = props.src, _h = props.classes, classes = _h === void 0 ? {} : _h;
|
|
31
|
+
var volumeRef = useRef(null);
|
|
32
|
+
var audioRef = useRef(null);
|
|
33
|
+
var spacing = useTheme().spacing;
|
|
34
|
+
var _j = useState(false), disableRipple = _j[0], setDisableRipple = _j[1];
|
|
35
|
+
var _k = useReducer(audioPlayerReducer, __assign(__assign({}, initialAudioPlayerState), { context: __assign(__assign({}, initialAudioPlayerState.context), { audioRef: audioRef }) })), state = _k[0], send = _k[1];
|
|
36
|
+
useEffect(setupAudioRef({ audioRef: audioRef, send: send }), [audioRef]);
|
|
37
|
+
var PlaybackIcon = getPlaybackIcon(state.playback);
|
|
38
|
+
var VolumeIcon = useMemo(function () { return useVolumeIcon(state); }, [state.context.volume, (_a = state.context.audioRef.current) === null || _a === void 0 ? void 0 : _a.muted]);
|
|
39
|
+
var togglePlayback = function () { return send({ type: AUDIO_PLAYER_EVENT_TYPES.TOGGLE_PLAYBACK }); };
|
|
40
|
+
var toggleVolumeControl = function () { return send({ type: AUDIO_PLAYER_EVENT_TYPES.TOGGLE_VOLUME_CONTROL }); };
|
|
41
|
+
var toggleMute = function () { return send({ type: AUDIO_PLAYER_EVENT_TYPES.TOGGLE_MUTE }); };
|
|
42
|
+
var setTime = function (_e, time) { return send({ type: AUDIO_PLAYER_EVENT_TYPES.SET_TIME, context: { time: time } }); };
|
|
43
|
+
var setVolume = function (_e, volume) { return send({ type: AUDIO_PLAYER_EVENT_TYPES.VOLUME_CHANGE, context: { volume: volume } }); };
|
|
44
|
+
return (React.createElement(Box, { display: "flex", alignItems: "center", gridGap: spacing(1), className: classNames([classes.root]) },
|
|
45
|
+
React.createElement("audio", { ref: audioRef, src: src }),
|
|
46
|
+
React.createElement(Box, null,
|
|
47
|
+
React.createElement(IconButton, __assign({}, (classes.playbackToggle && { classes: { root: classes.playbackToggle } }), { "aria-label": state.context.playbackButtonLabel, disabled: ((_b = audioRef.current) === null || _b === void 0 ? void 0 : _b.networkState) === 2, onClick: togglePlayback }),
|
|
48
|
+
React.createElement(Icon, { icon: PlaybackIcon })),
|
|
49
|
+
React.createElement(IconButton, __assign({}, (classes.volumeToggle && { classes: { root: classes.volumeToggle } }), { "aria-label": state.context.volumeButtonLabel, ref: volumeRef, onClick: toggleMute, onMouseEnter: toggleVolumeControl, onMouseLeave: toggleVolumeControl, disableRipple: disableRipple }),
|
|
50
|
+
React.createElement(Icon, { icon: VolumeIcon }),
|
|
51
|
+
React.createElement(Popper, { onClick: function (e) { return e.stopPropagation(); }, onMouseEnter: function () { return setDisableRipple(true); }, onMouseLeave: function () { return setDisableRipple(false); }, open: state.volumeControls === VOLUME_CONTROL_STATES.SHOW, anchorEl: function () { return volumeRef.current; }, transition: true, placement: "top", className: classNames([classes.volumeSlider]) }, function (_a) {
|
|
52
|
+
var TransitionProps = _a.TransitionProps;
|
|
53
|
+
return (React.createElement(Grow, __assign({}, TransitionProps),
|
|
54
|
+
React.createElement(Paper, { elevation: 1 },
|
|
55
|
+
React.createElement(Box, { py: 1, height: 80 },
|
|
56
|
+
React.createElement(Slider, { color: "secondary", orientation: "vertical", value: state.context.volume, onChange: setVolume, max: 1, step: 0.01 })))));
|
|
57
|
+
}))),
|
|
58
|
+
React.createElement(Box, { display: "flex", flexGrow: 1, alignItems: "center", gridGap: spacing(1) },
|
|
59
|
+
React.createElement(Box, { flexBasis: 60, flexShrink: 0 },
|
|
60
|
+
React.createElement(Typography, __assign({}, (classes.playbackText && { classes: { root: classes.playbackText } })), formatTime(((_c = state.context.audioRef.current) === null || _c === void 0 ? void 0 : _c.currentTime) || 0))),
|
|
61
|
+
React.createElement(Slider, __assign({}, (classes.playbackSlider && { classes: { root: classes.playbackSlider } }), { color: "secondary", value: ((_d = state.context.audioRef.current) === null || _d === void 0 ? void 0 : _d.currentTime) || 0, max: ((_f = state.context.audioRef.current) === null || _f === void 0 ? void 0 : _f.duration) || 1, onChange: setTime, disabled: state.playback === PLAYBACK_STATES.NONE })),
|
|
62
|
+
React.createElement(Box, { flexBasis: 60, flexShrink: 0, textAlign: "end" },
|
|
63
|
+
React.createElement(Typography, __assign({}, (classes.lengthText && { classes: { root: classes.lengthText } })), formatTime(((_g = state.context.audioRef.current) === null || _g === void 0 ? void 0 : _g.duration) || 0))))));
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export { AudioPlayer };
|
|
67
|
+
//# sourceMappingURL=AudioPlayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioPlayer.js","sources":["../../../../src/components/AudioPlayer/AudioPlayer.tsx"],"sourcesContent":["import React, { FC, useEffect, useMemo, useReducer, useRef, useState } from 'react'\nimport classNames from 'classnames'\nimport { Pause, Play } from '@popmenu/web-icons'\nimport { Grow, Slider, useTheme } from '@material-ui/core'\nimport { Box, Icon, IconButton, Typography, Paper, Popper } from '@popmenu/common-ui'\n\nimport { AudioPlayerProps } from './AudioPlayerProps'\nimport {\n audioPlayerReducer,\n AUDIO_PLAYER_EVENT_TYPES as EVENTS,\n VOLUME_CONTROL_STATES,\n formatTime,\n useVolumeIcon,\n setupAudioRef,\n initialAudioPlayerState,\n PLAYBACK_STATES,\n} from './util'\n\nconst getPlaybackIcon = (status: PLAYBACK_STATES) => {\n let icon\n switch (status) {\n case PLAYBACK_STATES.PAUSED:\n icon = Play\n break\n case PLAYBACK_STATES.PLAYING:\n icon = Pause\n break\n case PLAYBACK_STATES.NONE:\n icon = Play\n break\n default:\n break\n }\n return icon\n}\n\nexport const AudioPlayer: FC<AudioPlayerProps> = (props) => {\n const { src, classes = {} } = props\n const volumeRef = useRef<HTMLButtonElement>(null)\n const audioRef = useRef<HTMLAudioElement>(null)\n const { spacing } = useTheme()\n const [disableRipple, setDisableRipple] = useState(false)\n const [state, send] = useReducer(audioPlayerReducer, {\n ...initialAudioPlayerState,\n context: { ...initialAudioPlayerState.context, audioRef },\n })\n useEffect(setupAudioRef({ audioRef, send }), [audioRef])\n const PlaybackIcon = getPlaybackIcon(state.playback)\n const VolumeIcon = useMemo(() => useVolumeIcon(state), [state.context.volume, state.context.audioRef.current?.muted])\n const togglePlayback = () => send({ type: EVENTS.TOGGLE_PLAYBACK })\n const toggleVolumeControl = () => send({ type: EVENTS.TOGGLE_VOLUME_CONTROL })\n const toggleMute = () => send({ type: EVENTS.TOGGLE_MUTE })\n const setTime = (_e: never, time: number) => send({ type: EVENTS.SET_TIME, context: { time } })\n const setVolume = (_e: never, volume: number) => send({ type: EVENTS.VOLUME_CHANGE, context: { volume } })\n\n return (\n <Box display=\"flex\" alignItems=\"center\" gridGap={spacing(1)} className={classNames([classes.root])}>\n <audio ref={audioRef} src={src} />\n <Box>\n <IconButton\n {...(classes.playbackToggle && { classes: { root: classes.playbackToggle } })}\n aria-label={state.context.playbackButtonLabel}\n disabled={audioRef.current?.networkState === 2}\n onClick={togglePlayback}\n >\n <Icon icon={PlaybackIcon} />\n </IconButton>\n <IconButton\n {...(classes.volumeToggle && { classes: { root: classes.volumeToggle } })}\n aria-label={state.context.volumeButtonLabel}\n ref={volumeRef}\n onClick={toggleMute}\n onMouseEnter={toggleVolumeControl}\n onMouseLeave={toggleVolumeControl}\n disableRipple={disableRipple}\n >\n <Icon icon={VolumeIcon} />\n <Popper\n onClick={(e) => e.stopPropagation()}\n onMouseEnter={() => setDisableRipple(true)}\n onMouseLeave={() => setDisableRipple(false)}\n open={state.volumeControls === VOLUME_CONTROL_STATES.SHOW}\n anchorEl={() => volumeRef.current as HTMLButtonElement}\n transition={true}\n placement=\"top\"\n className={classNames([classes.volumeSlider])}\n >\n {({ TransitionProps }) => (\n <Grow {...TransitionProps}>\n <Paper elevation={1}>\n <Box py={1} height={80}>\n <Slider\n color=\"secondary\"\n orientation=\"vertical\"\n value={state.context.volume}\n onChange={setVolume}\n max={1}\n step={0.01}\n />\n </Box>\n </Paper>\n </Grow>\n )}\n </Popper>\n </IconButton>\n </Box>\n <Box display=\"flex\" flexGrow={1} alignItems=\"center\" gridGap={spacing(1)}>\n <Box flexBasis={60} flexShrink={0}>\n <Typography {...(classes.playbackText && { classes: { root: classes.playbackText } })}>\n {formatTime(state.context.audioRef.current?.currentTime || 0)}\n </Typography>\n </Box>\n <Slider\n {...(classes.playbackSlider && { classes: { root: classes.playbackSlider } })}\n color=\"secondary\"\n value={state.context.audioRef.current?.currentTime || 0}\n max={state.context.audioRef.current?.duration || 1}\n onChange={setTime}\n disabled={state.playback === PLAYBACK_STATES.NONE}\n />\n <Box flexBasis={60} flexShrink={0} textAlign=\"end\">\n <Typography {...(classes.lengthText && { classes: { root: classes.lengthText } })}>\n {formatTime(state.context.audioRef.current?.duration || 0)}\n </Typography>\n </Box>\n </Box>\n </Box>\n )\n}\n"],"names":["EVENTS"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
declare type AudioPlayerClasses = 'root' | 'playbackToggle' | 'volumeToggle' | 'volumeSlider' | 'playbackSlider' | 'playbackText' | 'lengthText';
|
|
2
|
-
export interface AudioPlayerProps {
|
|
3
|
-
/** The URL of the audio to embed. */
|
|
4
|
-
src?: string;
|
|
5
|
-
/** style classes */
|
|
6
|
-
classes?: {
|
|
7
|
-
[Key in AudioPlayerClasses]?: string;
|
|
8
|
-
};
|
|
9
|
-
}
|
|
10
|
-
export {};
|
|
1
|
+
declare type AudioPlayerClasses = 'root' | 'playbackToggle' | 'volumeToggle' | 'volumeSlider' | 'playbackSlider' | 'playbackText' | 'lengthText';
|
|
2
|
+
export interface AudioPlayerProps {
|
|
3
|
+
/** The URL of the audio to embed. */
|
|
4
|
+
src?: string;
|
|
5
|
+
/** style classes */
|
|
6
|
+
classes?: {
|
|
7
|
+
[Key in AudioPlayerClasses]?: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { AudioPlayer } from './AudioPlayer';
|
|
2
|
-
export { AudioPlayerProps } from './AudioPlayerProps';
|
|
1
|
+
export { AudioPlayer } from './AudioPlayer';
|
|
2
|
+
export { AudioPlayerProps } from './AudioPlayerProps';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { PLAYBACK_STATES, CONTROL_LABELS, AudioPlayerState, AudioPlayerEvent, VOLUME_CONTROL_STATES } from './types';
|
|
2
|
-
export declare const initialAudioPlayerState: {
|
|
3
|
-
playback: PLAYBACK_STATES;
|
|
4
|
-
volumeControls: VOLUME_CONTROL_STATES;
|
|
5
|
-
context: {
|
|
6
|
-
volume: number;
|
|
7
|
-
playbackButtonLabel: CONTROL_LABELS;
|
|
8
|
-
volumeButtonLabel: CONTROL_LABELS;
|
|
9
|
-
};
|
|
10
|
-
};
|
|
11
|
-
export declare const audioPlayerReducer: (state: AudioPlayerState, event: AudioPlayerEvent) => AudioPlayerState;
|
|
1
|
+
import { PLAYBACK_STATES, CONTROL_LABELS, AudioPlayerState, AudioPlayerEvent, VOLUME_CONTROL_STATES } from './types';
|
|
2
|
+
export declare const initialAudioPlayerState: {
|
|
3
|
+
playback: PLAYBACK_STATES;
|
|
4
|
+
volumeControls: VOLUME_CONTROL_STATES;
|
|
5
|
+
context: {
|
|
6
|
+
volume: number;
|
|
7
|
+
playbackButtonLabel: CONTROL_LABELS;
|
|
8
|
+
volumeButtonLabel: CONTROL_LABELS;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export declare const audioPlayerReducer: (state: AudioPlayerState, event: AudioPlayerEvent) => AudioPlayerState;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { __assign } from 'tslib';
|
|
2
|
+
import { CONTROL_LABELS, VOLUME_CONTROL_STATES, PLAYBACK_STATES, AUDIO_PLAYER_EVENT_TYPES } from './types.js';
|
|
3
|
+
|
|
4
|
+
var initialAudioPlayerState = {
|
|
5
|
+
playback: PLAYBACK_STATES.NONE,
|
|
6
|
+
volumeControls: VOLUME_CONTROL_STATES.HIDE,
|
|
7
|
+
context: {
|
|
8
|
+
volume: 100,
|
|
9
|
+
playbackButtonLabel: CONTROL_LABELS.PLAY,
|
|
10
|
+
volumeButtonLabel: CONTROL_LABELS.MUTE,
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
var getPlayback = function (_a) {
|
|
14
|
+
var audio = _a.current;
|
|
15
|
+
var playback = PLAYBACK_STATES.NONE;
|
|
16
|
+
if (audio) {
|
|
17
|
+
var paused = audio.paused, readyState = audio.readyState;
|
|
18
|
+
if (readyState === 0) {
|
|
19
|
+
playback = PLAYBACK_STATES.NONE;
|
|
20
|
+
}
|
|
21
|
+
else if (paused) {
|
|
22
|
+
playback = PLAYBACK_STATES.PAUSED;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
playback = PLAYBACK_STATES.PLAYING;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return playback;
|
|
29
|
+
};
|
|
30
|
+
var audioPlayerReducer = function (state, event) {
|
|
31
|
+
var _a, _b, _c;
|
|
32
|
+
var audioRef = state.context.audioRef;
|
|
33
|
+
var nextState = __assign({}, state);
|
|
34
|
+
switch (state.playback) {
|
|
35
|
+
case PLAYBACK_STATES.NONE:
|
|
36
|
+
if (event.type === AUDIO_PLAYER_EVENT_TYPES.CAN_PLAY) {
|
|
37
|
+
nextState.playback = getPlayback(audioRef);
|
|
38
|
+
return nextState;
|
|
39
|
+
}
|
|
40
|
+
// Required for iOS users. iOS prevents media from being loaded before user interaction.
|
|
41
|
+
if (event.type === AUDIO_PLAYER_EVENT_TYPES.TOGGLE_PLAYBACK) {
|
|
42
|
+
(_a = audioRef.current) === null || _a === void 0 ? void 0 : _a.play();
|
|
43
|
+
}
|
|
44
|
+
break;
|
|
45
|
+
case PLAYBACK_STATES.PAUSED:
|
|
46
|
+
if (event.type === AUDIO_PLAYER_EVENT_TYPES.TOGGLE_PLAYBACK) {
|
|
47
|
+
(_b = audioRef.current) === null || _b === void 0 ? void 0 : _b.play();
|
|
48
|
+
nextState.playback = getPlayback(audioRef);
|
|
49
|
+
nextState.context.playbackButtonLabel = CONTROL_LABELS.PAUSE;
|
|
50
|
+
return nextState;
|
|
51
|
+
}
|
|
52
|
+
break;
|
|
53
|
+
case PLAYBACK_STATES.PLAYING:
|
|
54
|
+
if (event.type === AUDIO_PLAYER_EVENT_TYPES.TOGGLE_PLAYBACK) {
|
|
55
|
+
(_c = audioRef.current) === null || _c === void 0 ? void 0 : _c.pause();
|
|
56
|
+
nextState.playback = getPlayback(audioRef);
|
|
57
|
+
nextState.context.playbackButtonLabel = CONTROL_LABELS.PLAY;
|
|
58
|
+
return nextState;
|
|
59
|
+
}
|
|
60
|
+
if (event.type === AUDIO_PLAYER_EVENT_TYPES.TIME_CHANGE) {
|
|
61
|
+
return nextState;
|
|
62
|
+
}
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
switch (state.volumeControls) {
|
|
66
|
+
case VOLUME_CONTROL_STATES.SHOW:
|
|
67
|
+
if (event.type === AUDIO_PLAYER_EVENT_TYPES.TOGGLE_VOLUME_CONTROL) {
|
|
68
|
+
nextState.volumeControls = VOLUME_CONTROL_STATES.HIDE;
|
|
69
|
+
return nextState;
|
|
70
|
+
}
|
|
71
|
+
if (event.type === AUDIO_PLAYER_EVENT_TYPES.VOLUME_CHANGE) {
|
|
72
|
+
if (nextState.context.volume !== event.context.volume) {
|
|
73
|
+
nextState.context.volume = event.context.volume;
|
|
74
|
+
if (audioRef.current) {
|
|
75
|
+
audioRef.current.volume = event.context.volume;
|
|
76
|
+
}
|
|
77
|
+
return nextState;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
break;
|
|
81
|
+
case VOLUME_CONTROL_STATES.HIDE:
|
|
82
|
+
if (event.type === AUDIO_PLAYER_EVENT_TYPES.TOGGLE_VOLUME_CONTROL) {
|
|
83
|
+
nextState.volumeControls = VOLUME_CONTROL_STATES.SHOW;
|
|
84
|
+
return nextState;
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
switch (event.type) {
|
|
89
|
+
case AUDIO_PLAYER_EVENT_TYPES.TOGGLE_MUTE:
|
|
90
|
+
if (audioRef.current) {
|
|
91
|
+
audioRef.current.muted = !audioRef.current.muted;
|
|
92
|
+
return nextState;
|
|
93
|
+
}
|
|
94
|
+
break;
|
|
95
|
+
case AUDIO_PLAYER_EVENT_TYPES.SET_TIME:
|
|
96
|
+
if (audioRef.current) {
|
|
97
|
+
audioRef.current.currentTime = event.context.time;
|
|
98
|
+
return nextState;
|
|
99
|
+
}
|
|
100
|
+
break;
|
|
101
|
+
case AUDIO_PLAYER_EVENT_TYPES.RESET:
|
|
102
|
+
if (audioRef.current) {
|
|
103
|
+
audioRef.current.currentTime = 0;
|
|
104
|
+
nextState.playback = getPlayback(audioRef);
|
|
105
|
+
return nextState;
|
|
106
|
+
}
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
return state;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
export { audioPlayerReducer, initialAudioPlayerState };
|
|
113
|
+
//# sourceMappingURL=audioPlayerReducer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audioPlayerReducer.js","sources":["../../../../../src/components/AudioPlayer/util/audioPlayerReducer.ts"],"sourcesContent":["import { RefObject } from 'react'\nimport {\n AUDIO_PLAYER_EVENT_TYPES as EVENT_TYPES,\n PLAYBACK_STATES,\n CONTROL_LABELS,\n AudioPlayerState,\n AudioPlayerEvent,\n VOLUME_CONTROL_STATES,\n} from './types'\n\nexport const initialAudioPlayerState = {\n playback: PLAYBACK_STATES.NONE,\n volumeControls: VOLUME_CONTROL_STATES.HIDE,\n context: {\n volume: 100,\n playbackButtonLabel: CONTROL_LABELS.PLAY,\n volumeButtonLabel: CONTROL_LABELS.MUTE,\n },\n}\n\nconst getPlayback = ({ current: audio }: RefObject<HTMLAudioElement>): PLAYBACK_STATES => {\n let playback: PLAYBACK_STATES = PLAYBACK_STATES.NONE\n if (audio) {\n const { paused, readyState } = audio\n if (readyState === 0) {\n playback = PLAYBACK_STATES.NONE\n } else if (paused) {\n playback = PLAYBACK_STATES.PAUSED\n } else {\n playback = PLAYBACK_STATES.PLAYING\n }\n }\n return playback\n}\n\nexport const audioPlayerReducer = (state: AudioPlayerState, event: AudioPlayerEvent): AudioPlayerState => {\n const { audioRef } = state.context\n const nextState: AudioPlayerState = { ...state }\n switch (state.playback) {\n case PLAYBACK_STATES.NONE:\n if (event.type === EVENT_TYPES.CAN_PLAY) {\n nextState.playback = getPlayback(audioRef)\n return nextState\n }\n // Required for iOS users. iOS prevents media from being loaded before user interaction.\n if (event.type === EVENT_TYPES.TOGGLE_PLAYBACK) {\n audioRef.current?.play()\n }\n break\n case PLAYBACK_STATES.PAUSED:\n if (event.type === EVENT_TYPES.TOGGLE_PLAYBACK) {\n audioRef.current?.play()\n nextState.playback = getPlayback(audioRef)\n nextState.context.playbackButtonLabel = CONTROL_LABELS.PAUSE\n return nextState\n }\n break\n case PLAYBACK_STATES.PLAYING:\n if (event.type === EVENT_TYPES.TOGGLE_PLAYBACK) {\n audioRef.current?.pause()\n nextState.playback = getPlayback(audioRef)\n nextState.context.playbackButtonLabel = CONTROL_LABELS.PLAY\n return nextState\n }\n if (event.type === EVENT_TYPES.TIME_CHANGE) {\n return nextState\n }\n break\n default:\n }\n switch (state.volumeControls) {\n case VOLUME_CONTROL_STATES.SHOW:\n if (event.type === EVENT_TYPES.TOGGLE_VOLUME_CONTROL) {\n nextState.volumeControls = VOLUME_CONTROL_STATES.HIDE\n return nextState\n }\n if (event.type === EVENT_TYPES.VOLUME_CHANGE) {\n if (nextState.context.volume !== event.context.volume) {\n nextState.context.volume = event.context.volume\n if (audioRef.current) {\n audioRef.current.volume = event.context.volume\n }\n return nextState\n }\n }\n break\n case VOLUME_CONTROL_STATES.HIDE:\n if (event.type === EVENT_TYPES.TOGGLE_VOLUME_CONTROL) {\n nextState.volumeControls = VOLUME_CONTROL_STATES.SHOW\n return nextState\n }\n break\n default:\n break\n }\n switch (event.type) {\n case EVENT_TYPES.TOGGLE_MUTE:\n if (audioRef.current) {\n audioRef.current.muted = !audioRef.current.muted\n return nextState\n }\n break\n case EVENT_TYPES.SET_TIME:\n if (audioRef.current) {\n audioRef.current.currentTime = event.context.time\n return nextState\n }\n break\n case EVENT_TYPES.RESET:\n if (audioRef.current) {\n audioRef.current.currentTime = 0\n nextState.playback = getPlayback(audioRef)\n return nextState\n }\n break\n default:\n break\n }\n return state\n}\n"],"names":["EVENT_TYPES"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const formatTime: (time: number, remaning?: boolean) => string;
|
|
1
|
+
export declare const formatTime: (time: number, remaning?: boolean) => string;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
var appendZero = function (num) { return (num < 10 ? "0" + num : num); };
|
|
2
|
+
var formatTime = function (time, remaning) {
|
|
3
|
+
if (remaning === void 0) { remaning = false; }
|
|
4
|
+
var dateTime = new Date(0, 0, 0, 0, 0, time, 0);
|
|
5
|
+
var dateTimeH = appendZero(dateTime.getHours());
|
|
6
|
+
var dateTimeM = appendZero(dateTime.getMinutes());
|
|
7
|
+
var dateTimeS = appendZero(dateTime.getSeconds());
|
|
8
|
+
var minus = remaning ? '-' : '';
|
|
9
|
+
return dateTimeH > 0 ? "" + minus + dateTimeH + ":" + dateTimeM + ":" + dateTimeS : "" + minus + dateTimeM + ":" + dateTimeS;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { formatTime };
|
|
13
|
+
//# sourceMappingURL=formatTime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatTime.js","sources":["../../../../../src/components/AudioPlayer/util/formatTime.ts"],"sourcesContent":["const appendZero = (num: number) => (num < 10 ? `0${num}` : num)\n\nexport const formatTime = (time: number, remaning = false): string => {\n const dateTime = new Date(0, 0, 0, 0, 0, time, 0)\n\n const dateTimeH = appendZero(dateTime.getHours())\n const dateTimeM = appendZero(dateTime.getMinutes())\n const dateTimeS = appendZero(dateTime.getSeconds())\n const minus = remaning ? '-' : ''\n\n return dateTimeH > 0 ? `${minus}${dateTimeH}:${dateTimeM}:${dateTimeS}` : `${minus}${dateTimeM}:${dateTimeS}`\n}\n"],"names":[],"mappings":"AAAA,IAAM,UAAU,GAAG,UAAC,GAAW,IAAK,QAAC,GAAG,GAAG,EAAE,GAAG,GAAA,GAAI,GAAK,GAAG,GAAG,EAA3B,EAA4B;AAEnD,IAAA,UAAU,GAAG,UAAC,IAAY,EAAE,QAAgB,EAAA;AAAhB,IAAA,IAAA,QAAA,KAAA,MAAA,EAAA,EAAA,QAAgB,GAAA,KAAA,CAAA;AACvD,IAAA,IAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD,IAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACjD,IAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACnD,IAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACnD,IAAM,KAAK,GAAG,QAAQ,GAAG,GAAG,GAAG,EAAE;IAEjC,OAAO,SAAS,GAAG,CAAC,GAAG,EAAA,GAAG,KAAK,GAAG,SAAS,GAAA,GAAA,GAAI,SAAS,GAAI,GAAA,GAAA,SAAW,GAAG,EAAA,GAAG,KAAK,GAAG,SAAS,GAAI,GAAA,GAAA,SAAW;AAC/G;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { audioPlayerReducer, initialAudioPlayerState } from './audioPlayerReducer';
|
|
2
|
-
export { useVolumeIcon } from './useVolumeIcon';
|
|
3
|
-
export { formatTime } from './formatTime';
|
|
4
|
-
export { setupAudioRef } from './setupAudioRef';
|
|
5
|
-
export * from './types';
|
|
1
|
+
export { audioPlayerReducer, initialAudioPlayerState } from './audioPlayerReducer';
|
|
2
|
+
export { useVolumeIcon } from './useVolumeIcon';
|
|
3
|
+
export { formatTime } from './formatTime';
|
|
4
|
+
export { setupAudioRef } from './setupAudioRef';
|
|
5
|
+
export * from './types';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { RefObject } from 'react';
|
|
2
|
-
import { AudioPlayerEvent } from './types';
|
|
3
|
-
interface Config {
|
|
4
|
-
audioRef: RefObject<HTMLAudioElement>;
|
|
5
|
-
send: (event: AudioPlayerEvent) => void;
|
|
6
|
-
}
|
|
7
|
-
export declare const setupAudioRef: (config: Config) => () => (() => void);
|
|
8
|
-
export {};
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
import { AudioPlayerEvent } from './types';
|
|
3
|
+
interface Config {
|
|
4
|
+
audioRef: RefObject<HTMLAudioElement>;
|
|
5
|
+
send: (event: AudioPlayerEvent) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const setupAudioRef: (config: Config) => () => (() => void);
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { AUDIO_PLAYER_EVENT_TYPES } from './types.js';
|
|
2
|
+
|
|
3
|
+
var setupAudioRef = function (config) { return function () {
|
|
4
|
+
var _a, _b, _c, _d;
|
|
5
|
+
var audioRef = config.audioRef, send = config.send;
|
|
6
|
+
var handleDurationChange = function (event) {
|
|
7
|
+
var duration = event.target.duration;
|
|
8
|
+
send({ type: AUDIO_PLAYER_EVENT_TYPES.DURATION_CHANGE, context: { duration: duration } });
|
|
9
|
+
};
|
|
10
|
+
var handleTimeUpdate = function (event) {
|
|
11
|
+
var currentTime = event.target.currentTime;
|
|
12
|
+
send({ type: AUDIO_PLAYER_EVENT_TYPES.TIME_CHANGE, context: { currentTime: currentTime } });
|
|
13
|
+
};
|
|
14
|
+
var handleCanPlay = function () {
|
|
15
|
+
send({ type: AUDIO_PLAYER_EVENT_TYPES.CAN_PLAY });
|
|
16
|
+
};
|
|
17
|
+
var handleEnded = function () {
|
|
18
|
+
send({ type: AUDIO_PLAYER_EVENT_TYPES.RESET });
|
|
19
|
+
};
|
|
20
|
+
(_a = audioRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener('durationchange', handleDurationChange);
|
|
21
|
+
(_b = audioRef.current) === null || _b === void 0 ? void 0 : _b.addEventListener('timeupdate', handleTimeUpdate);
|
|
22
|
+
(_c = audioRef.current) === null || _c === void 0 ? void 0 : _c.addEventListener('canplay', handleCanPlay);
|
|
23
|
+
(_d = audioRef.current) === null || _d === void 0 ? void 0 : _d.addEventListener('ended', handleEnded);
|
|
24
|
+
return function () {
|
|
25
|
+
var _a, _b, _c, _d;
|
|
26
|
+
(_a = audioRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener('durationchange', handleDurationChange);
|
|
27
|
+
(_b = audioRef.current) === null || _b === void 0 ? void 0 : _b.removeEventListener('timeupdate', handleTimeUpdate);
|
|
28
|
+
(_c = audioRef.current) === null || _c === void 0 ? void 0 : _c.removeEventListener('canplay', handleCanPlay);
|
|
29
|
+
(_d = audioRef.current) === null || _d === void 0 ? void 0 : _d.removeEventListener('ended', handleEnded);
|
|
30
|
+
};
|
|
31
|
+
}; };
|
|
32
|
+
|
|
33
|
+
export { setupAudioRef };
|
|
34
|
+
//# sourceMappingURL=setupAudioRef.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setupAudioRef.js","sources":["../../../../../src/components/AudioPlayer/util/setupAudioRef.ts"],"sourcesContent":["import { RefObject } from 'react'\nimport { AudioPlayerEvent, AUDIO_PLAYER_EVENT_TYPES } from './types'\n\ninterface Config {\n audioRef: RefObject<HTMLAudioElement>\n send: (event: AudioPlayerEvent) => void\n}\n\ntype EventHandler = (event: Event) => void\n\nexport const setupAudioRef = (config: Config) => (): (() => void) => {\n const { audioRef, send } = config\n const handleDurationChange = (event: Event) => {\n const { duration } = event.target as EventTarget & HTMLMediaElement\n send({ type: AUDIO_PLAYER_EVENT_TYPES.DURATION_CHANGE, context: { duration } })\n }\n const handleTimeUpdate = (event: Event) => {\n const { currentTime } = event.target as EventTarget & BaseAudioContext\n send({ type: AUDIO_PLAYER_EVENT_TYPES.TIME_CHANGE, context: { currentTime } })\n }\n const handleCanPlay: EventHandler = () => {\n send({ type: AUDIO_PLAYER_EVENT_TYPES.CAN_PLAY })\n }\n const handleEnded: EventHandler = () => {\n send({ type: AUDIO_PLAYER_EVENT_TYPES.RESET })\n }\n audioRef.current?.addEventListener('durationchange', handleDurationChange)\n audioRef.current?.addEventListener('timeupdate', handleTimeUpdate)\n audioRef.current?.addEventListener('canplay', handleCanPlay)\n audioRef.current?.addEventListener('ended', handleEnded)\n return () => {\n audioRef.current?.removeEventListener('durationchange', handleDurationChange)\n audioRef.current?.removeEventListener('timeupdate', handleTimeUpdate)\n audioRef.current?.removeEventListener('canplay', handleCanPlay)\n audioRef.current?.removeEventListener('ended', handleEnded)\n }\n}\n"],"names":[],"mappings":";;AAUa,IAAA,aAAa,GAAG,UAAC,MAAc,IAAK,OAAA,YAAA;;IACvC,IAAA,QAAQ,GAAW,MAAM,CAAA,QAAjB,EAAE,IAAI,GAAK,MAAM,CAAA,IAAX;IACtB,IAAM,oBAAoB,GAAG,UAAC,KAAY,EAAA;AAChC,QAAA,IAAA,QAAQ,GAAK,KAAK,CAAC,MAAwC,SAAnD;AAChB,QAAA,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,CAAC,eAAe,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAA,QAAA,EAAE,EAAE,CAAC;AACjF,KAAC;IACD,IAAM,gBAAgB,GAAG,UAAC,KAAY,EAAA;AAC5B,QAAA,IAAA,WAAW,GAAK,KAAK,CAAC,MAAwC,YAAnD;AACnB,QAAA,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,WAAW,EAAA,WAAA,EAAE,EAAE,CAAC;AAChF,KAAC;AACD,IAAA,IAAM,aAAa,GAAiB,YAAA;QAClC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,CAAC,QAAQ,EAAE,CAAC;AACnD,KAAC;AACD,IAAA,IAAM,WAAW,GAAiB,YAAA;QAChC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,CAAC,KAAK,EAAE,CAAC;AAChD,KAAC;IACD,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,gBAAgB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;IAC1E,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,CAAC;IAClE,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,gBAAgB,CAAC,SAAS,EAAE,aAAa,CAAC;IAC5D,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,gBAAgB,CAAC,OAAO,EAAE,WAAW,CAAC;IACxD,OAAO,YAAA;;QACL,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,mBAAmB,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;QAC7E,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,mBAAmB,CAAC,YAAY,EAAE,gBAAgB,CAAC;QACrE,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,mBAAmB,CAAC,SAAS,EAAE,aAAa,CAAC;QAC/D,CAAA,EAAA,GAAA,QAAQ,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC;AAC7D,KAAC;AACH,CAAC,CAAA;;;;"}
|
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
import { RefObject } from 'react';
|
|
2
|
-
export declare enum AUDIO_PLAYER_EVENT_TYPES {
|
|
3
|
-
TOGGLE_PLAYBACK = "TOGGLE_PLAYBACK",
|
|
4
|
-
TOGGLE_VOLUME_CONTROL = "TOGGLE_VOLUME_CONTROL",
|
|
5
|
-
TOGGLE_MUTE = "TOGGLE_MUTE",
|
|
6
|
-
VOLUME_CHANGE = "VOLUME_CHANGE",
|
|
7
|
-
TIME_CHANGE = "TIME_CHANGE",
|
|
8
|
-
DURATION_CHANGE = "DURATION_CHANGE",
|
|
9
|
-
SET_TIME = "SET_TIME",
|
|
10
|
-
CAN_PLAY = "CAN_PLAY",
|
|
11
|
-
RESET = "RESET"
|
|
12
|
-
}
|
|
13
|
-
interface SetVolumeEvent {
|
|
14
|
-
type: AUDIO_PLAYER_EVENT_TYPES.VOLUME_CHANGE;
|
|
15
|
-
context: Pick<AudioPlayerExtendState, 'volume'>;
|
|
16
|
-
}
|
|
17
|
-
interface TogglePlaybackEvent {
|
|
18
|
-
type: AUDIO_PLAYER_EVENT_TYPES.TOGGLE_PLAYBACK;
|
|
19
|
-
}
|
|
20
|
-
interface ToggleVolumeControlEvent {
|
|
21
|
-
type: AUDIO_PLAYER_EVENT_TYPES.TOGGLE_VOLUME_CONTROL;
|
|
22
|
-
}
|
|
23
|
-
interface TimeChangeEvent {
|
|
24
|
-
type: AUDIO_PLAYER_EVENT_TYPES.TIME_CHANGE;
|
|
25
|
-
context: {
|
|
26
|
-
currentTime: number;
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
interface DurationChangeEvent {
|
|
30
|
-
type: AUDIO_PLAYER_EVENT_TYPES.DURATION_CHANGE;
|
|
31
|
-
context: {
|
|
32
|
-
duration: number;
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
interface ToggleMuteEvent {
|
|
36
|
-
type: AUDIO_PLAYER_EVENT_TYPES.TOGGLE_MUTE;
|
|
37
|
-
}
|
|
38
|
-
interface SetTimeEvent {
|
|
39
|
-
type: AUDIO_PLAYER_EVENT_TYPES.SET_TIME;
|
|
40
|
-
context: {
|
|
41
|
-
time: number;
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
interface CanPlayEvent {
|
|
45
|
-
type: AUDIO_PLAYER_EVENT_TYPES.CAN_PLAY;
|
|
46
|
-
}
|
|
47
|
-
interface ResetEvent {
|
|
48
|
-
type: AUDIO_PLAYER_EVENT_TYPES.RESET;
|
|
49
|
-
}
|
|
50
|
-
export declare type AudioPlayerEvent = TogglePlaybackEvent | ToggleVolumeControlEvent | SetVolumeEvent | TimeChangeEvent | DurationChangeEvent | ToggleMuteEvent | SetTimeEvent | CanPlayEvent | ResetEvent;
|
|
51
|
-
export declare enum PLAYBACK_STATES {
|
|
52
|
-
NONE = "NONE",
|
|
53
|
-
PAUSED = "PAUSED",
|
|
54
|
-
PLAYING = "PLAYING"
|
|
55
|
-
}
|
|
56
|
-
export declare enum CONTROL_LABELS {
|
|
57
|
-
PAUSE = "PAUSE",
|
|
58
|
-
PLAY = "PLAY",
|
|
59
|
-
MUTE = "MUTE",
|
|
60
|
-
UNMUTE = "UNMUTE"
|
|
61
|
-
}
|
|
62
|
-
export declare enum VOLUME_CONTROL_STATES {
|
|
63
|
-
SHOW = "SHOW",
|
|
64
|
-
HIDE = "HIDE"
|
|
65
|
-
}
|
|
66
|
-
export interface AudioPlayerExtendState {
|
|
67
|
-
volume: number;
|
|
68
|
-
audioRef: RefObject<HTMLAudioElement>;
|
|
69
|
-
playbackButtonLabel: CONTROL_LABELS;
|
|
70
|
-
volumeButtonLabel: CONTROL_LABELS;
|
|
71
|
-
}
|
|
72
|
-
export interface AudioPlayerState {
|
|
73
|
-
playback: PLAYBACK_STATES;
|
|
74
|
-
volumeControls: VOLUME_CONTROL_STATES;
|
|
75
|
-
context: AudioPlayerExtendState;
|
|
76
|
-
}
|
|
77
|
-
export {};
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
export declare enum AUDIO_PLAYER_EVENT_TYPES {
|
|
3
|
+
TOGGLE_PLAYBACK = "TOGGLE_PLAYBACK",
|
|
4
|
+
TOGGLE_VOLUME_CONTROL = "TOGGLE_VOLUME_CONTROL",
|
|
5
|
+
TOGGLE_MUTE = "TOGGLE_MUTE",
|
|
6
|
+
VOLUME_CHANGE = "VOLUME_CHANGE",
|
|
7
|
+
TIME_CHANGE = "TIME_CHANGE",
|
|
8
|
+
DURATION_CHANGE = "DURATION_CHANGE",
|
|
9
|
+
SET_TIME = "SET_TIME",
|
|
10
|
+
CAN_PLAY = "CAN_PLAY",
|
|
11
|
+
RESET = "RESET"
|
|
12
|
+
}
|
|
13
|
+
interface SetVolumeEvent {
|
|
14
|
+
type: AUDIO_PLAYER_EVENT_TYPES.VOLUME_CHANGE;
|
|
15
|
+
context: Pick<AudioPlayerExtendState, 'volume'>;
|
|
16
|
+
}
|
|
17
|
+
interface TogglePlaybackEvent {
|
|
18
|
+
type: AUDIO_PLAYER_EVENT_TYPES.TOGGLE_PLAYBACK;
|
|
19
|
+
}
|
|
20
|
+
interface ToggleVolumeControlEvent {
|
|
21
|
+
type: AUDIO_PLAYER_EVENT_TYPES.TOGGLE_VOLUME_CONTROL;
|
|
22
|
+
}
|
|
23
|
+
interface TimeChangeEvent {
|
|
24
|
+
type: AUDIO_PLAYER_EVENT_TYPES.TIME_CHANGE;
|
|
25
|
+
context: {
|
|
26
|
+
currentTime: number;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
interface DurationChangeEvent {
|
|
30
|
+
type: AUDIO_PLAYER_EVENT_TYPES.DURATION_CHANGE;
|
|
31
|
+
context: {
|
|
32
|
+
duration: number;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
interface ToggleMuteEvent {
|
|
36
|
+
type: AUDIO_PLAYER_EVENT_TYPES.TOGGLE_MUTE;
|
|
37
|
+
}
|
|
38
|
+
interface SetTimeEvent {
|
|
39
|
+
type: AUDIO_PLAYER_EVENT_TYPES.SET_TIME;
|
|
40
|
+
context: {
|
|
41
|
+
time: number;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
interface CanPlayEvent {
|
|
45
|
+
type: AUDIO_PLAYER_EVENT_TYPES.CAN_PLAY;
|
|
46
|
+
}
|
|
47
|
+
interface ResetEvent {
|
|
48
|
+
type: AUDIO_PLAYER_EVENT_TYPES.RESET;
|
|
49
|
+
}
|
|
50
|
+
export declare type AudioPlayerEvent = TogglePlaybackEvent | ToggleVolumeControlEvent | SetVolumeEvent | TimeChangeEvent | DurationChangeEvent | ToggleMuteEvent | SetTimeEvent | CanPlayEvent | ResetEvent;
|
|
51
|
+
export declare enum PLAYBACK_STATES {
|
|
52
|
+
NONE = "NONE",
|
|
53
|
+
PAUSED = "PAUSED",
|
|
54
|
+
PLAYING = "PLAYING"
|
|
55
|
+
}
|
|
56
|
+
export declare enum CONTROL_LABELS {
|
|
57
|
+
PAUSE = "PAUSE",
|
|
58
|
+
PLAY = "PLAY",
|
|
59
|
+
MUTE = "MUTE",
|
|
60
|
+
UNMUTE = "UNMUTE"
|
|
61
|
+
}
|
|
62
|
+
export declare enum VOLUME_CONTROL_STATES {
|
|
63
|
+
SHOW = "SHOW",
|
|
64
|
+
HIDE = "HIDE"
|
|
65
|
+
}
|
|
66
|
+
export interface AudioPlayerExtendState {
|
|
67
|
+
volume: number;
|
|
68
|
+
audioRef: RefObject<HTMLAudioElement>;
|
|
69
|
+
playbackButtonLabel: CONTROL_LABELS;
|
|
70
|
+
volumeButtonLabel: CONTROL_LABELS;
|
|
71
|
+
}
|
|
72
|
+
export interface AudioPlayerState {
|
|
73
|
+
playback: PLAYBACK_STATES;
|
|
74
|
+
volumeControls: VOLUME_CONTROL_STATES;
|
|
75
|
+
context: AudioPlayerExtendState;
|
|
76
|
+
}
|
|
77
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
var AUDIO_PLAYER_EVENT_TYPES;
|
|
2
|
+
(function (AUDIO_PLAYER_EVENT_TYPES) {
|
|
3
|
+
AUDIO_PLAYER_EVENT_TYPES["TOGGLE_PLAYBACK"] = "TOGGLE_PLAYBACK";
|
|
4
|
+
AUDIO_PLAYER_EVENT_TYPES["TOGGLE_VOLUME_CONTROL"] = "TOGGLE_VOLUME_CONTROL";
|
|
5
|
+
AUDIO_PLAYER_EVENT_TYPES["TOGGLE_MUTE"] = "TOGGLE_MUTE";
|
|
6
|
+
AUDIO_PLAYER_EVENT_TYPES["VOLUME_CHANGE"] = "VOLUME_CHANGE";
|
|
7
|
+
AUDIO_PLAYER_EVENT_TYPES["TIME_CHANGE"] = "TIME_CHANGE";
|
|
8
|
+
AUDIO_PLAYER_EVENT_TYPES["DURATION_CHANGE"] = "DURATION_CHANGE";
|
|
9
|
+
AUDIO_PLAYER_EVENT_TYPES["SET_TIME"] = "SET_TIME";
|
|
10
|
+
AUDIO_PLAYER_EVENT_TYPES["CAN_PLAY"] = "CAN_PLAY";
|
|
11
|
+
AUDIO_PLAYER_EVENT_TYPES["RESET"] = "RESET";
|
|
12
|
+
})(AUDIO_PLAYER_EVENT_TYPES || (AUDIO_PLAYER_EVENT_TYPES = {}));
|
|
13
|
+
var PLAYBACK_STATES;
|
|
14
|
+
(function (PLAYBACK_STATES) {
|
|
15
|
+
PLAYBACK_STATES["NONE"] = "NONE";
|
|
16
|
+
PLAYBACK_STATES["PAUSED"] = "PAUSED";
|
|
17
|
+
PLAYBACK_STATES["PLAYING"] = "PLAYING";
|
|
18
|
+
})(PLAYBACK_STATES || (PLAYBACK_STATES = {}));
|
|
19
|
+
var CONTROL_LABELS;
|
|
20
|
+
(function (CONTROL_LABELS) {
|
|
21
|
+
CONTROL_LABELS["PAUSE"] = "PAUSE";
|
|
22
|
+
CONTROL_LABELS["PLAY"] = "PLAY";
|
|
23
|
+
CONTROL_LABELS["MUTE"] = "MUTE";
|
|
24
|
+
CONTROL_LABELS["UNMUTE"] = "UNMUTE";
|
|
25
|
+
})(CONTROL_LABELS || (CONTROL_LABELS = {}));
|
|
26
|
+
var VOLUME_CONTROL_STATES;
|
|
27
|
+
(function (VOLUME_CONTROL_STATES) {
|
|
28
|
+
VOLUME_CONTROL_STATES["SHOW"] = "SHOW";
|
|
29
|
+
VOLUME_CONTROL_STATES["HIDE"] = "HIDE";
|
|
30
|
+
})(VOLUME_CONTROL_STATES || (VOLUME_CONTROL_STATES = {}));
|
|
31
|
+
|
|
32
|
+
export { AUDIO_PLAYER_EVENT_TYPES, CONTROL_LABELS, PLAYBACK_STATES, VOLUME_CONTROL_STATES };
|
|
33
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../../../src/components/AudioPlayer/util/types.ts"],"sourcesContent":["import { RefObject } from 'react'\n\nexport enum AUDIO_PLAYER_EVENT_TYPES {\n TOGGLE_PLAYBACK = 'TOGGLE_PLAYBACK',\n TOGGLE_VOLUME_CONTROL = 'TOGGLE_VOLUME_CONTROL',\n TOGGLE_MUTE = 'TOGGLE_MUTE',\n VOLUME_CHANGE = 'VOLUME_CHANGE',\n TIME_CHANGE = 'TIME_CHANGE',\n DURATION_CHANGE = 'DURATION_CHANGE',\n SET_TIME = 'SET_TIME',\n CAN_PLAY = 'CAN_PLAY',\n RESET = 'RESET',\n}\n\ninterface SetVolumeEvent {\n type: AUDIO_PLAYER_EVENT_TYPES.VOLUME_CHANGE\n context: Pick<AudioPlayerExtendState, 'volume'>\n}\ninterface TogglePlaybackEvent {\n type: AUDIO_PLAYER_EVENT_TYPES.TOGGLE_PLAYBACK\n}\ninterface ToggleVolumeControlEvent {\n type: AUDIO_PLAYER_EVENT_TYPES.TOGGLE_VOLUME_CONTROL\n}\ninterface TimeChangeEvent {\n type: AUDIO_PLAYER_EVENT_TYPES.TIME_CHANGE\n context: { currentTime: number }\n}\ninterface DurationChangeEvent {\n type: AUDIO_PLAYER_EVENT_TYPES.DURATION_CHANGE\n context: { duration: number }\n}\ninterface ToggleMuteEvent {\n type: AUDIO_PLAYER_EVENT_TYPES.TOGGLE_MUTE\n}\ninterface SetTimeEvent {\n type: AUDIO_PLAYER_EVENT_TYPES.SET_TIME\n context: { time: number }\n}\ninterface CanPlayEvent {\n type: AUDIO_PLAYER_EVENT_TYPES.CAN_PLAY\n}\ninterface ResetEvent {\n type: AUDIO_PLAYER_EVENT_TYPES.RESET\n}\n\nexport type AudioPlayerEvent =\n | TogglePlaybackEvent\n | ToggleVolumeControlEvent\n | SetVolumeEvent\n | TimeChangeEvent\n | DurationChangeEvent\n | ToggleMuteEvent\n | SetTimeEvent\n | CanPlayEvent\n | ResetEvent\n\nexport enum PLAYBACK_STATES {\n NONE = 'NONE',\n PAUSED = 'PAUSED',\n PLAYING = 'PLAYING',\n}\n\nexport enum CONTROL_LABELS {\n PAUSE = 'PAUSE',\n PLAY = 'PLAY',\n MUTE = 'MUTE',\n UNMUTE = 'UNMUTE',\n}\n\nexport enum VOLUME_CONTROL_STATES {\n SHOW = 'SHOW',\n HIDE = 'HIDE',\n}\n\nexport interface AudioPlayerExtendState {\n volume: number\n audioRef: RefObject<HTMLAudioElement>\n playbackButtonLabel: CONTROL_LABELS\n volumeButtonLabel: CONTROL_LABELS\n}\n\nexport interface AudioPlayerState {\n playback: PLAYBACK_STATES\n volumeControls: VOLUME_CONTROL_STATES\n context: AudioPlayerExtendState\n}\n"],"names":[],"mappings":"IAEY;AAAZ,CAAA,UAAY,wBAAwB,EAAA;AAClC,IAAA,wBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,wBAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,wBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,wBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,wBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,wBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,wBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,wBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,wBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAVW,wBAAwB,KAAxB,wBAAwB,GAUnC,EAAA,CAAA,CAAA;IA6CW;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACrB,CAAC,EAJW,eAAe,KAAf,eAAe,GAI1B,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EALW,cAAc,KAAd,cAAc,GAKzB,EAAA,CAAA,CAAA;IAEW;AAAZ,CAAA,UAAY,qBAAqB,EAAA;AAC/B,IAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,qBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,GAGhC,EAAA,CAAA,CAAA;;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { AudioPlayerState } from './types';
|
|
2
|
-
export declare const useVolumeIcon: (state: AudioPlayerState) => string;
|
|
1
|
+
import { AudioPlayerState } from './types';
|
|
2
|
+
export declare const useVolumeIcon: (state: AudioPlayerState) => string;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { VolumeUp, VolumeDown, VolumeMute, VolumeOff } from '@popmenu/web-icons';
|
|
2
|
+
|
|
3
|
+
var useVolumeIcon = function (state) {
|
|
4
|
+
var volumeIcon = VolumeUp;
|
|
5
|
+
if (state.context.volume >= 0.5) {
|
|
6
|
+
volumeIcon = VolumeUp;
|
|
7
|
+
}
|
|
8
|
+
else if (state.context.volume < 0.5 && state.context.volume > 0) {
|
|
9
|
+
volumeIcon = VolumeDown;
|
|
10
|
+
}
|
|
11
|
+
else if (state.context.volume === 0) {
|
|
12
|
+
volumeIcon = VolumeMute;
|
|
13
|
+
}
|
|
14
|
+
if (state.context.audioRef.current) {
|
|
15
|
+
if (state.context.audioRef.current.muted) {
|
|
16
|
+
volumeIcon = VolumeOff;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return volumeIcon;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export { useVolumeIcon };
|
|
23
|
+
//# sourceMappingURL=useVolumeIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVolumeIcon.js","sources":["../../../../../src/components/AudioPlayer/util/useVolumeIcon.ts"],"sourcesContent":["import { VolumeDown, VolumeMute, VolumeOff, VolumeUp } from '@popmenu/web-icons'\nimport { AudioPlayerState } from './types'\n\nexport const useVolumeIcon = (state: AudioPlayerState): string => {\n let volumeIcon = VolumeUp\n if (state.context.volume >= 0.5) {\n volumeIcon = VolumeUp\n } else if (state.context.volume < 0.5 && state.context.volume > 0) {\n volumeIcon = VolumeDown\n } else if (state.context.volume === 0) {\n volumeIcon = VolumeMute\n }\n if (state.context.audioRef.current) {\n if (state.context.audioRef.current.muted) {\n volumeIcon = VolumeOff\n }\n }\n return volumeIcon\n}\n"],"names":[],"mappings":";;AAGO,IAAM,aAAa,GAAG,UAAC,KAAuB,EAAA;IACnD,IAAI,UAAU,GAAG,QAAQ;AACzB,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE;QAC/B,UAAU,GAAG,QAAQ;AACtB;AAAM,SAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACjE,UAAU,GAAG,UAAU;AACxB;AAAM,SAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACrC,UAAU,GAAG,UAAU;AACxB;AACD,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE;QAClC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE;YACxC,UAAU,GAAG,SAAS;AACvB;AACF;AACD,IAAA,OAAO,UAAU;AACnB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { AudioPlayer, AudioPlayerProps } from './AudioPlayer';
|
|
1
|
+
export { AudioPlayer, AudioPlayerProps } from './AudioPlayer';
|