@micromag/core 0.4.60 → 0.4.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,9 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import React from 'react';
2
+ import React, { CSSProperties, MouseEventHandler, ForwardedRef } from 'react';
3
3
 
4
+ type ButtonElement = HTMLButtonElement | HTMLAnchorElement;
4
5
  interface ButtonProps {
5
- type?: string;
6
+ type?: 'button' | 'submit' | 'reset';
6
7
  theme?: ButtonTheme | null;
7
8
  size?: ButtonSize | null;
8
9
  href?: string | null;
@@ -26,13 +27,12 @@ interface ButtonProps {
26
27
  withoutTheme?: boolean;
27
28
  outline?: boolean;
28
29
  asLink?: boolean;
30
+ style?: CSSProperties;
29
31
  className?: string | null;
30
32
  iconClassName?: string | null;
31
33
  labelClassName?: string | null;
32
- onClick?: ((...args: unknown[]) => void) | null;
33
- refButton?: ((...args: unknown[]) => void | {
34
- current?: unknown;
35
- }) | null;
34
+ onClick?: MouseEventHandler<ButtonElement> | null;
35
+ refButton?: ForwardedRef<ButtonElement> | null;
36
36
  }
37
37
  declare function Button$2({ type, theme, size, href, external, direct, target, label, children, focusable, active, icon, iconPosition, disabled, loading, disableOnLoading, small, big, withShadow, withoutStyle, withoutBootstrapStyles, withoutTheme, asLink, outline, onClick, className, iconClassName, labelClassName, refButton, ...props }: ButtonProps): react_jsx_runtime.JSX.Element;
38
38
 
package/es/components.js CHANGED
@@ -158,12 +158,12 @@ function Button$1(_ref) {
158
158
  disabled: disabled
159
159
  }, styles$y.linkDisabled, disabled)]);
160
160
  return external || direct ? /*#__PURE__*/jsx("a", _objectSpread(_objectSpread({}, props), {}, {
161
- href: disabled ? null : href,
161
+ href: !disabled ? href : undefined,
162
162
  className: linkClassNames,
163
163
  onClick: onClick,
164
- target: external ? target : null,
164
+ target: external ? target : undefined,
165
165
  ref: refButton,
166
- tabIndex: focusable ? '' : '-1',
166
+ tabIndex: !focusable ? -1 : undefined,
167
167
  children: content
168
168
  })) : /*#__PURE__*/jsx(Link$1, {
169
169
  href: href,
@@ -180,7 +180,7 @@ function Button$1(_ref) {
180
180
  onClick: onClick,
181
181
  disabled: disabled || disableOnLoading && loading,
182
182
  ref: refButton,
183
- tabIndex: focusable ? '0' : '-1',
183
+ tabIndex: !focusable ? -1 : undefined,
184
184
  children: content
185
185
  }));
186
186
  }
package/es/contexts.d.ts CHANGED
@@ -354,14 +354,42 @@ interface PanelsProviderProps {
354
354
  }
355
355
  declare function PanelsProvider({ children, container: initialContainer }: PanelsProviderProps): react_jsx_runtime.JSX.Element;
356
356
 
357
- declare const PlaybackContext: any;
358
- declare const usePlaybackContext: () => unknown;
357
+ interface PlaybackControlsTheme {
358
+ seekBarOnly?: boolean;
359
+ color?: unknown;
360
+ progressColor?: unknown;
361
+ }
362
+ type MediaElement = HTMLVideoElement | HTMLAudioElement | HTMLMediaElement;
363
+ interface PlaybackContext {
364
+ playing: boolean;
365
+ completed: boolean;
366
+ muted: boolean;
367
+ controls: boolean;
368
+ controlsSuggestPlay: boolean;
369
+ controlsVisible: boolean;
370
+ media: MediaElement | null;
371
+ hasAudio: boolean | null;
372
+ controlsTheme: PlaybackControlsTheme | null;
373
+ currentQualityLevel: number | null;
374
+ setMuted: (muted: boolean) => void;
375
+ setPlaying: (playing: boolean) => void;
376
+ setControls: (hasControls: boolean) => void;
377
+ setControlsVisible: (visible: boolean) => void;
378
+ setControlsTheme: (theme: PlaybackControlsTheme | null) => void;
379
+ showControls: () => void;
380
+ hideControls: () => void;
381
+ setMedia: (media: MediaElement | null) => void;
382
+ setCurrentQualityLevel: (qualityLevel: number | null, fromRef?: MediaElement | null) => void;
383
+ setIsBackground: (isBackground: boolean) => void;
384
+ }
385
+ declare const PlaybackContext: React.Context<PlaybackContext>;
386
+ declare const usePlaybackContext: () => PlaybackContext;
359
387
  declare const usePlaybackMediaRef: (active?: boolean, background?: boolean, updateKey?: any) => {
360
388
  ref: React.RefObject<HTMLMediaElement>;
361
389
  isCurrent: boolean;
362
390
  };
