@micromag/element-video 0.4.71 → 0.4.76

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 +33 -5
  2. package/es/index.js +556 -290
  3. package/package.json +10 -8
package/es/index.d.ts CHANGED
@@ -1,8 +1,36 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { HTMLAttributes, ForwardedRef } from 'react';
3
+ import { VideoMedia, ImageMedia } from '@micromag/core';
2
4
 
3
- declare const _default: ({ ref, ...props }: {
4
- [x: string]: any;
5
- ref: any;
6
- }) => react_jsx_runtime.JSX.Element;
5
+ interface VideoProps extends HTMLAttributes<HTMLVideoElement> {
6
+ media?: VideoMedia | null;
7
+ thumbnail?: ImageMedia | null;
8
+ width?: number | null;
9
+ height?: number | null;
10
+ ref?: ForwardedRef<HTMLVideoElement> | null;
11
+ mediaRef?: ForwardedRef<HTMLVideoElement> | null;
12
+ muted?: boolean;
13
+ autoPlay?: boolean;
14
+ paused?: boolean;
15
+ loop?: boolean;
16
+ playsInline?: boolean;
17
+ preload?: 'auto' | 'metadata' | 'none' | null;
18
+ disablePictureInPicture?: boolean;
19
+ shouldLoad?: boolean;
20
+ withoutCors?: boolean;
21
+ className?: string | null;
22
+ innerClassName?: string | null;
23
+ onReady?: ((...args: unknown[]) => void) | null;
24
+ onSeeked?: ((...args: unknown[]) => void) | null;
25
+ onProgressStep?: ((...args: unknown[]) => void) | null;
26
+ onDurationChange?: ((...args: unknown[]) => void) | null;
27
+ onVolumeChange?: ((...args: unknown[]) => void) | null;
28
+ onSuspended?: ((...args: unknown[]) => void) | null;
29
+ onPlayError?: ((...args: unknown[]) => void) | null;
30
+ focusable?: boolean;
31
+ withPoster?: boolean;
32
+ withLoading?: boolean;
33
+ }
34
+ declare function Video({ media, thumbnail, width, height, mediaRef, ref: externalRef, muted, autoPlay, paused, loop, playsInline, preload, shouldLoad, withoutCors, className, innerClassName, onReady, onPlay: customOnPlay, onPlaying: customOnPlaying, onPause, onEnded, onSeeked, onTimeUpdate, onProgressStep, onDurationChange: customOnDurationChange, onVolumeChange: customOnVolumeChange, onSuspend: customOnSuspend, onSuspended, onPlayError, focusable, withPoster, withLoading, disablePictureInPicture, }: VideoProps): react_jsx_runtime.JSX.Element;
7
35
 
8
- export { _default as default };
36
+ export { Video as default };
package/es/index.js CHANGED
@@ -1,70 +1,57 @@
1
- import _objectSpread from '@babel/runtime/helpers/objectSpread2';
2
- import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
3
- import _defineProperty from '@babel/runtime/helpers/defineProperty';
4
- import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
1
+ import { c } from 'react/compiler-runtime';
5
2
  import classNames from 'classnames';
6
- import isFunction from 'lodash/isFunction';
7
- import { useMemo, useState, useEffect, useRef, useCallback } from 'react';
3
+ import { useMemo, useState, useEffect, useRef } from 'react';
8
4
  import { Spinner } from '@micromag/core/components';
9
- import { useMediaThumbnail, useMediaCurrentTime, useMediaDuration, useMediaReady, useProgressSteps } from '@micromag/core/hooks';
5
+ import { useMediaCurrentTime, useMediaDuration, useMediaReady, useProgressSteps } from '@micromag/core/hooks';
6
+ import { getMediaFilesAsArray, getVideoSupportedMimes, getMediaThumbnail, mergeRefs, getMediaIsPlaying } from '@micromag/core/utils';
10
7
  import { useSetting } from '@micromag/core/contexts';
11
- import { getMediaFilesAsArray, getVideoSupportedMimes } from '@micromag/core/utils';
12
8
  import { jsx, jsxs } from 'react/jsx-runtime';
13
9
 
14
10
  // Disabled webm for now
15
11
  // const defaultPossibleMimes = ['video/mp4', 'video/webm', 'video/ogg', 'application/vnd.apple.mpegurl'];
16
12
 
