@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.
- package/assets/css/vendor.css +2 -2
- package/es/components.d.ts +6 -6
- package/es/components.js +4 -4
- package/es/contexts.d.ts +32 -4
- package/es/contexts.js +21 -17
- package/es/hooks.d.ts +23 -5
- package/es/hooks.js +22 -18
- package/lib/components.js +4 -4
- package/lib/contexts.js +21 -17
- package/lib/hooks.js +22 -18
- package/package.json +2 -2
package/es/components.d.ts
CHANGED
|
@@ -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?:
|
|
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?:
|
|
33
|
-
refButton?:
|
|
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 ?
|
|
161
|
+
href: !disabled ? href : undefined,
|
|
162
162
|
className: linkClassNames,
|
|
163
163
|
onClick: onClick,
|
|
164
|
-
target: external ? target :
|
|
164
|
+
target: external ? target : undefined,
|
|
165
165
|
ref: refButton,
|
|
166
|
-
tabIndex: focusable ?
|
|
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 ?
|
|
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
|
-
|
|
358
|
-
|
|
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:
|
|
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
|
|
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
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
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
|
|
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
|
-
}) =>
|
|
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?:
|
|
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:
|
|
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:
|
|
166
|
-
id?:
|
|
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 =
|
|
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
|
-
}, [
|
|
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 (
|
|
1788
|
-
|
|
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
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
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 ?
|
|
163
|
+
href: !disabled ? href : undefined,
|
|
164
164
|
className: linkClassNames,
|
|
165
165
|
onClick: onClick,
|
|
166
|
-
target: external ? target :
|
|
166
|
+
target: external ? target : undefined,
|
|
167
167
|
ref: refButton,
|
|
168
|
-
tabIndex: focusable ?
|
|
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 ?
|
|
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
|
|
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
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
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
|
|
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 =
|
|
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
|
-
}, [
|
|
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 (
|
|
1790
|
-
|
|
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
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
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.
|
|
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": "
|
|
164
|
+
"gitHead": "f41397bcb95639b70b526b3cf246006c3fd207e5",
|
|
165
165
|
"types": "es/index.d.ts"
|
|
166
166
|
}
|