@micromag/screen-video-360 0.4.71 → 0.4.74

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.
Files changed (3) hide show
  1. package/es/index.d.ts +2 -2
  2. package/es/index.js +273 -322
  3. package/package.json +16 -15
package/es/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ForwardedRef } from 'react';
3
- import { VideoElement, Header, Footer, BackgroundElement } from '@micromag/core';
3
+ import { VideoElement, Header, Footer, BackgroundElement, MediaElement } from '@micromag/core';
4
4
 
5
5
  interface Video360ScreenProps {
6
6
  layout?: 'full';
@@ -12,7 +12,7 @@ interface Video360ScreenProps {
12
12
  preload?: boolean;
13
13
  type?: string | null;
14
14
  spacing?: number;
15
- mediaRef?: ForwardedRef<HTMLMediaElement> | null;
15
+ mediaRef?: ForwardedRef<MediaElement> | null;
16
16
  className?: string | null;
17
17
  }
18
18
  declare function Video360Screen({ layout: _layout, video, header, footer, background, current, preload, type, spacing, mediaRef: customMediaRef, className, }: Video360ScreenProps): react_jsx_runtime.JSX.Element;
package/es/index.js CHANGED
@@ -1,13 +1,10 @@
1
1
  import { FormattedMessage, defineMessage } from 'react-intl';
2
- import _defineProperty from '@babel/runtime/helpers/defineProperty';
3
- import _objectSpread from '@babel/runtime/helpers/objectSpread2';
4
- import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
5
2
  import { getSizeWithinBounds } from '@folklore/size';
6
3
  import classNames from 'classnames';
7
4
  import { useState, useEffect, useRef, useCallback } from 'react';
8
5
  import { ScreenElement, PlaceholderVideo360 } from '@micromag/core/components';
9
- import { useViewerInteraction, useViewerNavigation, useViewerContext, useScreenSize, useScreenRenderContext, useViewerWebView, usePlaybackContext, usePlaybackMediaRef, useViewerContainer } from '@micromag/core/contexts';
10
- import { useTrackScreenEvent, useTrackScreenMedia, useDevicePixelRatio, useActivityDetector, useDebounce, useAnimationFrame } from '@micromag/core/hooks';
6
+ import { useViewerInteraction, useViewerNavigation, useViewerContext, useScreenSize, useScreenRenderContext, useViewerWebView, usePlaybackContext, usePlaybackMediaRef, useViewerActivityDetected } from '@micromag/core/contexts';
7
+ import { useTrackScreenEvent, useTrackScreenMedia, useDevicePixelRatio, useDebounce, useAnimationFrame } from '@micromag/core/hooks';
11
8
  import { isHeaderFilled, isFooterFilled, getFooterProps, mergeRefs } from '@micromag/core/utils';
12
9
  import Background from '@micromag/element-background';
13
10
  import ClosedCaptions from '@micromag/element-closed-captions';
@@ -21,48 +18,48 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
21
18
  /**
22
19
  * Locale loader
23
20
  */
24
- var packageCache = null;
25
- var useThree = function useThree() {
21
+ let packageCache = null;
22
+ const useThree = () => {
26
23
  // transport
27
- var _useState = useState({
28
- "package": packageCache
29
- }),
30
- _useState2 = _slicedToArray(_useState, 2),
31
- loadedPackage = _useState2[0]["package"],
32
- setLoadedPackage = _useState2[1];
33
- useEffect(function () {
34
- var canceled = false;
24
+ const [{
25
+ package: loadedPackage
26
+ }, setLoadedPackage] = useState({
27
+ package: packageCache
28
+ });
29
+ useEffect(() => {
30
+ let canceled = false;
35
31
  if (loadedPackage !== null) {
36
- return function () {
32
+ return () => {
37
33
  canceled = true;
38
34
  };
39
35
  }
40
- import('three').then(function (_ref) {
41
- var Scene = _ref.Scene,
42
- PerspectiveCamera = _ref.PerspectiveCamera,
43
- SphereBufferGeometry = _ref.SphereBufferGeometry,
44
- VideoTexture = _ref.VideoTexture,
45
- MeshBasicMaterial = _ref.MeshBasicMaterial,
46
- Mesh = _ref.Mesh,
47
- WebGLRenderer = _ref.WebGLRenderer,
48
- MathUtils = _ref.MathUtils;
36
+ import('three').then(({
37
+ Scene,
38
+ PerspectiveCamera,
39
+ SphereBufferGeometry,
40
+ VideoTexture,
41
+ MeshBasicMaterial,
42
+ Mesh,
43
+ WebGLRenderer,
44
+ MathUtils
45
+ }) => {
49
46
  packageCache = {
50
- Scene: Scene,
51
- PerspectiveCamera: PerspectiveCamera,
52
- SphereBufferGeometry: SphereBufferGeometry,
53
- VideoTexture: VideoTexture,
54
- MeshBasicMaterial: MeshBasicMaterial,
55
- Mesh: Mesh,
56
- WebGLRenderer: WebGLRenderer,
57
- MathUtils: MathUtils
47
+ Scene,
48
+ PerspectiveCamera,
49
+ SphereBufferGeometry,
50
+ VideoTexture,
51
+ MeshBasicMaterial,
52
+ Mesh,
53
+ WebGLRenderer,
54
+ MathUtils
58
55
  };
59
56
  if (!canceled) {
60
57
  setLoadedPackage({
61
- "package": packageCache
58
+ package: packageCache
62
59
  });
63
60
  }
64
61
  });
65
- return function () {
62
+ return () => {
66
63
  canceled = true;
67
64
  };
68
65
  }, [loadedPackage, setLoadedPackage]);
@@ -71,135 +68,120 @@ var useThree = function useThree() {
71
68
 
72
69
  var styles = {"container":"micromag-screen-video-360-container","background":"micromag-screen-video-360-background","content":"micromag-screen-video-360-content","empty":"micromag-screen-video-360-empty","inner":"micromag-screen-video-360-inner","canvas":"micromag-screen-video-360-canvas","canvasButton":"micromag-screen-video-360-canvasButton","video":"micromag-screen-video-360-video","videoContainer":"micromag-screen-video-360-videoContainer","placeholder":"micromag-screen-video-360-placeholder","header":"micromag-screen-video-360-header","bottom":"micromag-screen-video-360-bottom","showVideo":"micromag-screen-video-360-showVideo"};
73
70
 
74
- function Video360Screen(_ref) {
75
- _ref.layout;
76
- var _ref$video = _ref.video,
77
- video = _ref$video === void 0 ? null : _ref$video,
78
- _ref$header = _ref.header,
79
- header = _ref$header === void 0 ? null : _ref$header,
80
- _ref$footer = _ref.footer,
81
- footer = _ref$footer === void 0 ? null : _ref$footer,
82
- _ref$background = _ref.background,
83
- background = _ref$background === void 0 ? null : _ref$background,
84
- _ref$current = _ref.current,
85
- current = _ref$current === void 0 ? true : _ref$current,
86
- _ref$preload = _ref.preload,
87
- preload = _ref$preload === void 0 ? true : _ref$preload,
88
- _ref$type = _ref.type,
89
- type = _ref$type === void 0 ? null : _ref$type,
90
- _ref$spacing = _ref.spacing,
91
- spacing = _ref$spacing === void 0 ? 20 : _ref$spacing,
92
- _ref$mediaRef = _ref.mediaRef,
93
- customMediaRef = _ref$mediaRef === void 0 ? null : _ref$mediaRef,
94
- _ref$className = _ref.className,
95
- className = _ref$className === void 0 ? null : _ref$className;
96
- var THREE = useThree();
97
- var trackScreenEvent = useTrackScreenEvent(type);
98
- var trackScreenMedia = useTrackScreenMedia('video_360');
99
- var _useViewerInteraction = useViewerInteraction(),
100
- enableInteraction = _useViewerInteraction.enableInteraction,
101
- disableInteraction = _useViewerInteraction.disableInteraction;
102
- var _useViewerNavigation = useViewerNavigation(),
103
- gotoPreviousScreen = _useViewerNavigation.gotoPreviousScreen,
104
- gotoNextScreen = _useViewerNavigation.gotoNextScreen;
105
- var _useViewerContext = useViewerContext(),
106
- viewerTopHeight = _useViewerContext.topHeight,
107
- viewerBottomHeight = _useViewerContext.bottomHeight,
108
- viewerBottomSidesWidth = _useViewerContext.bottomSidesWidth;
109
- var _useScreenSize = useScreenSize(),
110
- width = _useScreenSize.width,
111
- height = _useScreenSize.height,
112
- landscape = _useScreenSize.landscape,
113
- resolution = _useScreenSize.resolution;
114
- var _useScreenRenderConte = useScreenRenderContext(),
115
- isView = _useScreenRenderConte.isView,
116
- isPreview = _useScreenRenderConte.isPreview,
117
- isPlaceholder = _useScreenRenderConte.isPlaceholder,
118
- isEdit = _useScreenRenderConte.isEdit,
119
- isStatic = _useScreenRenderConte.isStatic,
120
- isCapture = _useScreenRenderConte.isCapture;
121
- var _useViewerWebView = useViewerWebView(),
122
- openWebView = _useViewerWebView.open;
123
- var devicePixelRatio = useDevicePixelRatio();
124
- var mediaShouldLoad = current || preload;
125
- var _ref2 = video || {},
126
- _ref2$media = _ref2.media,
127
- videoMedia = _ref2$media === void 0 ? null : _ref2$media,
128
- _ref2$closedCaptions = _ref2.closedCaptions,
129
- closedCaptions = _ref2$closedCaptions === void 0 ? null : _ref2$closedCaptions,
130
- _ref2$captions = _ref2.captions,
131
- captions = _ref2$captions === void 0 ? null : _ref2$captions,
132
- _ref2$withSeekBar = _ref2.withSeekBar,
133
- withSeekBar = _ref2$withSeekBar === void 0 ? false : _ref2$withSeekBar,
134
- _ref2$withControls = _ref2.withControls,
135
- withControls = _ref2$withControls === void 0 ? false : _ref2$withControls,
136
- _ref2$autoPlay = _ref2.autoPlay,
137
- autoPlay = _ref2$autoPlay === void 0 ? true : _ref2$autoPlay,
138
- _ref2$color = _ref2.color,
139
- color = _ref2$color === void 0 ? null : _ref2$color,
140
- _ref2$progressColor = _ref2.progressColor,
141
- progressColor = _ref2$progressColor === void 0 ? null : _ref2$progressColor;
142
- var videoContainerRef = useRef();
143
- var _usePlaybackContext = usePlaybackContext(),
144
- playing = _usePlaybackContext.playing,
145
- muted = _usePlaybackContext.muted,
146
- setControls = _usePlaybackContext.setControls,
147
- setControlsTheme = _usePlaybackContext.setControlsTheme,
148
- setControlsSuggestPlay = _usePlaybackContext.setControlsSuggestPlay,
149
- setMedia = _usePlaybackContext.setMedia,
150
- setPlaying = _usePlaybackContext.setPlaying,
151
- showControls = _usePlaybackContext.showControls,
152
- hideControls = _usePlaybackContext.hideControls,
153
- currentQualityLevel = _usePlaybackContext.currentQualityLevel,
154
- setCurrentQualityLevel = _usePlaybackContext.setCurrentQualityLevel;
155
- var _usePlaybackMediaRef = usePlaybackMediaRef(current),
156
- mediaRef = _usePlaybackMediaRef.ref,
157
- _usePlaybackMediaRef$ = _usePlaybackMediaRef.isCurrent,
158
- isCurrentMedia = _usePlaybackMediaRef$ === void 0 ? false : _usePlaybackMediaRef$;
159
- var backgroundPlaying = current && (isView || isEdit) && (isCurrentMedia || !isView);
160
- var videoPlaying = current && (isView || isEdit) && playing && (isCurrentMedia || !isView);
161
- useEffect(function () {
71
+ function Video360Screen({
72
+ layout: _layout = 'full',
73
+ video = null,
74
+ header = null,
75
+ footer = null,
76
+ background = null,
77
+ current = true,
78
+ preload = true,
79
+ type = null,
80
+ spacing = 20,
81
+ mediaRef: customMediaRef = null,
82
+ className = null
83
+ }) {
84
+ const THREE = useThree();
85
+ const trackScreenEvent = useTrackScreenEvent(type);
86
+ const trackScreenMedia = useTrackScreenMedia('video_360');
87
+ const {
88
+ enableInteraction,
89
+ disableInteraction
90
+ } = useViewerInteraction();
91
+ const {
92
+ gotoPreviousScreen,
93
+ gotoNextScreen
94
+ } = useViewerNavigation();
95
+ const {
96
+ topHeight: viewerTopHeight,
97
+ bottomHeight: viewerBottomHeight,
98
+ bottomSidesWidth: viewerBottomSidesWidth
99
+ } = useViewerContext();
100
+ const {
101
+ width,
102
+ height,
103
+ landscape,
104
+ resolution
105
+ } = useScreenSize();
106
+ const {
107
+ isView,
108
+ isPreview,
109
+ isPlaceholder,
110
+ isEdit,
111
+ isStatic,
112
+ isCapture
113
+ } = useScreenRenderContext();
114
+ const {
115
+ open: openWebView
116
+ } = useViewerWebView();
117
+ const devicePixelRatio = useDevicePixelRatio();
118
+ const mediaShouldLoad = current || preload;
119
+ const {
120
+ media: videoMedia = null,
121
+ closedCaptions = null,
122
+ captions = null,
123
+ withSeekBar = false,
124
+ withControls = false,
125
+ autoPlay = true,
126
+ color = null,
127
+ progressColor = null
128
+ } = video || {};
129
+ const videoContainerRef = useRef();
130
+ const {
131
+ playing,
132
+ muted,
133
+ setControls,
134
+ setControlsTheme,
135
+ setControlsSuggestPlay,
136
+ setMedia,
137
+ setPlaying,
138
+ showControls,
139
+ hideControls,
140
+ currentQualityLevel,
141
+ setCurrentQualityLevel
142
+ } = usePlaybackContext();
143
+ const {
144
+ ref: mediaRef,
145
+ isCurrent: isCurrentMedia = false
146
+ } = usePlaybackMediaRef(current);
147
+ const backgroundPlaying = current && (isView || isEdit) && (isCurrentMedia || !isView);
148
+ const videoPlaying = current && (isView || isEdit) && playing && (isCurrentMedia || !isView);
149
+ useEffect(() => {
162
150
  if (!current) {
163
- return function () {};
151
+ return () => {};
164
152
  }
165
153
  if (withControls || withSeekBar) {
166
154
  setControls(true);
167
155
  setControlsTheme({
168
156
  seekBarOnly: withSeekBar && !withControls,
169
- color: color,
170
- progressColor: progressColor
157
+ color,
158
+ progressColor
171
159
  });
172
160
  } else {
173
161
  setControls(false);
174
162
  }
175
- return function () {
163
+ return () => {
176
164
  if (withControls || withSeekBar) {
177
165
  setControls(false);
178
166
  }
179
167
  };
180
168
  }, [current, withControls, setControls, withSeekBar, color, progressColor]);
181
- useEffect(function () {
169
+ useEffect(() => {
182
170
  if (!current) {
183
- return function () {};
171
+ return () => {};
184
172
  }
185
173
  setMedia(mediaRef.current);
186
- return function () {
174
+ return () => {
187
175
  setMedia(null);
188
176
  };
189
177
  }, [current]);
190
- useEffect(function () {
178
+ useEffect(() => {
191
179
  if (current && autoPlay && !playing) {
192
180
  setPlaying(true);
193
181
  }
194
182
  }, [current, autoPlay]);
195
- var viewerContainer = useViewerContainer();
196
- var _useActivityDetector = useActivityDetector({
197
- element: viewerContainer,
198
- disabled: !isView,
199
- timeout: 2000
200
- }),
201
- activityDetected = _useActivityDetector.detected;
202
- var toggleControlsVisibility = useCallback(function () {
183
+ const activityDetected = useViewerActivityDetected();
184
+ const toggleControlsVisibility = useCallback(() => {
203
185
  if (activityDetected) {
204
186
  showControls();
205
187
  } else {
@@ -207,37 +189,33 @@ function Video360Screen(_ref) {
207
189
  }
208
190
  }, [activityDetected, showControls, hideControls]);
209
191
  useDebounce(toggleControlsVisibility, activityDetected, 1000);
210
- var _useState = useState(null),
211
- _useState2 = _slicedToArray(_useState, 2),
212
- currentTime = _useState2[0],
213
- setCurrentTime = _useState2[1];
214
- var _useState3 = useState(null),
215
- _useState4 = _slicedToArray(_useState3, 2),
216
- duration = _useState4[0],
217
- setDuration = _useState4[1];
218
- var onTimeUpdate = useCallback(function (time) {
192
+ const [currentTime, setCurrentTime] = useState(null);
193
+ const [duration, setDuration] = useState(null);
194
+ const onTimeUpdate = useCallback(time => {
219
195
  setCurrentTime(time);
220
196
  }, [setDuration, duration]);
221
- var onProgressStep = useCallback(function (step, meta) {
222
- trackScreenMedia(videoMedia, "progress_".concat(Math.round(step * 100, 10), "%"), meta);
197
+ const onProgressStep = useCallback((step, meta) => {
198
+ trackScreenMedia(videoMedia, `progress_${Math.round(step * 100, 10)}%`, meta);
223
199
  }, [trackScreenMedia, videoMedia]);
224
- var onDurationChange = useCallback(function (dur) {
200
+ const onDurationChange = useCallback(dur => {
225
201
  setDuration(dur);
226
202
  }, [setDuration]);
227
- var onPlay = useCallback(function (_ref3) {
228
- var initial = _ref3.initial;
203
+ const onPlay = useCallback(({
204
+ initial
205
+ }) => {
229
206
  trackScreenMedia(videoMedia, initial ? 'play' : 'resume');
230
207
  }, [trackScreenMedia, videoMedia]);
231
- var onPause = useCallback(function (_ref4) {
232
- var midway = _ref4.midway;
208
+ const onPause = useCallback(({
209
+ midway
210
+ }) => {
233
211
  trackScreenMedia(videoMedia, midway ? 'pause' : 'ended');
234
212
  }, [trackScreenMedia, videoMedia]);
235
- var onSeeked = useCallback(function (time) {
236
- if (time > 0) {
213
+ const onSeeked = useCallback(time_0 => {
214
+ if (time_0 > 0) {
237
215
  trackScreenMedia(videoMedia, 'seek');
238
216
  }
239
217
  }, [trackScreenMedia, videoMedia]);
240
- var onEnded = useCallback(function () {
218
+ const onEnded = useCallback(() => {
241
219
  if (current) {
242
220
  setPlaying(false);
243
221
  }
@@ -245,91 +223,86 @@ function Video360Screen(_ref) {
245
223
 
246
224
  // ------------------------------------
247
225
 
248
- var hasVideo = video !== null;
249
- var _useState5 = useState(!hasVideo),
250
- _useState6 = _slicedToArray(_useState5, 2),
251
- ready = _useState6[0],
252
- setReady = _useState6[1];
226
+ const hasVideo = video !== null;
227
+ const [ready, setReady] = useState(!hasVideo);
253
228
 
254
229
  // const transitionPlaying = current && ready;
255
230
  // const transitionDisabled = isStatic || isCapture || isPlaceholder || isPreview || isEdit;
256
231
 
257
- var hasHeader = isHeaderFilled(header);
258
- var hasFooter = isFooterFilled(footer);
259
- var footerProps = getFooterProps(footer, {
260
- isView: isView,
261
- current: current,
262
- openWebView: openWebView,
263
- isPreview: isPreview,
264
- enableInteraction: enableInteraction,
265
- disableInteraction: disableInteraction
232
+ const hasHeader = isHeaderFilled(header);
233
+ const hasFooter = isFooterFilled(footer);
234
+ const footerProps = getFooterProps(footer, {
235
+ isView,
236
+ current,
237
+ openWebView,
238
+ isPreview,
239
+ enableInteraction,
240
+ disableInteraction
266
241
  });
267
- var finalVideo = hasVideo ? _objectSpread(_objectSpread({}, video), {}, {
242
+ const finalVideo = hasVideo ? {
243
+ ...video,
268
244
  autoPlay: !isPreview && !isStatic && !isCapture && autoPlay && current
269
- }) : null;
270
- var _ref5 = videoMedia || {},
271
- _ref5$metadata = _ref5.metadata,
272
- videoMetadata = _ref5$metadata === void 0 ? null : _ref5$metadata,
273
- _ref5$url = _ref5.url,
274
- videoUrl = _ref5$url === void 0 ? null : _ref5$url,
275
- _ref5$thumbnail_url = _ref5.thumbnail_url,
276
- thumbnailUrl = _ref5$thumbnail_url === void 0 ? null : _ref5$thumbnail_url;
277
- var hasVideoUrl = videoUrl !== null;
278
- var _ref6 = videoMetadata || {},
279
- _ref6$width = _ref6.width,
280
- videoWidth = _ref6$width === void 0 ? 0 : _ref6$width,
281
- _ref6$height = _ref6.height,
282
- videoHeight = _ref6$height === void 0 ? 0 : _ref6$height;
283
- var hasThumbnail = thumbnailUrl !== null;
284
- var _useState7 = useState(!hasThumbnail),
285
- _useState8 = _slicedToArray(_useState7, 2),
286
- posterReady = _useState8[0],
287
- setPosterReady = _useState8[1];
288
- var withVideoSphere = hasVideoUrl && (isView || isEdit) && !isCapture && !isStatic;
289
- var _getSizeWithinBounds = getSizeWithinBounds(videoWidth, videoHeight, width, height, {
290
- cover: true
291
- }),
292
- resizedVideoWidth = _getSizeWithinBounds.width,
293
- resizedVideoHeight = _getSizeWithinBounds.height;
294
- var resizedVideoLeft = -(resizedVideoWidth - width) / 2;
295
- var resizedVideoTop = -(resizedVideoHeight - height) / 2;
296
- useEffect(function () {
245
+ } : null;
246
+ const {
247
+ metadata: videoMetadata = null,
248
+ url: videoUrl = null,
249
+ thumbnail_url: thumbnailUrl = null
250
+ } = videoMedia || {};
251
+ const hasVideoUrl = videoUrl !== null;
252
+ const {
253
+ width: videoWidth = 0,
254
+ height: videoHeight = 0
255
+ } = videoMetadata || {};
256
+ const hasThumbnail = thumbnailUrl !== null;
257
+ const [posterReady, setPosterReady] = useState(!hasThumbnail);
258
+ const withVideoSphere = hasVideoUrl && (isView || isEdit) && !isCapture && !isStatic;
259
+ const {
260
+ width: resizedVideoWidth,
261
+ height: resizedVideoHeight
262
+ } = getSizeWithinBounds(videoWidth, videoHeight, width, height, {
263
+ cover: true
264
+ });
265
+ const resizedVideoLeft = -(resizedVideoWidth - width) / 2;
266
+ const resizedVideoTop = -(resizedVideoHeight - height) / 2;
267
+ useEffect(() => {
297
268
  setReady(!hasVideoUrl);
298
269
  }, [videoUrl, hasVideoUrl, setReady]);
299
- useEffect(function () {
270
+ useEffect(() => {
300
271
  setPosterReady(!hasThumbnail);
301
272
  }, [thumbnailUrl, hasThumbnail, setPosterReady]);
302
- var onVideoReady = useCallback(function () {
273
+ const onVideoReady = useCallback(() => {
303
274
  setReady(true);
304
275
  }, [setReady]);
305
- var onPosterLoaded = useCallback(function () {
276
+ const onPosterLoaded = useCallback(() => {
306
277
  setPosterReady(true);
307
278
  }, [posterReady]);
308
279
 
309
280
  // 3D layer --------------------------
310
281
 
311
- var canvasRef = useRef(null);
312
- var camera = useRef(null);
313
- var scene = useRef(null);
314
- var renderer = useRef(null);
315
- var lon = useRef(0);
316
- var lat = useRef(0);
317
- var phi = useRef(0);
318
- var theta = useRef(0);
319
- var distance = useRef(50);
320
- var pointerDown = useRef(false);
321
- var pointerDownX = useRef(0);
322
- var pointerDownY = useRef(0);
323
- var pointerLon = useRef(0);
324
- var pointerLat = useRef(0);
282
+ const canvasRef = useRef(null);
283
+ const camera = useRef(null);
284
+ const scene = useRef(null);
285
+ const renderer = useRef(null);
286
+ const lon = useRef(0);
287
+ const lat = useRef(0);
288
+ const phi = useRef(0);
289
+ const theta = useRef(0);
290
+ const distance = useRef(50);
291
+ const pointerDown = useRef(false);
292
+ const pointerDownX = useRef(0);
293
+ const pointerDownY = useRef(0);
294
+ const pointerLon = useRef(0);
295
+ const pointerLat = useRef(0);
325
296
 
326
297
  // render 3D frame
327
298
 
328
- var render3D = useCallback(function () {
299
+ const render3D = useCallback(() => {
329
300
  if (THREE === null) {
330
301
  return;
331
302
  }
332
- var MathUtils = THREE.MathUtils;
303
+ const {
304
+ MathUtils
305
+ } = THREE;
333
306
  lat.current = Math.max(-85, Math.min(85, lat.current));
334
307
  phi.current = MathUtils.degToRad(90 - lat.current);
335
308
  theta.current = MathUtils.degToRad(lon.current);
@@ -342,45 +315,40 @@ function Video360Screen(_ref) {
342
315
 
343
316
  // Init 3D layer
344
317
 
345
- useEffect(function () {
318
+ useEffect(() => {
346
319
  if (THREE !== null && hasVideoUrl && withVideoSphere) {
347
- var _ref7 = THREE || {},
348
- _ref7$Scene = _ref7.Scene,
349
- Scene = _ref7$Scene === void 0 ? null : _ref7$Scene,
350
- _ref7$PerspectiveCame = _ref7.PerspectiveCamera,
351
- PerspectiveCamera = _ref7$PerspectiveCame === void 0 ? null : _ref7$PerspectiveCame,
352
- _ref7$SphereBufferGeo = _ref7.SphereBufferGeometry,
353
- SphereBufferGeometry = _ref7$SphereBufferGeo === void 0 ? null : _ref7$SphereBufferGeo,
354
- _ref7$VideoTexture = _ref7.VideoTexture,
355
- VideoTexture = _ref7$VideoTexture === void 0 ? null : _ref7$VideoTexture,
356
- _ref7$MeshBasicMateri = _ref7.MeshBasicMaterial,
357
- MeshBasicMaterial = _ref7$MeshBasicMateri === void 0 ? null : _ref7$MeshBasicMateri,
358
- _ref7$Mesh = _ref7.Mesh,
359
- Mesh = _ref7$Mesh === void 0 ? null : _ref7$Mesh,
360
- _ref7$WebGLRenderer = _ref7.WebGLRenderer,
361
- WebGLRenderer = _ref7$WebGLRenderer === void 0 ? null : _ref7$WebGLRenderer;
320
+ const {
321
+ Scene = null,
322
+ PerspectiveCamera = null,
323
+ SphereBufferGeometry = null,
324
+ VideoTexture = null,
325
+ MeshBasicMaterial = null,
326
+ Mesh = null,
327
+ WebGLRenderer = null
328
+ } = THREE || {};
362
329
  if (Scene === null || PerspectiveCamera === null || SphereBufferGeometry === null || VideoTexture === null || MeshBasicMaterial === null || Mesh === null || WebGLRenderer === null) {
363
- return function () {
330
+ return () => {
364
331
  camera.current = null;
365
332
  scene.current = null;
366
333
  renderer.current = null;
367
334
  };
368
335
  }
369
- var _canvasRef$current = canvasRef.current,
370
- canvasWidth = _canvasRef$current.offsetWidth,
371
- canvasHeight = _canvasRef$current.offsetHeight;
336
+ const {
337
+ offsetWidth: canvasWidth,
338
+ offsetHeight: canvasHeight
339
+ } = canvasRef.current;
372
340
  camera.current = new PerspectiveCamera(75, canvasWidth / canvasHeight, 1, 1100);
373
341
  scene.current = new Scene();
374
- var geometry = new SphereBufferGeometry(500, 60, 40);
342
+ const geometry = new SphereBufferGeometry(500, 60, 40);
375
343
  geometry.scale(-1, 1, 1);
376
- var _ref8 = mediaRef || {},
377
- _ref8$current = _ref8.current,
378
- videoElement = _ref8$current === void 0 ? null : _ref8$current;
379
- var videoTexture = new VideoTexture(videoElement);
380
- var videoMaterial = new MeshBasicMaterial({
344
+ const {
345
+ current: videoElement = null
346
+ } = mediaRef || {};
347
+ const videoTexture = new VideoTexture(videoElement);
348
+ const videoMaterial = new MeshBasicMaterial({
381
349
  map: videoTexture
382
350
  });
383
- var mesh = new Mesh(geometry, videoMaterial);
351
+ const mesh = new Mesh(geometry, videoMaterial);
384
352
  scene.current.add(mesh);
385
353
  renderer.current = new WebGLRenderer({
386
354
  canvas: canvasRef.current
@@ -389,7 +357,7 @@ function Video360Screen(_ref) {
389
357
  renderer.current.setSize(canvasWidth, canvasHeight);
390
358
  render3D();
391
359
  }
392
- return function () {
360
+ return () => {
393
361
  if (withVideoSphere) {
394
362
  camera.current = null;
395
363
  scene.current = null;
@@ -403,7 +371,7 @@ function Video360Screen(_ref) {
403
371
 
404
372
  // Resize 3D layer
405
373
 
406
- useEffect(function () {
374
+ useEffect(() => {
407
375
  if (camera.current !== null && renderer.current !== null) {
408
376
  camera.current.aspect = width / height;
409
377
  camera.current.updateProjectionMatrix();
@@ -412,8 +380,8 @@ function Video360Screen(_ref) {
412
380
  }, [width, height]);
413
381
 
414
382
  // Pointer interaction
415
- var togglePlayTimeout = useRef(null);
416
- var onPointerDown = useCallback(function (e) {
383
+ const togglePlayTimeout = useRef(null);
384
+ const onPointerDown = useCallback(e => {
417
385
  pointerDown.current = true;
418
386
  pointerDownX.current = e.clientX;
419
387
  pointerDownY.current = e.clientY;
@@ -429,27 +397,25 @@ function Video360Screen(_ref) {
429
397
  }, [
430
398
  /* togglePlay */
431
399
  ]);
432
- var pixelsMoved = useRef(0);
433
- var lastPointerClient = useRef(null);
434
- var pixelsMovedTracked = useRef(false);
435
- var onPointerMove = useCallback(function (e) {
400
+ const pixelsMoved = useRef(0);
401
+ const lastPointerClient = useRef(null);
402
+ const pixelsMovedTracked = useRef(false);
403
+ const onPointerMove = useCallback(e_0 => {
436
404
  if (pointerDown.current) {
437
- var _ref9 = e || {},
438
- _ref9$clientX = _ref9.clientX,
439
- clientX = _ref9$clientX === void 0 ? null : _ref9$clientX,
440
- _ref9$clientY = _ref9.clientY,
441
- clientY = _ref9$clientY === void 0 ? null : _ref9$clientY;
442
- var downDeltaX = pointerDownX.current - clientX;
443
- var downDeltaY = pointerDownY.current - clientY;
405
+ const {
406
+ clientX = null,
407
+ clientY = null
408
+ } = e_0 || {};
409
+ const downDeltaX = pointerDownX.current - clientX;
410
+ const downDeltaY = pointerDownY.current - clientY;
444
411
  lon.current = downDeltaX * 0.2 + pointerLon.current;
445
412
  lat.current = downDeltaY * 0.2 + pointerLat.current;
446
- var _ref0 = lastPointerClient.current || {},
447
- _ref0$x = _ref0.x,
448
- lastX = _ref0$x === void 0 ? clientX : _ref0$x,
449
- _ref0$y = _ref0.y,
450
- lastY = _ref0$y === void 0 ? clientY : _ref0$y;
451
- var deltaX = Math.abs(lastX - clientX) || 0;
452
- var deltaY = Math.abs(lastY - clientY) || 0;
413
+ const {
414
+ x: lastX = clientX,
415
+ y: lastY = clientY
416
+ } = lastPointerClient.current || {};
417
+ const deltaX = Math.abs(lastX - clientX) || 0;
418
+ const deltaY = Math.abs(lastY - clientY) || 0;
453
419
  pixelsMoved.current += deltaX + deltaY;
454
420
  if (!pixelsMovedTracked.current && pixelsMoved.current > Math.min(width, height)) {
455
421
  trackScreenEvent('drag_sphere', video.name);
@@ -467,21 +433,21 @@ function Video360Screen(_ref) {
467
433
  }
468
434
  }
469
435
  }, [width, height, trackScreenEvent, video]);
470
- var onPointerUp = useCallback(function (e) {
471
- var videoContainer = videoContainerRef.current;
436
+ const onPointerUp = useCallback(e_1 => {
437
+ const videoContainer = videoContainerRef.current;
472
438
  if (pointerDown.current && videoContainer !== null) {
473
- var distX = Math.abs(pointerDownX.current - e.clientX);
474
- var distY = Math.abs(pointerDownY.current - e.clientY);
475
- var pixelsMovedTolerance = 3;
476
- var tapNextScreenWidthPercent = 0.5;
477
- var canTapToNavigate = !landscape && togglePlayTimeout.current !== null;
478
- var validNavigateTap = canTapToNavigate && distX < pixelsMovedTolerance && distY < pixelsMovedTolerance;
439
+ const distX = Math.abs(pointerDownX.current - e_1.clientX);
440
+ const distY = Math.abs(pointerDownY.current - e_1.clientY);
441
+ const pixelsMovedTolerance = 3;
442
+ const tapNextScreenWidthPercent = 0.5;
443
+ const canTapToNavigate = !landscape && togglePlayTimeout.current !== null;
444
+ const validNavigateTap = canTapToNavigate && distX < pixelsMovedTolerance && distY < pixelsMovedTolerance;
479
445
  if (validNavigateTap) {
480
- var _videoContainer$getBo = videoContainer.getBoundingClientRect(),
481
- _videoContainer$getBo2 = _videoContainer$getBo.left,
482
- containerX = _videoContainer$getBo2 === void 0 ? 0 : _videoContainer$getBo2,
483
- containerWidth = _videoContainer$getBo.width;
484
- var hasTappedLeft = e.clientX - containerX < containerWidth * (1 - tapNextScreenWidthPercent);
446
+ const {
447
+ left: containerX = 0,
448
+ width: containerWidth
449
+ } = videoContainer.getBoundingClientRect();
450
+ const hasTappedLeft = e_1.clientX - containerX < containerWidth * (1 - tapNextScreenWidthPercent);
485
451
  if (hasTappedLeft) {
486
452
  if (gotoPreviousScreen !== null) {
487
453
  gotoPreviousScreen();
@@ -497,14 +463,16 @@ function Video360Screen(_ref) {
497
463
  }
498
464
  pointerDown.current = false;
499
465
  }, [gotoPreviousScreen, gotoNextScreen, landscape]);
500
- var onPlayError = useCallback(function () {
466
+ const onPlayError = useCallback(() => {
501
467
  if (isView && playing && current && hasVideoUrl && autoPlay) {
502
468
  setPlaying(false);
503
469
  setControlsSuggestPlay(true);
504
470
  }
505
471
  }, [isView, current, playing, hasVideoUrl, autoPlay, setPlaying, setControlsSuggestPlay]);
506
472
  return /*#__PURE__*/jsxs("div", {
507
- className: classNames([styles.container, className, _defineProperty({}, styles.showVideo, isPreview || isStatic || isCapture)]),
473
+ className: classNames([styles.container, className, {
474
+ [styles.showVideo]: isPreview || isStatic || isCapture
475
+ }]),
508
476
  "data-screen-ready": (isStatic || isCapture) && posterReady || ready,
509
477
  children: [/*#__PURE__*/jsxs(Container, {
510
478
  width: width,
@@ -519,7 +487,8 @@ function Video360Screen(_ref) {
519
487
  left: resizedVideoLeft,
520
488
  top: resizedVideoTop
521
489
  },
522
- children: /*#__PURE__*/jsx(Video, _objectSpread(_objectSpread({}, finalVideo), {}, {
490
+ children: /*#__PURE__*/jsx(Video, {
491
+ ...finalVideo,
523
492
  mediaRef: mergeRefs(mediaRef, customMediaRef),
524
493
  className: styles.video,
525
494
  paused: !videoPlaying,
@@ -540,7 +509,7 @@ function Video360Screen(_ref) {
540
509
  shouldLoad: mediaShouldLoad,
541
510
  qualityStartLevel: currentQualityLevel,
542
511
  onQualityLevelChange: setCurrentQualityLevel
543
- }))
512
+ })
544
513
  }) : null, /*#__PURE__*/jsxs("div", {
545
514
  className: styles.inner,
546
515
  children: [/*#__PURE__*/jsxs(ScreenElement, {
@@ -552,10 +521,7 @@ function Video360Screen(_ref) {
552
521
  emptyClassName: styles.empty,
553
522
  emptyLabel: /*#__PURE__*/jsx(FormattedMessage, {
554
523
  id: "oLtEu6",
555
- defaultMessage: [{
556
- "type": 0,
557
- "value": "Video 360"
558
- }]
524
+ defaultMessage: "Video 360"
559
525
  }),
560
526
  isEmpty: !withVideoSphere,
561
527
  children: [!isPlaceholder && hasHeader ? /*#__PURE__*/jsx("div", {
@@ -564,9 +530,11 @@ function Video360Screen(_ref) {
564
530
  paddingTop: spacing / 2,
565
531
  paddingLeft: spacing,
566
532
  paddingRight: spacing,
567
- transform: !isPreview ? "translate(0, ".concat(viewerTopHeight, "px)") : null
533
+ transform: !isPreview ? `translate(0, ${viewerTopHeight}px)` : null
568
534
  },
569
- children: /*#__PURE__*/jsx(Header, _objectSpread({}, header))
535
+ children: /*#__PURE__*/jsx(Header, {
536
+ ...header
537
+ })
570
538
  }, "header") : null, withVideoSphere ? /*#__PURE__*/jsxs(Fragment, {
571
539
  children: [/*#__PURE__*/jsx("canvas", {
572
540
  ref: canvasRef,
@@ -605,20 +573,21 @@ function Video360Screen(_ref) {
605
573
  }, "video"), !isPlaceholder ? /*#__PURE__*/jsxs("div", {
606
574
  className: styles.bottom,
607
575
  style: {
608
- transform: current && !isPreview ? "translate(0, -".concat(viewerBottomHeight, "px)") : null,
576
+ transform: current && !isPreview ? `translate(0, -${viewerBottomHeight}px)` : null,
609
577
  paddingLeft: Math.max(spacing / 2, viewerBottomSidesWidth),
610
578
  paddingRight: Math.max(spacing / 2, viewerBottomSidesWidth),
611
579
  paddingBottom: spacing / 2,
612
580
  paddingTop: 0
613
581
  },
614
- children: [(closedCaptions !== null || captions !== null) && !isPreview && !isCapture && !isStatic ? /*#__PURE__*/jsx(ClosedCaptions, _objectSpread(_objectSpread({
582
+ children: [(closedCaptions !== null || captions !== null) && !isPreview && !isCapture && !isStatic ? /*#__PURE__*/jsx(ClosedCaptions, {
615
583
  className: styles.closedCaptions,
616
- media: closedCaptions
617
- }, captions), {}, {
584
+ media: closedCaptions,
585
+ ...captions,
618
586
  currentTime: currentTime
619
- })) : null, hasFooter ? /*#__PURE__*/jsx(Footer, _objectSpread(_objectSpread({}, footerProps), {}, {
587
+ }) : null, hasFooter ? /*#__PURE__*/jsx(Footer, {
588
+ ...footerProps,
620
589
  className: styles.callToAction
621
- })) : null]
590
+ }) : null]
622
591
  }, "bottom-content") : null]
623
592
  })]
624
593
  }), !isPlaceholder ? /*#__PURE__*/jsx(Background, {
@@ -643,19 +612,13 @@ var definition = {
643
612
  group: {
644
613
  label: defineMessage({
645
614
  id: "+9akmg",
646
- defaultMessage: [{
647
- "type": 0,
648
- "value": "Audio and Video"
649
- }]
615
+ defaultMessage: "Audio and Video"
650
616
  }),
651
617
  order: 5
652
618
  },
653
619
  title: defineMessage({
654
620
  id: "GRVidW",
655
- defaultMessage: [{
656
- "type": 0,
657
- "value": "360 Video"
658
- }]
621
+ defaultMessage: "360 Video"
659
622
  }),
660
623
  component: Video360Screen,
661
624
  layouts: ['full'],
@@ -671,30 +634,21 @@ var definition = {
671
634
  },
672
635
  label: defineMessage({
673
636
  id: "tvl2Zc",
674
- defaultMessage: [{
675
- "type": 0,
676
- "value": "Video"
677
- }]
637
+ defaultMessage: "Video"
678
638
  })
679
639
  }, {
680
640
  name: 'background',
681
641
  type: 'background',
682
642
  label: defineMessage({
683
643
  id: "+MPZRu",
684
- defaultMessage: [{
685
- "type": 0,
686
- "value": "Background"
687
- }]
644
+ defaultMessage: "Background"
688
645
  })
689
646
  }, {
690
647
  name: 'header',
691
648
  type: 'header',
692
649
  label: defineMessage({
693
650
  id: "rhuDxI",
694
- defaultMessage: [{
695
- "type": 0,
696
- "value": "Header"
697
- }]
651
+ defaultMessage: "Header"
698
652
  }),
699
653
  theme: {
700
654
  badge: {
@@ -709,10 +663,7 @@ var definition = {
709
663
  type: 'footer',
710
664
  label: defineMessage({
711
665
  id: "g4nybp",
712
- defaultMessage: [{
713
- "type": 0,
714
- "value": "Footer"
715
- }]
666
+ defaultMessage: "Footer"
716
667
  }),
717
668
  theme: {
718
669
  callToAction: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micromag/screen-video-360",
3
- "version": "0.4.71",
3
+ "version": "0.4.74",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "keywords": [
@@ -36,6 +36,7 @@
36
36
  "exports": {
37
37
  ".": {
38
38
  "types": "./es/index.d.ts",
39
+ "style": "./assets/css/styles.css",
39
40
  "import": "./es/index.js"
40
41
  },
41
42
  "./assets/css/styles": "./assets/css/styles.css",
@@ -52,25 +53,25 @@
52
53
  "build": "../../scripts/prepare-package.sh --types"
53
54
  },
54
55
  "devDependencies": {
55
- "react": "^18.3.0 || ^19.0.0",
56
- "react-dom": "^18.3.0 || ^19.0.0"
56
+ "react": "^19.0.0",
57
+ "react-dom": "^19.0.0"
57
58
  },
58
59
  "peerDependencies": {
59
- "react": "^18.3.0 || ^19.0.0",
60
- "react-dom": "^18.3.0 || ^19.0.0"
60
+ "react": "^19.0.0",
61
+ "react-dom": "^19.0.0"
61
62
  },
62
63
  "dependencies": {
63
64
  "@babel/runtime": "^7.28.6",
64
65
  "@folklore/size": "^0.1.20",
65
- "@micromag/core": "^0.4.71",
66
- "@micromag/element-background": "^0.4.71",
67
- "@micromag/element-closed-captions": "^0.4.71",
68
- "@micromag/element-container": "^0.4.71",
69
- "@micromag/element-footer": "^0.4.71",
70
- "@micromag/element-header": "^0.4.71",
71
- "@micromag/element-image": "^0.4.71",
72
- "@micromag/element-video": "^0.4.71",
73
- "@micromag/transforms": "^0.4.71",
66
+ "@micromag/core": "^0.4.74",
67
+ "@micromag/element-background": "^0.4.74",
68
+ "@micromag/element-closed-captions": "^0.4.74",
69
+ "@micromag/element-container": "^0.4.74",
70
+ "@micromag/element-footer": "^0.4.74",
71
+ "@micromag/element-header": "^0.4.74",
72
+ "@micromag/element-image": "^0.4.74",
73
+ "@micromag/element-video": "^0.4.74",
74
+ "@micromag/transforms": "^0.4.74",
74
75
  "classnames": "^2.2.6",
75
76
  "lodash": "^4.17.23",
76
77
  "react-intl": "^8.1.3 || ^10.0.0",
@@ -81,6 +82,6 @@
81
82
  "access": "public",
82
83
  "registry": "https://registry.npmjs.org/"
83
84
  },
84
- "gitHead": "9101554bc5761e32b4a002a10d26800608c69773",
85
+ "gitHead": "fe510ee87845280d0760cb292aef9d2eb69e67c1",
85
86
  "types": "es/index.d.ts"
86
87
  }