@micromag/core 0.3.150 → 0.3.156

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/hooks.js CHANGED
@@ -1,4 +1,5 @@
1
- import { useRef, useEffect, useCallback, useMemo, useState } from 'react';
1
+ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
2
+ import { useRef, useState, useEffect, useCallback, useMemo } from 'react';
2
3
  import _objectSpread from '@babel/runtime/helpers/objectSpread2';
3
4
  import { useIntl } from 'react-intl';
4
5
  import isString from 'lodash/isString';
@@ -9,9 +10,9 @@ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProper
9
10
  import { useForm as useForm$1 } from '@folklore/forms';
10
11
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
11
12
  import classNames from 'classnames';
12
- import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
13
13
  import screenfull from 'screenfull';
14
14
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
15
+ import isArray from 'lodash/isArray';
15
16
  import isObject from 'lodash/isObject';
16
17
  import { useScreensManager, useFieldsManager, useTracking, useScreen } from '@micromag/core/contexts';
17
18
  import { match } from 'css-mediaquery';
@@ -19,6 +20,58 @@ import { useSprings } from '@react-spring/core';
19
20
  import { useDrag } from '@use-gesture/react';
20
21
  import clamp from 'lodash/clamp';
21
22
 
23
+ function useActivityDetector() {
24
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
25
+ _ref$disabled = _ref.disabled,
26
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
27
+ _ref$timeout = _ref.timeout,
28
+ timeoutDelay = _ref$timeout === void 0 ? 2000 : _ref$timeout;
29
+
30
+ var ref = useRef(null);
31
+
32
+ var _useState = useState(false),
33
+ _useState2 = _slicedToArray(_useState, 2),
34
+ detected = _useState2[0],
35
+ setDetected = _useState2[1];
36
+
37
+ useEffect(function () {
38
+ var _ref$current = ref.current,
39
+ element = _ref$current === void 0 ? null : _ref$current;
40
+
41
+ if (element === null || disabled) {
42
+ return function () {};
43
+ }
44
+
45
+ var timeout = null;
46
+
47
+ function onMove() {
48
+ if (timeout !== null) {
49
+ clearTimeout(timeout);
50
+ timeout = null;
51
+ }
52
+
53
+ setDetected(true);
54
+ timeout = setTimeout(function () {
55
+ setDetected(false);
56
+ }, timeoutDelay);
57
+ }
58
+
59
+ element.addEventListener('mousemove', onMove);
60
+ return function () {
61
+ if (timeout !== null) {
62
+ clearTimeout(timeout);
63
+ timeout = null;
64
+ }
65
+
66
+ element.removeEventListener('mousemove', onMove);
67
+ };
68
+ }, [disabled, timeoutDelay]);
69
+ return {
70
+ ref: ref,
71
+ detected: detected
72
+ };
73
+ }
74
+
22
75
  var useAnimationFrame = function useAnimationFrame(onFrame) {
23
76
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
24
77
  _ref$disabled = _ref.disabled,
@@ -113,7 +166,7 @@ var useFormattedTime = function useFormattedTime() {
113
166
  var eventsManager$1 = typeof document !== 'undefined' ? new EventsManager(document) : null;
114
167
  var useDocumentEvent = createUseEvent(eventsManager$1);
115
168
 
116
- var _excluded$1 = ["fields", "injectInFields"],
169
+ var _excluded$2 = ["fields", "injectInFields"],
117
170
  _excluded2 = ["fields"];
118
171
 
119
172
  var useForm = function useForm() {
@@ -122,7 +175,7 @@ var useForm = function useForm() {
122
175
  providedFields = _ref$fields === void 0 ? [] : _ref$fields,
123
176
  _ref$injectInFields = _ref.injectInFields,
124
177
  injectInFields = _ref$injectInFields === void 0 ? false : _ref$injectInFields,
125
- opts = _objectWithoutProperties(_ref, _excluded$1);
178
+ opts = _objectWithoutProperties(_ref, _excluded$2);
126
179
 
127
180
  var fieldsNames = useMemo(function () {
128
181
  return providedFields.length > 0 ? providedFields.map(function (_ref2) {
@@ -229,6 +282,8 @@ var useFullscreen = function useFullscreen(element) {
229
282
  };
230
283
  };
231
284
 
285
+ var _excluded$1 = ["entry"];
286
+
232
287
  var buildThresholdArray = function buildThresholdArray() {
233
288
  return [0, 1.0];
234
289
  };
@@ -470,6 +525,35 @@ var useResizeObserver = function useResizeObserver() {
470
525
  disabled: disabled
471
526
  }, resizeObserverInitialEntry);
472
527
  };
528
+ var useDimensionObserver = function useDimensionObserver() {
529
+ var _useResizeObserver = useResizeObserver.apply(void 0, arguments),
530
+ entry = _useResizeObserver.entry,
531
+ rest = _objectWithoutProperties(_useResizeObserver, _excluded$1);
532
+
533
+ var _ref5 = entry || {},
534
+ _ref5$contentRect = _ref5.contentRect,
535
+ contentRect = _ref5$contentRect === void 0 ? null : _ref5$contentRect,
536
+ _ref5$borderBoxSize = _ref5.borderBoxSize,
537
+ borderBoxSize = _ref5$borderBoxSize === void 0 ? null : _ref5$borderBoxSize;
538
+
539
+ var _ref6 = contentRect || {},
540
+ _ref6$width = _ref6.width,
541
+ width = _ref6$width === void 0 ? 0 : _ref6$width,
542
+ _ref6$height = _ref6.height,
543
+ height = _ref6$height === void 0 ? 0 : _ref6$height;
544
+
545
+ var _ref7 = isArray(borderBoxSize) ? borderBoxSize[0] || {} : borderBoxSize || {},
546
+ _ref7$blockSize = _ref7.blockSize,
547
+ blockSize = _ref7$blockSize === void 0 ? null : _ref7$blockSize,
548
+ _ref7$inlineSize = _ref7.inlineSize,
549
+ inlineSize = _ref7$inlineSize === void 0 ? null : _ref7$inlineSize;
550
+
551
+ return _objectSpread(_objectSpread({}, rest), {}, {
552
+ entry: entry,
553
+ width: inlineSize || width,
554
+ height: blockSize || height
555
+ });
556
+ };
473
557
 
474
558
  var useIsVisible = function useIsVisible() {
475
559
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
@@ -718,16 +802,14 @@ var useMediaApi = function useMediaApi() {
718
802
  var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
719
803
  _ref$url = _ref.url,
720
804
  url = _ref$url === void 0 ? null : _ref$url,
721
- _ref$initialMuted = _ref.initialMuted,
722
- initialMuted = _ref$initialMuted === void 0 ? false : _ref$initialMuted,
723
805
  _ref$onTimeUpdate = _ref.onTimeUpdate,
724
806
  onTimeUpdate = _ref$onTimeUpdate === void 0 ? null : _ref$onTimeUpdate,
725
807
  _ref$onProgressStep = _ref.onProgressStep,
726
808
  onProgressStep = _ref$onProgressStep === void 0 ? null : _ref$onProgressStep,
727
- _ref$onDurationChange = _ref.onDurationChanged,
728
- onDurationChanged = _ref$onDurationChange === void 0 ? null : _ref$onDurationChange,
729
- _ref$onVolumeChanged = _ref.onVolumeChanged,
730
- onVolumeChanged = _ref$onVolumeChanged === void 0 ? null : _ref$onVolumeChanged,
809
+ _ref$onDurationChange = _ref.onDurationChange,
810
+ onDurationChange = _ref$onDurationChange === void 0 ? null : _ref$onDurationChange,
811
+ _ref$onVolumeChange = _ref.onVolumeChange,
812
+ onVolumeChange = _ref$onVolumeChange === void 0 ? null : _ref$onVolumeChange,
731
813
  _ref$onPlay = _ref.onPlay,
732
814
  onPlay = _ref$onPlay === void 0 ? null : _ref$onPlay,
733
815
  _ref$onPause = _ref.onPause,
@@ -736,8 +818,8 @@ var useMediaApi = function useMediaApi() {
736
818
  onEnded = _ref$onEnded === void 0 ? null : _ref$onEnded,
737
819
  _ref$onSeeked = _ref.onSeeked,
738
820
  onSeeked = _ref$onSeeked === void 0 ? null : _ref$onSeeked,
739
- _ref$onSuspended = _ref.onSuspended,
740
- onSuspended = _ref$onSuspended === void 0 ? null : _ref$onSuspended,
821
+ _ref$onSuspend = _ref.onSuspend,
822
+ onSuspend = _ref$onSuspend === void 0 ? null : _ref$onSuspend,
741
823
  _ref$onLoadStart = _ref.onLoadStart,
742
824
  onLoadStart = _ref$onLoadStart === void 0 ? null : _ref$onLoadStart,
743
825
  _ref$onCanPlayThough = _ref.onCanPlayThough,
@@ -751,45 +833,40 @@ var useMediaApi = function useMediaApi() {
751
833
 
752
834
  var ref = useRef(null);
753
835
 
754
- var _useState = useState(initialMuted),
836
+ var _useState = useState(null),
755
837
  _useState2 = _slicedToArray(_useState, 2),
756
- muted = _useState2[0],
757
- setMuted = _useState2[1];
838
+ currentTime = _useState2[0],
839
+ setCurrentTime = _useState2[1];
758
840
 
759
841
  var _useState3 = useState(null),
760
842
  _useState4 = _slicedToArray(_useState3, 2),
761
- currentTime = _useState4[0],
762
- setCurrentTime = _useState4[1];
843
+ duration = _useState4[0],
844
+ setDuration = _useState4[1];
763
845
 
764
- var _useState5 = useState(null),
846
+ var _useState5 = useState(false),
765
847
  _useState6 = _slicedToArray(_useState5, 2),
766
- duration = _useState6[0],
767
- setDuration = _useState6[1];
848
+ playing = _useState6[0],
849
+ setPlaying = _useState6[1];
768
850
 
769
851
  var _useState7 = useState(false),
770
852
  _useState8 = _slicedToArray(_useState7, 2),
771
- playing = _useState8[0],
772
- setPlaying = _useState8[1];
853
+ ready = _useState8[0],
854
+ setReady = _useState8[1];
773
855
 
774
856
  var _useState9 = useState(false),
775
857
  _useState10 = _slicedToArray(_useState9, 2),
776
- ready = _useState10[0],
777
- setReady = _useState10[1];
858
+ dataReady = _useState10[0],
859
+ setDataReady = _useState10[1];
778
860
 
779
- var _useState11 = useState(false),
861
+ var _useState11 = useState(true),
780
862
  _useState12 = _slicedToArray(_useState11, 2),
781
- dataReady = _useState12[0],
782
- setDataReady = _useState12[1];
863
+ initialPlay = _useState12[0],
864
+ setInitialPlay = _useState12[1];
783
865
 
784
- var _useState13 = useState(true),
866
+ var _useState13 = useState(false),
785
867
  _useState14 = _slicedToArray(_useState13, 2),
786
- initialPlay = _useState14[0],
787
- setInitialPlay = _useState14[1];
788
-
789
- var _useState15 = useState(false),
790
- _useState16 = _slicedToArray(_useState15, 2),
791
- suspended = _useState16[0],
792
- setSuspended = _useState16[1];
868
+ suspended = _useState14[0],
869
+ setSuspended = _useState14[1];
793
870
 
794
871
  var progressStepsReached = useRef({});
795
872
  var paused = !playing; // Exposed methods
@@ -808,17 +885,6 @@ var useMediaApi = function useMediaApi() {
808
885
  media.pause();
809
886
  }
810
887
  }, []);
811
- var togglePlay = useCallback(function () {
812
- var media = ref.current;
813
-
814
- if (media !== null) {
815
- if (playing) {
816
- media.pause();
817
- } else {
818
- media.play();
819
- }
820
- }
821
- }, [playing]);
822
888
  var stop = useCallback(function () {
823
889
  var media = ref.current;
824
890
 
@@ -833,28 +899,19 @@ var useMediaApi = function useMediaApi() {
833
899
  if (media !== null) {
834
900
  media.currentTime = time;
835
901
  }
836
- }, []);
837
- var mute = useCallback(function () {
838
- var media = ref.current;
839
-
840
- if (media !== null) {
841
- media.muted = true;
842
- }
843
- }, []);
844
- var unMute = useCallback(function () {
845
- var media = ref.current;
846
-
847
- if (media !== null) {
848
- media.muted = false;
849
- }
850
- }, []);
851
- var toggleMute = useCallback(function () {
852
- var media = ref.current;
853
-
854
- if (media !== null) {
855
- media.muted = !muted;
856
- }
857
- }, [muted]); // Media events callbacks
902
+ }, []); // const mute = useCallback(() => {
903
+ // const { current: media } = ref;
904
+ // if (media !== null) {
905
+ // media.muted = true;
906
+ // }
907
+ // }, []);
908
+ // const unMute = useCallback(() => {
909
+ // const { current: media } = ref;
910
+ // if (media !== null) {
911
+ // media.muted = false;
912
+ // }
913
+ // }, []);
914
+ // Media events callbacks
858
915
 
859
916
  var onCustomPlay = useCallback(function () {
860
917
  if (onPlay !== null) {
@@ -915,10 +972,10 @@ var useMediaApi = function useMediaApi() {
915
972
  var eventMedia = e.currentTarget;
916
973
  setDuration(eventMedia.duration);
917
974
 
918
- if (onDurationChanged !== null) {
919
- onDurationChanged(eventMedia.duration);
975
+ if (onDurationChange !== null) {
976
+ onDurationChange(eventMedia.duration);
920
977
  }
921
- }, [setDuration, onDurationChanged]);
978
+ }, [setDuration, onDurationChange]);
922
979
  var onCustomSeeked = useCallback(function (e) {
923
980
  var eventMedia = e.currentTarget;
924
981
 
@@ -927,13 +984,12 @@ var useMediaApi = function useMediaApi() {
927
984
  }
928
985
  }, [onSeeked]);
929
986
  var onCustomVolumeChange = useCallback(function (e) {
930
- var eventMedia = e.currentTarget;
931
- setMuted(eventMedia.muted);
987
+ var eventMedia = e.currentTarget; // setMuted(eventMedia.muted);
932
988
 
933
- if (onVolumeChanged !== null) {
934
- onVolumeChanged(eventMedia.muted, eventMedia.volume);
989
+ if (onVolumeChange !== null) {
990
+ onVolumeChange(eventMedia.volume);
935
991
  }
936
- }, [setMuted, onVolumeChanged]);
992
+ }, [onVolumeChange]);
937
993
  var onCustomLoadStart = useCallback(function () {
938
994
  if (onLoadStart !== null) {
939
995
  onLoadStart();
@@ -970,8 +1026,8 @@ var useMediaApi = function useMediaApi() {
970
1026
  var onCustomSuspended = useCallback(function () {
971
1027
  setSuspended(true);
972
1028
 
973
- if (onSuspended !== null) {
974
- onSuspended();
1029
+ if (onSuspend !== null) {
1030
+ onSuspend();
975
1031
  }
976
1032
  }, [setSuspended, onSuspended]);
977
1033
  useEffect(function () {
@@ -1080,13 +1136,8 @@ var useMediaApi = function useMediaApi() {
1080
1136
  ref: ref,
1081
1137
  play: play,
1082
1138
  pause: pause,
1083
- togglePlay: togglePlay,
1084
1139
  stop: stop,
1085
1140
  seek: seek,
1086
- mute: mute,
1087
- unMute: unMute,
1088
- toggleMute: toggleMute,
1089
- muted: muted,
1090
1141
  currentTime: currentTime,
1091
1142
  duration: duration,
1092
1143
  playing: playing,
@@ -1097,6 +1148,190 @@ var useMediaApi = function useMediaApi() {
1097
1148
  };
1098
1149
  };
1099
1150
 
1151
+ function useMediaCurrentTime(element) {
1152
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1153
+ _ref$id = _ref.id,
1154
+ id = _ref$id === void 0 ? null : _ref$id,
1155
+ _ref$disabled = _ref.disabled,
1156
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
1157
+ _ref$updateInterval = _ref.updateInterval,
1158
+ updateInterval = _ref$updateInterval === void 0 ? 1000 : _ref$updateInterval,
1159
+ _ref$onUpdate = _ref.onUpdate,
1160
+ customOnUpdate = _ref$onUpdate === void 0 ? null : _ref$onUpdate;
1161
+
1162
+ var _useState = useState(0),
1163
+ _useState2 = _slicedToArray(_useState, 2),
1164
+ currentTime = _useState2[0],
1165
+ setCurrentTime = _useState2[1];
1166
+
1167
+ var realCurrentTime = useRef(currentTime);
1168
+ var lastIdRef = useRef(id);
1169
+ var idChanged = lastIdRef.current !== id;
1170
+
1171
+ if (idChanged) {
1172
+ realCurrentTime.current = 0;
1173
+ lastIdRef.current = id;
1174
+ } // Check time update
1175
+
1176
+
1177
+ useEffect(function () {
1178
+ if (disabled || element === null) {
1179
+ return function () {};
1180
+ }
1181
+
1182
+ var canceled = false;
1183
+
1184
+ var updateTime = function updateTime(time) {
1185
+ if (canceled) {
1186
+ return;
1187
+ }
1188
+
1189
+ realCurrentTime.current = time;
1190
+ setCurrentTime(time);
1191
+
1192
+ if (customOnUpdate !== null) {
1193
+ customOnUpdate(time);
1194
+ }
1195
+ };
1196
+
1197
+ var interval = setInterval(function () {
1198
+ var time = element.currentTime;
1199
+
1200
+ if (typeof time.then !== 'undefined') {
1201
+ time.then(updateTime);
1202
+ } else {
1203
+ updateTime(time);
1204
+ }
1205
+ }, updateInterval);
1206
+ return function () {
1207
+ canceled = true;
1208
+ clearInterval(interval);
1209
+ };
1210
+ }, [id, element, setCurrentTime, disabled, updateInterval]);
1211
+ return realCurrentTime.current;
1212
+ }
1213
+
1214
+ function useMediaDuration(element) {
1215
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1216
+ _ref$id = _ref.id,
1217
+ id = _ref$id === void 0 ? null : _ref$id;
1218
+
1219
+ var _useState = useState(element !== null ? element.duration || 0 : 0),
1220
+ _useState2 = _slicedToArray(_useState, 2),
1221
+ duration = _useState2[0],
1222
+ setDuration = _useState2[1];
1223
+
1224
+ var realDuration = useRef(duration);
1225
+ var lastIdRef = useRef(id);
1226
+ var idChanged = lastIdRef.current !== id;
1227
+
1228
+ if (idChanged) {
1229
+ realDuration.current = element !== null ? element.duration || 0 : 0;
1230
+ lastIdRef.current = id;
1231
+ }
1232
+
1233
+ useEffect(function () {
1234
+ if (element === null) {
1235
+ return function () {};
1236
+ }
1237
+
1238
+ function updateDuration() {
1239
+ realDuration.current = element.duration || 0;
1240
+ setDuration(element.duration || 0);
1241
+ }
1242
+
1243
+ updateDuration();
1244
+ element.addEventListener('loadedmetadata', updateDuration);
1245
+ element.addEventListener('durationchange', updateDuration);
1246
+ return function () {
1247
+ element.removeEventListener('loadedmetadata', updateDuration);
1248
+ element.removeEventListener('durationchange', updateDuration);
1249
+ };
1250
+ }, [element, id, setDuration]);
1251
+ return realDuration.current;
1252
+ }
1253
+
1254
+ function useMediaLoad(element) {
1255
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1256
+ _ref$preload = _ref.preload,
1257
+ preload = _ref$preload === void 0 ? 'auto' : _ref$preload,
1258
+ _ref$shouldLoad = _ref.shouldLoad,
1259
+ shouldLoad = _ref$shouldLoad === void 0 ? false : _ref$shouldLoad;
1260
+
1261
+ var firstPreloadRef = useRef(preload);
1262
+ var firstShouldLoadRef = useRef(shouldLoad);
1263
+ var hasLoadedRef = useRef(preload !== 'none' && preload !== 'metadata' && shouldLoad);
1264
+ useEffect(function () {
1265
+ var canLoad = preload !== 'none' && preload !== 'metadata' && shouldLoad; // @todo
1266
+
1267
+ var preloadHasChanged = firstPreloadRef.current !== preload;
1268
+ var shouldLoadHasChanged = firstShouldLoadRef.current !== shouldLoad;
1269
+
1270
+ if (canLoad && (preloadHasChanged || shouldLoadHasChanged) && !hasLoadedRef.current && element !== null && typeof element.load !== 'undefined') {
1271
+ hasLoadedRef.current = true;
1272
+ element.load();
1273
+ }
1274
+ }, [element, shouldLoad, preload]);
1275
+ }
1276
+
1277
+ function useMediaReady(element) {
1278
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1279
+ _ref$id = _ref.id,
1280
+ id = _ref$id === void 0 ? null : _ref$id;
1281
+
1282
+ var _useState = useState(element !== null && element.readyState > 0),
1283
+ _useState2 = _slicedToArray(_useState, 2),
1284
+ ready = _useState2[0],
1285
+ setReady = _useState2[1];
1286
+
1287
+ var realReady = useRef(ready);
1288
+ var lastIdRef = useRef(id);
1289
+ var idChanged = lastIdRef.current !== id;
1290
+
1291
+ if (idChanged) {
1292
+ realReady.current = false;
1293
+ lastIdRef.current = id;
1294
+ }
1295
+
1296
+ useEffect(function () {
1297
+ if (element === null) {
1298
+ return function () {};
1299
+ }
1300
+
1301
+ function updateReady() {
1302
+ var currentReady = ready;
1303
+
1304
+ if (element.readyState > 0 && !ready) {
1305
+ setReady(true);
1306
+ currentReady = true;
1307
+ } else if (ready && element.readyState === 0) {
1308
+ setReady(false);
1309
+ currentReady = false;
1310
+ }
1311
+
1312
+ realReady.current = currentReady;
1313
+ return currentReady;
1314
+ }
1315
+
1316
+ var currentReady = updateReady();
1317
+
1318
+ if (!currentReady) {
1319
+ element.addEventListener('loadedmetadata', updateReady);
1320
+ element.addEventListener('canplay', updateReady);
1321
+ element.addEventListener('canplaythrough', updateReady);
1322
+ }
1323
+
1324
+ return function () {
1325
+ if (!currentReady) {
1326
+ element.removeEventListener('loadedmetadata', updateReady);
1327
+ element.removeEventListener('canplay', updateReady);
1328
+ element.removeEventListener('canplaythrough', updateReady);
1329
+ }
1330
+ };
1331
+ }, [element, id]);
1332
+ return realReady.current;
1333
+ }
1334
+
1100
1335
  var useMediasParser = function useMediasParser() {
1101
1336
  var screensManager = useScreensManager();
1102
1337
  var fieldsManager = useFieldsManager(); // Convert medias object to path
@@ -1122,25 +1357,117 @@ var useMediasParser = function useMediasParser() {
1122
1357
 
1123
1358
  function useMediaThumbnail(media) {
1124
1359
  var file = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
1360
+ var thumbnail = useMemo(function () {
1361
+ if (isObject(file)) {
1362
+ return file;
1363
+ }
1364
+
1365
+ var _ref = media || {},
1366
+ _ref$thumbnail_url = _ref.thumbnail_url,
1367
+ defaultThumbnailUrl = _ref$thumbnail_url === void 0 ? null : _ref$thumbnail_url,
1368
+ _ref$files = _ref.files,
1369
+ files = _ref$files === void 0 ? null : _ref$files,
1370
+ _ref$metadata = _ref.metadata,
1371
+ metadata = _ref$metadata === void 0 ? null : _ref$metadata;
1125
1372
 
1126
- var _ref = media || {},
1127
- _ref$thumbnail_url = _ref.thumbnail_url,
1128
- defaultThumbnailUrl = _ref$thumbnail_url === void 0 ? null : _ref$thumbnail_url,
1129
- _ref$files = _ref.files,
1130
- files = _ref$files === void 0 ? null : _ref$files;
1373
+ var _ref2 = metadata || {},
1374
+ mediaWidth = _ref2.width,
1375
+ mediaHeight = _ref2.height;
1131
1376
 
1132
- var thumbnailUrl = useMemo(function () {
1133
1377
  var filesArray = getMediaFilesAsArray(files) || [];
1134
1378
 
1135
- var _ref2 = (file !== null ? filesArray.find(function (_ref3) {
1136
- var handle = _ref3.handle;
1379
+ var _ref3 = (file !== null ? filesArray.find(function (_ref4) {
1380
+ var handle = _ref4.handle;
1137
1381
  return handle === file;
1138
1382
  }) || null : null) || {},
1139
- url = _ref2.url;
1383
+ _ref3$url = _ref3.url,
1384
+ url = _ref3$url === void 0 ? null : _ref3$url;
1385
+
1386
+ return url !== null || defaultThumbnailUrl !== null ? {
1387
+ url: url || defaultThumbnailUrl,
1388
+ metadata: {
1389
+ width: mediaWidth,
1390
+ height: mediaHeight
1391
+ }
1392
+ } : null;
1393
+ }, [media, file]);
1394
+ return thumbnail;
1395
+ }
1140
1396
 
1141
- return url || defaultThumbnailUrl;
1142
- }, [files, file, defaultThumbnailUrl]);
1143
- return thumbnailUrl;
1397
+ function useMediaWaveform(media) {
1398
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1399
+ _ref$fake = _ref.fake,
1400
+ fake = _ref$fake === void 0 ? false : _ref$fake,
1401
+ _ref$reduceBufferFact = _ref.reduceBufferFactor,
1402
+ reduceBufferFactor = _ref$reduceBufferFact === void 0 ? 100 : _ref$reduceBufferFact;
1403
+
1404
+ var _ref2 = media || {},
1405
+ _ref2$url = _ref2.url,
1406
+ url = _ref2$url === void 0 ? null : _ref2$url,
1407
+ _ref2$metadata = _ref2.metadata,
1408
+ metadata = _ref2$metadata === void 0 ? null : _ref2$metadata;
1409
+
1410
+ var _ref3 = metadata || {},
1411
+ _ref3$waveform = _ref3.waveform,
1412
+ waveform = _ref3$waveform === void 0 ? null : _ref3$waveform;
1413
+
1414
+ var _useState = useState(null),
1415
+ _useState2 = _slicedToArray(_useState, 2),
1416
+ audioLevels = _useState2[0],
1417
+ setAudioLevels = _useState2[1];
1418
+
1419
+ useEffect(function () {
1420
+ var canceled = false;
1421
+ var AudioContext = typeof window !== 'undefined' ? window.AudioContext || window.webkitAudioContext : null;
1422
+
1423
+ if (waveform !== null) {
1424
+ setAudioLevels(waveform.map(function (it) {
1425
+ return (it + 256 / 2) / 256;
1426
+ }));
1427
+ } else if (url !== null && fake) {
1428
+ var fakeLength = 1000;
1429
+ setAudioLevels(_toConsumableArray(new Array(fakeLength)).map(function () {
1430
+ return Math.random();
1431
+ }));
1432
+ } else if (url !== null && AudioContext !== null) {
1433
+ fetch(url, {
1434
+ mode: 'cors'
1435
+ }).then(function (response) {
1436
+ if (canceled) {
1437
+ throw new Error('Audio loading canceled');
1438
+ }
1439
+
1440
+ return response.arrayBuffer();
1441
+ }).then(function (arrayBuffer) {
1442
+ if (canceled) {
1443
+ throw new Error('Audio loading canceled');
1444
+ }
1445
+
1446
+ var audioCtx = new AudioContext();
1447
+ return audioCtx.decodeAudioData(arrayBuffer);
1448
+ }).then(function (buffer) {
1449
+ var channelsCount = buffer.numberOfChannels;
1450
+
1451
+ if (channelsCount > 0) {
1452
+ var leftChannelData = buffer.getChannelData(0);
1453
+ setAudioLevels(leftChannelData.reduce(function (newArray, level) {
1454
+ // eslint-disable-next-line no-param-reassign
1455
+ newArray[newArray.length] = Math.abs(level);
1456
+ return newArray;
1457
+ }, []));
1458
+ }
1459
+ })["catch"](function (e) {
1460
+ throw e;
1461
+ });
1462
+ }
1463
+
1464
+ return function () {
1465
+ if (url === null) {
1466
+ canceled = true;
1467
+ }
1468
+ };
1469
+ }, [url, waveform, setAudioLevels, reduceBufferFactor, fake]);
1470
+ return audioLevels;
1144
1471
  }
1145
1472
 
1146
1473
  var useParsedStory = function useParsedStory(story) {
@@ -1176,6 +1503,38 @@ var useParsedStory = function useParsedStory(story) {
1176
1503
  return newStory;
1177
1504
  };
1178
1505
 
1506
+ function useProgressSteps() {
1507
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
1508
+ _ref$disabled = _ref.disabled,
1509
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
1510
+ currentTime = _ref.currentTime,
1511
+ duration = _ref.duration,
1512
+ _ref$onStep = _ref.onStep,
1513
+ onStep = _ref$onStep === void 0 ? null : _ref$onStep,
1514
+ _ref$steps = _ref.steps,
1515
+ steps = _ref$steps === void 0 ? [0.1, 0.25, 0.5, 0.75, 0.9] : _ref$steps;
1516
+
1517
+ var progressStepsReached = useRef({});
1518
+ useEffect(function () {
1519
+ if (duration === 0 || disabled) {
1520
+ return;
1521
+ }
1522
+
1523
+ var progress = currentTime / duration;
1524
+ var currentSteps = progressStepsReached.current;
1525
+ var stepsToTrack = steps.filter(function (step) {
1526
+ return progress > step && typeof currentSteps[step] === 'undefined';
1527
+ });
1528
+ stepsToTrack.forEach(function (step) {
1529
+ if (onStep !== null) {
1530
+ onStep(step);
1531
+ }
1532
+
1533
+ currentSteps[step] = true;
1534
+ });
1535
+ }, [duration, currentTime, disabled]);
1536
+ }
1537
+
1179
1538
  var _excluded = ["width", "height"];
1180
1539
  var devicePixelRatio = typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;
1181
1540
 
@@ -1233,34 +1592,31 @@ var useScreenSizeFromElement = function useScreenSizeFromElement() {
1233
1592
  height = _ref4$height === void 0 ? null : _ref4$height,
1234
1593
  opts = _objectWithoutProperties(_ref4, _excluded);
1235
1594
 
1236
- var _useResizeObserver = useResizeObserver(),
1237
- ref = _useResizeObserver.ref,
1238
- contentRect = _useResizeObserver.entry.contentRect;
1239
-
1240
- var _ref5 = contentRect || {},
1241
- _ref5$width = _ref5.width,
1242
- calculatedWidth = _ref5$width === void 0 ? 0 : _ref5$width,
1243
- _ref5$height = _ref5.height,
1244
- calculatedHeight = _ref5$height === void 0 ? 0 : _ref5$height;
1595
+ var _useDimensionObserver = useDimensionObserver(),
1596
+ ref = _useDimensionObserver.ref,
1597
+ _useDimensionObserver2 = _useDimensionObserver.width,
1598
+ calculatedWidth = _useDimensionObserver2 === void 0 ? 0 : _useDimensionObserver2,
1599
+ _useDimensionObserver3 = _useDimensionObserver.height,
1600
+ calculatedHeight = _useDimensionObserver3 === void 0 ? 0 : _useDimensionObserver3;
1245
1601
 
1246
1602
  var fullWidth = width !== null ? width : calculatedWidth;
1247
1603
  var fullHeight = height !== null ? height : calculatedHeight;
1248
1604
 
1249
- var _ref6 = opts || {},
1250
- _ref6$screenWidth = _ref6.screenWidth,
1251
- screenWidth = _ref6$screenWidth === void 0 ? 320 : _ref6$screenWidth,
1252
- _ref6$screenHeight = _ref6.screenHeight,
1253
- screenHeight = _ref6$screenHeight === void 0 ? 480 : _ref6$screenHeight,
1254
- _ref6$withoutMaxSize = _ref6.withoutMaxSize,
1255
- withoutMaxSize = _ref6$withoutMaxSize === void 0 ? false : _ref6$withoutMaxSize,
1256
- _ref6$landscapeMinHei = _ref6.landscapeMinHeight,
1257
- landscapeMinHeight = _ref6$landscapeMinHei === void 0 ? 600 : _ref6$landscapeMinHei,
1258
- _ref6$menuAlwaysOverS = _ref6.menuAlwaysOverScreen,
1259
- menuAlwaysOverScreen = _ref6$menuAlwaysOverS === void 0 ? true : _ref6$menuAlwaysOverS,
1260
- _ref6$landscapeMinRat = _ref6.landscapeMinRatio,
1261
- landscapeMinRatio = _ref6$landscapeMinRat === void 0 ? 2 / 3 : _ref6$landscapeMinRat,
1262
- _ref6$withoutScale = _ref6.withoutScale,
1263
- withoutScale = _ref6$withoutScale === void 0 ? false : _ref6$withoutScale;
1605
+ var _ref5 = opts || {},
1606
+ _ref5$screenWidth = _ref5.screenWidth,
1607
+ screenWidth = _ref5$screenWidth === void 0 ? 320 : _ref5$screenWidth,
1608
+ _ref5$screenHeight = _ref5.screenHeight,
1609
+ screenHeight = _ref5$screenHeight === void 0 ? 480 : _ref5$screenHeight,
1610
+ _ref5$withoutMaxSize = _ref5.withoutMaxSize,
1611
+ withoutMaxSize = _ref5$withoutMaxSize === void 0 ? false : _ref5$withoutMaxSize,
1612
+ _ref5$landscapeMinHei = _ref5.landscapeMinHeight,
1613
+ landscapeMinHeight = _ref5$landscapeMinHei === void 0 ? 600 : _ref5$landscapeMinHei,
1614
+ _ref5$menuAlwaysOverS = _ref5.menuAlwaysOverScreen,
1615
+ menuAlwaysOverScreen = _ref5$menuAlwaysOverS === void 0 ? true : _ref5$menuAlwaysOverS,
1616
+ _ref5$landscapeMinRat = _ref5.landscapeMinRatio,
1617
+ landscapeMinRatio = _ref5$landscapeMinRat === void 0 ? 2 / 3 : _ref5$landscapeMinRat,
1618
+ _ref5$withoutScale = _ref5.withoutScale,
1619
+ withoutScale = _ref5$withoutScale === void 0 ? false : _ref5$withoutScale;
1264
1620
 
1265
1621
  var screenRatio = screenWidth / screenHeight;
1266
1622
  var elementRatio = fullWidth / fullHeight;
@@ -1656,4 +2012,4 @@ var useTrackMedia = function useTrackMedia() {
1656
2012
  var eventsManager = typeof window !== 'undefined' ? new EventsManager(window) : null;
1657
2013
  var useWindowEvent = createUseEvent(eventsManager);
1658
2014
 
1659
- export { getObserver, useAnimationFrame, useDocumentEvent, useForm, useFormTransition, useFormattedDate, useFormattedTime, useFullscreen, useIntersectionObserver, useIsVisible, useLoadedFonts, useLongPress, useMediaApi, useMediaThumbnail, useMediasParser, useObserver, useParsedStory, useResizeObserver, useScreenSizeFromElement, useScreenSizeFromWindow, useSwipe, useThemeParser, useTrackEvent, useTrackMedia, useTrackScreenEvent, useTrackScreenMedia, useTrackScreenView, useWindowEvent };
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 };