363
391
  interface PlaybackProviderProps {
364
- children: React__default.ReactNode;
392
+ children: ReactNode;
365
393
  controls?: boolean;
366
394
  controlsSuggestPlay?: boolean;
367
395
  controlsVisible?: boolean;
@@ -373,7 +401,7 @@ interface PlaybackProviderProps {
373
401
  muted?: boolean;
374
402
  playing?: boolean;
375
403
  paused?: boolean;
376
- currentQualityLevel?: number;
404
+ currentQualityLevel?: number | null;
377
405
  }
378
406
  declare function PlaybackProvider({ muted: initialMuted, playing: initialPlaying, paused, controls: initialControls, controlsSuggestPlay: initialControlsSuggestPlay, controlsVisible: initialControlsVisible, controlsTheme: initialControlsTheme, currentQualityLevel: initialCurrentQualityLevel, children, }: PlaybackProviderProps): react_jsx_runtime.JSX.Element;
379
407
 
package/es/contexts.js CHANGED
@@ -1011,30 +1011,28 @@ var defaultControlsThemeValue = {
1011
1011
  color: null,
1012
1012
  progressColor: null
1013
1013
  };
1014
- var defaultValue$1 = {
1014
+ var PlaybackContext = /*#__PURE__*/createContext({
1015
1015
  playing: false,
1016
- paused: false,
1017
1016
  completed: false,
1018
1017
  muted: true,
1019
1018
  controls: false,
1020
1019
  controlsSuggestPlay: false,
1021
1020
  controlsVisible: false,
1021
+ hasAudio: false,
1022
1022
  media: null,
1023
1023
  controlsTheme: defaultControlsThemeValue,
1024
- currentQualityLevel: null
1025
- };
1026
- var PlaybackContext = /*#__PURE__*/React.createContext(_objectSpread(_objectSpread({}, defaultValue$1), {}, {
1027
- setMuted: function setMuted() {},
1028
- setPlaying: function setPlaying() {},
1029
- setControls: function setControls() {},
1030
- setControlsVisible: function setControlsVisible() {},
1031
- setControlsTheme: function setControlsTheme() {},
1024
+ currentQualityLevel: null,
1025
+ setMuted: function setMuted(muted) {},
1026
+ setPlaying: function setPlaying(playing) {},
1027
+ setControls: function setControls(hasControls) {},
1028
+ setControlsVisible: function setControlsVisible(visible) {},
1029
+ setControlsTheme: function setControlsTheme(theme) {},
1032
1030
  showControls: function showControls() {},
1033
1031
  hideControls: function hideControls() {},
1034
- setMedia: function setMedia() {},
1035
- setCurrentQualityLevel: function setCurrentQualityLevel() {},
1036
- setIsBackground: function setIsBackground() {}
1037
- }));
1032
+ setMedia: function setMedia(media) {},
1033
+ setCurrentQualityLevel: function setCurrentQualityLevel(qualityLevel, fromRef) {},
1034
+ setIsBackground: function setIsBackground(isBackground) {}
1035
+ });
1038
1036
  var usePlaybackContext = function usePlaybackContext() {
1039
1037
  return useContext(PlaybackContext);
1040
1038
  };
@@ -1045,29 +1043,35 @@ var usePlaybackMediaRef = function usePlaybackMediaRef() {
1045
1043
  var _usePlaybackContext = usePlaybackContext(),
1046
1044
  setMedia = _usePlaybackContext.setMedia,
1047
1045
  setIsBackground = _usePlaybackContext.setIsBackground,
1048
- media = _usePlaybackContext.media;
1046
+ media = _usePlaybackContext.media,
1047
+ isBackground = _usePlaybackContext.isBackground;
1049
1048
  var mediaRef = useRef(null);
1050
1049
 
1051
1050
  // Cleanup: clear media registration when this screen deactivates or unmounts.
1052
1051
  // Note: we cannot check mediaRef.current here because React clears callback refs
1053
1052
  // before running effect cleanups, so mediaRef.current is always null at this point.
1054
1053
  useEffect(function () {
1054
+ var currentMedia = mediaRef.current;
1055
1055
  return function () {
1056
1056
  if (active) {
1057
+ var playing = currentMedia !== null && !!(currentMedia.currentTime > 0 && !currentMedia.paused && !currentMedia.ended && currentMedia.readyState > 2);
1057
1058
  setMedia(null);
1058
1059
  setIsBackground(false);
1060
+ if (playing) {
1061
+ currentMedia.pause();
1062
+ }
1059
1063
  }
1060
1064
  };
1061
1065
  }, [active, setMedia, setIsBackground, updateKey]);
1062
1066
 
1063
1067
  // Register media with context when active and no media is registered
1064
1068
  useEffect(function () {
1065
- if (!active || mediaRef.current === null || media !== null) {
1069
+ if (!active || mediaRef.current === null || mediaRef.current === media && background === isBackground) {
1066
1070
  return;
1067
1071
  }
1068
1072
  setIsBackground(background);
1069
1073
  setMedia(mediaRef.current);
1070
- }, [active, background, media, updateKey, setMedia, setIsBackground]);
1074
+ }, [active, background, media, updateKey, setMedia, setIsBackground, isBackground]);
1071
1075
  return {
1072
1076
  ref: mediaRef,
1073
1077
  isCurrent: mediaRef.current === media
package/es/hooks.d.ts CHANGED
@@ -46,7 +46,25 @@ declare function useDragProgress({ progress: wantedProgress, onTap, disabled, dr
46
46
  declare const useForm: ({ fields: providedFields, injectInFields, ...opts }?: {
47
47
  fields?: any[];
48
48
  injectInFields?: boolean;
49
- }) => any;
49
+ }) => {
50
+ fields: any[];
51
+ status: any;
52
+ response: unknown;
53
+ errors: Record<string, string | string[]>;
54
+ generalError: string;
55
+ success: boolean;
56
+ loading: boolean;
57
+ error: boolean;
58
+ value: Record<string, unknown>;
59
+ setValue: (value: Record<string, unknown>) => void;
60
+ setErrors: (errors: Record<string, string | string[]>) => void;
61
+ setGeneralError: (error: string | null) => void;
62
+ csrfToken: string;
63
+ submit: (submitValue?: Record<string, unknown>) => void;
64
+ onSubmit: (e: {
65
+ preventDefault: () => void;
66
+ }) => void;
67
+ };
50
68
 
51
69
  declare const useFormTransition: (initialPaths?: any, initialStyles?: {}) => {
52
70
  direction: string;
@@ -135,12 +153,12 @@ declare const useMediaBuffering: (mediaElement?: any, interval?: number) => {
135
153
  buffering: boolean;
136
154
  };
137
155
 
138
- declare const useMediaState: (mediaElement?: any, { playing: wantedPlaying, muted: wantedMuted }?: {
156
+ declare const useMediaState: (mediaElement?: HTMLMediaElement | null, { playing: wantedPlaying, muted: wantedMuted }?: {
139
157
  playing?: boolean;
140
158
  muted?: boolean;
141
159
  }) => {
142
160
  playing: boolean;
143
- muted: any;
161
+ muted: boolean;
144
162
  buffering: boolean;
145
163
  };
146
164
 
@@ -162,8 +180,8 @@ declare function useMediaLoad(element: any, { preload, shouldLoad }?: {
162
180
 
163
181
  declare function useMediaProgress(media?: any, options?: any): number;
164
182
 
165
- declare function useMediaReady(element: any, { id }?: {
166
- id?: any;
183
+ declare function useMediaReady(element: HTMLMediaElement | null, { id }?: {
184
+ id?: string | null;
167
185
  }): boolean;
168
186
 
169
187
  declare function useMediaTimestampOffset(element: any, { attributeName }?: {
package/es/hooks.js CHANGED
@@ -15,12 +15,12 @@ import isArray from 'lodash/isArray';
15
15
  import isObject from 'lodash/isObject';
16
16
  import raf from 'raf';
17
17
  import createDebug from 'debug';
18
- import isString from 'lodash/isString';
19
18
  import { useScreensManager, useFieldsManager, useTracking, useScreen } from '@micromag/core/contexts';
20
19
  import isEmpty from 'lodash/isEmpty';
21
20
  import { useWindowSize } from '@folklore/hooks';
22
21
  import { match } from 'css-mediaquery';
23
22
  import dayjs from 'dayjs';
23
+ import isString from 'lodash/isString';
24
24
  import { useIntl } from 'react-intl';
25
25
  import clamp from 'lodash/clamp';
26
26
 
@@ -1358,10 +1358,11 @@ var useMediaState = function useMediaState() {
1358
1358
  wantedPlaying = _ref$playing === void 0 ? false : _ref$playing,
1359
1359
  _ref$muted = _ref.muted,
1360
1360
  wantedMuted = _ref$muted === void 0 ? false : _ref$muted;
1361
+ var src = mediaElement !== null ? mediaElement.currentSrc || mediaElement.src : null;
1361
1362
  var debug = useMemo(function () {
1362
- var mediaKey = mediaElement !== null && isString(mediaElement.src) ? mediaElement.src.split('/')[mediaElement.src.split('/').length - 1].split('#')[0] || null : null;
1363
+ var mediaKey = src !== null ? src.split('/')[src.split('/').length - 1].split('#')[0] || null : null;
1363
1364
  return createDebug(mediaKey !== null ? "micromag:media:".concat(mediaKey) : 'micromag:media');
1364
- }, [mediaElement]);
1365
+ }, [src]);
1365
1366
  var _useState = useState(wantedPlaying),
1366
1367
  _useState2 = _slicedToArray(_useState, 2),
1367
1368
  playing = _useState2[0],
@@ -1391,20 +1392,20 @@ var useMediaState = function useMediaState() {
1391
1392
  wantedMuted: wantedMuted
1392
1393
  });
1393
1394
  }
1394
- }, [mediaElement, debug, wantedPlaying, wantedMuted]);
1395
+ }, [mediaElement, src, debug, wantedPlaying, wantedMuted]);
1395
1396
  useEffect(function () {
1396
1397
  if (mediaElement === null) {
1397
1398
  return function () {};
1398
1399
  }
1399
1400
  function onBufferingEvent(e) {
1400
1401
  // networkstate
1401
- if (mediaElement.networkState === mediaElement.NETWORK_LOADING) {
1402
+ if (mediaElement !== null && mediaElement.networkState === mediaElement.NETWORK_LOADING) {
1402
1403
  debug('onBufferingEvent: NETWORK_LOADING');
1403
1404
  setBuffering(true);
1404
1405
  }
1405
1406
 
1406
1407
  // readystate
1407
- if (mediaElement.readyState < mediaElement.HAVE_FUTURE_DATA) {
1408
+ if (mediaElement !== null && mediaElement.readyState < mediaElement.HAVE_FUTURE_DATA) {
1408
1409
  debug('onBufferingEvent: HAVE_FUTURE_DATA');
1409
1410
  setBuffering(true);
1410
1411
  }
@@ -1468,7 +1469,7 @@ var useMediaState = function useMediaState() {
1468
1469
  mediaElement.removeEventListener('ended', onEnded);
1469
1470
  mediaElement.removeEventListener('volumechange', onVolumeChange);
1470
1471
  };
1471
- }, [mediaElement, debug]);
1472
+ }, [mediaElement, debug, src]);
1472
1473
  return {
1473
1474
  playing: playing,
1474
1475
  muted: muted,
@@ -1773,10 +1774,10 @@ function useMediaReady(element) {
1773
1774
  }
1774
1775
  function updateReady() {
1775
1776
  var currentReady = ready;
1776
- if (element.readyState > 0 && !ready) {
1777
+ if (element !== null && element.readyState > 0 && !ready) {
1777
1778
  setReady(true);
1778
1779
  currentReady = true;
1779
- } else if (ready && element.readyState === 0) {
1780
+ } else if (ready && element !== null && element.readyState === 0) {
1780
1781
  setReady(false);
1781
1782
  currentReady = false;
1782
1783
  }
@@ -1784,17 +1785,20 @@ function useMediaReady(element) {
1784
1785
  return currentReady;
1785
1786
  }
1786
1787
  var currentReady = updateReady();
1787
- if (!currentReady) {
1788
- element.addEventListener('loadedmetadata', updateReady);
1789
- element.addEventListener('canplay', updateReady);
1790
- element.addEventListener('canplaythrough', updateReady);
1788
+ if (currentReady) {
1789
+ return function () {};
1791
1790
  }
1791
+ element.addEventListener('loadstart', updateReady);
1792
+ element.addEventListener('loadeddata', updateReady);
1793
+ element.addEventListener('loadedmetadata', updateReady);
1794
+ element.addEventListener('canplay', updateReady);
1795
+ element.addEventListener('canplaythrough', updateReady);
1792
1796
  return function () {
1793
- if (!currentReady) {
1794
- element.removeEventListener('loadedmetadata', updateReady);
1795
- element.removeEventListener('canplay', updateReady);
1796
- element.removeEventListener('canplaythrough', updateReady);
1797
- }
1797
+ element.removeEventListener('loadstart', updateReady);
1798
+ element.removeEventListener('loadeddata', updateReady);
1799
+ element.removeEventListener('loadedmetadata', updateReady);
1800
+ element.removeEventListener('canplay', updateReady);
1801
+ element.removeEventListener('canplaythrough', updateReady);
1798
1802
  };
1799
1803
  }, [element, id]);
1800
1804
  return realReady.current;
package/lib/components.js CHANGED
@@ -160,12 +160,12 @@ function Button$1(_ref) {
160
160
  disabled: disabled
161
161
  }, styles$y.linkDisabled, disabled)]);
162
162
  return external || direct ? /*#__PURE__*/jsxRuntime.jsx("a", _objectSpread(_objectSpread({}, props), {}, {
163
- href: disabled ? null : href,
163
+ href: !disabled ? href : undefined,
164
164
  className: linkClassNames,
165
165
  onClick: onClick,
166
- target: external ? target : null,
166
+ target: external ? target : undefined,
167
167
  ref: refButton,
168
- tabIndex: focusable ? '' : '-1',
168
+ tabIndex: !focusable ? -1 : undefined,
169
169
  children: content
170
170
  })) : /*#__PURE__*/jsxRuntime.jsx(wouter.Link, {
171
171
  href: href,
@@ -182,7 +182,7 @@ function Button$1(_ref) {
182
182
  onClick: onClick,
183
183
  disabled: disabled || disableOnLoading && loading,
184
184
  ref: refButton,
185
- tabIndex: focusable ? '0' : '-1',
185
+ tabIndex: !focusable ? -1 : undefined,
186
186
  children: content
187
187
  }));
188
188
  }
package/lib/contexts.js CHANGED
@@ -1011,30 +1011,28 @@ var defaultControlsThemeValue = {
1011
1011
  color: null,
1012
1012
  progressColor: null
1013
1013
  };
1014
- var defaultValue$1 = {
1014
+ var PlaybackContext = /*#__PURE__*/React.createContext({
1015
1015
  playing: false,
1016
- paused: false,
1017
1016
  completed: false,
1018
1017
  muted: true,
1019
1018
  controls: false,
1020
1019
  controlsSuggestPlay: false,
1021
1020
  controlsVisible: false,
1021
+ hasAudio: false,
1022
1022
  media: null,
1023
1023
  controlsTheme: defaultControlsThemeValue,
1024
- currentQualityLevel: null
1025
- };
1026
- var PlaybackContext = /*#__PURE__*/React.createContext(_objectSpread(_objectSpread({}, defaultValue$1), {}, {
1027
- setMuted: function setMuted() {},
1028
- setPlaying: function setPlaying() {},
1029
- setControls: function setControls() {},
1030
- setControlsVisible: function setControlsVisible() {},
1031
- setControlsTheme: function setControlsTheme() {},
1024
+ currentQualityLevel: null,
1025
+ setMuted: function setMuted(muted) {},
1026
+ setPlaying: function setPlaying(playing) {},
1027
+ setControls: function setControls(hasControls) {},
1028
+ setControlsVisible: function setControlsVisible(visible) {},
1029
+ setControlsTheme: function setControlsTheme(theme) {},
1032
1030
  showControls: function showControls() {},
1033
1031
  hideControls: function hideControls() {},
1034
- setMedia: function setMedia() {},
1035
- setCurrentQualityLevel: function setCurrentQualityLevel() {},
1036
- setIsBackground: function setIsBackground() {}
1037
- }));
1032
+ setMedia: function setMedia(media) {},
1033
+ setCurrentQualityLevel: function setCurrentQualityLevel(qualityLevel, fromRef) {},
1034
+ setIsBackground: function setIsBackground(isBackground) {}
1035
+ });
1038
1036
  var usePlaybackContext = function usePlaybackContext() {
1039
1037
  return React.useContext(PlaybackContext);
1040
1038
  };
@@ -1045,29 +1043,35 @@ var usePlaybackMediaRef = function usePlaybackMediaRef() {
1045
1043
  var _usePlaybackContext = usePlaybackContext(),
1046
1044
  setMedia = _usePlaybackContext.setMedia,
1047
1045
  setIsBackground = _usePlaybackContext.setIsBackground,
1048
- media = _usePlaybackContext.media;
1046
+ media = _usePlaybackContext.media,
1047
+ isBackground = _usePlaybackContext.isBackground;
1049
1048
  var mediaRef = React.useRef(null);
1050
1049
 
1051
1050
  // Cleanup: clear media registration when this screen deactivates or unmounts.
1052
1051
  // Note: we cannot check mediaRef.current here because React clears callback refs
1053
1052
  // before running effect cleanups, so mediaRef.current is always null at this point.
1054
1053
  React.useEffect(function () {
1054
+ var currentMedia = mediaRef.current;
1055
1055
  return function () {
1056
1056
  if (active) {
1057
+ var playing = currentMedia !== null && !!(currentMedia.currentTime > 0 && !currentMedia.paused && !currentMedia.ended && currentMedia.readyState > 2);
1057
1058
  setMedia(null);
1058
1059
  setIsBackground(false);
1060
+ if (playing) {
1061
+ currentMedia.pause();
1062
+ }
1059
1063
  }
1060
1064
  };
1061
1065
  }, [active, setMedia, setIsBackground, updateKey]);
1062
1066
 
1063
1067
  // Register media with context when active and no media is registered
1064
1068
  React.useEffect(function () {
1065
- if (!active || mediaRef.current === null || media !== null) {
1069
+ if (!active || mediaRef.current === null || mediaRef.current === media && background === isBackground) {
1066
1070
  return;
1067
1071
  }
1068
1072
  setIsBackground(background);
1069
1073
  setMedia(mediaRef.current);
1070
- }, [active, background, media, updateKey, setMedia, setIsBackground]);
1074
+ }, [active, background, media, updateKey, setMedia, setIsBackground, isBackground]);
1071
1075
  return {
1072
1076
  ref: mediaRef,
1073
1077
  isCurrent: mediaRef.current === media
package/lib/hooks.js CHANGED
@@ -17,12 +17,12 @@ var isArray = require('lodash/isArray');
17
17
  var isObject = require('lodash/isObject');
18
18
  var raf = require('raf');
19
19
  var createDebug = require('debug');
20
- var isString = require('lodash/isString');
21
20
  var contexts = require('@micromag/core/contexts');
22
21
  var isEmpty = require('lodash/isEmpty');
23
22
  var hooks = require('@folklore/hooks');
24
23
  var cssMediaquery = require('css-mediaquery');
25
24
  var dayjs = require('dayjs');
25
+ var isString = require('lodash/isString');
26
26
  var reactIntl = require('react-intl');
27
27
  var clamp = require('lodash/clamp');
28
28
 
@@ -1360,10 +1360,11 @@ var useMediaState = function useMediaState() {
1360
1360
  wantedPlaying = _ref$playing === void 0 ? false : _ref$playing,
1361
1361
  _ref$muted = _ref.muted,
1362
1362
  wantedMuted = _ref$muted === void 0 ? false : _ref$muted;
1363
+ var src = mediaElement !== null ? mediaElement.currentSrc || mediaElement.src : null;
1363
1364
  var debug = react.useMemo(function () {
1364
- var mediaKey = mediaElement !== null && isString(mediaElement.src) ? mediaElement.src.split('/')[mediaElement.src.split('/').length - 1].split('#')[0] || null : null;
1365
+ var mediaKey = src !== null ? src.split('/')[src.split('/').length - 1].split('#')[0] || null : null;
1365
1366
  return createDebug(mediaKey !== null ? "micromag:media:".concat(mediaKey) : 'micromag:media');
1366
- }, [mediaElement]);
1367
+ }, [src]);
1367
1368
  var _useState = react.useState(wantedPlaying),
1368
1369
  _useState2 = _slicedToArray(_useState, 2),
1369
1370
  playing = _useState2[0],
@@ -1393,20 +1394,20 @@ var useMediaState = function useMediaState() {
1393
1394
  wantedMuted: wantedMuted
1394
1395
  });
1395
1396
  }
1396
- }, [mediaElement, debug, wantedPlaying, wantedMuted]);
1397
+ }, [mediaElement, src, debug, wantedPlaying, wantedMuted]);
1397
1398
  react.useEffect(function () {
1398
1399
  if (mediaElement === null) {
1399
1400
  return function () {};
1400
1401
  }
1401
1402
  function onBufferingEvent(e) {
1402
1403
  // networkstate
1403
- if (mediaElement.networkState === mediaElement.NETWORK_LOADING) {
1404
+ if (mediaElement !== null && mediaElement.networkState === mediaElement.NETWORK_LOADING) {
1404
1405
  debug('onBufferingEvent: NETWORK_LOADING');
1405
1406
  setBuffering(true);
1406
1407
  }
1407
1408
 
1408
1409
  // readystate
1409
- if (mediaElement.readyState < mediaElement.HAVE_FUTURE_DATA) {
1410
+ if (mediaElement !== null && mediaElement.readyState < mediaElement.HAVE_FUTURE_DATA) {
1410
1411
  debug('onBufferingEvent: HAVE_FUTURE_DATA');
1411
1412
  setBuffering(true);
1412
1413
  }
@@ -1470,7 +1471,7 @@ var useMediaState = function useMediaState() {
1470
1471
  mediaElement.removeEventListener('ended', onEnded);
1471
1472
  mediaElement.removeEventListener('volumechange', onVolumeChange);
1472
1473
  };
1473
- }, [mediaElement, debug]);
1474
+ }, [mediaElement, debug, src]);
1474
1475
  return {
1475
1476
  playing: playing,
1476
1477
  muted: muted,
@@ -1775,10 +1776,10 @@ function useMediaReady(element) {
1775
1776
  }
1776
1777
  function updateReady() {
1777
1778
  var currentReady = ready;
1778
- if (element.readyState > 0 && !ready) {
1779
+ if (element !== null && element.readyState > 0 && !ready) {
1779
1780
  setReady(true);
1780
1781
  currentReady = true;
1781
- } else if (ready && element.readyState === 0) {
1782
+ } else if (ready && element !== null && element.readyState === 0) {
1782
1783
  setReady(false);
1783
1784
  currentReady = false;
1784
1785
  }
@@ -1786,17 +1787,20 @@ function useMediaReady(element) {
1786
1787
  return currentReady;
1787
1788
  }
1788
1789
  var currentReady = updateReady();
1789
- if (!currentReady) {
1790
- element.addEventListener('loadedmetadata', updateReady);
1791
- element.addEventListener('canplay', updateReady);
1792
- element.addEventListener('canplaythrough', updateReady);
1790
+ if (currentReady) {
1791
+ return function () {};
1793
1792
  }
1793
+ element.addEventListener('loadstart', updateReady);
1794
+ element.addEventListener('loadeddata', updateReady);
1795
+ element.addEventListener('loadedmetadata', updateReady);
1796
+ element.addEventListener('canplay', updateReady);
1797
+ element.addEventListener('canplaythrough', updateReady);
1794
1798
  return function () {
1795
- if (!currentReady) {
1796
- element.removeEventListener('loadedmetadata', updateReady);
1797
- element.removeEventListener('canplay', updateReady);
1798
- element.removeEventListener('canplaythrough', updateReady);
1799
- }
1799
+ element.removeEventListener('loadstart', updateReady);
1800
+ element.removeEventListener('loadeddata', updateReady);
1801
+ element.removeEventListener('loadedmetadata', updateReady);
1802
+ element.removeEventListener('canplay', updateReady);
1803
+ element.removeEventListener('canplaythrough', updateReady);
1800
1804
  };
1801
1805
  }, [element, id]);
1802
1806
  return realReady.current;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micromag/core",
3
- "version": "0.4.60",
3
+ "version": "0.4.64",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "keywords": [
@@ -161,6 +161,6 @@
161
161
  "access": "public",
162
162
  "registry": "https://registry.npmjs.org/"
163
163
  },
164
- "gitHead": "515ac855ce6094c26f37b1dbf413ee80064713e6",
164
+ "gitHead": "f41397bcb95639b70b526b3cf246006c3fd207e5",
165
165
  "types": "es/index.d.ts"
166
166
  }