@micromag/element-video 0.4.70 → 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 +33 -5
  2. package/es/index.js +556 -289
  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 } 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,251 +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) {
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
- }, [paused, media, mediaUrl, onPlayError]);
285
- useProgressSteps({
286
- currentTime: currentTime,
287
- duration: duration,
288
- disabled: paused,
289
- onStep: onProgressStep
290
- });
291
- return /*#__PURE__*/jsxs("div", {
292
- className: classNames([styles.container, _defineProperty({}, styles.withSize, withSize), className]),
293
- style: withSize ? {
294
- width: width,
295
- height: height
296
- } : null,
297
- 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 isPaused = element_1?.paused || false;
429
+ if (paused && !isPaused) {
430
+ element_1.pause();
431
+ } else {
432
+ if (!paused && isPaused && 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", {
298
505
  src: mediaUrl,
299
506
  alt: description,
300
- tabIndex: "-1",
507
+ tabIndex: -1,
301
508
  className: classNames([styles.media, innerClassName])
302
- }) : null, !isImageWithoutSourceFile ? /*#__PURE__*/jsx("video", {
303
- ref: function ref(newRef) {
304
- _ref6.current = newRef;
305
- if (mediaRef !== null && isFunction(mediaRef)) {
306
- mediaRef(newRef);
307
- } else if (mediaRef !== null) {
308
- mediaRef.current = newRef;
309
- }
310
- },
311
- 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,
312
524
  autoPlay: autoPlay && !paused,
313
525
  loop: loop,
314
526
  muted: muted,
315
527
  poster: shouldLoad && withPoster && finalThumbnail !== null ? finalThumbnail.url || null : null,
316
528
  preload: finalPreload,
317
529
  playsInline: playsInline,
318
- crossOrigin: withoutCors ? 'anonymous' : null,
530
+ crossOrigin: withoutCors ? "anonymous" : null,
319
531
  disablePictureInPicture: disablePictureInPicture,
320
- tabIndex: focusable ? '0' : '-1',
532
+ tabIndex: focusable ? 0 : -1,
321
533
  className: classNames([styles.media, innerClassName]),
322
534
  onPlay: onPlay,
323
535
  onPlaying: onPlaying,
@@ -330,25 +542,80 @@ function Video(_ref) {
330
542
  "data-has-audio": hasAudio,
331
543
  "data-is-suspended": isSuspended,
332
544
  "aria-hidden": true,
333
- children: (shouldLoad && sources !== null ? sources : []).map(function (_ref5) {
334
- var sourceUrl = _ref5.url,
335
- sourceMime = _ref5.mime;
336
- return /*#__PURE__*/jsx("source", {
337
- src: sourceUrl !== null ? "".concat(sourceUrl, "#t=0.001") : null,
338
- type: sourceMime
339
- }, "source-".concat(sourceUrl, "-").concat(sourceMime));
340
- })
341
- }, 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, {
342
582
  className: styles.spinner
343
- }) : null]
344
- });
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}`);
345
618
  }
346
- var Video_default = (function (_ref7) {
347
- var ref = _ref7.ref,
348
- props = _objectWithoutProperties(_ref7, _excluded);
349
- return /*#__PURE__*/jsx(Video, _objectSpread({
350
- mediaRef: ref
351
- }, props));
352
- });
619
+ function _temp() {}
353
620
 
354
- 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.70",
3
+ "version": "0.4.74",
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.69",
64
- "@micromag/element-closed-captions": "^0.4.69",
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": "4f76a8f1ad594be2aadb4a593da5455da8afc8b6",
77
+ "gitHead": "fe510ee87845280d0760cb292aef9d2eb69e67c1",
76
78
  "types": "es/index.d.ts"
77
79
  }