@micromag/core 0.3.150 → 0.3.152

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/lib/hooks.js CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
5
6
  var react = require('react');
6
7
  var _objectSpread = require('@babel/runtime/helpers/objectSpread2');
7
8
  var reactIntl = require('react-intl');
@@ -13,9 +14,9 @@ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProp
13
14
  var forms = require('@folklore/forms');
14
15
  var _defineProperty = require('@babel/runtime/helpers/defineProperty');
15
16
  var classNames = require('classnames');
16
- var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
17
17
  var screenfull = require('screenfull');
18
18
  var _toConsumableArray = require('@babel/runtime/helpers/toConsumableArray');
19
+ var isArray = require('lodash/isArray');
19
20
  var isObject = require('lodash/isObject');
20
21
  var contexts = require('@micromag/core/contexts');
21
22
  var cssMediaquery = require('css-mediaquery');
@@ -43,18 +44,71 @@ function _interopNamespace(e) {
43
44
  return Object.freeze(n);
44
45
  }
45
46
 
47
+ var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
46
48
  var _objectSpread__default = /*#__PURE__*/_interopDefaultLegacy(_objectSpread);
47
49
  var isString__default = /*#__PURE__*/_interopDefaultLegacy(isString);
48
50
  var dayjs__default = /*#__PURE__*/_interopDefaultLegacy(dayjs);
49
51
  var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
50
52
  var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
51
53
  var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
52
- var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
53
54
  var screenfull__default = /*#__PURE__*/_interopDefaultLegacy(screenfull);
54
55
  var _toConsumableArray__default = /*#__PURE__*/_interopDefaultLegacy(_toConsumableArray);
56
+ var isArray__default = /*#__PURE__*/_interopDefaultLegacy(isArray);
55
57
  var isObject__default = /*#__PURE__*/_interopDefaultLegacy(isObject);
56
58
  var clamp__default = /*#__PURE__*/_interopDefaultLegacy(clamp);
57
59
 
