@popmenu/audio-player 0.59.0 → 0.60.0

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/index.es.js CHANGED
@@ -1016,7 +1016,7 @@ var getPlayback = function (_a) {
1016
1016
  return playback;
1017
1017
  };
1018
1018
  var audioPlayerReducer = function (state, event) {
1019
- var _a, _b;
1019
+ var _a, _b, _c;
1020
1020
  var audioRef = state.context.audioRef;
1021
1021
  var nextState = __assign$1({}, state);
1022
1022
  switch (state.playback) {
@@ -1025,10 +1025,14 @@ var audioPlayerReducer = function (state, event) {
1025
1025
  nextState.playback = getPlayback(audioRef);
1026
1026
  return nextState;
1027
1027
  }
1028
+ // Required for iOS users. iOS prevents media from being loaded before user interaction.
1029
+ if (event.type === AUDIO_PLAYER_EVENT_TYPES.TOGGLE_PLAYBACK) {
1030
+ (_a = audioRef.current) === null || _a === void 0 ? void 0 : _a.play();
1031
+ }
1028
1032
  break;
1029
1033
  case PLAYBACK_STATES.PAUSED:
1030
1034
  if (event.type === AUDIO_PLAYER_EVENT_TYPES.TOGGLE_PLAYBACK) {
1031
- (_a = audioRef.current) === null || _a === void 0 ? void 0 : _a.play();
1035
+ (_b = audioRef.current) === null || _b === void 0 ? void 0 : _b.play();
1032
1036
  nextState.playback = getPlayback(audioRef);
1033
1037
  nextState.context.playbackButtonLabel = CONTROL_LABELS.PAUSE;
1034
1038
  return nextState;
@@ -1036,7 +1040,7 @@ var audioPlayerReducer = function (state, event) {
1036
1040
  break;
1037
1041
  case PLAYBACK_STATES.PLAYING:
1038
1042
  if (event.type === AUDIO_PLAYER_EVENT_TYPES.TOGGLE_PLAYBACK) {
1039
- (_b = audioRef.current) === null || _b === void 0 ? void 0 : _b.pause();
1043
+ (_c = audioRef.current) === null || _c === void 0 ? void 0 : _c.pause();
1040
1044
  nextState.playback = getPlayback(audioRef);
1041
1045
  nextState.context.playbackButtonLabel = CONTROL_LABELS.PLAY;
1042
1046
  return nextState;
@@ -1153,16 +1157,31 @@ var setupAudioRef = function (config) { return function () {
1153
1157
  };
1154
1158
  }; };
1155
1159
 
1160
+ var getPlaybackIcon = function (status) {
1161
+ var icon;
1162
+ switch (status) {
1163
+ case PLAYBACK_STATES.PAUSED:
1164
+ icon = SvgPlay;
1165
+ break;
1166
+ case PLAYBACK_STATES.PLAYING:
1167
+ icon = SvgPause;
1168
+ break;
1169
+ case PLAYBACK_STATES.NONE:
1170
+ icon = SvgPlay;
1171
+ break;
1172
+ }
1173
+ return icon;
1174
+ };
1156
1175
  var AudioPlayer = function (props) {
1157
- var _a, _b, _c, _d, _f;
1158
- var src = props.src, _g = props.classes, classes = _g === void 0 ? {} : _g;
1176
+ var _a, _b, _c, _d, _f, _g;
1177
+ var src = props.src, _h = props.classes, classes = _h === void 0 ? {} : _h;
1159
1178
  var volumeRef = useRef(null);
1160
1179
  var audioRef = useRef(null);
1161
1180
  var spacing = useTheme$1().spacing;
1162
- var _h = useState(false), disableRipple = _h[0], setDisableRipple = _h[1];
1163
- var _j = useReducer(audioPlayerReducer, __assign$1(__assign$1({}, initialAudioPlayerState), { context: __assign$1(__assign$1({}, initialAudioPlayerState.context), { audioRef: audioRef }) })), state = _j[0], send = _j[1];
1181
+ var _j = useState(false), disableRipple = _j[0], setDisableRipple = _j[1];
1182
+ var _k = useReducer(audioPlayerReducer, __assign$1(__assign$1({}, initialAudioPlayerState), { context: __assign$1(__assign$1({}, initialAudioPlayerState.context), { audioRef: audioRef }) })), state = _k[0], send = _k[1];
1164
1183
  useEffect(setupAudioRef({ audioRef: audioRef, send: send }), [audioRef]);
1165
- var PlaybackIcon = state.playback !== PLAYBACK_STATES.PAUSED ? SvgPause : SvgPlay;
1184
+ var PlaybackIcon = getPlaybackIcon(state.playback);
1166
1185
  var VolumeIcon = useMemo(function () { return useVolumeIcon(state); }, [state.context.volume, (_a = state.context.audioRef.current) === null || _a === void 0 ? void 0 : _a.muted]);
1167
1186
  var togglePlayback = function () { return send({ type: AUDIO_PLAYER_EVENT_TYPES.TOGGLE_PLAYBACK }); };
1168
1187
  var toggleVolumeControl = function () { return send({ type: AUDIO_PLAYER_EVENT_TYPES.TOGGLE_VOLUME_CONTROL }); };
@@ -1172,7 +1191,7 @@ var AudioPlayer = function (props) {
1172
1191
  return (React__default.createElement(Box, { display: "flex", alignItems: "center", gridGap: spacing(1), className: classNames$1([classes.root]) },
1173
1192
  React__default.createElement("audio", { ref: audioRef, src: src }),
1174
1193
  React__default.createElement(Box, null,
1175
- React__default.createElement(IconButton, __assign$1({}, (classes.playbackToggle && { classes: { root: classes.playbackToggle } }), { "aria-label": state.context.playbackButtonLabel, disabled: state.playback === PLAYBACK_STATES.NONE, onClick: togglePlayback }),
1194
+ React__default.createElement(IconButton, __assign$1({}, (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 }),
1176
1195
  React__default.createElement(Icon, { icon: PlaybackIcon })),
1177
1196
  React__default.createElement(IconButton, __assign$1({}, (classes.volumeToggle && { classes: { root: classes.volumeToggle } }), { "aria-label": state.context.volumeButtonLabel, ref: volumeRef, onClick: toggleMute, onMouseEnter: toggleVolumeControl, onMouseLeave: toggleVolumeControl, disableRipple: disableRipple }),
1178
1197
  React__default.createElement(Icon, { icon: VolumeIcon }),
@@ -1185,10 +1204,10 @@ var AudioPlayer = function (props) {
1185
1204
  }))),
1186
1205
  React__default.createElement(Box, { display: "flex", flexGrow: 1, alignItems: "center", gridGap: spacing(1) },
1187
1206
  React__default.createElement(Box, { flexBasis: 60, flexShrink: 0 },
1188
- React__default.createElement(Typography, __assign$1({}, (classes.playbackText && { classes: { root: classes.playbackText } })), formatTime(((_b = state.context.audioRef.current) === null || _b === void 0 ? void 0 : _b.currentTime) || 0))),
1189
- React__default.createElement(Slider, __assign$1({}, (classes.playbackSlider && { classes: { root: classes.playbackSlider } }), { color: "secondary", value: ((_c = state.context.audioRef.current) === null || _c === void 0 ? void 0 : _c.currentTime) || 0, max: ((_d = state.context.audioRef.current) === null || _d === void 0 ? void 0 : _d.duration) || 1, onChange: setTime, disabled: state.playback === PLAYBACK_STATES.NONE })),
1207
+ React__default.createElement(Typography, __assign$1({}, (classes.playbackText && { classes: { root: classes.playbackText } })), formatTime(((_c = state.context.audioRef.current) === null || _c === void 0 ? void 0 : _c.currentTime) || 0))),
1208
+ React__default.createElement(Slider, __assign$1({}, (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 })),
1190
1209
  React__default.createElement(Box, { flexBasis: 60, flexShrink: 0, textAlign: "end" },
1191
- React__default.createElement(Typography, __assign$1({}, (classes.lengthText && { classes: { root: classes.lengthText } })), formatTime(((_f = state.context.audioRef.current) === null || _f === void 0 ? void 0 : _f.duration) || 0))))));
1210
+ React__default.createElement(Typography, __assign$1({}, (classes.lengthText && { classes: { root: classes.lengthText } })), formatTime(((_g = state.context.audioRef.current) === null || _g === void 0 ? void 0 : _g.duration) || 0))))));
1192
1211
  };
1193
1212
 
1194
1213
  export { AudioPlayer };