@micromag/core 0.3.156 → 0.3.162
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/es/contexts.js +26 -9
- package/es/hooks.js +203 -43
- package/lib/contexts.js +26 -8
- package/lib/hooks.js +204 -42
- package/package.json +3 -2
package/es/contexts.js
CHANGED
|
@@ -986,7 +986,11 @@ var PlaybackProvider = function PlaybackProvider(_ref) {
|
|
|
986
986
|
return true;
|
|
987
987
|
}
|
|
988
988
|
|
|
989
|
-
|
|
989
|
+
if (typeof media.dataset.hasAudio === 'undefined') {
|
|
990
|
+
return null;
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
return media.dataset.hasAudio === 'true' || media.dataset.hasAudio === true;
|
|
990
994
|
}, [media]);
|
|
991
995
|
var value = useMemo(function () {
|
|
992
996
|
return {
|
|
@@ -1931,10 +1935,17 @@ var useViewerEvents = function useViewerEvents() {
|
|
|
1931
1935
|
|
|
1932
1936
|
return events;
|
|
1933
1937
|
};
|
|
1934
|
-
var
|
|
1938
|
+
var useViewerContainer = function useViewerContainer() {
|
|
1935
1939
|
var _useViewerContext3 = useViewerContext(),
|
|
1936
|
-
|
|
1937
|
-
|
|
1940
|
+
_useViewerContext3$co = _useViewerContext3.containerRef,
|
|
1941
|
+
containerRef = _useViewerContext3$co === void 0 ? null : _useViewerContext3$co;
|
|
1942
|
+
|
|
1943
|
+
return containerRef !== null ? containerRef.current : null;
|
|
1944
|
+
};
|
|
1945
|
+
var useViewerInteraction = function useViewerInteraction() {
|
|
1946
|
+
var _useViewerContext4 = useViewerContext(),
|
|
1947
|
+
disableInteraction = _useViewerContext4.disableInteraction,
|
|
1948
|
+
enableInteraction = _useViewerContext4.enableInteraction;
|
|
1938
1949
|
|
|
1939
1950
|
return {
|
|
1940
1951
|
disableInteraction: disableInteraction,
|
|
@@ -1942,9 +1953,9 @@ var useViewerInteraction = function useViewerInteraction() {
|
|
|
1942
1953
|
};
|
|
1943
1954
|
};
|
|
1944
1955
|
var useViewerWebView = function useViewerWebView() {
|
|
1945
|
-
var
|
|
1946
|
-
webView =
|
|
1947
|
-
setWebView =
|
|
1956
|
+
var _useViewerContext5 = useViewerContext(),
|
|
1957
|
+
webView = _useViewerContext5.webView,
|
|
1958
|
+
setWebView = _useViewerContext5.setWebView;
|
|
1948
1959
|
|
|
1949
1960
|
var value = useMemo(function () {
|
|
1950
1961
|
return _objectSpread(_objectSpread({}, webView), {}, {
|
|
@@ -1967,6 +1978,10 @@ var useViewerWebView = function useViewerWebView() {
|
|
|
1967
1978
|
var propTypes$1 = {
|
|
1968
1979
|
children: PropTypes.node.isRequired,
|
|
1969
1980
|
events: PropTypes.instanceOf(EventEmitter),
|
|
1981
|
+
containerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({
|
|
1982
|
+
// eslint-disable-next-line react/forbid-prop-types
|
|
1983
|
+
current: PropTypes.any
|
|
1984
|
+
})]),
|
|
1970
1985
|
menuVisible: PropTypes.bool,
|
|
1971
1986
|
menuOverScreen: PropTypes.bool,
|
|
1972
1987
|
topHeight: PropTypes.number,
|
|
@@ -1982,6 +1997,7 @@ var defaultProps$1 = _objectSpread({}, defaultValue);
|
|
|
1982
1997
|
|
|
1983
1998
|
var ViewerProvider = function ViewerProvider(_ref) {
|
|
1984
1999
|
var children = _ref.children,
|
|
2000
|
+
containerRef = _ref.containerRef,
|
|
1985
2001
|
events = _ref.events,
|
|
1986
2002
|
menuVisible = _ref.menuVisible,
|
|
1987
2003
|
menuOverScreen = _ref.menuOverScreen,
|
|
@@ -2000,6 +2016,7 @@ var ViewerProvider = function ViewerProvider(_ref) {
|
|
|
2000
2016
|
|
|
2001
2017
|
var value = useMemo(function () {
|
|
2002
2018
|
return {
|
|
2019
|
+
containerRef: containerRef,
|
|
2003
2020
|
events: events,
|
|
2004
2021
|
menuVisible: menuVisible,
|
|
2005
2022
|
menuOverScreen: menuOverScreen,
|
|
@@ -2013,7 +2030,7 @@ var ViewerProvider = function ViewerProvider(_ref) {
|
|
|
2013
2030
|
webView: webView,
|
|
2014
2031
|
setWebView: setWebView
|
|
2015
2032
|
};
|
|
2016
|
-
}, [events, menuVisible, menuOverScreen, topHeight, bottomHeight, bottomSidesWidth, gotoNextScreen, gotoPreviousScreen, disableInteraction, enableInteraction, webView, setWebView]);
|
|
2033
|
+
}, [containerRef, events, menuVisible, menuOverScreen, topHeight, bottomHeight, bottomSidesWidth, gotoNextScreen, gotoPreviousScreen, disableInteraction, enableInteraction, webView, setWebView]);
|
|
2017
2034
|
return /*#__PURE__*/React.createElement(ViewerContext.Provider, {
|
|
2018
2035
|
value: value
|
|
2019
2036
|
}, children);
|
|
@@ -2076,4 +2093,4 @@ var VisitorProvider = function VisitorProvider(_ref) {
|
|
|
2076
2093
|
VisitorProvider.propTypes = propTypes;
|
|
2077
2094
|
VisitorProvider.defaultProps = defaultProps;
|
|
2078
2095
|
|
|
2079
|
-
export { ComponentsContext, ComponentsProvider, ELEMENTS_NAMESPACE, EditorContext, EditorProvider, FIELDS_NAMESPACE, FORMS_NAMESPACE, FieldContext, FieldContextProvider, FieldsContext, FieldsProvider, FieldsValueContext, FieldsValueContextProvider, FontsContext, FontsProvider, GoogleApiClientContext, GoogleApiClientProvider, GoogleKeysContext, GoogleKeysProvider, GoogleMapsClientContext, GoogleMapsClientProvider, MODALS_NAMESPACE, ModalsContext, ModalsProvider, PanelsContext, PanelsProvider, PlaybackContext, PlaybackProvider, RoutesContext, RoutesProvider, SCREENS_NAMESPACE, ScreenContext, ScreenProvider, ScreenSizeContext, ScreenSizeProvider, ScreensContext, ScreensProvider, StoryContext, StoryProvider, TrackingProvider, UppyContext, UppyProvider, UserInteractionContext, UserInteractionProvider, ViewerContext, ViewerProvider, VisitorContext, VisitorProvider, useComponent, useComponents, useComponentsManager, useEditor, useElementComponent, useElementsComponents, useElementsComponentsManager, useFieldComponent, useFieldContext, useFieldDefinition, useFieldsComponents, useFieldsComponentsManager, useFieldsManager, useFieldsValue, useFonts, useFormComponent, useFormsComponents, useFormsComponentsManager, useGetColors, useGoogleApiClient, useGoogleFonts, useGoogleKeys, useGoogleMapsClient, useModalComponent, useModals, useModalsComponents, useModalsComponentsManager, usePanels, usePlaybackContext, usePlaybackMediaRef, useRouteBack, useRoutePush, useRoutes, useScreen, useScreenComponent, useScreenData, useScreenDefinition, useScreenRenderContext, useScreenSize, useScreenState, useScreensComponents, useScreensComponentsManager, useScreensManager, useSetVisitor, useStory, useStoryContext, useTracking, useUppy, useUrlGenerator, useUserInteracted, useViewerContext, useViewerEvents, useViewerInteraction, useViewerNavigation, useViewerWebView, useVisitor, useVisitorContext, withGoogleApiClient, withGoogleMapsClient, withModals, withPanels };
|
|
2096
|
+
export { ComponentsContext, ComponentsProvider, ELEMENTS_NAMESPACE, EditorContext, EditorProvider, FIELDS_NAMESPACE, FORMS_NAMESPACE, FieldContext, FieldContextProvider, FieldsContext, FieldsProvider, FieldsValueContext, FieldsValueContextProvider, FontsContext, FontsProvider, GoogleApiClientContext, GoogleApiClientProvider, GoogleKeysContext, GoogleKeysProvider, GoogleMapsClientContext, GoogleMapsClientProvider, MODALS_NAMESPACE, ModalsContext, ModalsProvider, PanelsContext, PanelsProvider, PlaybackContext, PlaybackProvider, RoutesContext, RoutesProvider, SCREENS_NAMESPACE, ScreenContext, ScreenProvider, ScreenSizeContext, ScreenSizeProvider, ScreensContext, ScreensProvider, StoryContext, StoryProvider, TrackingProvider, UppyContext, UppyProvider, UserInteractionContext, UserInteractionProvider, ViewerContext, ViewerProvider, VisitorContext, VisitorProvider, useComponent, useComponents, useComponentsManager, useEditor, useElementComponent, useElementsComponents, useElementsComponentsManager, useFieldComponent, useFieldContext, useFieldDefinition, useFieldsComponents, useFieldsComponentsManager, useFieldsManager, useFieldsValue, useFonts, useFormComponent, useFormsComponents, useFormsComponentsManager, useGetColors, useGoogleApiClient, useGoogleFonts, useGoogleKeys, useGoogleMapsClient, useModalComponent, useModals, useModalsComponents, useModalsComponentsManager, usePanels, usePlaybackContext, usePlaybackMediaRef, useRouteBack, useRoutePush, useRoutes, useScreen, useScreenComponent, useScreenData, useScreenDefinition, useScreenRenderContext, useScreenSize, useScreenState, useScreensComponents, useScreensComponentsManager, useScreensManager, useSetVisitor, useStory, useStoryContext, useTracking, useUppy, useUrlGenerator, useUserInteracted, useViewerContainer, useViewerContext, useViewerEvents, useViewerInteraction, useViewerNavigation, useViewerWebView, useVisitor, useVisitorContext, withGoogleApiClient, withGoogleMapsClient, withModals, withPanels };
|
package/es/hooks.js
CHANGED
|
@@ -14,6 +14,7 @@ import screenfull from 'screenfull';
|
|
|
14
14
|
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
15
15
|
import isArray from 'lodash/isArray';
|
|
16
16
|
import isObject from 'lodash/isObject';
|
|
17
|
+
import raf from 'raf';
|
|
17
18
|
import { useScreensManager, useFieldsManager, useTracking, useScreen } from '@micromag/core/contexts';
|
|
18
19
|
import { match } from 'css-mediaquery';
|
|
19
20
|
import { useSprings } from '@react-spring/core';
|
|
@@ -22,18 +23,26 @@ import clamp from 'lodash/clamp';
|
|
|
22
23
|
|
|
23
24
|
function useActivityDetector() {
|
|
24
25
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
26
|
+
_ref$element = _ref.element,
|
|
27
|
+
providedElement = _ref$element === void 0 ? null : _ref$element,
|
|
25
28
|
_ref$disabled = _ref.disabled,
|
|
26
29
|
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
27
30
|
_ref$timeout = _ref.timeout,
|
|
28
31
|
timeoutDelay = _ref$timeout === void 0 ? 2000 : _ref$timeout;
|
|
29
32
|
|
|
30
|
-
var ref = useRef(
|
|
33
|
+
var ref = useRef(providedElement);
|
|
31
34
|
|
|
32
35
|
var _useState = useState(false),
|
|
33
36
|
_useState2 = _slicedToArray(_useState, 2),
|
|
34
37
|
detected = _useState2[0],
|
|
35
38
|
setDetected = _useState2[1];
|
|
36
39
|
|
|
40
|
+
var detectedRef = useRef(detected);
|
|
41
|
+
|
|
42
|
+
if (providedElement !== null && providedElement !== ref.current) {
|
|
43
|
+
ref.current = providedElement;
|
|
44
|
+
}
|
|
45
|
+
|
|
37
46
|
useEffect(function () {
|
|
38
47
|
var _ref$current = ref.current,
|
|
39
48
|
element = _ref$current === void 0 ? null : _ref$current;
|
|
@@ -44,28 +53,49 @@ function useActivityDetector() {
|
|
|
44
53
|
|
|
45
54
|
var timeout = null;
|
|
46
55
|
|
|
47
|
-
function
|
|
56
|
+
function onActivity() {
|
|
48
57
|
if (timeout !== null) {
|
|
49
58
|
clearTimeout(timeout);
|
|
50
59
|
timeout = null;
|
|
51
60
|
}
|
|
52
61
|
|
|
53
|
-
|
|
62
|
+
if (!detectedRef.current) {
|
|
63
|
+
detectedRef.current = true;
|
|
64
|
+
setDetected(true);
|
|
65
|
+
}
|
|
66
|
+
|
|
54
67
|
timeout = setTimeout(function () {
|
|
68
|
+
detectedRef.current = false;
|
|
55
69
|
setDetected(false);
|
|
56
70
|
}, timeoutDelay);
|
|
57
71
|
}
|
|
58
72
|
|
|
59
|
-
element.addEventListener('
|
|
73
|
+
element.addEventListener('keydown', onActivity);
|
|
74
|
+
element.addEventListener('mousedown', onActivity);
|
|
75
|
+
element.addEventListener('mousemove', onActivity);
|
|
76
|
+
element.addEventListener('mouseup', onActivity);
|
|
77
|
+
element.addEventListener('pointerdown', onActivity);
|
|
78
|
+
element.addEventListener('pointermove', onActivity);
|
|
79
|
+
element.addEventListener('pointerup', onActivity);
|
|
80
|
+
element.addEventListener('touchmove', onActivity);
|
|
81
|
+
element.addEventListener('touchstart', onActivity);
|
|
60
82
|
return function () {
|
|
61
83
|
if (timeout !== null) {
|
|
62
84
|
clearTimeout(timeout);
|
|
63
85
|
timeout = null;
|
|
64
86
|
}
|
|
65
87
|
|
|
66
|
-
element.removeEventListener('
|
|
88
|
+
element.removeEventListener('keydown', onActivity);
|
|
89
|
+
element.removeEventListener('mousedown', onActivity);
|
|
90
|
+
element.removeEventListener('mousemove', onActivity);
|
|
91
|
+
element.removeEventListener('mouseup', onActivity);
|
|
92
|
+
element.removeEventListener('pointerdown', onActivity);
|
|
93
|
+
element.removeEventListener('pointermove', onActivity);
|
|
94
|
+
element.removeEventListener('pointerup', onActivity);
|
|
95
|
+
element.removeEventListener('touchmove', onActivity);
|
|
96
|
+
element.removeEventListener('touchstart', onActivity);
|
|
67
97
|
};
|
|
68
|
-
}, [disabled, timeoutDelay]);
|
|
98
|
+
}, [providedElement, disabled, timeoutDelay]);
|
|
69
99
|
return {
|
|
70
100
|
ref: ref,
|
|
71
101
|
detected: detected
|
|
@@ -166,7 +196,7 @@ var useFormattedTime = function useFormattedTime() {
|
|
|
166
196
|
var eventsManager$1 = typeof document !== 'undefined' ? new EventsManager(document) : null;
|
|
167
197
|
var useDocumentEvent = createUseEvent(eventsManager$1);
|
|
168
198
|
|
|
169
|
-
var _excluded$
|
|
199
|
+
var _excluded$3 = ["fields", "injectInFields"],
|
|
170
200
|
_excluded2 = ["fields"];
|
|
171
201
|
|
|
172
202
|
var useForm = function useForm() {
|
|
@@ -175,7 +205,7 @@ var useForm = function useForm() {
|
|
|
175
205
|
providedFields = _ref$fields === void 0 ? [] : _ref$fields,
|
|
176
206
|
_ref$injectInFields = _ref.injectInFields,
|
|
177
207
|
injectInFields = _ref$injectInFields === void 0 ? false : _ref$injectInFields,
|
|
178
|
-
opts = _objectWithoutProperties(_ref, _excluded$
|
|
208
|
+
opts = _objectWithoutProperties(_ref, _excluded$3);
|
|
179
209
|
|
|
180
210
|
var fieldsNames = useMemo(function () {
|
|
181
211
|
return providedFields.length > 0 ? providedFields.map(function (_ref2) {
|
|
@@ -282,7 +312,7 @@ var useFullscreen = function useFullscreen(element) {
|
|
|
282
312
|
};
|
|
283
313
|
};
|
|
284
314
|
|
|
285
|
-
var _excluded$
|
|
315
|
+
var _excluded$2 = ["entry"];
|
|
286
316
|
|
|
287
317
|
var buildThresholdArray = function buildThresholdArray() {
|
|
288
318
|
return [0, 1.0];
|
|
@@ -528,7 +558,7 @@ var useResizeObserver = function useResizeObserver() {
|
|
|
528
558
|
var useDimensionObserver = function useDimensionObserver() {
|
|
529
559
|
var _useResizeObserver = useResizeObserver.apply(void 0, arguments),
|
|
530
560
|
entry = _useResizeObserver.entry,
|
|
531
|
-
rest = _objectWithoutProperties(_useResizeObserver, _excluded$
|
|
561
|
+
rest = _objectWithoutProperties(_useResizeObserver, _excluded$2);
|
|
532
562
|
|
|
533
563
|
var _ref5 = entry || {},
|
|
534
564
|
_ref5$contentRect = _ref5.contentRect,
|
|
@@ -1165,47 +1195,63 @@ function useMediaCurrentTime(element) {
|
|
|
1165
1195
|
setCurrentTime = _useState2[1];
|
|
1166
1196
|
|
|
1167
1197
|
var realCurrentTime = useRef(currentTime);
|
|
1168
|
-
var
|
|
1169
|
-
var
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1198
|
+
var finalId = id || element;
|
|
1199
|
+
var lastIdRef = useRef(finalId);
|
|
1200
|
+
var idChanged = lastIdRef.current !== finalId;
|
|
1201
|
+
var disabledRef = useRef(disabled);
|
|
1202
|
+
var disabledChanged = disabledRef.current !== disabled;
|
|
1203
|
+
|
|
1204
|
+
if (idChanged || disabledChanged) {
|
|
1205
|
+
realCurrentTime.current = element !== null ? element.currentTime || 0 : 0;
|
|
1206
|
+
lastIdRef.current = finalId;
|
|
1207
|
+
disabledRef.current = disabled;
|
|
1174
1208
|
} // Check time update
|
|
1175
1209
|
|
|
1176
1210
|
|
|
1177
1211
|
useEffect(function () {
|
|
1178
|
-
if (
|
|
1212
|
+
if (element === null) {
|
|
1179
1213
|
return function () {};
|
|
1180
1214
|
}
|
|
1181
1215
|
|
|
1182
|
-
|
|
1216
|
+
function updateTime() {
|
|
1217
|
+
var time = element.currentTime || 0;
|
|
1183
1218
|
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1219
|
+
if (time !== realCurrentTime.current) {
|
|
1220
|
+
realCurrentTime.current = time;
|
|
1221
|
+
setCurrentTime(time);
|
|
1222
|
+
|
|
1223
|
+
if (customOnUpdate !== null) {
|
|
1224
|
+
customOnUpdate(time);
|
|
1225
|
+
}
|
|
1187
1226
|
}
|
|
1188
1227
|
|
|
1189
|
-
|
|
1190
|
-
|
|
1228
|
+
return time;
|
|
1229
|
+
}
|
|
1191
1230
|
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
}
|
|
1195
|
-
}
|
|
1231
|
+
if (disabled) {
|
|
1232
|
+
updateTime();
|
|
1233
|
+
return function () {};
|
|
1234
|
+
}
|
|
1196
1235
|
|
|
1197
|
-
var
|
|
1198
|
-
var time = element.currentTime;
|
|
1236
|
+
var timeout = null;
|
|
1199
1237
|
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1238
|
+
function loop() {
|
|
1239
|
+
var _element$duration = element.duration,
|
|
1240
|
+
duration = _element$duration === void 0 ? 0 : _element$duration;
|
|
1241
|
+
var time = updateTime();
|
|
1242
|
+
var remainingTime = Math.floor(((duration || 0) - time) * 1000);
|
|
1243
|
+
timeout = setTimeout(loop, Math.max(Math.min(updateInterval, remainingTime), updateInterval));
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1246
|
+
loop();
|
|
1206
1247
|
return function () {
|
|
1207
|
-
|
|
1208
|
-
|
|
1248
|
+
if (element !== null) {
|
|
1249
|
+
realCurrentTime.current = element.currentTime;
|
|
1250
|
+
}
|
|
1251
|
+
|
|
1252
|
+
if (timeout !== null) {
|
|
1253
|
+
clearInterval(timeout);
|
|
1254
|
+
}
|
|
1209
1255
|
};
|
|
1210
1256
|
}, [id, element, setCurrentTime, disabled, updateInterval]);
|
|
1211
1257
|
return realCurrentTime.current;
|
|
@@ -1222,12 +1268,13 @@ function useMediaDuration(element) {
|
|
|
1222
1268
|
setDuration = _useState2[1];
|
|
1223
1269
|
|
|
1224
1270
|
var realDuration = useRef(duration);
|
|
1225
|
-
var
|
|
1226
|
-
var
|
|
1271
|
+
var finalId = id || element;
|
|
1272
|
+
var lastIdRef = useRef(finalId);
|
|
1273
|
+
var idChanged = lastIdRef.current !== finalId;
|
|
1227
1274
|
|
|
1228
1275
|
if (idChanged) {
|
|
1229
1276
|
realDuration.current = element !== null ? element.duration || 0 : 0;
|
|
1230
|
-
lastIdRef.current =
|
|
1277
|
+
lastIdRef.current = finalId;
|
|
1231
1278
|
}
|
|
1232
1279
|
|
|
1233
1280
|
useEffect(function () {
|
|
@@ -1236,14 +1283,20 @@ function useMediaDuration(element) {
|
|
|
1236
1283
|
}
|
|
1237
1284
|
|
|
1238
1285
|
function updateDuration() {
|
|
1239
|
-
|
|
1240
|
-
|
|
1286
|
+
var newDuration = element.duration || 0;
|
|
1287
|
+
|
|
1288
|
+
if (newDuration !== realDuration.current) {
|
|
1289
|
+
realDuration.current = newDuration;
|
|
1290
|
+
setDuration(newDuration);
|
|
1291
|
+
}
|
|
1241
1292
|
}
|
|
1242
1293
|
|
|
1243
1294
|
updateDuration();
|
|
1295
|
+
element.addEventListener('canplay', updateDuration);
|
|
1244
1296
|
element.addEventListener('loadedmetadata', updateDuration);
|
|
1245
1297
|
element.addEventListener('durationchange', updateDuration);
|
|
1246
1298
|
return function () {
|
|
1299
|
+
element.removeEventListener('canplay', updateDuration);
|
|
1247
1300
|
element.removeEventListener('loadedmetadata', updateDuration);
|
|
1248
1301
|
element.removeEventListener('durationchange', updateDuration);
|
|
1249
1302
|
};
|
|
@@ -1274,6 +1327,113 @@ function useMediaLoad(element) {
|
|
|
1274
1327
|
}, [element, shouldLoad, preload]);
|
|
1275
1328
|
}
|
|
1276
1329
|
|
|
1330
|
+
var _excluded$1 = ["disabled"];
|
|
1331
|
+
|
|
1332
|
+
function useMediaProgress(media) {
|
|
1333
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
1334
|
+
_ref$disabled = _ref.disabled,
|
|
1335
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
1336
|
+
props = _objectWithoutProperties(_ref, _excluded$1);
|
|
1337
|
+
|
|
1338
|
+
var _useState = useState(!disabled),
|
|
1339
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
1340
|
+
playing = _useState2[0],
|
|
1341
|
+
setPlaying = _useState2[1];
|
|
1342
|
+
|
|
1343
|
+
var currentTime = useMediaCurrentTime(media, _objectSpread({
|
|
1344
|
+
disabled: disabled || !playing
|
|
1345
|
+
}, props));
|
|
1346
|
+
var duration = useMediaDuration(media, _objectSpread({
|
|
1347
|
+
disabled: disabled || !playing
|
|
1348
|
+
}, props));
|
|
1349
|
+
|
|
1350
|
+
var _useState3 = useState(currentTime > 0 && duration > 0 ? currentTime / duration : 0),
|
|
1351
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
1352
|
+
progress = _useState4[0],
|
|
1353
|
+
setProgress = _useState4[1];
|
|
1354
|
+
|
|
1355
|
+
var realProgressRef = useRef(progress);
|
|
1356
|
+
var updateTimeRef = useRef(new Date().getTime());
|
|
1357
|
+
var updateProgress = useCallback(function (newProgress) {
|
|
1358
|
+
updateTimeRef.current = new Date().getTime();
|
|
1359
|
+
realProgressRef.current = newProgress;
|
|
1360
|
+
setProgress(newProgress);
|
|
1361
|
+
}, [setProgress]);
|
|
1362
|
+
useEffect(function () {
|
|
1363
|
+
if (media === null) {
|
|
1364
|
+
return function () {};
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
function onResume() {
|
|
1368
|
+
setPlaying(true);
|
|
1369
|
+
updateProgress(media.currentTime / media.duration);
|
|
1370
|
+
}
|
|
1371
|
+
|
|
1372
|
+
function onPause() {
|
|
1373
|
+
setPlaying(false);
|
|
1374
|
+
updateProgress(media.currentTime / media.duration);
|
|
1375
|
+
}
|
|
1376
|
+
|
|
1377
|
+
media.addEventListener('play', onResume);
|
|
1378
|
+
media.addEventListener('seeked', onResume);
|
|
1379
|
+
media.addEventListener('playing', onResume);
|
|
1380
|
+
media.addEventListener('pause', onPause);
|
|
1381
|
+
media.addEventListener('ended', onPause);
|
|
1382
|
+
media.addEventListener('waiting', onPause);
|
|
1383
|
+
media.addEventListener('stalled', onPause);
|
|
1384
|
+
media.addEventListener('seeking', onPause); // media.addEventListener('suspend', onPause);
|
|
1385
|
+
// if (media.paused) {
|
|
1386
|
+
// onPause();
|
|
1387
|
+
// } else {
|
|
1388
|
+
// onResume();
|
|
1389
|
+
// }
|
|
1390
|
+
|
|
1391
|
+
return function () {
|
|
1392
|
+
media.removeEventListener('play', onResume);
|
|
1393
|
+
media.removeEventListener('seeked', onResume);
|
|
1394
|
+
media.removeEventListener('playing', onResume);
|
|
1395
|
+
media.removeEventListener('pause', onPause);
|
|
1396
|
+
media.removeEventListener('ended', onPause);
|
|
1397
|
+
media.removeEventListener('waiting', onPause);
|
|
1398
|
+
media.removeEventListener('stalled', onPause);
|
|
1399
|
+
media.removeEventListener('seeking', onPause); // media.removeEventListener('suspend', onPause);
|
|
1400
|
+
};
|
|
1401
|
+
}, [media, updateProgress]);
|
|
1402
|
+
useEffect(function () {
|
|
1403
|
+
if (media === null) {
|
|
1404
|
+
return function () {};
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
if (!playing || disabled) {
|
|
1408
|
+
return function () {};
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
var handle;
|
|
1412
|
+
var canceled = false;
|
|
1413
|
+
|
|
1414
|
+
function tick() {
|
|
1415
|
+
if (canceled) {
|
|
1416
|
+
return;
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
var newTime = new Date().getTime();
|
|
1420
|
+
var elapsed = newTime - updateTimeRef.current;
|
|
1421
|
+
updateTimeRef.current = newTime;
|
|
1422
|
+
var step = elapsed / (duration * 1000);
|
|
1423
|
+
var newProgress = realProgressRef.current + step;
|
|
1424
|
+
updateProgress(newProgress);
|
|
1425
|
+
handle = raf(tick);
|
|
1426
|
+
}
|
|
1427
|
+
|
|
1428
|
+
tick();
|
|
1429
|
+
return function () {
|
|
1430
|
+
canceled = true;
|
|
1431
|
+
raf.cancel(handle);
|
|
1432
|
+
};
|
|
1433
|
+
}, [media, playing, disabled, duration, updateProgress]);
|
|
1434
|
+
return realProgressRef.current;
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1277
1437
|
function useMediaReady(element) {
|
|
1278
1438
|
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
1279
1439
|
_ref$id = _ref.id,
|
|
@@ -2012,4 +2172,4 @@ var useTrackMedia = function useTrackMedia() {
|
|
|
2012
2172
|
var eventsManager = typeof window !== 'undefined' ? new EventsManager(window) : null;
|
|
2013
2173
|
var useWindowEvent = createUseEvent(eventsManager);
|
|
2014
2174
|
|
|
2015
|
-
export { getObserver, useActivityDetector, useAnimationFrame, useDimensionObserver, useDocumentEvent, useForm, useFormTransition, useFormattedDate, useFormattedTime, useFullscreen, useIntersectionObserver, useIsVisible, useLoadedFonts, useLongPress, useMediaApi, useMediaCurrentTime, useMediaDuration, useMediaLoad, useMediaReady, useMediaThumbnail, useMediaWaveform, useMediasParser, useObserver, useParsedStory, useProgressSteps, useResizeObserver, useScreenSizeFromElement, useScreenSizeFromWindow, useSwipe, useThemeParser, useTrackEvent, useTrackMedia, useTrackScreenEvent, useTrackScreenMedia, useTrackScreenView, useWindowEvent };
|
|
2175
|
+
export { getObserver, useActivityDetector, useAnimationFrame, useDimensionObserver, useDocumentEvent, useForm, useFormTransition, useFormattedDate, useFormattedTime, useFullscreen, useIntersectionObserver, useIsVisible, useLoadedFonts, useLongPress, useMediaApi, useMediaCurrentTime, useMediaDuration, useMediaLoad, useMediaProgress, useMediaReady, useMediaThumbnail, useMediaWaveform, useMediasParser, useObserver, useParsedStory, useProgressSteps, useResizeObserver, useScreenSizeFromElement, useScreenSizeFromWindow, useSwipe, useThemeParser, useTrackEvent, useTrackMedia, useTrackScreenEvent, useTrackScreenMedia, useTrackScreenView, useWindowEvent };
|
package/lib/contexts.js
CHANGED
|
@@ -1021,7 +1021,11 @@ var PlaybackProvider = function PlaybackProvider(_ref) {
|
|
|
1021
1021
|
return true;
|
|
1022
1022
|
}
|
|
1023
1023
|
|
|
1024
|
-
|
|
1024
|
+
if (typeof media.dataset.hasAudio === 'undefined') {
|
|
1025
|
+
return null;
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
return media.dataset.hasAudio === 'true' || media.dataset.hasAudio === true;
|
|
1025
1029
|
}, [media]);
|
|
1026
1030
|
var value = React.useMemo(function () {
|
|
1027
1031
|
return {
|
|
@@ -1966,10 +1970,17 @@ var useViewerEvents = function useViewerEvents() {
|
|
|
1966
1970
|
|
|
1967
1971
|
return events;
|
|
1968
1972
|
};
|
|
1969
|
-
var
|
|
1973
|
+
var useViewerContainer = function useViewerContainer() {
|
|
1970
1974
|
var _useViewerContext3 = useViewerContext(),
|
|
1971
|
-
|
|
1972
|
-
|
|
1975
|
+
_useViewerContext3$co = _useViewerContext3.containerRef,
|
|
1976
|
+
containerRef = _useViewerContext3$co === void 0 ? null : _useViewerContext3$co;
|
|
1977
|
+
|
|
1978
|
+
return containerRef !== null ? containerRef.current : null;
|
|
1979
|
+
};
|
|
1980
|
+
var useViewerInteraction = function useViewerInteraction() {
|
|
1981
|
+
var _useViewerContext4 = useViewerContext(),
|
|
1982
|
+
disableInteraction = _useViewerContext4.disableInteraction,
|
|
1983
|
+
enableInteraction = _useViewerContext4.enableInteraction;
|
|
1973
1984
|
|
|
1974
1985
|
return {
|
|
1975
1986
|
disableInteraction: disableInteraction,
|
|
@@ -1977,9 +1988,9 @@ var useViewerInteraction = function useViewerInteraction() {
|
|
|
1977
1988
|
};
|
|
1978
1989
|
};
|
|
1979
1990
|
var useViewerWebView = function useViewerWebView() {
|
|
1980
|
-
var
|
|
1981
|
-
webView =
|
|
1982
|
-
setWebView =
|
|
1991
|
+
var _useViewerContext5 = useViewerContext(),
|
|
1992
|
+
webView = _useViewerContext5.webView,
|
|
1993
|
+
setWebView = _useViewerContext5.setWebView;
|
|
1983
1994
|
|
|
1984
1995
|
var value = React.useMemo(function () {
|
|
1985
1996
|
return _objectSpread__default["default"](_objectSpread__default["default"]({}, webView), {}, {
|
|
@@ -2002,6 +2013,10 @@ var useViewerWebView = function useViewerWebView() {
|
|
|
2002
2013
|
var propTypes$1 = {
|
|
2003
2014
|
children: PropTypes__default["default"].node.isRequired,
|
|
2004
2015
|
events: PropTypes__default["default"].instanceOf(EventEmitter__default["default"]),
|
|
2016
|
+
containerRef: PropTypes__default["default"].oneOfType([PropTypes__default["default"].func, PropTypes__default["default"].shape({
|
|
2017
|
+
// eslint-disable-next-line react/forbid-prop-types
|
|
2018
|
+
current: PropTypes__default["default"].any
|
|
2019
|
+
})]),
|
|
2005
2020
|
menuVisible: PropTypes__default["default"].bool,
|
|
2006
2021
|
menuOverScreen: PropTypes__default["default"].bool,
|
|
2007
2022
|
topHeight: PropTypes__default["default"].number,
|
|
@@ -2017,6 +2032,7 @@ var defaultProps$1 = _objectSpread__default["default"]({}, defaultValue);
|
|
|
2017
2032
|
|
|
2018
2033
|
var ViewerProvider = function ViewerProvider(_ref) {
|
|
2019
2034
|
var children = _ref.children,
|
|
2035
|
+
containerRef = _ref.containerRef,
|
|
2020
2036
|
events = _ref.events,
|
|
2021
2037
|
menuVisible = _ref.menuVisible,
|
|
2022
2038
|
menuOverScreen = _ref.menuOverScreen,
|
|
@@ -2035,6 +2051,7 @@ var ViewerProvider = function ViewerProvider(_ref) {
|
|
|
2035
2051
|
|
|
2036
2052
|
var value = React.useMemo(function () {
|
|
2037
2053
|
return {
|
|
2054
|
+
containerRef: containerRef,
|
|
2038
2055
|
events: events,
|
|
2039
2056
|
menuVisible: menuVisible,
|
|
2040
2057
|
menuOverScreen: menuOverScreen,
|
|
@@ -2048,7 +2065,7 @@ var ViewerProvider = function ViewerProvider(_ref) {
|
|
|
2048
2065
|
webView: webView,
|
|
2049
2066
|
setWebView: setWebView
|
|
2050
2067
|
};
|
|
2051
|
-
}, [events, menuVisible, menuOverScreen, topHeight, bottomHeight, bottomSidesWidth, gotoNextScreen, gotoPreviousScreen, disableInteraction, enableInteraction, webView, setWebView]);
|
|
2068
|
+
}, [containerRef, events, menuVisible, menuOverScreen, topHeight, bottomHeight, bottomSidesWidth, gotoNextScreen, gotoPreviousScreen, disableInteraction, enableInteraction, webView, setWebView]);
|
|
2052
2069
|
return /*#__PURE__*/React__default["default"].createElement(ViewerContext.Provider, {
|
|
2053
2070
|
value: value
|
|
2054
2071
|
}, children);
|
|
@@ -2213,6 +2230,7 @@ exports.useTracking = useTracking;
|
|
|
2213
2230
|
exports.useUppy = useUppy;
|
|
2214
2231
|
exports.useUrlGenerator = useUrlGenerator;
|
|
2215
2232
|
exports.useUserInteracted = useUserInteracted;
|
|
2233
|
+
exports.useViewerContainer = useViewerContainer;
|
|
2216
2234
|
exports.useViewerContext = useViewerContext;
|
|
2217
2235
|
exports.useViewerEvents = useViewerEvents;
|
|
2218
2236
|
exports.useViewerInteraction = useViewerInteraction;
|
package/lib/hooks.js
CHANGED
|
@@ -18,6 +18,7 @@ var screenfull = require('screenfull');
|
|
|
18
18
|
var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
|
|
19
19
|
var isArray = require('lodash/isArray');
|
|
20
20
|
var isObject = require('lodash/isObject');
|
|
21
|
+
var raf = require('raf');
|
|
21
22
|
var contexts = require('@micromag/core/contexts');
|
|
22
23
|
var cssMediaquery = require('css-mediaquery');
|
|
23
24
|
var core$1 = require('@react-spring/core');
|
|
@@ -55,22 +56,31 @@ var screenfull__default = /*#__PURE__*/_interopDefaultLegacy(screenfull);
|
|
|
55
56
|
var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
|
|
56
57
|
var isArray__default = /*#__PURE__*/_interopDefaultLegacy(isArray);
|
|
57
58
|
var isObject__default = /*#__PURE__*/_interopDefaultLegacy(isObject);
|
|
59
|
+
var raf__default = /*#__PURE__*/_interopDefaultLegacy(raf);
|
|
58
60
|
var clamp__default = /*#__PURE__*/_interopDefaultLegacy(clamp);
|
|
59
61
|
|
|
60
62
|
function useActivityDetector() {
|
|
61
63
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
64
|
+
_ref$element = _ref.element,
|
|
65
|
+
providedElement = _ref$element === void 0 ? null : _ref$element,
|
|
62
66
|
_ref$disabled = _ref.disabled,
|
|
63
67
|
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
64
68
|
_ref$timeout = _ref.timeout,
|
|
65
69
|
timeoutDelay = _ref$timeout === void 0 ? 2000 : _ref$timeout;
|
|
66
70
|
|
|
67
|
-
var ref = react.useRef(
|
|
71
|
+
var ref = react.useRef(providedElement);
|
|
68
72
|
|
|
69
73
|
var _useState = react.useState(false),
|
|
70
74
|
_useState2 = _slicedToArray__default["default"](_useState, 2),
|
|
71
75
|
detected = _useState2[0],
|
|
72
76
|
setDetected = _useState2[1];
|
|
73
77
|
|
|
78
|
+
var detectedRef = react.useRef(detected);
|
|
79
|
+
|
|
80
|
+
if (providedElement !== null && providedElement !== ref.current) {
|
|
81
|
+
ref.current = providedElement;
|
|
82
|
+
}
|
|
83
|
+
|
|
74
84
|
react.useEffect(function () {
|
|
75
85
|
var _ref$current = ref.current,
|
|
76
86
|
element = _ref$current === void 0 ? null : _ref$current;
|
|
@@ -81,28 +91,49 @@ function useActivityDetector() {
|
|
|
81
91
|
|
|
82
92
|
var timeout = null;
|
|
83
93
|
|
|
84
|
-
function
|
|
94
|
+
function onActivity() {
|
|
85
95
|
if (timeout !== null) {
|
|
86
96
|
clearTimeout(timeout);
|
|
87
97
|
timeout = null;
|
|
88
98
|
}
|
|
89
99
|
|
|
90
|
-
|
|
100
|
+
if (!detectedRef.current) {
|
|
101
|
+
detectedRef.current = true;
|
|
102
|
+
setDetected(true);
|
|
103
|
+
}
|
|
104
|
+
|
|
91
105
|
timeout = setTimeout(function () {
|
|
106
|
+
detectedRef.current = false;
|
|
92
107
|
setDetected(false);
|
|
93
108
|
}, timeoutDelay);
|
|
94
109
|
}
|
|
95
110
|
|
|
96
|
-
element.addEventListener('
|
|
111
|
+
element.addEventListener('keydown', onActivity);
|
|
112
|
+
element.addEventListener('mousedown', onActivity);
|
|
113
|
+
element.addEventListener('mousemove', onActivity);
|
|
114
|
+
element.addEventListener('mouseup', onActivity);
|
|
115
|
+
element.addEventListener('pointerdown', onActivity);
|
|
116
|
+
element.addEventListener('pointermove', onActivity);
|
|
117
|
+
element.addEventListener('pointerup', onActivity);
|
|
118
|
+
element.addEventListener('touchmove', onActivity);
|
|
119
|
+
element.addEventListener('touchstart', onActivity);
|
|
97
120
|
return function () {
|
|
98
121
|
if (timeout !== null) {
|
|
99
122
|
clearTimeout(timeout);
|
|
100
123
|
timeout = null;
|
|
101
124
|
}
|
|
102
125
|
|
|
103
|
-
element.removeEventListener('
|
|
126
|
+
element.removeEventListener('keydown', onActivity);
|
|
127
|
+
element.removeEventListener('mousedown', onActivity);
|
|
128
|
+
element.removeEventListener('mousemove', onActivity);
|
|
129
|
+
element.removeEventListener('mouseup', onActivity);
|
|
130
|
+
element.removeEventListener('pointerdown', onActivity);
|
|
131
|
+
element.removeEventListener('pointermove', onActivity);
|
|
132
|
+
element.removeEventListener('pointerup', onActivity);
|
|
133
|
+
element.removeEventListener('touchmove', onActivity);
|
|
134
|
+
element.removeEventListener('touchstart', onActivity);
|
|
104
135
|
};
|
|
105
|
-
}, [disabled, timeoutDelay]);
|
|
136
|
+
}, [providedElement, disabled, timeoutDelay]);
|
|
106
137
|
return {
|
|
107
138
|
ref: ref,
|
|
108
139
|
detected: detected
|
|
@@ -203,7 +234,7 @@ var useFormattedTime = function useFormattedTime() {
|
|
|
203
234
|
var eventsManager$1 = typeof document !== 'undefined' ? new core.EventsManager(document) : null;
|
|
204
235
|
var useDocumentEvent = utils.createUseEvent(eventsManager$1);
|
|
205
236
|
|
|
206
|
-
var _excluded$
|
|
237
|
+
var _excluded$3 = ["fields", "injectInFields"],
|
|
207
238
|
_excluded2 = ["fields"];
|
|
208
239
|
|
|
209
240
|
var useForm = function useForm() {
|
|
@@ -212,7 +243,7 @@ var useForm = function useForm() {
|
|
|
212
243
|
providedFields = _ref$fields === void 0 ? [] : _ref$fields,
|
|
213
244
|
_ref$injectInFields = _ref.injectInFields,
|
|
214
245
|
injectInFields = _ref$injectInFields === void 0 ? false : _ref$injectInFields,
|
|
215
|
-
opts = _objectWithoutProperties__default["default"](_ref, _excluded$
|
|
246
|
+
opts = _objectWithoutProperties__default["default"](_ref, _excluded$3);
|
|
216
247
|
|
|
217
248
|
var fieldsNames = react.useMemo(function () {
|
|
218
249
|
return providedFields.length > 0 ? providedFields.map(function (_ref2) {
|
|
@@ -319,7 +350,7 @@ var useFullscreen = function useFullscreen(element) {
|
|
|
319
350
|
};
|
|
320
351
|
};
|
|
321
352
|
|
|
322
|
-
var _excluded$
|
|
353
|
+
var _excluded$2 = ["entry"];
|
|
323
354
|
|
|
324
355
|
var buildThresholdArray = function buildThresholdArray() {
|
|
325
356
|
return [0, 1.0];
|
|
@@ -565,7 +596,7 @@ var useResizeObserver = function useResizeObserver() {
|
|
|
565
596
|
var useDimensionObserver = function useDimensionObserver() {
|
|
566
597
|
var _useResizeObserver = useResizeObserver.apply(void 0, arguments),
|
|
567
598
|
entry = _useResizeObserver.entry,
|
|
568
|
-
rest = _objectWithoutProperties__default["default"](_useResizeObserver, _excluded$
|
|
599
|
+
rest = _objectWithoutProperties__default["default"](_useResizeObserver, _excluded$2);
|
|
569
600
|
|
|
570
601
|
var _ref5 = entry || {},
|
|
571
602
|
_ref5$contentRect = _ref5.contentRect,
|
|
@@ -1202,47 +1233,63 @@ function useMediaCurrentTime(element) {
|
|
|
1202
1233
|
setCurrentTime = _useState2[1];
|
|
1203
1234
|
|
|
1204
1235
|
var realCurrentTime = react.useRef(currentTime);
|
|
1205
|
-
var
|
|
1206
|
-
var
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1236
|
+
var finalId = id || element;
|
|
1237
|
+
var lastIdRef = react.useRef(finalId);
|
|
1238
|
+
var idChanged = lastIdRef.current !== finalId;
|
|
1239
|
+
var disabledRef = react.useRef(disabled);
|
|
1240
|
+
var disabledChanged = disabledRef.current !== disabled;
|
|
1241
|
+
|
|
1242
|
+
if (idChanged || disabledChanged) {
|
|
1243
|
+
realCurrentTime.current = element !== null ? element.currentTime || 0 : 0;
|
|
1244
|
+
lastIdRef.current = finalId;
|
|
1245
|
+
disabledRef.current = disabled;
|
|
1211
1246
|
} // Check time update
|
|
1212
1247
|
|
|
1213
1248
|
|
|
1214
1249
|
react.useEffect(function () {
|
|
1215
|
-
if (
|
|
1250
|
+
if (element === null) {
|
|
1216
1251
|
return function () {};
|
|
1217
1252
|
}
|
|
1218
1253
|
|
|
1219
|
-
|
|
1254
|
+
function updateTime() {
|
|
1255
|
+
var time = element.currentTime || 0;
|
|
1220
1256
|
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1257
|
+
if (time !== realCurrentTime.current) {
|
|
1258
|
+
realCurrentTime.current = time;
|
|
1259
|
+
setCurrentTime(time);
|
|
1260
|
+
|
|
1261
|
+
if (customOnUpdate !== null) {
|
|
1262
|
+
customOnUpdate(time);
|
|
1263
|
+
}
|
|
1224
1264
|
}
|
|
1225
1265
|
|
|
1226
|
-
|
|
1227
|
-
|
|
1266
|
+
return time;
|
|
1267
|
+
}
|
|
1228
1268
|
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
}
|
|
1232
|
-
}
|
|
1269
|
+
if (disabled) {
|
|
1270
|
+
updateTime();
|
|
1271
|
+
return function () {};
|
|
1272
|
+
}
|
|
1233
1273
|
|
|
1234
|
-
var
|
|
1235
|
-
var time = element.currentTime;
|
|
1274
|
+
var timeout = null;
|
|
1236
1275
|
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1276
|
+
function loop() {
|
|
1277
|
+
var _element$duration = element.duration,
|
|
1278
|
+
duration = _element$duration === void 0 ? 0 : _element$duration;
|
|
1279
|
+
var time = updateTime();
|
|
1280
|
+
var remainingTime = Math.floor(((duration || 0) - time) * 1000);
|
|
1281
|
+
timeout = setTimeout(loop, Math.max(Math.min(updateInterval, remainingTime), updateInterval));
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
loop();
|
|
1243
1285
|
return function () {
|
|
1244
|
-
|
|
1245
|
-
|
|
1286
|
+
if (element !== null) {
|
|
1287
|
+
realCurrentTime.current = element.currentTime;
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1290
|
+
if (timeout !== null) {
|
|
1291
|
+
clearInterval(timeout);
|
|
1292
|
+
}
|
|
1246
1293
|
};
|
|
1247
1294
|
}, [id, element, setCurrentTime, disabled, updateInterval]);
|
|
1248
1295
|
return realCurrentTime.current;
|
|
@@ -1259,12 +1306,13 @@ function useMediaDuration(element) {
|
|
|
1259
1306
|
setDuration = _useState2[1];
|
|
1260
1307
|
|
|
1261
1308
|
var realDuration = react.useRef(duration);
|
|
1262
|
-
var
|
|
1263
|
-
var
|
|
1309
|
+
var finalId = id || element;
|
|
1310
|
+
var lastIdRef = react.useRef(finalId);
|
|
1311
|
+
var idChanged = lastIdRef.current !== finalId;
|
|
1264
1312
|
|
|
1265
1313
|
if (idChanged) {
|
|
1266
1314
|
realDuration.current = element !== null ? element.duration || 0 : 0;
|
|
1267
|
-
lastIdRef.current =
|
|
1315
|
+
lastIdRef.current = finalId;
|
|
1268
1316
|
}
|
|
1269
1317
|
|
|
1270
1318
|
react.useEffect(function () {
|
|
@@ -1273,14 +1321,20 @@ function useMediaDuration(element) {
|
|
|
1273
1321
|
}
|
|
1274
1322
|
|
|
1275
1323
|
function updateDuration() {
|
|
1276
|
-
|
|
1277
|
-
|
|
1324
|
+
var newDuration = element.duration || 0;
|
|
1325
|
+
|
|
1326
|
+
if (newDuration !== realDuration.current) {
|
|
1327
|
+
realDuration.current = newDuration;
|
|
1328
|
+
setDuration(newDuration);
|
|
1329
|
+
}
|
|
1278
1330
|
}
|
|
1279
1331
|
|
|
1280
1332
|
updateDuration();
|
|
1333
|
+
element.addEventListener('canplay', updateDuration);
|
|
1281
1334
|
element.addEventListener('loadedmetadata', updateDuration);
|
|
1282
1335
|
element.addEventListener('durationchange', updateDuration);
|
|
1283
1336
|
return function () {
|
|
1337
|
+
element.removeEventListener('canplay', updateDuration);
|
|
1284
1338
|
element.removeEventListener('loadedmetadata', updateDuration);
|
|
1285
1339
|
element.removeEventListener('durationchange', updateDuration);
|
|
1286
1340
|
};
|
|
@@ -1311,6 +1365,113 @@ function useMediaLoad(element) {
|
|
|
1311
1365
|
}, [element, shouldLoad, preload]);
|
|
1312
1366
|
}
|
|
1313
1367
|
|
|
1368
|
+
var _excluded$1 = ["disabled"];
|
|
1369
|
+
|
|
1370
|
+
function useMediaProgress(media) {
|
|
1371
|
+
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
1372
|
+
_ref$disabled = _ref.disabled,
|
|
1373
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled,
|
|
1374
|
+
props = _objectWithoutProperties__default["default"](_ref, _excluded$1);
|
|
1375
|
+
|
|
1376
|
+
var _useState = react.useState(!disabled),
|
|
1377
|
+
_useState2 = _slicedToArray__default["default"](_useState, 2),
|
|
1378
|
+
playing = _useState2[0],
|
|
1379
|
+
setPlaying = _useState2[1];
|
|
1380
|
+
|
|
1381
|
+
var currentTime = useMediaCurrentTime(media, _objectSpread__default["default"]({
|
|
1382
|
+
disabled: disabled || !playing
|
|
1383
|
+
}, props));
|
|
1384
|
+
var duration = useMediaDuration(media, _objectSpread__default["default"]({
|
|
1385
|
+
disabled: disabled || !playing
|
|
1386
|
+
}, props));
|
|
1387
|
+
|
|
1388
|
+
var _useState3 = react.useState(currentTime > 0 && duration > 0 ? currentTime / duration : 0),
|
|
1389
|
+
_useState4 = _slicedToArray__default["default"](_useState3, 2),
|
|
1390
|
+
progress = _useState4[0],
|
|
1391
|
+
setProgress = _useState4[1];
|
|
1392
|
+
|
|
1393
|
+
var realProgressRef = react.useRef(progress);
|
|
1394
|
+
var updateTimeRef = react.useRef(new Date().getTime());
|
|
1395
|
+
var updateProgress = react.useCallback(function (newProgress) {
|
|
1396
|
+
updateTimeRef.current = new Date().getTime();
|
|
1397
|
+
realProgressRef.current = newProgress;
|
|
1398
|
+
setProgress(newProgress);
|
|
1399
|
+
}, [setProgress]);
|
|
1400
|
+
react.useEffect(function () {
|
|
1401
|
+
if (media === null) {
|
|
1402
|
+
return function () {};
|
|
1403
|
+
}
|
|
1404
|
+
|
|
1405
|
+
function onResume() {
|
|
1406
|
+
setPlaying(true);
|
|
1407
|
+
updateProgress(media.currentTime / media.duration);
|
|
1408
|
+
}
|
|
1409
|
+
|
|
1410
|
+
function onPause() {
|
|
1411
|
+
setPlaying(false);
|
|
1412
|
+
updateProgress(media.currentTime / media.duration);
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
media.addEventListener('play', onResume);
|
|
1416
|
+
media.addEventListener('seeked', onResume);
|
|
1417
|
+
media.addEventListener('playing', onResume);
|
|
1418
|
+
media.addEventListener('pause', onPause);
|
|
1419
|
+
media.addEventListener('ended', onPause);
|
|
1420
|
+
media.addEventListener('waiting', onPause);
|
|
1421
|
+
media.addEventListener('stalled', onPause);
|
|
1422
|
+
media.addEventListener('seeking', onPause); // media.addEventListener('suspend', onPause);
|
|
1423
|
+
// if (media.paused) {
|
|
1424
|
+
// onPause();
|
|
1425
|
+
// } else {
|
|
1426
|
+
// onResume();
|
|
1427
|
+
// }
|
|
1428
|
+
|
|
1429
|
+
return function () {
|
|
1430
|
+
media.removeEventListener('play', onResume);
|
|
1431
|
+
media.removeEventListener('seeked', onResume);
|
|
1432
|
+
media.removeEventListener('playing', onResume);
|
|
1433
|
+
media.removeEventListener('pause', onPause);
|
|
1434
|
+
media.removeEventListener('ended', onPause);
|
|
1435
|
+
media.removeEventListener('waiting', onPause);
|
|
1436
|
+
media.removeEventListener('stalled', onPause);
|
|
1437
|
+
media.removeEventListener('seeking', onPause); // media.removeEventListener('suspend', onPause);
|
|
1438
|
+
};
|
|
1439
|
+
}, [media, updateProgress]);
|
|
1440
|
+
react.useEffect(function () {
|
|
1441
|
+
if (media === null) {
|
|
1442
|
+
return function () {};
|
|
1443
|
+
}
|
|
1444
|
+
|
|
1445
|
+
if (!playing || disabled) {
|
|
1446
|
+
return function () {};
|
|
1447
|
+
}
|
|
1448
|
+
|
|
1449
|
+
var handle;
|
|
1450
|
+
var canceled = false;
|
|
1451
|
+
|
|
1452
|
+
function tick() {
|
|
1453
|
+
if (canceled) {
|
|
1454
|
+
return;
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1457
|
+
var newTime = new Date().getTime();
|
|
1458
|
+
var elapsed = newTime - updateTimeRef.current;
|
|
1459
|
+
updateTimeRef.current = newTime;
|
|
1460
|
+
var step = elapsed / (duration * 1000);
|
|
1461
|
+
var newProgress = realProgressRef.current + step;
|
|
1462
|
+
updateProgress(newProgress);
|
|
1463
|
+
handle = raf__default["default"](tick);
|
|
1464
|
+
}
|
|
1465
|
+
|
|
1466
|
+
tick();
|
|
1467
|
+
return function () {
|
|
1468
|
+
canceled = true;
|
|
1469
|
+
raf__default["default"].cancel(handle);
|
|
1470
|
+
};
|
|
1471
|
+
}, [media, playing, disabled, duration, updateProgress]);
|
|
1472
|
+
return realProgressRef.current;
|
|
1473
|
+
}
|
|
1474
|
+
|
|
1314
1475
|
function useMediaReady(element) {
|
|
1315
1476
|
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
1316
1477
|
_ref$id = _ref.id,
|
|
@@ -2067,6 +2228,7 @@ exports.useMediaApi = useMediaApi;
|
|
|
2067
2228
|
exports.useMediaCurrentTime = useMediaCurrentTime;
|
|
2068
2229
|
exports.useMediaDuration = useMediaDuration;
|
|
2069
2230
|
exports.useMediaLoad = useMediaLoad;
|
|
2231
|
+
exports.useMediaProgress = useMediaProgress;
|
|
2070
2232
|
exports.useMediaReady = useMediaReady;
|
|
2071
2233
|
exports.useMediaThumbnail = useMediaThumbnail;
|
|
2072
2234
|
exports.useMediaWaveform = useMediaWaveform;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@micromag/core",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.162",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"javascript"
|
|
@@ -117,6 +117,7 @@
|
|
|
117
117
|
"lodash": "^4.17.21",
|
|
118
118
|
"param-case": "^3.0.4",
|
|
119
119
|
"prop-types": "^15.7.2",
|
|
120
|
+
"raf": "^3.4.1",
|
|
120
121
|
"react-helmet": "^6.1.0",
|
|
121
122
|
"react-intl": "^5.12.1",
|
|
122
123
|
"react-router": "^5.2.0",
|
|
@@ -132,5 +133,5 @@
|
|
|
132
133
|
"publishConfig": {
|
|
133
134
|
"access": "public"
|
|
134
135
|
},
|
|
135
|
-
"gitHead": "
|
|
136
|
+
"gitHead": "ffd4deb967b364580d292f0e02af777abac02967"
|
|
136
137
|
}
|