60
+ function useActivityDetector() {
61
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
62
+ _ref$disabled = _ref.disabled,
63
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
64
+ _ref$timeout = _ref.timeout,
65
+ timeoutDelay = _ref$timeout === void 0 ? 2000 : _ref$timeout;
66
+
67
+ var ref = react.useRef(null);
68
+
69
+ var _useState = react.useState(false),
70
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
71
+ detected = _useState2[0],
72
+ setDetected = _useState2[1];
73
+
74
+ react.useEffect(function () {
75
+ var _ref$current = ref.current,
76
+ element = _ref$current === void 0 ? null : _ref$current;
77
+
78
+ if (element === null || disabled) {
79
+ return function () {};
80
+ }
81
+
82
+ var timeout = null;
83
+
84
+ function onMove() {
85
+ if (timeout !== null) {
86
+ clearTimeout(timeout);
87
+ timeout = null;
88
+ }
89
+
90
+ setDetected(true);
91
+ timeout = setTimeout(function () {
92
+ setDetected(false);
93
+ }, timeoutDelay);
94
+ }
95
+
96
+ element.addEventListener('mousemove', onMove);
97
+ return function () {
98
+ if (timeout !== null) {
99
+ clearTimeout(timeout);
100
+ timeout = null;
101
+ }
102
+
103
+ element.removeEventListener('mousemove', onMove);
104
+ };
105
+ }, [disabled, timeoutDelay]);
106
+ return {
107
+ ref: ref,
108
+ detected: detected
109
+ };
110
+ }
111
+
58
112
  var useAnimationFrame = function useAnimationFrame(onFrame) {
59
113
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
60
114
  _ref$disabled = _ref.disabled,
@@ -149,7 +203,7 @@ var useFormattedTime = function useFormattedTime() {
149
203
  var eventsManager$1 = typeof document !== 'undefined' ? new core.EventsManager(document) : null;
150
204
  var useDocumentEvent = utils.createUseEvent(eventsManager$1);
151
205
 
152
- var _excluded$1 = ["fields", "injectInFields"],
206
+ var _excluded$2 = ["fields", "injectInFields"],
153
207
  _excluded2 = ["fields"];
154
208
 
155
209
  var useForm = function useForm() {
@@ -158,7 +212,7 @@ var useForm = function useForm() {
158
212
  providedFields = _ref$fields === void 0 ? [] : _ref$fields,
159
213
  _ref$injectInFields = _ref.injectInFields,
160
214
  injectInFields = _ref$injectInFields === void 0 ? false : _ref$injectInFields,
161
- opts = _objectWithoutProperties__default["default"](_ref, _excluded$1);
215
+ opts = _objectWithoutProperties__default["default"](_ref, _excluded$2);
162
216
 
163
217
  var fieldsNames = react.useMemo(function () {
164
218
  return providedFields.length > 0 ? providedFields.map(function (_ref2) {
@@ -265,6 +319,8 @@ var useFullscreen = function useFullscreen(element) {
265
319
  };
266
320
  };
267
321
 
322
+ var _excluded$1 = ["entry"];
323
+
268
324
  var buildThresholdArray = function buildThresholdArray() {
269
325
  return [0, 1.0];
270
326
  };
@@ -506,6 +562,35 @@ var useResizeObserver = function useResizeObserver() {
506
562
  disabled: disabled
507
563
  }, resizeObserverInitialEntry);
508
564
  };
565
+ var useDimensionObserver = function useDimensionObserver() {
566
+ var _useResizeObserver = useResizeObserver.apply(void 0, arguments),
567
+ entry = _useResizeObserver.entry,
568
+ rest = _objectWithoutProperties__default["default"](_useResizeObserver, _excluded$1);
569
+
570
+ var _ref5 = entry || {},
571
+ _ref5$contentRect = _ref5.contentRect,
572
+ contentRect = _ref5$contentRect === void 0 ? null : _ref5$contentRect,
573
+ _ref5$borderBoxSize = _ref5.borderBoxSize,
574
+ borderBoxSize = _ref5$borderBoxSize === void 0 ? null : _ref5$borderBoxSize;
575
+
576
+ var _ref6 = contentRect || {},
577
+ _ref6$width = _ref6.width,
578
+ width = _ref6$width === void 0 ? 0 : _ref6$width,
579
+ _ref6$height = _ref6.height,
580
+ height = _ref6$height === void 0 ? 0 : _ref6$height;
581
+
582
+ var _ref7 = isArray__default["default"](borderBoxSize) ? borderBoxSize[0] || {} : borderBoxSize || {},
583
+ _ref7$blockSize = _ref7.blockSize,
584
+ blockSize = _ref7$blockSize === void 0 ? null : _ref7$blockSize,
585
+ _ref7$inlineSize = _ref7.inlineSize,
586
+ inlineSize = _ref7$inlineSize === void 0 ? null : _ref7$inlineSize;
587
+
588
+ return _objectSpread__default["default"](_objectSpread__default["default"]({}, rest), {}, {
589
+ entry: entry,
590
+ width: inlineSize || width,
591
+ height: blockSize || height
592
+ });
593
+ };
509
594
 
510
595
  var useIsVisible = function useIsVisible() {
511
596
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
@@ -754,16 +839,14 @@ var useMediaApi = function useMediaApi() {
754
839
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
755
840
  _ref$url = _ref.url,
756
841
  url = _ref$url === void 0 ? null : _ref$url,
757
- _ref$initialMuted = _ref.initialMuted,
758
- initialMuted = _ref$initialMuted === void 0 ? false : _ref$initialMuted,
759
842
  _ref$onTimeUpdate = _ref.onTimeUpdate,
760
843
  onTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate,
761
844
  _ref$onProgressStep = _ref.onProgressStep,
762
845
  onProgressStep = _ref$onProgressStep === void 0 ? null : _ref$onProgressStep,
763
- _ref$onDurationChange = _ref.onDurationChanged,
764
- onDurationChanged = _ref$onDurationChange === void 0 ? null : _ref$onDurationChange,
765
- _ref$onVolumeChanged = _ref.onVolumeChanged,
766
- onVolumeChanged = _ref$onVolumeChanged === void 0 ? null : _ref$onVolumeChanged,
846
+ _ref$onDurationChange = _ref.onDurationChange,
847
+ onDurationChange = _ref$onDurationChange === void 0 ? null : _ref$onDurationChange,
848
+ _ref$onVolumeChange = _ref.onVolumeChange,
849
+ onVolumeChange = _ref$onVolumeChange === void 0 ? null : _ref$onVolumeChange,
767
850
  _ref$onPlay = _ref.onPlay,
768
851
  onPlay = _ref$onPlay === void 0 ? null : _ref$onPlay,
769
852
  _ref$onPause = _ref.onPause,
@@ -772,8 +855,8 @@ var useMediaApi = function useMediaApi() {
772
855
  onEnded = _ref$onEnded === void 0 ? null : _ref$onEnded,
773
856
  _ref$onSeeked = _ref.onSeeked,
774
857
  onSeeked = _ref$onSeeked === void 0 ? null : _ref$onSeeked,
775
- _ref$onSuspended = _ref.onSuspended,
776
- onSuspended = _ref$onSuspended === void 0 ? null : _ref$onSuspended,
858
+ _ref$onSuspend = _ref.onSuspend,
859
+ onSuspend = _ref$onSuspend === void 0 ? null : _ref$onSuspend,
777
860
  _ref$onLoadStart = _ref.onLoadStart,
778
861
  onLoadStart = _ref$onLoadStart === void 0 ? null : _ref$onLoadStart,
779
862
  _ref$onCanPlayThough = _ref.onCanPlayThough,
@@ -787,45 +870,40 @@ var useMediaApi = function useMediaApi() {
787
870
 
788
871
  var ref = react.useRef(null);
789
872
 
790
- var _useState = react.useState(initialMuted),
873
+ var _useState = react.useState(null),
791
874
  _useState2 = _slicedToArray__default["default"](_useState, 2),
792
- muted = _useState2[0],
793
- setMuted = _useState2[1];
875
+ currentTime = _useState2[0],
876
+ setCurrentTime = _useState2[1];
794
877
 
795
878
  var _useState3 = react.useState(null),
796
879
  _useState4 = _slicedToArray__default["default"](_useState3, 2),
797
- currentTime = _useState4[0],
798
- setCurrentTime = _useState4[1];
880
+ duration = _useState4[0],
881
+ setDuration = _useState4[1];
799
882
 
800
- var _useState5 = react.useState(null),
883
+ var _useState5 = react.useState(false),
801
884
  _useState6 = _slicedToArray__default["default"](_useState5, 2),
802
- duration = _useState6[0],
803
- setDuration = _useState6[1];
885
+ playing = _useState6[0],
886
+ setPlaying = _useState6[1];
804
887
 
805
888
  var _useState7 = react.useState(false),
806
889
  _useState8 = _slicedToArray__default["default"](_useState7, 2),
807
- playing = _useState8[0],
808
- setPlaying = _useState8[1];
890
+ ready = _useState8[0],
891
+ setReady = _useState8[1];
809
892
 
810
893
  var _useState9 = react.useState(false),
811
894
  _useState10 = _slicedToArray__default["default"](_useState9, 2),
812
- ready = _useState10[0],
813
- setReady = _useState10[1];
895
+ dataReady = _useState10[0],
896
+ setDataReady = _useState10[1];
814
897
 
815
- var _useState11 = react.useState(false),
898
+ var _useState11 = react.useState(true),
816
899
  _useState12 = _slicedToArray__default["default"](_useState11, 2),
817
- dataReady = _useState12[0],
818
- setDataReady = _useState12[1];
900
+ initialPlay = _useState12[0],
901
+ setInitialPlay = _useState12[1];
819
902
 
820
- var _useState13 = react.useState(true),
903
+ var _useState13 = react.useState(false),
821
904
  _useState14 = _slicedToArray__default["default"](_useState13, 2),
822
- initialPlay = _useState14[0],
823
- setInitialPlay = _useState14[1];
824
-
825
- var _useState15 = react.useState(false),
826
- _useState16 = _slicedToArray__default["default"](_useState15, 2),
827
- suspended = _useState16[0],
828
- setSuspended = _useState16[1];
905
+ suspended = _useState14[0],
906
+ setSuspended = _useState14[1];
829
907
 
830
908
  var progressStepsReached = react.useRef({});
831
909
  var paused = !playing; // Exposed methods
@@ -844,17 +922,6 @@ var useMediaApi = function useMediaApi() {
844
922
  media.pause();
845
923
  }
846
924
  }, []);
847
- var togglePlay = react.useCallback(function () {
848
- var media = ref.current;
849
-
850
- if (media !== null) {
851
- if (playing) {
852
- media.pause();
853
- } else {
854
- media.play();
855
- }
856
- }
857
- }, [playing]);
858
925
  var stop = react.useCallback(function () {
859
926
  var media = ref.current;
860
927
 
@@ -869,28 +936,19 @@ var useMediaApi = function useMediaApi() {
869
936
  if (media !== null) {
870
937
  media.currentTime = time;
871
938
  }
872
- }, []);
873
- var mute = react.useCallback(function () {
874
- var media = ref.current;
875
-
876
- if (media !== null) {
877
- media.muted = true;
878
- }
879
- }, []);
880
- var unMute = react.useCallback(function () {
881
- var media = ref.current;
882
-
883
- if (media !== null) {
884
- media.muted = false;
885
- }
886
- }, []);
887
- var toggleMute = react.useCallback(function () {
888
- var media = ref.current;
889
-
890
- if (media !== null) {
891
- media.muted = !muted;
892
- }
893
- }, [muted]); // Media events callbacks
939
+ }, []); // const mute = useCallback(() => {
940
+ // const { current: media } = ref;
941
+ // if (media !== null) {
942
+ // media.muted = true;
943
+ // }
944
+ // }, []);
945
+ // const unMute = useCallback(() => {
946
+ // const { current: media } = ref;
947
+ // if (media !== null) {
948
+ // media.muted = false;
949
+ // }
950
+ // }, []);
951
+ // Media events callbacks
894
952
 
895
953
  var onCustomPlay = react.useCallback(function () {
896
954
  if (onPlay !== null) {
@@ -951,10 +1009,10 @@ var useMediaApi = function useMediaApi() {
951
1009
  var eventMedia = e.currentTarget;
952
1010
  setDuration(eventMedia.duration);
953
1011
 
954
- if (onDurationChanged !== null) {
955
- onDurationChanged(eventMedia.duration);
1012
+ if (onDurationChange !== null) {
1013
+ onDurationChange(eventMedia.duration);
956
1014
  }
957
- }, [setDuration, onDurationChanged]);
1015
+ }, [setDuration, onDurationChange]);
958
1016
  var onCustomSeeked = react.useCallback(function (e) {
959
1017
  var eventMedia = e.currentTarget;
960
1018
 
@@ -963,13 +1021,12 @@ var useMediaApi = function useMediaApi() {
963
1021
  }
964
1022
  }, [onSeeked]);
965
1023
  var onCustomVolumeChange = react.useCallback(function (e) {
966
- var eventMedia = e.currentTarget;
967
- setMuted(eventMedia.muted);
1024
+ var eventMedia = e.currentTarget; // setMuted(eventMedia.muted);
968
1025
 
969
- if (onVolumeChanged !== null) {
970
- onVolumeChanged(eventMedia.muted, eventMedia.volume);
1026
+ if (onVolumeChange !== null) {
1027
+ onVolumeChange(eventMedia.volume);
971
1028
  }
972
- }, [setMuted, onVolumeChanged]);
1029
+ }, [onVolumeChange]);
973
1030
  var onCustomLoadStart = react.useCallback(function () {
974
1031
  if (onLoadStart !== null) {
975
1032
  onLoadStart();
@@ -1006,8 +1063,8 @@ var useMediaApi = function useMediaApi() {
1006
1063
  var onCustomSuspended = react.useCallback(function () {
1007
1064
  setSuspended(true);
1008
1065
 
1009
- if (onSuspended !== null) {
1010
- onSuspended();
1066
+ if (onSuspend !== null) {
1067
+ onSuspend();
1011
1068
  }
1012
1069
  }, [setSuspended, onSuspended]);
1013
1070
  react.useEffect(function () {
@@ -1116,13 +1173,8 @@ var useMediaApi = function useMediaApi() {
1116
1173
  ref: ref,
1117
1174
  play: play,
1118
1175
  pause: pause,
1119
- togglePlay: togglePlay,
1120
1176
  stop: stop,
1121
1177
  seek: seek,
1122
- mute: mute,
1123
- unMute: unMute,
1124
- toggleMute: toggleMute,
1125
- muted: muted,
1126
1178
  currentTime: currentTime,
1127
1179
  duration: duration,
1128
1180
  playing: playing,
@@ -1133,6 +1185,190 @@ var useMediaApi = function useMediaApi() {
1133
1185
  };
1134
1186
  };
1135
1187
 
1188
+ function useMediaCurrentTime(element) {
1189
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1190
+ _ref$id = _ref.id,
1191
+ id = _ref$id === void 0 ? null : _ref$id,
1192
+ _ref$disabled = _ref.disabled,
1193
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
1194
+ _ref$updateInterval = _ref.updateInterval,
1195
+ updateInterval = _ref$updateInterval === void 0 ? 1000 : _ref$updateInterval,
1196
+ _ref$onUpdate = _ref.onUpdate,
1197
+ customOnUpdate = _ref$onUpdate === void 0 ? null : _ref$onUpdate;
1198
+
1199
+ var _useState = react.useState(0),
1200
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
1201
+ currentTime = _useState2[0],
1202
+ setCurrentTime = _useState2[1];
1203
+
1204
+ var realCurrentTime = react.useRef(currentTime);
1205
+ var lastIdRef = react.useRef(id);
1206
+ var idChanged = lastIdRef.current !== id;
1207
+
1208
+ if (idChanged) {
1209
+ realCurrentTime.current = 0;
1210
+ lastIdRef.current = id;
1211
+ } // Check time update
1212
+
1213
+
1214
+ react.useEffect(function () {
1215
+ if (disabled || element === null) {
1216
+ return function () {};
1217
+ }
1218
+
1219
+ var canceled = false;
1220
+
1221
+ var updateTime = function updateTime(time) {
1222
+ if (canceled) {
1223
+ return;
1224
+ }
1225
+
1226
+ realCurrentTime.current = time;
1227
+ setCurrentTime(time);
1228
+
1229
+ if (customOnUpdate !== null) {
1230
+ customOnUpdate(time);
1231
+ }
1232
+ };
1233
+
1234
+ var interval = setInterval(function () {
1235
+ var time = element.currentTime;
1236
+
1237
+ if (typeof time.then !== 'undefined') {
1238
+ time.then(updateTime);
1239
+ } else {
1240
+ updateTime(time);
1241
+ }
1242
+ }, updateInterval);
1243
+ return function () {
1244
+ canceled = true;
1245
+ clearInterval(interval);
1246
+ };
1247
+ }, [id, element, setCurrentTime, disabled, updateInterval]);
1248
+ return realCurrentTime.current;
1249
+ }
1250
+
1251
+ function useMediaDuration(element) {
1252
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1253
+ _ref$id = _ref.id,
1254
+ id = _ref$id === void 0 ? null : _ref$id;
1255
+
1256
+ var _useState = react.useState(element !== null ? element.duration || 0 : 0),
1257
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
1258
+ duration = _useState2[0],
1259
+ setDuration = _useState2[1];
1260
+
1261
+ var realDuration = react.useRef(duration);
1262
+ var lastIdRef = react.useRef(id);
1263
+ var idChanged = lastIdRef.current !== id;
1264
+
1265
+ if (idChanged) {
1266
+ realDuration.current = element !== null ? element.duration || 0 : 0;
1267
+ lastIdRef.current = id;
1268
+ }
1269
+
1270
+ react.useEffect(function () {
1271
+ if (element === null) {
1272
+ return function () {};
1273
+ }
1274
+
1275
+ function updateDuration() {
1276
+ realDuration.current = element.duration || 0;
1277
+ setDuration(element.duration || 0);
1278
+ }
1279
+
1280
+ updateDuration();
1281
+ element.addEventListener('loadedmetadata', updateDuration);
1282
+ element.addEventListener('durationchange', updateDuration);
1283
+ return function () {
1284
+ element.removeEventListener('loadedmetadata', updateDuration);
1285
+ element.removeEventListener('durationchange', updateDuration);
1286
+ };
1287
+ }, [element, id, setDuration]);
1288
+ return realDuration.current;
1289
+ }
1290
+
1291
+ function useMediaLoad(element) {
1292
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1293
+ _ref$preload = _ref.preload,
1294
+ preload = _ref$preload === void 0 ? 'auto' : _ref$preload,
1295
+ _ref$shouldLoad = _ref.shouldLoad,
1296
+ shouldLoad = _ref$shouldLoad === void 0 ? false : _ref$shouldLoad;
1297
+
1298
+ var firstPreloadRef = react.useRef(preload);
1299
+ var firstShouldLoadRef = react.useRef(shouldLoad);
1300
+ var hasLoadedRef = react.useRef(preload !== 'none' && preload !== 'metadata' && shouldLoad);
1301
+ react.useEffect(function () {
1302
+ var canLoad = preload !== 'none' && preload !== 'metadata' && shouldLoad; // @todo
1303
+
1304
+ var preloadHasChanged = firstPreloadRef.current !== preload;
1305
+ var shouldLoadHasChanged = firstShouldLoadRef.current !== shouldLoad;
1306
+
1307
+ if (canLoad && (preloadHasChanged || shouldLoadHasChanged) && !hasLoadedRef.current && element !== null && typeof element.load !== 'undefined') {
1308
+ hasLoadedRef.current = true;
1309
+ element.load();
1310
+ }
1311
+ }, [element, shouldLoad, preload]);
1312
+ }
1313
+
1314
+ function useMediaReady(element) {
1315
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1316
+ _ref$id = _ref.id,
1317
+ id = _ref$id === void 0 ? null : _ref$id;
1318
+
1319
+ var _useState = react.useState(element !== null && element.readyState > 0),
1320
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
1321
+ ready = _useState2[0],
1322
+ setReady = _useState2[1];
1323
+
1324
+ var realReady = react.useRef(ready);
1325
+ var lastIdRef = react.useRef(id);
1326
+ var idChanged = lastIdRef.current !== id;
1327
+
1328
+ if (idChanged) {
1329
+ realReady.current = false;
1330
+ lastIdRef.current = id;
1331
+ }
1332
+
1333
+ react.useEffect(function () {
1334
+ if (element === null) {
1335
+ return function () {};
1336
+ }
1337
+
1338
+ function updateReady() {
1339
+ var currentReady = ready;
1340
+
1341
+ if (element.readyState > 0 && !ready) {
1342
+ setReady(true);
1343
+ currentReady = true;
1344
+ } else if (ready && element.readyState === 0) {
1345
+ setReady(false);
1346
+ currentReady = false;
1347
+ }
1348
+
1349
+ realReady.current = currentReady;
1350
+ return currentReady;
1351
+ }
1352
+
1353
+ var currentReady = updateReady();
1354
+
1355
+ if (!currentReady) {
1356
+ element.addEventListener('loadedmetadata', updateReady);
1357
+ element.addEventListener('canplay', updateReady);
1358
+ element.addEventListener('canplaythrough', updateReady);
1359
+ }
1360
+
1361
+ return function () {
1362
+ if (!currentReady) {
1363
+ element.removeEventListener('loadedmetadata', updateReady);
1364
+ element.removeEventListener('canplay', updateReady);
1365
+ element.removeEventListener('canplaythrough', updateReady);
1366
+ }
1367
+ };
1368
+ }, [element, id]);
1369
+ return realReady.current;
1370
+ }
1371
+
1136
1372
  var useMediasParser = function useMediasParser() {
1137
1373
  var screensManager = contexts.useScreensManager();
1138
1374
  var fieldsManager = contexts.useFieldsManager(); // Convert medias object to path
@@ -1168,10 +1404,10 @@ function useMediaThumbnail(media) {
1168
1404
  var thumbnailUrl = react.useMemo(function () {
1169
1405
  var filesArray = utils.getMediaFilesAsArray(files) || [];
1170
1406
 
1171
- var _ref2 = (file !== null ? filesArray.find(function (_ref3) {
1407
+ var _ref2 = (file !== null && !isObject__default["default"](file) ? filesArray.find(function (_ref3) {
1172
1408
  var handle = _ref3.handle;
1173
1409
  return handle === file;
1174
- }) || null : null) || {},
1410
+ }) || null : file) || {},
1175
1411
  url = _ref2.url;
1176
1412
 
1177
1413
  return url || defaultThumbnailUrl;
@@ -1179,6 +1415,82 @@ function useMediaThumbnail(media) {
1179
1415
  return thumbnailUrl;
1180
1416
  }
1181
1417
 
1418
+ function useMediaWaveform(media) {
1419
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1420
+ _ref$fake = _ref.fake,
1421
+ fake = _ref$fake === void 0 ? false : _ref$fake,
1422
+ _ref$reduceBufferFact = _ref.reduceBufferFactor,
1423
+ reduceBufferFactor = _ref$reduceBufferFact === void 0 ? 100 : _ref$reduceBufferFact;
1424
+
1425
+ var _ref2 = media || {},
1426
+ _ref2$url = _ref2.url,
1427
+ url = _ref2$url === void 0 ? null : _ref2$url,
1428
+ _ref2$metadata = _ref2.metadata,
1429
+ metadata = _ref2$metadata === void 0 ? null : _ref2$metadata;
1430
+
1431
+ var _ref3 = metadata || {},
1432
+ _ref3$waveform = _ref3.waveform,
1433
+ waveform = _ref3$waveform === void 0 ? null : _ref3$waveform;
1434
+
1435
+ var _useState = react.useState(null),
1436
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
1437
+ audioLevels = _useState2[0],
1438
+ setAudioLevels = _useState2[1];
1439
+
1440
+ react.useEffect(function () {
1441
+ var canceled = false;
1442
+ var AudioContext = typeof window !== 'undefined' ? window.AudioContext || window.webkitAudioContext : null;
1443
+
1444
+ if (waveform !== null) {
1445
+ setAudioLevels(waveform.map(function (it) {
1446
+ return (it + 256 / 2) / 256;
1447
+ }));
1448
+ } else if (url !== null && fake) {
1449
+ var fakeLength = 1000;
1450
+ setAudioLevels(_toConsumableArray__default["default"](new Array(fakeLength)).map(function () {
1451
+ return Math.random();
1452
+ }));
1453
+ } else if (url !== null && AudioContext !== null) {
1454
+ fetch(url, {
1455
+ mode: 'cors'
1456
+ }).then(function (response) {
1457
+ if (canceled) {
1458
+ throw new Error('Audio loading canceled');
1459
+ }
1460
+
1461
+ return response.arrayBuffer();
1462
+ }).then(function (arrayBuffer) {
1463
+ if (canceled) {
1464
+ throw new Error('Audio loading canceled');
1465
+ }
1466
+
1467
+ var audioCtx = new AudioContext();
1468
+ return audioCtx.decodeAudioData(arrayBuffer);
1469
+ }).then(function (buffer) {
1470
+ var channelsCount = buffer.numberOfChannels;
1471
+
1472
+ if (channelsCount > 0) {
1473
+ var leftChannelData = buffer.getChannelData(0);
1474
+ setAudioLevels(leftChannelData.reduce(function (newArray, level) {
1475
+ // eslint-disable-next-line no-param-reassign
1476
+ newArray[newArray.length] = Math.abs(level);
1477
+ return newArray;
1478
+ }, []));
1479
+ }
1480
+ })["catch"](function (e) {
1481
+ throw e;
1482
+ });
1483
+ }
1484
+
1485
+ return function () {
1486
+ if (url === null) {
1487
+ canceled = true;
1488
+ }
1489
+ };
1490
+ }, [url, waveform, setAudioLevels, reduceBufferFactor, fake]);
1491
+ return audioLevels;
1492
+ }
1493
+
1182
1494
  var useParsedStory = function useParsedStory(story) {
1183
1495
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1184
1496
  _ref$disabled = _ref.disabled,
@@ -1212,6 +1524,38 @@ var useParsedStory = function useParsedStory(story) {
1212
1524
  return newStory;
1213
1525
  };
1214
1526
 
1527
+ function useProgressSteps() {
1528
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1529
+ _ref$disabled = _ref.disabled,
1530
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
1531
+ currentTime = _ref.currentTime,
1532
+ duration = _ref.duration,
1533
+ _ref$onStep = _ref.onStep,
1534
+ onStep = _ref$onStep === void 0 ? null : _ref$onStep,
1535
+ _ref$steps = _ref.steps,
1536
+ steps = _ref$steps === void 0 ? [0.1, 0.25, 0.5, 0.75, 0.9] : _ref$steps;
1537
+
1538
+ var progressStepsReached = react.useRef({});
1539
+ react.useEffect(function () {
1540
+ if (duration === 0 || disabled) {
1541
+ return;
1542
+ }
1543
+
1544
+ var progress = currentTime / duration;
1545
+ var currentSteps = progressStepsReached.current;
1546
+ var stepsToTrack = steps.filter(function (step) {
1547
+ return progress > step && typeof currentSteps[step] === 'undefined';
1548
+ });
1549
+ stepsToTrack.forEach(function (step) {
1550
+ if (onStep !== null) {
1551
+ onStep(step);
1552
+ }
1553
+
1554
+ currentSteps[step] = true;
1555
+ });
1556
+ }, [duration, currentTime, disabled]);
1557
+ }
1558
+
1215
1559
  var _excluded = ["width", "height"];
1216
1560
  var devicePixelRatio = typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;
1217
1561
 
@@ -1269,34 +1613,31 @@ var useScreenSizeFromElement = function useScreenSizeFromElement() {
1269
1613
  height = _ref4$height === void 0 ? null : _ref4$height,
1270
1614
  opts = _objectWithoutProperties__default["default"](_ref4, _excluded);
1271
1615
 
1272
- var _useResizeObserver = useResizeObserver(),
1273
- ref = _useResizeObserver.ref,
1274
- contentRect = _useResizeObserver.entry.contentRect;
1275
-
1276
- var _ref5 = contentRect || {},
1277
- _ref5$width = _ref5.width,
1278
- calculatedWidth = _ref5$width === void 0 ? 0 : _ref5$width,
1279
- _ref5$height = _ref5.height,
1280
- calculatedHeight = _ref5$height === void 0 ? 0 : _ref5$height;
1616
+ var _useDimensionObserver = useDimensionObserver(),
1617
+ ref = _useDimensionObserver.ref,
1618
+ _useDimensionObserver2 = _useDimensionObserver.width,
1619
+ calculatedWidth = _useDimensionObserver2 === void 0 ? 0 : _useDimensionObserver2,
1620
+ _useDimensionObserver3 = _useDimensionObserver.height,
1621
+ calculatedHeight = _useDimensionObserver3 === void 0 ? 0 : _useDimensionObserver3;
1281
1622
 
1282
1623
  var fullWidth = width !== null ? width : calculatedWidth;
1283
1624
  var fullHeight = height !== null ? height : calculatedHeight;
1284
1625
 
1285
- var _ref6 = opts || {},
1286
- _ref6$screenWidth = _ref6.screenWidth,
1287
- screenWidth = _ref6$screenWidth === void 0 ? 320 : _ref6$screenWidth,
1288
- _ref6$screenHeight = _ref6.screenHeight,
1289
- screenHeight = _ref6$screenHeight === void 0 ? 480 : _ref6$screenHeight,
1290
- _ref6$withoutMaxSize = _ref6.withoutMaxSize,
1291
- withoutMaxSize = _ref6$withoutMaxSize === void 0 ? false : _ref6$withoutMaxSize,
1292
- _ref6$landscapeMinHei = _ref6.landscapeMinHeight,
1293
- landscapeMinHeight = _ref6$landscapeMinHei === void 0 ? 600 : _ref6$landscapeMinHei,
1294
- _ref6$menuAlwaysOverS = _ref6.menuAlwaysOverScreen,
1295
- menuAlwaysOverScreen = _ref6$menuAlwaysOverS === void 0 ? true : _ref6$menuAlwaysOverS,
1296
- _ref6$landscapeMinRat = _ref6.landscapeMinRatio,
1297
- landscapeMinRatio = _ref6$landscapeMinRat === void 0 ? 2 / 3 : _ref6$landscapeMinRat,
1298
- _ref6$withoutScale = _ref6.withoutScale,
1299
- withoutScale = _ref6$withoutScale === void 0 ? false : _ref6$withoutScale;
1626
+ var _ref5 = opts || {},
1627
+ _ref5$screenWidth = _ref5.screenWidth,
1628
+ screenWidth = _ref5$screenWidth === void 0 ? 320 : _ref5$screenWidth,
1629
+ _ref5$screenHeight = _ref5.screenHeight,
1630
+ screenHeight = _ref5$screenHeight === void 0 ? 480 : _ref5$screenHeight,
1631
+ _ref5$withoutMaxSize = _ref5.withoutMaxSize,
1632
+ withoutMaxSize = _ref5$withoutMaxSize === void 0 ? false : _ref5$withoutMaxSize,
1633
+ _ref5$landscapeMinHei = _ref5.landscapeMinHeight,
1634
+ landscapeMinHeight = _ref5$landscapeMinHei === void 0 ? 600 : _ref5$landscapeMinHei,
1635
+ _ref5$menuAlwaysOverS = _ref5.menuAlwaysOverScreen,
1636
+ menuAlwaysOverScreen = _ref5$menuAlwaysOverS === void 0 ? true : _ref5$menuAlwaysOverS,
1637
+ _ref5$landscapeMinRat = _ref5.landscapeMinRatio,
1638
+ landscapeMinRatio = _ref5$landscapeMinRat === void 0 ? 2 / 3 : _ref5$landscapeMinRat,
1639
+ _ref5$withoutScale = _ref5.withoutScale,
1640
+ withoutScale = _ref5$withoutScale === void 0 ? false : _ref5$withoutScale;
1300
1641
 
1301
1642
  var screenRatio = screenWidth / screenHeight;
1302
1643
  var elementRatio = fullWidth / fullHeight;
@@ -1693,7 +2034,9 @@ var eventsManager = typeof window !== 'undefined' ? new core.EventsManager(windo
1693
2034
  var useWindowEvent = utils.createUseEvent(eventsManager);
1694
2035
 
1695
2036
  exports.getObserver = getObserver;
2037
+ exports.useActivityDetector = useActivityDetector;
1696
2038
  exports.useAnimationFrame = useAnimationFrame;
2039
+ exports.useDimensionObserver = useDimensionObserver;
1697
2040
  exports.useDocumentEvent = useDocumentEvent;
1698
2041
  exports.useForm = useForm;
1699
2042
  exports.useFormTransition = useFormTransition;
@@ -1705,10 +2048,16 @@ exports.useIsVisible = useIsVisible;
1705
2048
  exports.useLoadedFonts = useLoadedFonts;
1706
2049
  exports.useLongPress = useLongPress;
1707
2050
  exports.useMediaApi = useMediaApi;
2051
+ exports.useMediaCurrentTime = useMediaCurrentTime;
2052
+ exports.useMediaDuration = useMediaDuration;
2053
+ exports.useMediaLoad = useMediaLoad;
2054
+ exports.useMediaReady = useMediaReady;
1708
2055
  exports.useMediaThumbnail = useMediaThumbnail;
2056
+ exports.useMediaWaveform = useMediaWaveform;
1709
2057
  exports.useMediasParser = useMediasParser;
1710
2058
  exports.useObserver = useObserver;
1711
2059
  exports.useParsedStory = useParsedStory;
2060
+ exports.useProgressSteps = useProgressSteps;
1712
2061
  exports.useResizeObserver = useResizeObserver;
1713
2062
  exports.useScreenSizeFromElement = useScreenSizeFromElement;
1714
2063
  exports.useScreenSizeFromWindow = useScreenSizeFromWindow;