17
- function useSources() {
18
- var media = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
19
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
20
- var _ref = options || {},
21
- _ref$possibleMimes = _ref.possibleMimes,
22
- possibleMimes = _ref$possibleMimes === void 0 ? null : _ref$possibleMimes;
23
- var _ref2 = media || {},
24
- _ref2$files = _ref2.files,
25
- mediaFiles = _ref2$files === void 0 ? null : _ref2$files,
26
- _ref2$metadata = _ref2.metadata,
27
- metadata = _ref2$metadata === void 0 ? null : _ref2$metadata;
28
- var _ref3 = metadata || {},
29
- _ref3$mime = _ref3.mime,
30
- mediaMime = _ref3$mime === void 0 ? null : _ref3$mime;
31
- var settingsPossibleMimes = useSetting('supportedVideoMimes');
32
- var finalPossibleMimes = useMemo(function () {
33
- return possibleMimes || settingsPossibleMimes || ['video/mp4'];
34
- }, [possibleMimes, settingsPossibleMimes]);
35
- var files = useMemo(function () {
36
- return getMediaFilesAsArray(mediaFiles);
37
- }, [mediaFiles]);
38
- var _useState = useState(finalPossibleMimes),
39
- _useState2 = _slicedToArray(_useState, 2),
40
- supportedMimes = _useState2[0],
41
- setSupportedMimes = _useState2[1];
42
- useEffect(function () {
43
- var newMimes = getVideoSupportedMimes(finalPossibleMimes);
13
+ function useSources(media = null, options = null) {
14
+ const {
15
+ possibleMimes = null
16
+ } = options || {};
17
+ const {
18
+ files: mediaFiles = null,
19
+ metadata = null
20
+ } = media || {};
21
+ const {
22
+ mime: mediaMime = null
23
+ } = metadata || {};
24
+ const settingsPossibleMimes = useSetting('supportedVideoMimes');
25
+ const finalPossibleMimes = useMemo(() => possibleMimes || settingsPossibleMimes || ['video/mp4'], [possibleMimes, settingsPossibleMimes]);
26
+ const files = useMemo(() => getMediaFilesAsArray(mediaFiles), [mediaFiles]);
27
+ const [supportedMimes, setSupportedMimes] = useState(finalPossibleMimes);
28
+ useEffect(() => {
29
+ let newMimes = getVideoSupportedMimes(finalPossibleMimes);
44
30
  if (newMimes.length === 0) {
45
31
  newMimes = ['video/mp4'];
46
32
  }
47
33
  setSupportedMimes(newMimes);
48
34
  }, [finalPossibleMimes]);
49
- var sources = useMemo(function () {
35
+ const sources = useMemo(() => {
50
36
  if (files.length === 0) {
51
37
  return null;
52
38
  }
53
- var supportedFiles = files.filter(function (file) {
54
- var fileHandle = file.handle || file.id;
55
- var _file$mime = file.mime,
56
- mime = _file$mime === void 0 ? "video/".concat(fileHandle === 'h264' ? 'mp4' : fileHandle) : _file$mime;
39
+ const supportedFiles = files.filter(file => {
40
+ const fileHandle = file.handle || file.id;
41
+ const {
42
+ mime = `video/${fileHandle === 'h264' ? 'mp4' : fileHandle}`
43
+ } = file;
57
44
  return supportedMimes.indexOf(mime) !== -1;
58
45
  });
59
- var supportedFilesWithoutOriginal = supportedFiles.filter(function (file) {
60
- var fileHandle = file.handle || file.id;
61
- return fileHandle !== 'original';
46
+ const supportedFilesWithoutOriginal = supportedFiles.filter(file_0 => {
47
+ const fileHandle_0 = file_0.handle || file_0.id;
48
+ return fileHandle_0 !== 'original';
62
49
  });
63
- return (supportedFilesWithoutOriginal.length > 0 ? supportedFilesWithoutOriginal : supportedFiles).sort(function (_ref4, _ref5) {
64
- var _ref4$size = _ref4.size,
65
- a = _ref4$size === void 0 ? Infinity : _ref4$size;
66
- var _ref5$size = _ref5.size,
67
- b = _ref5$size === void 0 ? Infinity : _ref5$size;
50
+ return (supportedFilesWithoutOriginal.length > 0 ? supportedFilesWithoutOriginal : supportedFiles).sort(({
51
+ size: a = Infinity
52
+ }, {
53
+ size: b = Infinity
54
+ }) => {
68
55
  if (a === b) {
69
56
  return 0;
70
57
  }
@@ -73,252 +60,476 @@ function useSources() {
73
60
  }, [files, supportedMimes]);
74
61
 
75
62
  // @NOTE: Media is an animated image and doesn't have source files in video formats
76
- var _ref6 = files.find(function (_ref7) {
77
- var handle = _ref7.handle;
78
- return handle === 'original';
79
- }) || {},
80
- _ref6$type = _ref6.type,
81
- originalType = _ref6$type === void 0 ? null : _ref6$type,
82
- _ref6$mime = _ref6.mime,
83
- originalMime = _ref6$mime === void 0 ? mediaMime : _ref6$mime;
84
- var originalFileIsImage = originalType === 'image' || originalMime !== null && originalMime.indexOf('image/') === 0;
63
+ const {
64
+ type: originalType = null,
65
+ mime: originalMime = mediaMime
66
+ } = files.find(({
67
+ handle
68
+ }) => handle === 'original') || {};
69
+ const originalFileIsImage = originalType === 'image' || originalMime !== null && originalMime.indexOf('image/') === 0;
85
70
  return {
86
71
  sources: sources !== null && sources.length > 0 ? sources : null,
87
- files: files,
72
+ files,
88
73
  isImage: originalFileIsImage
89
74
  };
90
75
  }
91
76
 
92
77
  var styles = {"container":"micromag-element-video-container","media":"micromag-element-video-media","spinner":"micromag-element-video-spinner","withSize":"micromag-element-video-withSize"};
93
78
 
94
- var _excluded = ["ref"];
95
- function Video(_ref) {
96
- var _ref$media = _ref.media,
97
- media = _ref$media === void 0 ? null : _ref$media,
98
- _ref$thumbnail = _ref.thumbnail,
99
- thumbnail = _ref$thumbnail === void 0 ? null : _ref$thumbnail,
100
- _ref$width = _ref.width,
101
- width = _ref$width === void 0 ? null : _ref$width,
102
- _ref$height = _ref.height,
103
- height = _ref$height === void 0 ? null : _ref$height,
104
- _ref$mediaRef = _ref.mediaRef,
105
- mediaRef = _ref$mediaRef === void 0 ? null : _ref$mediaRef,
106
- _ref$muted = _ref.muted,
107
- muted = _ref$muted === void 0 ? false : _ref$muted,
108
- _ref$autoPlay = _ref.autoPlay,
109
- autoPlay = _ref$autoPlay === void 0 ? false : _ref$autoPlay,
110
- _ref$paused = _ref.paused,
111
- paused = _ref$paused === void 0 ? false : _ref$paused,
112
- _ref$loop = _ref.loop,
113
- loop = _ref$loop === void 0 ? false : _ref$loop,
114
- _ref$playsInline = _ref.playsInline,
115
- playsInline = _ref$playsInline === void 0 ? true : _ref$playsInline,
116
- _ref$preload = _ref.preload,
117
- preload = _ref$preload === void 0 ? 'auto' : _ref$preload,
118
- _ref$shouldLoad = _ref.shouldLoad,
119
- shouldLoad = _ref$shouldLoad === void 0 ? true : _ref$shouldLoad,
120
- _ref$withoutCors = _ref.withoutCors,
121
- withoutCors = _ref$withoutCors === void 0 ? false : _ref$withoutCors,
122
- _ref$className = _ref.className,
123
- className = _ref$className === void 0 ? null : _ref$className,
124
- _ref$innerClassName = _ref.innerClassName,
125
- innerClassName = _ref$innerClassName === void 0 ? null : _ref$innerClassName,
126
- _ref$onReady = _ref.onReady,
127
- onReady = _ref$onReady === void 0 ? null : _ref$onReady,
128
- _ref$onPlay = _ref.onPlay,
129
- customOnPlay = _ref$onPlay === void 0 ? null : _ref$onPlay,
130
- _ref$onPause = _ref.onPause,
131
- onPause = _ref$onPause === void 0 ? null : _ref$onPause,
132
- _ref$onEnded = _ref.onEnded,
133
- onEnded = _ref$onEnded === void 0 ? null : _ref$onEnded,
134
- _ref$onSeeked = _ref.onSeeked,
135
- onSeeked = _ref$onSeeked === void 0 ? null : _ref$onSeeked,
136
- _ref$onTimeUpdate = _ref.onTimeUpdate,
137
- onTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate,
138
- _ref$onProgressStep = _ref.onProgressStep,
139
- onProgressStep = _ref$onProgressStep === void 0 ? null : _ref$onProgressStep,
140
- _ref$onDurationChange = _ref.onDurationChange,
141
- customOnDurationChange = _ref$onDurationChange === void 0 ? null : _ref$onDurationChange,
142
- _ref$onVolumeChange = _ref.onVolumeChange,
143
- customOnVolumeChange = _ref$onVolumeChange === void 0 ? null : _ref$onVolumeChange,
144
- _ref$onSuspend = _ref.onSuspend,
145
- customOnSuspend = _ref$onSuspend === void 0 ? null : _ref$onSuspend,
146
- _ref$onSuspended = _ref.onSuspended,
147
- onSuspended = _ref$onSuspended === void 0 ? null : _ref$onSuspended,
148
- _ref$onPlayError = _ref.onPlayError,
149
- onPlayError = _ref$onPlayError === void 0 ? null : _ref$onPlayError,
150
- _ref$focusable = _ref.focusable,
151
- focusable = _ref$focusable === void 0 ? true : _ref$focusable,
152
- _ref$withPoster = _ref.withPoster,
153
- withPoster = _ref$withPoster === void 0 ? false : _ref$withPoster,
154
- _ref$withLoading = _ref.withLoading,
155
- withLoading = _ref$withLoading === void 0 ? false : _ref$withLoading,
156
- _ref$disablePictureIn = _ref.disablePictureInPicture,
157
- disablePictureInPicture = _ref$disablePictureIn === void 0 ? true : _ref$disablePictureIn;
158
- var _ref2 = media || {},
159
- _ref2$url = _ref2.url,
160
- mediaUrl = _ref2$url === void 0 ? null : _ref2$url,
161
- _ref2$metadata = _ref2.metadata,
162
- metadata = _ref2$metadata === void 0 ? null : _ref2$metadata;
163
- var _ref3 = metadata || {},
164
- _ref3$description = _ref3.description,
165
- description = _ref3$description === void 0 ? null : _ref3$description,
166
- _ref3$has_audio = _ref3.has_audio,
167
- hasAudio = _ref3$has_audio === void 0 ? null : _ref3$has_audio;
168
- var finalThumbnail = useMediaThumbnail(media, thumbnail);
169
- var _useSources = useSources(media),
170
- sources = _useSources.sources,
171
- isImage = _useSources.isImage;
172
- // console.log('media', media, sources, isImage);
173
-
174
- var isImageWithoutSourceFile = isImage && (sources === null || sources.length === 0);
175
- var _ref6 = useRef(null);
176
- var currentTime = useMediaCurrentTime(_ref6.current, {
177
- id: mediaUrl,
178
- disabled: paused || onProgressStep === null
179
- });
180
- var duration = useMediaDuration(_ref6.current, {
181
- id: mediaUrl
182
- });
183
- var _useState = useState(false),
184
- _useState2 = _slicedToArray(_useState, 2),
185
- showLoading = _useState2[0],
186
- setShowLoading = _useState2[1];
187
- var ready = useMediaReady(_ref6.current, {
188
- id: mediaUrl
189
- });
190
- useEffect(function () {
191
- var id = null;
192
- setShowLoading(false);
193
- if (mediaUrl && withLoading) {
194
- id = setTimeout(function () {
79
+ function resetForcePlaying(element) {
80
+ if (element.dataset.forcePlaying === 'true') {
81
+ element.dataset.forcePlaying = 'false';
82
+ }
83
+ }
84
+ function Video(t0) {
85
+ const $ = c(113);
86
+ const {
87
+ media: t1,
88
+ thumbnail: t2,
89
+ width: t3,
90
+ height: t4,
91
+ mediaRef: t5,
92
+ ref: t6,
93
+ muted: t7,
94
+ autoPlay: t8,
95
+ paused: t9,
96
+ loop: t10,
97
+ playsInline: t11,
98
+ preload: t12,
99
+ shouldLoad: t13,
100
+ withoutCors: t14,
101
+ className: t15,
102
+ innerClassName: t16,
103
+ onReady: t17,
104
+ onPlay: t18,
105
+ onPlaying: t19,
106
+ onPause: t20,
107
+ onEnded: t21,
108
+ onSeeked: t22,
109
+ onTimeUpdate: t23,
110
+ onProgressStep: t24,
111
+ onDurationChange: t25,
112
+ onVolumeChange: t26,
113
+ onSuspend: t27,
114
+ onSuspended: t28,
115
+ onPlayError: t29,
116
+ focusable: t30,
117
+ withPoster: t31,
118
+ withLoading: t32,
119
+ disablePictureInPicture: t33
120
+ } = t0;
121
+ const media = t1 === undefined ? null : t1;
122
+ const thumbnail = t2 === undefined ? null : t2;
123
+ const width = t3 === undefined ? null : t3;
124
+ const height = t4 === undefined ? null : t4;
125
+ const mediaRef = t5 === undefined ? null : t5;
126
+ const externalRef = t6 === undefined ? null : t6;
127
+ const muted = t7 === undefined ? false : t7;
128
+ const autoPlay = t8 === undefined ? false : t8;
129
+ const paused = t9 === undefined ? false : t9;
130
+ const loop = t10 === undefined ? false : t10;
131
+ const playsInline = t11 === undefined ? true : t11;
132
+ const preload = t12 === undefined ? "auto" : t12;
133
+ const shouldLoad = t13 === undefined ? true : t13;
134
+ const withoutCors = t14 === undefined ? false : t14;
135
+ const className = t15 === undefined ? null : t15;
136
+ const innerClassName = t16 === undefined ? null : t16;
137
+ const onReady = t17 === undefined ? null : t17;
138
+ const customOnPlay = t18 === undefined ? null : t18;
139
+ const customOnPlaying = t19 === undefined ? null : t19;
140
+ const onPause = t20 === undefined ? null : t20;
141
+ const onEnded = t21 === undefined ? null : t21;
142
+ const onSeeked = t22 === undefined ? null : t22;
143
+ const onTimeUpdate = t23 === undefined ? null : t23;
144
+ const onProgressStep = t24 === undefined ? null : t24;
145
+ const customOnDurationChange = t25 === undefined ? null : t25;
146
+ const customOnVolumeChange = t26 === undefined ? null : t26;
147
+ const customOnSuspend = t27 === undefined ? null : t27;
148
+ const onSuspended = t28 === undefined ? null : t28;
149
+ const onPlayError = t29 === undefined ? null : t29;
150
+ const focusable = t30 === undefined ? true : t30;
151
+ const withPoster = t31 === undefined ? false : t31;
152
+ const withLoading = t32 === undefined ? false : t32;
153
+ const disablePictureInPicture = t33 === undefined ? true : t33;
154
+ let t34;
155
+ if ($[0] !== media) {
156
+ t34 = media || {};
157
+ $[0] = media;
158
+ $[1] = t34;
159
+ } else {
160
+ t34 = $[1];
161
+ }
162
+ const {
163
+ url: t35,
164
+ metadata: t36
165
+ } = t34;
166
+ const mediaUrl = t35 === undefined ? null : t35;
167
+ const metadata = t36 === undefined ? null : t36;
168
+ let t37;
169
+ if ($[2] !== metadata) {
170
+ t37 = metadata || {};
171
+ $[2] = metadata;
172
+ $[3] = t37;
173
+ } else {
174
+ t37 = $[3];
175
+ }
176
+ const {
177
+ description: t38,
178
+ has_audio: t39
179
+ } = t37;
180
+ const description = t38 === undefined ? null : t38;
181
+ const hasAudio = t39 === undefined ? null : t39;
182
+ let t40;
183
+ if ($[4] !== media || $[5] !== thumbnail) {
184
+ t40 = getMediaThumbnail(media, thumbnail);
185
+ $[4] = media;
186
+ $[5] = thumbnail;
187
+ $[6] = t40;
188
+ } else {
189
+ t40 = $[6];
190
+ }
191
+ const finalThumbnail = t40;
192
+ const {
193
+ sources,
194
+ isImage
195
+ } = useSources(media);
196
+ const isImageWithoutSourceFile = isImage && (sources === null || sources.length === 0);
197
+ const ref = useRef(null);
198
+ const [mediaElement, setMediaElement] = useState(null);
199
+ const t41 = paused || onProgressStep === null;
200
+ let t42;
201
+ if ($[7] !== mediaUrl || $[8] !== t41) {
202
+ t42 = {
203
+ id: mediaUrl,
204
+ disabled: t41
205
+ };
206
+ $[7] = mediaUrl;
207
+ $[8] = t41;
208
+ $[9] = t42;
209
+ } else {
210
+ t42 = $[9];
211
+ }
212
+ const currentTime = useMediaCurrentTime(mediaElement, t42);
213
+ let t43;
214
+ if ($[10] !== mediaUrl) {
215
+ t43 = {
216
+ id: mediaUrl
217
+ };
218
+ $[10] = mediaUrl;
219
+ $[11] = t43;
220
+ } else {
221
+ t43 = $[11];
222
+ }
223
+ const duration = useMediaDuration(mediaElement, t43);
224
+ const [showLoading, setShowLoading] = useState(false);
225
+ let t44;
226
+ if ($[12] !== mediaUrl) {
227
+ t44 = {
228
+ id: mediaUrl
229
+ };
230
+ $[12] = mediaUrl;
231
+ $[13] = t44;
232
+ } else {
233
+ t44 = $[13];
234
+ }
235
+ const ready = useMediaReady(mediaElement, t44);
236
+ let t45;
237
+ if ($[14] === Symbol.for("react.memo_cache_sentinel")) {
238
+ t45 = () => {
239
+ const {
240
+ current: t46
241
+ } = ref;
242
+ const element = t46 === undefined ? null : t46;
243
+ setMediaElement(element);
244
+ };
245
+ $[14] = t45;
246
+ } else {
247
+ t45 = $[14];
248
+ }
249
+ let t46;
250
+ if ($[15] !== isImageWithoutSourceFile || $[16] !== mediaUrl) {
251
+ t46 = [isImageWithoutSourceFile, mediaUrl, ref];
252
+ $[15] = isImageWithoutSourceFile;
253
+ $[16] = mediaUrl;
254
+ $[17] = t46;
255
+ } else {
256
+ t46 = $[17];
257
+ }
258
+ useEffect(t45, t46);
259
+ let t47;
260
+ let t48;
261
+ if ($[18] !== mediaUrl || $[19] !== withLoading) {
262
+ t47 = () => {
263
+ if (mediaUrl === null || !withLoading) {
264
+ return _temp;
265
+ }
266
+ setShowLoading(false);
267
+ const id = setTimeout(() => {
195
268
  setShowLoading(true);
196
269
  }, 2000);
197
- }
198
- return function () {
199
- clearTimeout(id);
270
+ return () => {
271
+ clearTimeout(id);
272
+ };
200
273
  };
201
- }, [mediaUrl, withLoading]);
202
- var withSize = width !== null && height !== null;
203
- useEffect(function () {
204
- if (duration > 0 && customOnDurationChange !== null) {
205
- customOnDurationChange(duration);
206
- }
207
- }, [duration, customOnDurationChange]);
208
- var onVolumeChange = useCallback(function () {
209
- var _ref$current = _ref6.current,
210
- element = _ref$current === void 0 ? null : _ref$current;
211
- if (element === null) {
212
- return;
213
- }
214
- if (customOnVolumeChange !== null) {
215
- customOnVolumeChange(element.volume);
216
- }
217
- }, [customOnVolumeChange]);
218
-
219
- // Manage suspend
220
- var _useState3 = useState(false),
221
- _useState4 = _slicedToArray(_useState3, 2),
222
- isSuspended = _useState4[0],
223
- setIsSuspended = _useState4[1];
224
- var onPlay = useCallback(function (e) {
225
- if (isSuspended) {
226
- setIsSuspended(false);
227
- }
228
- if (customOnPlay !== null) {
229
- customOnPlay(e);
230
- }
231
- }, [isSuspended, setIsSuspended, customOnPlay]);
232
- var onPlaying = useCallback(function () {
233
- if (isSuspended) {
234
- setIsSuspended(false);
235
- }
236
- }, [isSuspended, setIsSuspended]);
237
- var onSuspend = useCallback(function (e) {
238
- if (e.currentTarget.paused && !paused && !isSuspended) {
239
- setIsSuspended(true);
240
- if (onSuspended !== null) {
241
- onSuspended();
274
+ t48 = [mediaUrl, withLoading];
275
+ $[18] = mediaUrl;
276
+ $[19] = withLoading;
277
+ $[20] = t47;
278
+ $[21] = t48;
279
+ } else {
280
+ t47 = $[20];
281
+ t48 = $[21];
282
+ }
283
+ useEffect(t47, t48);
284
+ const withSize = width !== null && height !== null;
285
+ let t49;
286
+ let t50;
287
+ if ($[22] !== customOnDurationChange || $[23] !== duration) {
288
+ t49 = () => {
289
+ if (duration > 0 && customOnDurationChange !== null) {
290
+ customOnDurationChange(duration);
242
291
  }
243
- }
244
- if (customOnSuspend !== null) {
245
- customOnSuspend(e);
246
- }
247
- }, [isSuspended, paused, setIsSuspended, customOnSuspend, onSuspended]);
248
- useEffect(function () {
249
- if (ready && onReady !== null) {
250
- onReady();
251
- }
252
- }, [ready, onReady]);
253
- var finalPreload = shouldLoad ? preload : 'none';
254
- var _useState5 = useState(finalPreload === 'auto' || finalPreload === 'metadata'),
255
- _useState6 = _slicedToArray(_useState5, 2),
256
- wasPreloaded = _useState6[0],
257
- setWasPreloaded = _useState6[1];
258
- useEffect(function () {
259
- var _ref$current2 = _ref6.current,
260
- element = _ref$current2 === void 0 ? null : _ref$current2;
261
- if (shouldLoad && !wasPreloaded && element !== null) {
262
- try {
263
- element.load();
264
- } catch (_unused) {}
265
- setWasPreloaded(true);
266
- }
267
- }, [shouldLoad, wasPreloaded]);
268
- useEffect(function () {
269
- var _ref$current3 = _ref6.current,
270
- element = _ref$current3 === void 0 ? null : _ref$current3;
271
- if (element === null || mediaUrl === null) {
272
- return;
273
- }
274
- var isPaused = element.paused;
275
- if (paused && !isPaused) {
276
- element.pause();
277
- } else if (!paused && isPaused && element.dataset.forcePlaying !== 'true') {
278
- element.play()["catch"](function (e) {
279
- if (onPlayError !== null) {
280
- onPlayError(e);
292
+ };
293
+ t50 = [duration, customOnDurationChange];
294
+ $[22] = customOnDurationChange;
295
+ $[23] = duration;
296
+ $[24] = t49;
297
+ $[25] = t50;
298
+ } else {
299
+ t49 = $[24];
300
+ t50 = $[25];
301
+ }
302
+ useEffect(t49, t50);
303
+ let t51;
304
+ if ($[26] !== customOnVolumeChange) {
305
+ t51 = e => {
306
+ if (customOnVolumeChange !== null) {
307
+ customOnVolumeChange(e.currentTarget.volume);
308
+ }
309
+ };
310
+ $[26] = customOnVolumeChange;
311
+ $[27] = t51;
312
+ } else {
313
+ t51 = $[27];
314
+ }
315
+ const onVolumeChange = t51;
316
+ const [isSuspended, setIsSuspended] = useState(false);
317
+ let t52;
318
+ if ($[28] !== customOnPlay || $[29] !== isSuspended) {
319
+ t52 = e_0 => {
320
+ if (isSuspended) {
321
+ setIsSuspended(false);
322
+ }
323
+ if (customOnPlay !== null) {
324
+ customOnPlay(e_0);
325
+ }
326
+ };
327
+ $[28] = customOnPlay;
328
+ $[29] = isSuspended;
329
+ $[30] = t52;
330
+ } else {
331
+ t52 = $[30];
332
+ }
333
+ const onPlay = t52;
334
+ let t53;
335
+ if ($[31] !== customOnPlaying || $[32] !== isSuspended) {
336
+ t53 = e_1 => {
337
+ if (isSuspended) {
338
+ setIsSuspended(false);
339
+ }
340
+ if (customOnPlaying !== null) {
341
+ customOnPlaying(e_1);
342
+ }
343
+ };
344
+ $[31] = customOnPlaying;
345
+ $[32] = isSuspended;
346
+ $[33] = t53;
347
+ } else {
348
+ t53 = $[33];
349
+ }
350
+ const onPlaying = t53;
351
+ let t54;
352
+ if ($[34] !== customOnSuspend || $[35] !== isSuspended || $[36] !== onSuspended || $[37] !== paused) {
353
+ t54 = e_2 => {
354
+ if (e_2.currentTarget.paused && !paused && !isSuspended) {
355
+ setIsSuspended(true);
356
+ if (onSuspended !== null) {
357
+ onSuspended();
281
358
  }
282
- });
283
- }
284
- element.dataset.forcePlaying = 'false';
285
- }, [paused, media, mediaUrl, onPlayError]);
286
- useProgressSteps({
287
- currentTime: currentTime,
288
- duration: duration,
289
- disabled: paused,
290
- onStep: onProgressStep
291
- });
292
- return /*#__PURE__*/jsxs("div", {
293
- className: classNames([styles.container, _defineProperty({}, styles.withSize, withSize), className]),
294
- style: withSize ? {
295
- width: width,
296
- height: height
297
- } : null,
298
- children: [isImageWithoutSourceFile && shouldLoad ? /*#__PURE__*/jsx("img", {
359
+ }
360
+ if (customOnSuspend !== null) {
361
+ customOnSuspend(e_2);
362
+ }
363
+ };
364
+ $[34] = customOnSuspend;
365
+ $[35] = isSuspended;
366
+ $[36] = onSuspended;
367
+ $[37] = paused;
368
+ $[38] = t54;
369
+ } else {
370
+ t54 = $[38];
371
+ }
372
+ const onSuspend = t54;
373
+ let t55;
374
+ let t56;
375
+ if ($[39] !== onReady || $[40] !== ready) {
376
+ t55 = () => {
377
+ if (ready && onReady !== null) {
378
+ onReady();
379
+ }
380
+ };
381
+ t56 = [ready, onReady];
382
+ $[39] = onReady;
383
+ $[40] = ready;
384
+ $[41] = t55;
385
+ $[42] = t56;
386
+ } else {
387
+ t55 = $[41];
388
+ t56 = $[42];
389
+ }
390
+ useEffect(t55, t56);
391
+ const finalPreload = shouldLoad ? preload : "none";
392
+ const [wasPreloaded, setWasPreloaded] = useState(finalPreload === "auto" || finalPreload === "metadata");
393
+ let t57;
394
+ let t58;
395
+ if ($[43] !== shouldLoad || $[44] !== wasPreloaded) {
396
+ t57 = () => {
397
+ const {
398
+ current: t59
399
+ } = ref;
400
+ const element_0 = t59 === undefined ? null : t59;
401
+ if (shouldLoad && !wasPreloaded && element_0 !== null) {
402
+ try {
403
+ element_0.load();
404
+ } catch {}
405
+ setWasPreloaded(true);
406
+ }
407
+ };
408
+ t58 = [shouldLoad, wasPreloaded];
409
+ $[43] = shouldLoad;
410
+ $[44] = wasPreloaded;
411
+ $[45] = t57;
412
+ $[46] = t58;
413
+ } else {
414
+ t57 = $[45];
415
+ t58 = $[46];
416
+ }
417
+ useEffect(t57, t58);
418
+ let t59;
419
+ if ($[47] !== mediaUrl || $[48] !== onPlayError || $[49] !== paused) {
420
+ t59 = () => {
421
+ const {
422
+ current: t60
423
+ } = ref;
424
+ const element_1 = t60 === undefined ? null : t60;
425
+ if (element_1 === null || mediaUrl === null) {
426
+ return;
427
+ }
428
+ const isPlaying = getMediaIsPlaying(element_1);
429
+ if (paused && isPlaying) {
430
+ element_1.pause();
431
+ } else {
432
+ if (!paused && !isPlaying && element_1.dataset.forcePlaying !== "true") {
433
+ element_1.play().catch(e_3 => {
434
+ if (onPlayError !== null) {
435
+ onPlayError(e_3);
436
+ }
437
+ });
438
+ }
439
+ }
440
+ resetForcePlaying(element_1);
441
+ };
442
+ $[47] = mediaUrl;
443
+ $[48] = onPlayError;
444
+ $[49] = paused;
445
+ $[50] = t59;
446
+ } else {
447
+ t59 = $[50];
448
+ }
449
+ let t60;
450
+ if ($[51] !== media || $[52] !== mediaUrl || $[53] !== onPlayError || $[54] !== paused) {
451
+ t60 = [paused, media, mediaUrl, onPlayError];
452
+ $[51] = media;
453
+ $[52] = mediaUrl;
454
+ $[53] = onPlayError;
455
+ $[54] = paused;
456
+ $[55] = t60;
457
+ } else {
458
+ t60 = $[55];
459
+ }
460
+ useEffect(t59, t60);
461
+ let t61;
462
+ if ($[56] !== currentTime || $[57] !== duration || $[58] !== onProgressStep || $[59] !== paused) {
463
+ t61 = {
464
+ currentTime,
465
+ duration,
466
+ disabled: paused,
467
+ onStep: onProgressStep
468
+ };
469
+ $[56] = currentTime;
470
+ $[57] = duration;
471
+ $[58] = onProgressStep;
472
+ $[59] = paused;
473
+ $[60] = t61;
474
+ } else {
475
+ t61 = $[60];
476
+ }
477
+ useProgressSteps(t61);
478
+ let t62;
479
+ if ($[61] !== className || $[62] !== withSize) {
480
+ t62 = classNames([styles.container, {
481
+ [styles.withSize]: withSize
482
+ }, className]);
483
+ $[61] = className;
484
+ $[62] = withSize;
485
+ $[63] = t62;
486
+ } else {
487
+ t62 = $[63];
488
+ }
489
+ let t63;
490
+ if ($[64] !== height || $[65] !== width || $[66] !== withSize) {
491
+ t63 = withSize ? {
492
+ width,
493
+ height
494
+ } : null;
495
+ $[64] = height;
496
+ $[65] = width;
497
+ $[66] = withSize;
498
+ $[67] = t63;
499
+ } else {
500
+ t63 = $[67];
501
+ }
502
+ let t64;
503
+ if ($[68] !== description || $[69] !== innerClassName || $[70] !== isImageWithoutSourceFile || $[71] !== mediaUrl || $[72] !== shouldLoad) {
504
+ t64 = isImageWithoutSourceFile && shouldLoad ? /*#__PURE__*/jsx("img", {
299
505
  src: mediaUrl,
300
506
  alt: description,
301
- tabIndex: "-1",
507
+ tabIndex: -1,
302
508
  className: classNames([styles.media, innerClassName])
303
- }) : null, !isImageWithoutSourceFile ? /*#__PURE__*/jsx("video", {
304
- ref: function ref(newRef) {
305
- _ref6.current = newRef;
306
- if (mediaRef !== null && isFunction(mediaRef)) {
307
- mediaRef(newRef);
308
- } else if (mediaRef !== null) {
309
- mediaRef.current = newRef;
310
- }
311
- },
312
- src: sources === null && shouldLoad ? "".concat(mediaUrl, "#t=0.001") : undefined,
509
+ }) : null;
510
+ $[68] = description;
511
+ $[69] = innerClassName;
512
+ $[70] = isImageWithoutSourceFile;
513
+ $[71] = mediaUrl;
514
+ $[72] = shouldLoad;
515
+ $[73] = t64;
516
+ } else {
517
+ t64 = $[73];
518
+ }
519
+ let t65;
520
+ if ($[74] !== autoPlay || $[75] !== disablePictureInPicture || $[76] !== externalRef || $[77] !== finalPreload || $[78] !== finalThumbnail || $[79] !== focusable || $[80] !== hasAudio || $[81] !== innerClassName || $[82] !== isImageWithoutSourceFile || $[83] !== isSuspended || $[84] !== loop || $[85] !== mediaRef || $[86] !== mediaUrl || $[87] !== muted || $[88] !== onEnded || $[89] !== onPause || $[90] !== onPlay || $[91] !== onPlaying || $[92] !== onSeeked || $[93] !== onSuspend || $[94] !== onTimeUpdate || $[95] !== onVolumeChange || $[96] !== paused || $[97] !== playsInline || $[98] !== shouldLoad || $[99] !== sources || $[100] !== withPoster || $[101] !== withoutCors) {
521
+ t65 = !isImageWithoutSourceFile ? /*#__PURE__*/jsx("video", {
522
+ ref: mergeRefs(ref, mediaRef, externalRef),
523
+ src: sources === null && shouldLoad ? `${mediaUrl}#t=0.001` : undefined,
313
524
  autoPlay: autoPlay && !paused,
314
525
  loop: loop,
315
526
  muted: muted,
316
527
  poster: shouldLoad && withPoster && finalThumbnail !== null ? finalThumbnail.url || null : null,
317
528
  preload: finalPreload,
318
529
  playsInline: playsInline,
319
- crossOrigin: withoutCors ? 'anonymous' : null,
530
+ crossOrigin: withoutCors ? "anonymous" : null,
320
531
  disablePictureInPicture: disablePictureInPicture,
321
- tabIndex: focusable ? '0' : '-1',
532
+ tabIndex: focusable ? 0 : -1,
322
533
  className: classNames([styles.media, innerClassName]),
323
534
  onPlay: onPlay,
324
535
  onPlaying: onPlaying,
@@ -331,25 +542,80 @@ function Video(_ref) {
331
542
  "data-has-audio": hasAudio,
332
543
  "data-is-suspended": isSuspended,
333
544
  "aria-hidden": true,
334
- children: (shouldLoad && sources !== null ? sources : []).map(function (_ref5) {
335
- var sourceUrl = _ref5.url,
336
- sourceMime = _ref5.mime;
337
- return /*#__PURE__*/jsx("source", {
338
- src: sourceUrl !== null ? "".concat(sourceUrl, "#t=0.001") : null,
339
- type: sourceMime
340
- }, "source-".concat(sourceUrl, "-").concat(sourceMime));
341
- })
342
- }, mediaUrl) : null, !isImageWithoutSourceFile && !ready && showLoading ? /*#__PURE__*/jsx(Spinner, {
545
+ children: (shouldLoad && sources !== null ? sources : []).map(_temp2)
546
+ }, mediaUrl) : null;
547
+ $[74] = autoPlay;
548
+ $[75] = disablePictureInPicture;
549
+ $[76] = externalRef;
550
+ $[77] = finalPreload;
551
+ $[78] = finalThumbnail;
552
+ $[79] = focusable;
553
+ $[80] = hasAudio;
554
+ $[81] = innerClassName;
555
+ $[82] = isImageWithoutSourceFile;
556
+ $[83] = isSuspended;
557
+ $[84] = loop;
558
+ $[85] = mediaRef;
559
+ $[86] = mediaUrl;
560
+ $[87] = muted;
561
+ $[88] = onEnded;
562
+ $[89] = onPause;
563
+ $[90] = onPlay;
564
+ $[91] = onPlaying;
565
+ $[92] = onSeeked;
566
+ $[93] = onSuspend;
567
+ $[94] = onTimeUpdate;
568
+ $[95] = onVolumeChange;
569
+ $[96] = paused;
570
+ $[97] = playsInline;
571
+ $[98] = shouldLoad;
572
+ $[99] = sources;
573
+ $[100] = withPoster;
574
+ $[101] = withoutCors;
575
+ $[102] = t65;
576
+ } else {
577
+ t65 = $[102];
578
+ }
579
+ let t66;
580
+ if ($[103] !== isImageWithoutSourceFile || $[104] !== ready || $[105] !== showLoading) {
581
+ t66 = !isImageWithoutSourceFile && !ready && showLoading ? /*#__PURE__*/jsx(Spinner, {
343
582
  className: styles.spinner
344
- }) : null]
345
- });
583
+ }) : null;
584
+ $[103] = isImageWithoutSourceFile;
585
+ $[104] = ready;
586
+ $[105] = showLoading;
587
+ $[106] = t66;
588
+ } else {
589
+ t66 = $[106];
590
+ }
591
+ let t67;
592
+ if ($[107] !== t62 || $[108] !== t63 || $[109] !== t64 || $[110] !== t65 || $[111] !== t66) {
593
+ t67 = /*#__PURE__*/jsxs("div", {
594
+ className: t62,
595
+ style: t63,
596
+ children: [t64, t65, t66]
597
+ });
598
+ $[107] = t62;
599
+ $[108] = t63;
600
+ $[109] = t64;
601
+ $[110] = t65;
602
+ $[111] = t66;
603
+ $[112] = t67;
604
+ } else {
605
+ t67 = $[112];
606
+ }
607
+ return t67;
608
+ }
609
+ function _temp2(t0) {
610
+ const {
611
+ url: sourceUrl,
612
+ mime: sourceMime
613
+ } = t0;
614
+ return /*#__PURE__*/jsx("source", {
615
+ src: sourceUrl !== null ? `${sourceUrl}#t=0.001` : null,
616
+ type: sourceMime
617
+ }, `source-${sourceUrl}-${sourceMime}`);
346
618
  }
347
- var Video_default = (function (_ref7) {
348
- var ref = _ref7.ref,
349
- props = _objectWithoutProperties(_ref7, _excluded);
350
- return /*#__PURE__*/jsx(Video, _objectSpread({
351
- mediaRef: ref
352
- }, props));
353
- });
619
+ function _temp() {}
354
620
 
355
- export { Video_default as default };
621
+ export { Video as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micromag/element-video",
3
- "version": "0.4.71",
3
+ "version": "0.4.76",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "keywords": [
@@ -32,9 +32,11 @@
32
32
  "license": "ISC",
33
33
  "type": "module",
34
34
  "module": "es/index.js",
35
+ "style": "./assets/css/styles.css",
35
36
  "exports": {
36
37
  ".": {
37
38
  "types": "./es/index.d.ts",
39
+ "style": "./assets/css/styles.css",
38
40
  "import": "./es/index.js"
39
41
  },
40
42
  "./assets/css/styles": "./assets/css/styles.css",
@@ -51,17 +53,17 @@
51
53
  "build": "../../scripts/prepare-package.sh --types"
52
54
  },
53
55
  "devDependencies": {
54
- "react": "^18.3.0 || ^19.0.0",
55
- "react-dom": "^18.3.0 || ^19.0.0"
56
+ "react": "^19.0.0",
57
+ "react-dom": "^19.0.0"
56
58
  },
57
59
  "peerDependencies": {
58
- "react": "^18.3.0 || ^19.0.0",
59
- "react-dom": "^18.3.0 || ^19.0.0"
60
+ "react": "^19.0.0",
61
+ "react-dom": "^19.0.0"
60
62
  },
61
63
  "dependencies": {
62
64
  "@babel/runtime": "^7.28.6",
63
- "@micromag/core": "^0.4.71",
64
- "@micromag/element-closed-captions": "^0.4.71",
65
+ "@micromag/core": "^0.4.74",
66
+ "@micromag/element-closed-captions": "^0.4.74",
65
67
  "classnames": "^2.2.6",
66
68
  "hls.js": "^1.5.15",
67
69
  "lodash": "^4.17.23",
@@ -72,6 +74,6 @@
72
74
  "access": "public",
73
75
  "registry": "https://registry.npmjs.org/"
74
76
  },
75
- "gitHead": "9101554bc5761e32b4a002a10d26800608c69773",
77
+ "gitHead": "42a24f578994b23090271013f136b7f78956b632",
76
78
  "types": "es/index.d.ts"
77
79
  }