@micromag/screen-audio 0.3.147 → 0.3.152

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.
@@ -1 +1 @@
1
- .micromag-screen-audio-container{position:relative;width:100%;height:100%;overflow:hidden}.micromag-screen-audio-disabled.micromag-screen-audio-container{overflow:hidden;pointer-events:none}.micromag-screen-audio-hidden.micromag-screen-audio-container{display:none;visibility:hidden}.micromag-screen-audio-placeholder.micromag-screen-audio-container .micromag-screen-audio-content{position:relative;padding:6px}.micromag-screen-audio-container .micromag-screen-audio-empty{margin:5px auto;border:2px dashed #343434;color:#343434}.micromag-screen-audio-container .micromag-screen-audio-mediaControls{padding:10px 20px 20px}.micromag-screen-audio-container .micromag-screen-audio-audio{position:absolute;bottom:50%;left:0;width:100%;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%)}.micromag-screen-audio-container .micromag-screen-audio-bottomContent{position:absolute;bottom:0;left:0;width:100%}.micromag-screen-audio-container .micromag-screen-audio-empty{width:100%;height:100px;margin:0 auto}.micromag-screen-audio-container.micromag-screen-audio-isPreview{pointer-events:none}
1
+ .micromag-screen-audio-container{position:relative;width:100%;height:100%;overflow:hidden}.micromag-screen-audio-disabled.micromag-screen-audio-container{overflow:hidden;pointer-events:none}.micromag-screen-audio-hidden.micromag-screen-audio-container{display:none;visibility:hidden}.micromag-screen-audio-placeholder.micromag-screen-audio-container .micromag-screen-audio-content{position:relative;padding:6px}.micromag-screen-audio-container .micromag-screen-audio-empty{margin:5px auto;border:2px dashed #343434;color:#343434}.micromag-screen-audio-container .micromag-screen-audio-audio{position:absolute;bottom:50%;left:0;width:100%;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%)}.micromag-screen-audio-container .micromag-screen-audio-bottom{position:absolute;bottom:0;left:0;width:100%;-webkit-transition:padding .2s ease-out,-webkit-transform .2s ease-out;transition:padding .2s ease-out,-webkit-transform .2s ease-out;-o-transition:transform .2s ease-out,padding .2s ease-out;transition:transform .2s ease-out,padding .2s ease-out;transition:transform .2s ease-out,padding .2s ease-out,-webkit-transform .2s ease-out}.micromag-screen-audio-container .micromag-screen-audio-bottom>*{margin-bottom:10px}.micromag-screen-audio-container .micromag-screen-audio-bottom>:last-child{margin-bottom:0}.micromag-screen-audio-container .micromag-screen-audio-empty{width:100%;height:100px;margin:0 auto}.micromag-screen-audio-container.micromag-screen-audio-isPreview{pointer-events:none}
package/es/index.js CHANGED
@@ -4,11 +4,11 @@ import _objectSpread from '@babel/runtime/helpers/objectSpread2';
4
4
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
5
  import classNames from 'classnames';
6
6
  import PropTypes from 'prop-types';
7
- import React, { useState, useCallback, useRef, useEffect, useMemo } from 'react';
7
+ import React, { useState, useEffect, useCallback, useMemo } from 'react';
8
8
  import { PropTypes as PropTypes$1 } from '@micromag/core';
9
9
  import { ScreenElement, Transitions } from '@micromag/core/components';
10
- import { useScreenSize, useScreenRenderContext, useViewer } from '@micromag/core/contexts';
11
- import { useTrackScreenMedia, useLongPress } from '@micromag/core/hooks';
10
+ import { useScreenSize, useScreenRenderContext, useViewerContext, useViewerWebView, usePlaybackContext, usePlaybackMediaRef } from '@micromag/core/contexts';
11
+ import { useTrackScreenMedia } from '@micromag/core/hooks';
12
12
  import { isIos } from '@micromag/core/utils';
13
13
  import Audio from '@micromag/element-audio';
14
14
  import Background from '@micromag/element-background';
@@ -16,11 +16,10 @@ import CallToAction from '@micromag/element-call-to-action';
16
16
  import ClosedCaptions from '@micromag/element-closed-captions';
17
17
  import Container from '@micromag/element-container';
18
18
  import Layout, { Spacer } from '@micromag/element-layout';
19
- import MediaControls from '@micromag/element-media-controls';
20
19
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
21
20
  import { Audio as Audio$1, Container as Container$1 } from '@micromag/transforms/apple-news';
22
21
 
23
- var styles = {"container":"micromag-screen-audio-container","disabled":"micromag-screen-audio-disabled","hidden":"micromag-screen-audio-hidden","placeholder":"micromag-screen-audio-placeholder","content":"micromag-screen-audio-content","empty":"micromag-screen-audio-empty","mediaControls":"micromag-screen-audio-mediaControls","audio":"micromag-screen-audio-audio","bottomContent":"micromag-screen-audio-bottomContent","isPreview":"micromag-screen-audio-isPreview"};
22
+ var styles = {"container":"micromag-screen-audio-container","disabled":"micromag-screen-audio-disabled","hidden":"micromag-screen-audio-hidden","placeholder":"micromag-screen-audio-placeholder","content":"micromag-screen-audio-content","empty":"micromag-screen-audio-empty","audio":"micromag-screen-audio-audio","bottom":"micromag-screen-audio-bottom","isPreview":"micromag-screen-audio-isPreview"};
24
23
 
25
24
  var propTypes = {
26
25
  layout: PropTypes.oneOf(['middle']),
@@ -31,10 +30,8 @@ var propTypes = {
31
30
  current: PropTypes.bool,
32
31
  active: PropTypes.bool,
33
32
  transitions: PropTypes$1.transitions,
34
- getMediaRef: PropTypes.func,
33
+ mediaRef: PropTypes.func,
35
34
  showWave: PropTypes.bool,
36
- enableInteraction: PropTypes.func,
37
- disableInteraction: PropTypes.func,
38
35
  className: PropTypes.string
39
36
  };
40
37
  var defaultProps = {
@@ -46,10 +43,8 @@ var defaultProps = {
46
43
  current: true,
47
44
  active: true,
48
45
  transitions: null,
49
- getMediaRef: null,
46
+ mediaRef: null,
50
47
  showWave: false,
51
- enableInteraction: null,
52
- disableInteraction: null,
53
48
  className: null
54
49
  };
55
50
 
@@ -64,17 +59,13 @@ var AudioScreen = function AudioScreen(_ref) {
64
59
  current = _ref.current,
65
60
  active = _ref.active,
66
61
  transitions = _ref.transitions,
67
- getMediaRef = _ref.getMediaRef,
62
+ customMediaRef = _ref.mediaRef,
68
63
  showWave = _ref.showWave,
69
- enableInteraction = _ref.enableInteraction,
70
- disableInteraction = _ref.disableInteraction,
71
64
  className = _ref.className;
72
- var trackScreenMedia = useTrackScreenMedia('audio');
73
65
 
74
66
  var _useScreenSize = useScreenSize(),
75
67
  width = _useScreenSize.width,
76
68
  height = _useScreenSize.height,
77
- menuOverScreen = _useScreenSize.menuOverScreen,
78
69
  resolution = _useScreenSize.resolution;
79
70
 
80
71
  var _useScreenRenderConte = useScreenRenderContext(),
@@ -85,10 +76,15 @@ var AudioScreen = function AudioScreen(_ref) {
85
76
  isStatic = _useScreenRenderConte.isStatic,
86
77
  isCapture = _useScreenRenderConte.isCapture;
87
78
 
88
- var _useViewer = useViewer(),
89
- menuSize = _useViewer.menuSize;
79
+ var _useViewerContext = useViewerContext(),
80
+ viewerTopHeight = _useViewerContext.topHeight,
81
+ viewerBottomHeight = _useViewerContext.bottomHeight,
82
+ viewerBottomSidesWidth = _useViewerContext.bottomSidesWidth;
83
+
84
+ var _useViewerWebView = useViewerWebView(),
85
+ openWebView = _useViewerWebView.open;
90
86
 
91
- var hasCallToAction = callToAction !== null && callToAction.active === true;
87
+ var trackScreenMedia = useTrackScreenMedia('audio');
92
88
 
93
89
  var _useState = useState(isStatic || isPlaceholder),
94
90
  _useState2 = _slicedToArray(_useState, 2),
@@ -99,50 +95,75 @@ var AudioScreen = function AudioScreen(_ref) {
99
95
  var mediaShouldLoad = current || active;
100
96
  var transitionPlaying = current && ready;
101
97
  var transitionDisabled = isStatic || isCapture || isPlaceholder || isPreview || isEdit;
98
+
99
+ var _ref2 = callToAction || {},
100
+ _ref2$active = _ref2.active,
101
+ hasCallToAction = _ref2$active === void 0 ? false : _ref2$active;
102
+
102
103
  var hasAudio = audio !== null;
103
104
 
104
- var _ref2 = audio || {},
105
- _ref2$media = _ref2.media,
106
- audioMedia = _ref2$media === void 0 ? null : _ref2$media,
107
- _ref2$autoPlay = _ref2.autoPlay,
108
- autoPlay = _ref2$autoPlay === void 0 ? true : _ref2$autoPlay,
109
- _ref2$closedCaptions = _ref2.closedCaptions,
110
- closedCaptions = _ref2$closedCaptions === void 0 ? null : _ref2$closedCaptions,
111
- _ref2$withPlayPause = _ref2.withPlayPause,
112
- withPlayPause = _ref2$withPlayPause === void 0 ? false : _ref2$withPlayPause,
113
- _ref2$color = _ref2.color,
114
- color = _ref2$color === void 0 ? null : _ref2$color,
115
- _ref2$progressColor = _ref2.progressColor,
116
- progressColor = _ref2$progressColor === void 0 ? null : _ref2$progressColor;
117
-
118
- var _ref3 = audioMedia || {},
119
- _ref3$url = _ref3.url,
120
- audioUrl = _ref3$url === void 0 ? null : _ref3$url;
105
+ var _ref3 = audio || {},
106
+ _ref3$media = _ref3.media,
107
+ audioMedia = _ref3$media === void 0 ? null : _ref3$media,
108
+ _ref3$autoPlay = _ref3.autoPlay,
109
+ autoPlay = _ref3$autoPlay === void 0 ? true : _ref3$autoPlay,
110
+ _ref3$closedCaptions = _ref3.closedCaptions,
111
+ closedCaptions = _ref3$closedCaptions === void 0 ? null : _ref3$closedCaptions,
112
+ _ref3$withPlayPause = _ref3.withPlayPause,
113
+ withPlayPause = _ref3$withPlayPause === void 0 ? false : _ref3$withPlayPause,
114
+ _ref3$color = _ref3.color,
115
+ color = _ref3$color === void 0 ? null : _ref3$color,
116
+ _ref3$progressColor = _ref3.progressColor,
117
+ progressColor = _ref3$progressColor === void 0 ? null : _ref3$progressColor;
118
+
119
+ var _ref4 = audioMedia || {},
120
+ _ref4$url = _ref4.url,
121
+ audioUrl = _ref4$url === void 0 ? null : _ref4$url;
121
122
 
122
123
  var hasAudioUrl = audioUrl !== null;
123
124
  var finalAudio = hasAudio ? _objectSpread(_objectSpread({}, audio), {}, {
124
125
  autoPlay: !isPreview && !isStatic && !isCapture && autoPlay && current
125
126
  }) : null;
126
127
  var hasClosedCaptions = closedCaptions !== null;
127
- var onAudioReady = useCallback(function () {
128
- setReady(true);
129
- }, [setReady]);
130
- var apiRef = useRef();
131
128
 
132
- var _ref4 = apiRef.current || {},
133
- togglePlay = _ref4.togglePlay,
134
- toggleMute = _ref4.toggleMute,
135
- play = _ref4.play,
136
- pause = _ref4.pause,
137
- seek = _ref4.seek,
138
- _ref4$mediaRef = _ref4.mediaRef,
139
- apiMediaRef = _ref4$mediaRef === void 0 ? null : _ref4$mediaRef;
129
+ var _usePlaybackContext = usePlaybackContext(),
130
+ playing = _usePlaybackContext.playing,
131
+ muted = _usePlaybackContext.muted,
132
+ setControls = _usePlaybackContext.setControls,
133
+ setControlsTheme = _usePlaybackContext.setControlsTheme;
134
+ _usePlaybackContext.setMedia;
135
+ var setPlaying = _usePlaybackContext.setPlaying;
140
136
 
137
+ var mediaRef = usePlaybackMediaRef(current);
141
138
  useEffect(function () {
142
- if (apiMediaRef !== null && getMediaRef !== null) {
143
- getMediaRef(apiMediaRef.current);
139
+ if (!current) {
140
+ return function () {};
144
141
  }
145
- }, [apiMediaRef, getMediaRef]);
142
+
143
+ if (withPlayPause) {
144
+ setControls(true);
145
+ setControlsTheme({
146
+ color: color,
147
+ progressColor: progressColor
148
+ });
149
+ } else {
150
+ setControls(false);
151
+ }
152
+
153
+ return function () {
154
+ if (withPlayPause) {
155
+ setControls(false);
156
+ }
157
+ };
158
+ }, [current, withPlayPause, setControls, color, progressColor]);
159
+ useEffect(function () {
160
+ if (customMediaRef !== null) {
161
+ customMediaRef(mediaRef.current);
162
+ }
163
+ }, [mediaRef.current]);
164
+ var onAudioReady = useCallback(function () {
165
+ setReady(true);
166
+ }, [setReady]);
146
167
 
147
168
  var _useState3 = useState(null),
148
169
  _useState4 = _slicedToArray(_useState3, 2),
@@ -154,82 +175,39 @@ var AudioScreen = function AudioScreen(_ref) {
154
175
  duration = _useState6[0],
155
176
  setDuration = _useState6[1];
156
177
 
157
- var _useState7 = useState(false),
158
- _useState8 = _slicedToArray(_useState7, 2),
159
- playing = _useState8[0],
160
- setPlaying = _useState8[1];
161
-
162
- var _useState9 = useState(false),
163
- _useState10 = _slicedToArray(_useState9, 2),
164
- muted = _useState10[0],
165
- setMuted = _useState10[1];
166
-
167
178
  var isIOS = useMemo(function () {
168
179
  return isIos();
169
180
  }, [isIos]);
181
+ useEffect(function () {
182
+ if (current && autoPlay && !playing) {
183
+ setPlaying(true);
184
+ }
185
+ }, [current, autoPlay]);
170
186
  var onTimeUpdate = useCallback(function (time) {
171
187
  setCurrentTime(time);
172
188
  }, [setDuration, duration]);
173
189
  var onProgressStep = useCallback(function (step) {
174
190
  trackScreenMedia(audio, "progress_".concat(Math.round(step * 100, 10), "%"));
175
191
  }, [trackScreenMedia, audio]);
176
- var onDurationChanged = useCallback(function (dur) {
192
+ var onDurationChange = useCallback(function (dur) {
177
193
  setDuration(dur);
178
194
  }, [setDuration]);
179
195
  var onPlay = useCallback(function (_ref5) {
180
196
  var initial = _ref5.initial;
181
- setPlaying(true);
182
197
  trackScreenMedia(audio, initial ? 'play' : 'resume');
183
198
  }, [trackScreenMedia, audio]);
184
199
  var onPause = useCallback(function (_ref6) {
185
200
  var midway = _ref6.midway;
186
- setPlaying(false);
187
201
  trackScreenMedia(audio, midway ? 'pause' : 'ended');
188
202
  }, [trackScreenMedia, audio]);
189
- var onSeek = useCallback(function (e) {
190
- seek(e);
191
- play();
192
- }, [seek, play]);
193
- var onVolumeChanged = useCallback(function (isMuted) {
194
- setMuted(isMuted);
195
- trackScreenMedia(audio, isMuted ? 'mute' : 'unmute');
196
- }, [trackScreenMedia, audio]);
203
+ var onEnded = useCallback(function () {
204
+ setPlaying(false);
205
+ }, [setPlaying]);
197
206
  var onSeeked = useCallback(function (time) {
198
207
  if (time > 0) {
199
208
  trackScreenMedia(audio, 'seek');
200
209
  }
201
210
  }, [trackScreenMedia, audio]);
202
- var onToggleMute = useCallback(function () {
203
- if (muted && !playing) {
204
- play();
205
- }
206
-
207
- toggleMute();
208
- }, [muted, toggleMute]);
209
- useEffect(function () {
210
- if (!current && playing) {
211
- pause();
212
- }
213
- }, [playing, current]);
214
- var longPressBind = useLongPress({
215
- onLongPress: togglePlay
216
- });
217
- var cta = !isPlaceholder && hasCallToAction ? /*#__PURE__*/React.createElement("div", {
218
- style: {
219
- marginTop: -spacing / 2
220
- },
221
- key: "call-to-action"
222
- }, /*#__PURE__*/React.createElement(CallToAction, {
223
- callToAction: callToAction,
224
- animationDisabled: isPreview,
225
- focusable: current && isView,
226
- screenSize: {
227
- width: width,
228
- height: height
229
- },
230
- enableInteraction: enableInteraction,
231
- disableInteraction: disableInteraction
232
- })) : null;
233
211
  var elements = [/*#__PURE__*/React.createElement(Spacer, {
234
212
  key: "spacer-top"
235
213
  }), /*#__PURE__*/React.createElement(ScreenElement, {
@@ -249,7 +227,7 @@ var AudioScreen = function AudioScreen(_ref) {
249
227
  playing: transitionPlaying,
250
228
  disabled: transitionDisabled
251
229
  }, /*#__PURE__*/React.createElement(Audio, Object.assign({}, finalAudio, {
252
- ref: apiRef,
230
+ mediaRef: mediaRef,
253
231
  waveFake: isIOS || isPreview,
254
232
  waveProps: isPreview ? {
255
233
  sampleWidth: 10,
@@ -261,44 +239,46 @@ var AudioScreen = function AudioScreen(_ref) {
261
239
  backgroundColor: color,
262
240
  progressColor: progressColor
263
241
  },
242
+ paused: !current || !playing,
243
+ muted: muted,
264
244
  className: styles.audio,
265
245
  onReady: onAudioReady,
266
246
  onPlay: onPlay,
267
247
  onPause: onPause,
268
248
  onTimeUpdate: onTimeUpdate,
269
249
  onProgressStep: onProgressStep,
270
- onDurationChanged: onDurationChanged,
250
+ onDurationChange: onDurationChange,
271
251
  onSeeked: onSeeked,
272
- onVolumeChanged: onVolumeChanged,
273
- showWave: showWave
252
+ onEnded: onEnded,
253
+ withWave: showWave
274
254
  })))), /*#__PURE__*/React.createElement(Spacer, {
275
255
  key: "spacer-middle"
276
256
  }), !isPlaceholder ? /*#__PURE__*/React.createElement("div", {
277
- key: "controls",
278
- className: styles.bottomContent
257
+ key: "bottom",
258
+ className: styles.bottom,
259
+ style: {
260
+ transform: !isPreview ? "translate(0, -".concat(viewerBottomHeight, "px)") : null,
261
+ paddingLeft: Math.max(spacing / 2, viewerBottomSidesWidth),
262
+ paddingRight: Math.max(spacing / 2, viewerBottomSidesWidth),
263
+ paddingBottom: spacing / 2,
264
+ paddingTop: 0
265
+ }
279
266
  }, hasClosedCaptions && !isPreview && !isCapture && !isStatic ? /*#__PURE__*/React.createElement(ClosedCaptions, {
280
267
  className: styles.closedCaptions,
281
268
  media: closedCaptions,
282
269
  currentTime: currentTime
283
- }) : null, hasAudioUrl && (isView || isEdit) ? /*#__PURE__*/React.createElement(MediaControls, {
284
- className: styles.mediaControls,
285
- withControls: withPlayPause,
286
- playing: playing,
287
- muted: muted,
288
- onTogglePlay: togglePlay,
289
- onToggleMute: onToggleMute,
270
+ }) : null, hasCallToAction ? /*#__PURE__*/React.createElement(CallToAction, Object.assign({}, callToAction, {
271
+ className: styles.callToAction,
272
+ animationDisabled: isPreview,
290
273
  focusable: current && isView,
291
- withSeekBar: !showWave,
292
- duration: duration,
293
- currentTime: currentTime,
294
- onSeek: onSeek
295
- }) : null, cta) : null].filter(function (el) {
274
+ openWebView: openWebView
275
+ })) : null) : null].filter(function (el) {
296
276
  return el !== null;
297
277
  });
298
- return /*#__PURE__*/React.createElement("div", Object.assign({
278
+ return /*#__PURE__*/React.createElement("div", {
299
279
  className: classNames([styles.container, (_ref7 = {}, _defineProperty(_ref7, className, className !== null), _defineProperty(_ref7, styles.placeholder, isPlaceholder), _defineProperty(_ref7, styles.isPreview, isPreview), _ref7)]),
300
280
  "data-screen-ready": ready
301
- }, longPressBind), !isPlaceholder ? /*#__PURE__*/React.createElement(Background, {
281
+ }, !isPlaceholder ? /*#__PURE__*/React.createElement(Background, {
302
282
  background: background,
303
283
  width: width,
304
284
  height: height,
@@ -312,7 +292,7 @@ var AudioScreen = function AudioScreen(_ref) {
312
292
  fullscreen: true,
313
293
  style: !isPlaceholder ? {
314
294
  padding: spacing,
315
- paddingTop: (menuOverScreen && !isPreview ? menuSize : 0) + spacing
295
+ paddingTop: (!isPreview ? viewerTopHeight : 0) + spacing
316
296
  } : null
317
297
  }, elements)));
318
298
  };
package/lib/index.js CHANGED
@@ -20,7 +20,6 @@ var CallToAction = require('@micromag/element-call-to-action');
20
20
  var ClosedCaptions = require('@micromag/element-closed-captions');
21
21
  var Container = require('@micromag/element-container');
22
22
  var Layout = require('@micromag/element-layout');
23
- var MediaControls = require('@micromag/element-media-controls');
24
23
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
25
24
  var appleNews = require('@micromag/transforms/apple-news');
26
25
 
@@ -38,10 +37,9 @@ var CallToAction__default = /*#__PURE__*/_interopDefaultLegacy(CallToAction);
38
37
  var ClosedCaptions__default = /*#__PURE__*/_interopDefaultLegacy(ClosedCaptions);
39
38
  var Container__default = /*#__PURE__*/_interopDefaultLegacy(Container);
40
39
  var Layout__default = /*#__PURE__*/_interopDefaultLegacy(Layout);
41
- var MediaControls__default = /*#__PURE__*/_interopDefaultLegacy(MediaControls);
42
40
  var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
43
41
 
44
- var styles = {"container":"micromag-screen-audio-container","disabled":"micromag-screen-audio-disabled","hidden":"micromag-screen-audio-hidden","placeholder":"micromag-screen-audio-placeholder","content":"micromag-screen-audio-content","empty":"micromag-screen-audio-empty","mediaControls":"micromag-screen-audio-mediaControls","audio":"micromag-screen-audio-audio","bottomContent":"micromag-screen-audio-bottomContent","isPreview":"micromag-screen-audio-isPreview"};
42
+ var styles = {"container":"micromag-screen-audio-container","disabled":"micromag-screen-audio-disabled","hidden":"micromag-screen-audio-hidden","placeholder":"micromag-screen-audio-placeholder","content":"micromag-screen-audio-content","empty":"micromag-screen-audio-empty","audio":"micromag-screen-audio-audio","bottom":"micromag-screen-audio-bottom","isPreview":"micromag-screen-audio-isPreview"};
45
43
 
46
44
  var propTypes = {
47
45
  layout: PropTypes__default["default"].oneOf(['middle']),
@@ -52,10 +50,8 @@ var propTypes = {
52
50
  current: PropTypes__default["default"].bool,
53
51
  active: PropTypes__default["default"].bool,
54
52
  transitions: core.PropTypes.transitions,
55
- getMediaRef: PropTypes__default["default"].func,
53
+ mediaRef: PropTypes__default["default"].func,
56
54
  showWave: PropTypes__default["default"].bool,
57
- enableInteraction: PropTypes__default["default"].func,
58
- disableInteraction: PropTypes__default["default"].func,
59
55
  className: PropTypes__default["default"].string
60
56
  };
61
57
  var defaultProps = {
@@ -67,10 +63,8 @@ var defaultProps = {
67
63
  current: true,
68
64
  active: true,
69
65
  transitions: null,
70
- getMediaRef: null,
66
+ mediaRef: null,
71
67
  showWave: false,
72
- enableInteraction: null,
73
- disableInteraction: null,
74
68
  className: null
75
69
  };
76
70
 
@@ -85,17 +79,13 @@ var AudioScreen = function AudioScreen(_ref) {
85
79
  current = _ref.current,
86
80
  active = _ref.active,
87
81
  transitions = _ref.transitions,
88
- getMediaRef = _ref.getMediaRef,
82
+ customMediaRef = _ref.mediaRef,
89
83
  showWave = _ref.showWave,
90
- enableInteraction = _ref.enableInteraction,
91
- disableInteraction = _ref.disableInteraction,
92
84
  className = _ref.className;
93
- var trackScreenMedia = hooks.useTrackScreenMedia('audio');
94
85
 
95
86
  var _useScreenSize = contexts.useScreenSize(),
96
87
  width = _useScreenSize.width,
97
88
  height = _useScreenSize.height,
98
- menuOverScreen = _useScreenSize.menuOverScreen,
99
89
  resolution = _useScreenSize.resolution;
100
90
 
101
91
  var _useScreenRenderConte = contexts.useScreenRenderContext(),
@@ -106,10 +96,15 @@ var AudioScreen = function AudioScreen(_ref) {
106
96
  isStatic = _useScreenRenderConte.isStatic,
107
97
  isCapture = _useScreenRenderConte.isCapture;
108
98
 
109
- var _useViewer = contexts.useViewer(),
110
- menuSize = _useViewer.menuSize;
99
+ var _useViewerContext = contexts.useViewerContext(),
100
+ viewerTopHeight = _useViewerContext.topHeight,
101
+ viewerBottomHeight = _useViewerContext.bottomHeight,
102
+ viewerBottomSidesWidth = _useViewerContext.bottomSidesWidth;
103
+
104
+ var _useViewerWebView = contexts.useViewerWebView(),
105
+ openWebView = _useViewerWebView.open;
111
106
 
112
- var hasCallToAction = callToAction !== null && callToAction.active === true;
107
+ var trackScreenMedia = hooks.useTrackScreenMedia('audio');
113
108
 
114
109
  var _useState = React.useState(isStatic || isPlaceholder),
115
110
  _useState2 = _slicedToArray__default["default"](_useState, 2),
@@ -120,50 +115,75 @@ var AudioScreen = function AudioScreen(_ref) {
120
115
  var mediaShouldLoad = current || active;
121
116
  var transitionPlaying = current && ready;
122
117
  var transitionDisabled = isStatic || isCapture || isPlaceholder || isPreview || isEdit;
118
+
119
+ var _ref2 = callToAction || {},
120
+ _ref2$active = _ref2.active,
121
+ hasCallToAction = _ref2$active === void 0 ? false : _ref2$active;
122
+
123
123
  var hasAudio = audio !== null;
124
124
 
125
- var _ref2 = audio || {},
126
- _ref2$media = _ref2.media,
127
- audioMedia = _ref2$media === void 0 ? null : _ref2$media,
128
- _ref2$autoPlay = _ref2.autoPlay,
129
- autoPlay = _ref2$autoPlay === void 0 ? true : _ref2$autoPlay,
130
- _ref2$closedCaptions = _ref2.closedCaptions,
131
- closedCaptions = _ref2$closedCaptions === void 0 ? null : _ref2$closedCaptions,
132
- _ref2$withPlayPause = _ref2.withPlayPause,
133
- withPlayPause = _ref2$withPlayPause === void 0 ? false : _ref2$withPlayPause,
134
- _ref2$color = _ref2.color,
135
- color = _ref2$color === void 0 ? null : _ref2$color,
136
- _ref2$progressColor = _ref2.progressColor,
137
- progressColor = _ref2$progressColor === void 0 ? null : _ref2$progressColor;
138
-
139
- var _ref3 = audioMedia || {},
140
- _ref3$url = _ref3.url,
141
- audioUrl = _ref3$url === void 0 ? null : _ref3$url;
125
+ var _ref3 = audio || {},
126
+ _ref3$media = _ref3.media,
127
+ audioMedia = _ref3$media === void 0 ? null : _ref3$media,
128
+ _ref3$autoPlay = _ref3.autoPlay,
129
+ autoPlay = _ref3$autoPlay === void 0 ? true : _ref3$autoPlay,
130
+ _ref3$closedCaptions = _ref3.closedCaptions,
131
+ closedCaptions = _ref3$closedCaptions === void 0 ? null : _ref3$closedCaptions,
132
+ _ref3$withPlayPause = _ref3.withPlayPause,
133
+ withPlayPause = _ref3$withPlayPause === void 0 ? false : _ref3$withPlayPause,
134
+ _ref3$color = _ref3.color,
135
+ color = _ref3$color === void 0 ? null : _ref3$color,
136
+ _ref3$progressColor = _ref3.progressColor,
137
+ progressColor = _ref3$progressColor === void 0 ? null : _ref3$progressColor;
138
+
139
+ var _ref4 = audioMedia || {},
140
+ _ref4$url = _ref4.url,
141
+ audioUrl = _ref4$url === void 0 ? null : _ref4$url;
142
142
 
143
143
  var hasAudioUrl = audioUrl !== null;
144
144
  var finalAudio = hasAudio ? _objectSpread__default["default"](_objectSpread__default["default"]({}, audio), {}, {
145
145
  autoPlay: !isPreview && !isStatic && !isCapture && autoPlay && current
146
146
  }) : null;
147
147
  var hasClosedCaptions = closedCaptions !== null;
148
- var onAudioReady = React.useCallback(function () {
149
- setReady(true);
150
- }, [setReady]);
151
- var apiRef = React.useRef();
152
148
 
153
- var _ref4 = apiRef.current || {},
154
- togglePlay = _ref4.togglePlay,
155
- toggleMute = _ref4.toggleMute,
156
- play = _ref4.play,
157
- pause = _ref4.pause,
158
- seek = _ref4.seek,
159
- _ref4$mediaRef = _ref4.mediaRef,
160
- apiMediaRef = _ref4$mediaRef === void 0 ? null : _ref4$mediaRef;
149
+ var _usePlaybackContext = contexts.usePlaybackContext(),
150
+ playing = _usePlaybackContext.playing,
151
+ muted = _usePlaybackContext.muted,
152
+ setControls = _usePlaybackContext.setControls,
153
+ setControlsTheme = _usePlaybackContext.setControlsTheme;
154
+ _usePlaybackContext.setMedia;
155
+ var setPlaying = _usePlaybackContext.setPlaying;
161
156
 
157
+ var mediaRef = contexts.usePlaybackMediaRef(current);
162
158
  React.useEffect(function () {
163
- if (apiMediaRef !== null && getMediaRef !== null) {
164
- getMediaRef(apiMediaRef.current);
159
+ if (!current) {
160
+ return function () {};
165
161
  }
166
- }, [apiMediaRef, getMediaRef]);
162
+
163
+ if (withPlayPause) {
164
+ setControls(true);
165
+ setControlsTheme({
166
+ color: color,
167
+ progressColor: progressColor
168
+ });
169
+ } else {
170
+ setControls(false);
171
+ }
172
+
173
+ return function () {
174
+ if (withPlayPause) {
175
+ setControls(false);
176
+ }
177
+ };
178
+ }, [current, withPlayPause, setControls, color, progressColor]);
179
+ React.useEffect(function () {
180
+ if (customMediaRef !== null) {
181
+ customMediaRef(mediaRef.current);
182
+ }
183
+ }, [mediaRef.current]);
184
+ var onAudioReady = React.useCallback(function () {
185
+ setReady(true);
186
+ }, [setReady]);
167
187
 
168
188
  var _useState3 = React.useState(null),
169
189
  _useState4 = _slicedToArray__default["default"](_useState3, 2),
@@ -175,82 +195,39 @@ var AudioScreen = function AudioScreen(_ref) {
175
195
  duration = _useState6[0],
176
196
  setDuration = _useState6[1];
177
197
 
178
- var _useState7 = React.useState(false),
179
- _useState8 = _slicedToArray__default["default"](_useState7, 2),
180
- playing = _useState8[0],
181
- setPlaying = _useState8[1];
182
-
183
- var _useState9 = React.useState(false),
184
- _useState10 = _slicedToArray__default["default"](_useState9, 2),
185
- muted = _useState10[0],
186
- setMuted = _useState10[1];
187
-
188
198
  var isIOS = React.useMemo(function () {
189
199
  return utils.isIos();
190
200
  }, [utils.isIos]);
201
+ React.useEffect(function () {
202
+ if (current && autoPlay && !playing) {
203
+ setPlaying(true);
204
+ }
205
+ }, [current, autoPlay]);
191
206
  var onTimeUpdate = React.useCallback(function (time) {
192
207
  setCurrentTime(time);
193
208
  }, [setDuration, duration]);
194
209
  var onProgressStep = React.useCallback(function (step) {
195
210
  trackScreenMedia(audio, "progress_".concat(Math.round(step * 100, 10), "%"));
196
211
  }, [trackScreenMedia, audio]);
197
- var onDurationChanged = React.useCallback(function (dur) {
212
+ var onDurationChange = React.useCallback(function (dur) {
198
213
  setDuration(dur);
199
214
  }, [setDuration]);
200
215
  var onPlay = React.useCallback(function (_ref5) {
201
216
  var initial = _ref5.initial;
202
- setPlaying(true);
203
217
  trackScreenMedia(audio, initial ? 'play' : 'resume');
204
218
  }, [trackScreenMedia, audio]);
205
219
  var onPause = React.useCallback(function (_ref6) {
206
220
  var midway = _ref6.midway;
207
- setPlaying(false);
208
221
  trackScreenMedia(audio, midway ? 'pause' : 'ended');
209
222
  }, [trackScreenMedia, audio]);
210
- var onSeek = React.useCallback(function (e) {
211
- seek(e);
212
- play();
213
- }, [seek, play]);
214
- var onVolumeChanged = React.useCallback(function (isMuted) {
215
- setMuted(isMuted);
216
- trackScreenMedia(audio, isMuted ? 'mute' : 'unmute');
217
- }, [trackScreenMedia, audio]);
223
+ var onEnded = React.useCallback(function () {
224
+ setPlaying(false);
225
+ }, [setPlaying]);
218
226
  var onSeeked = React.useCallback(function (time) {
219
227
  if (time > 0) {
220
228
  trackScreenMedia(audio, 'seek');
221
229
  }
222
230
  }, [trackScreenMedia, audio]);
223
- var onToggleMute = React.useCallback(function () {
224
- if (muted && !playing) {
225
- play();
226
- }
227
-
228
- toggleMute();
229
- }, [muted, toggleMute]);
230
- React.useEffect(function () {
231
- if (!current && playing) {
232
- pause();
233
- }
234
- }, [playing, current]);
235
- var longPressBind = hooks.useLongPress({
236
- onLongPress: togglePlay
237
- });
238
- var cta = !isPlaceholder && hasCallToAction ? /*#__PURE__*/React__default["default"].createElement("div", {
239
- style: {
240
- marginTop: -spacing / 2
241
- },
242
- key: "call-to-action"
243
- }, /*#__PURE__*/React__default["default"].createElement(CallToAction__default["default"], {
244
- callToAction: callToAction,
245
- animationDisabled: isPreview,
246
- focusable: current && isView,
247
- screenSize: {
248
- width: width,
249
- height: height
250
- },
251
- enableInteraction: enableInteraction,
252
- disableInteraction: disableInteraction
253
- })) : null;
254
231
  var elements = [/*#__PURE__*/React__default["default"].createElement(Layout.Spacer, {
255
232
  key: "spacer-top"
256
233
  }), /*#__PURE__*/React__default["default"].createElement(components.ScreenElement, {
@@ -270,7 +247,7 @@ var AudioScreen = function AudioScreen(_ref) {
270
247
  playing: transitionPlaying,
271
248
  disabled: transitionDisabled
272
249
  }, /*#__PURE__*/React__default["default"].createElement(Audio__default["default"], Object.assign({}, finalAudio, {
273
- ref: apiRef,
250
+ mediaRef: mediaRef,
274
251
  waveFake: isIOS || isPreview,
275
252
  waveProps: isPreview ? {
276
253
  sampleWidth: 10,
@@ -282,44 +259,46 @@ var AudioScreen = function AudioScreen(_ref) {
282
259
  backgroundColor: color,
283
260
  progressColor: progressColor
284
261
  },
262
+ paused: !current || !playing,
263
+ muted: muted,
285
264
  className: styles.audio,
286
265
  onReady: onAudioReady,
287
266
  onPlay: onPlay,
288
267
  onPause: onPause,
289
268
  onTimeUpdate: onTimeUpdate,
290
269
  onProgressStep: onProgressStep,
291
- onDurationChanged: onDurationChanged,
270
+ onDurationChange: onDurationChange,
292
271
  onSeeked: onSeeked,
293
- onVolumeChanged: onVolumeChanged,
294
- showWave: showWave
272
+ onEnded: onEnded,
273
+ withWave: showWave
295
274
  })))), /*#__PURE__*/React__default["default"].createElement(Layout.Spacer, {
296
275
  key: "spacer-middle"
297
276
  }), !isPlaceholder ? /*#__PURE__*/React__default["default"].createElement("div", {
298
- key: "controls",
299
- className: styles.bottomContent
277
+ key: "bottom",
278
+ className: styles.bottom,
279
+ style: {
280
+ transform: !isPreview ? "translate(0, -".concat(viewerBottomHeight, "px)") : null,
281
+ paddingLeft: Math.max(spacing / 2, viewerBottomSidesWidth),
282
+ paddingRight: Math.max(spacing / 2, viewerBottomSidesWidth),
283
+ paddingBottom: spacing / 2,
284
+ paddingTop: 0
285
+ }
300
286
  }, hasClosedCaptions && !isPreview && !isCapture && !isStatic ? /*#__PURE__*/React__default["default"].createElement(ClosedCaptions__default["default"], {
301
287
  className: styles.closedCaptions,
302
288
  media: closedCaptions,
303
289
  currentTime: currentTime
304
- }) : null, hasAudioUrl && (isView || isEdit) ? /*#__PURE__*/React__default["default"].createElement(MediaControls__default["default"], {
305
- className: styles.mediaControls,
306
- withControls: withPlayPause,
307
- playing: playing,
308
- muted: muted,
309
- onTogglePlay: togglePlay,
310
- onToggleMute: onToggleMute,
290
+ }) : null, hasCallToAction ? /*#__PURE__*/React__default["default"].createElement(CallToAction__default["default"], Object.assign({}, callToAction, {
291
+ className: styles.callToAction,
292
+ animationDisabled: isPreview,
311
293
  focusable: current && isView,
312
- withSeekBar: !showWave,
313
- duration: duration,
314
- currentTime: currentTime,
315
- onSeek: onSeek
316
- }) : null, cta) : null].filter(function (el) {
294
+ openWebView: openWebView
295
+ })) : null) : null].filter(function (el) {
317
296
  return el !== null;
318
297
  });
319
- return /*#__PURE__*/React__default["default"].createElement("div", Object.assign({
298
+ return /*#__PURE__*/React__default["default"].createElement("div", {
320
299
  className: classNames__default["default"]([styles.container, (_ref7 = {}, _defineProperty__default["default"](_ref7, className, className !== null), _defineProperty__default["default"](_ref7, styles.placeholder, isPlaceholder), _defineProperty__default["default"](_ref7, styles.isPreview, isPreview), _ref7)]),
321
300
  "data-screen-ready": ready
322
- }, longPressBind), !isPlaceholder ? /*#__PURE__*/React__default["default"].createElement(Background__default["default"], {
301
+ }, !isPlaceholder ? /*#__PURE__*/React__default["default"].createElement(Background__default["default"], {
323
302
  background: background,
324
303
  width: width,
325
304
  height: height,
@@ -333,7 +312,7 @@ var AudioScreen = function AudioScreen(_ref) {
333
312
  fullscreen: true,
334
313
  style: !isPlaceholder ? {
335
314
  padding: spacing,
336
- paddingTop: (menuOverScreen && !isPreview ? menuSize : 0) + spacing
315
+ paddingTop: (!isPreview ? viewerTopHeight : 0) + spacing
337
316
  } : null
338
317
  }, elements)));
339
318
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micromag/screen-audio",
3
- "version": "0.3.147",
3
+ "version": "0.3.152",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "javascript"
@@ -49,15 +49,15 @@
49
49
  },
50
50
  "dependencies": {
51
51
  "@babel/runtime": "^7.13.10",
52
- "@micromag/core": "^0.3.147",
53
- "@micromag/element-audio": "^0.3.147",
54
- "@micromag/element-background": "^0.3.147",
55
- "@micromag/element-call-to-action": "^0.3.147",
56
- "@micromag/element-closed-captions": "^0.3.147",
57
- "@micromag/element-container": "^0.3.147",
58
- "@micromag/element-layout": "^0.3.147",
59
- "@micromag/element-media-controls": "^0.3.147",
60
- "@micromag/transforms": "^0.3.147",
52
+ "@micromag/core": "^0.3.152",
53
+ "@micromag/element-audio": "^0.3.152",
54
+ "@micromag/element-background": "^0.3.152",
55
+ "@micromag/element-call-to-action": "^0.3.152",
56
+ "@micromag/element-closed-captions": "^0.3.152",
57
+ "@micromag/element-container": "^0.3.152",
58
+ "@micromag/element-layout": "^0.3.152",
59
+ "@micromag/element-media-controls": "^0.3.152",
60
+ "@micromag/transforms": "^0.3.152",
61
61
  "classnames": "^2.2.6",
62
62
  "lodash": "^4.17.21",
63
63
  "prop-types": "^15.7.2",
@@ -67,5 +67,5 @@
67
67
  "publishConfig": {
68
68
  "access": "public"
69
69
  },
70
- "gitHead": "695a66acc54f4863dc44a98f0471e8233ca10aee"
70
+ "gitHead": "23db6c104c10cc70a73366c8b04576a312a36206"
71
71
  }