@micromag/core 0.3.460 → 0.3.465

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
@@ -16,6 +16,7 @@ import screenfull from 'screenfull';
16
16
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
17
17
  import isArray from 'lodash/isArray';
18
18
  import isObject from 'lodash/isObject';
19
+ import createDebug from 'debug';
19
20
  import raf from 'raf';
20
21
  import { useScreensManager, useFieldsManager, useTracking, useScreen } from '@micromag/core/contexts';
21
22
  import { match } from 'css-mediaquery';
@@ -972,6 +973,10 @@ var useMediaApi = function useMediaApi() {
972
973
  setPlaying(true);
973
974
  setSuspended(false);
974
975
  }, [initialPlay, setPlaying, onPlay]);
976
+ var onCustomPlaying = useCallback(function () {
977
+ setPlaying(true);
978
+ setSuspended(false);
979
+ }, []);
975
980
  var onCustomPause = useCallback(function (e) {
976
981
  var eventMedia = e.currentTarget;
977
982
  setPlaying(false);
@@ -1072,6 +1077,7 @@ var useMediaApi = function useMediaApi() {
1072
1077
  if (media !== null) {
1073
1078
  media.addEventListener('volumechange', onCustomVolumeChange);
1074
1079
  media.addEventListener('play', onCustomPlay);
1080
+ media.addEventListener('playing', onCustomPlaying);
1075
1081
  media.addEventListener('pause', onCustomPause);
1076
1082
  media.addEventListener('ended', onCustomEnded);
1077
1083
  media.addEventListener('seeked', onCustomSeeked);
@@ -1085,6 +1091,7 @@ var useMediaApi = function useMediaApi() {
1085
1091
  if (media !== null) {
1086
1092
  media.removeEventListener('volumechange', onCustomVolumeChange);
1087
1093
  media.removeEventListener('play', onCustomPlay);
1094
+ media.removeEventListener('playing', onCustomPlaying);
1088
1095
  media.removeEventListener('pause', onCustomPause);
1089
1096
  media.removeEventListener('ended', onCustomEnded);
1090
1097
  media.removeEventListener('seeked', onCustomSeeked);
@@ -1180,6 +1187,230 @@ var useMediaApi = function useMediaApi() {
1180
1187
  };
1181
1188
  };
1182
1189
 
1190
+ var useMediaBuffering = function useMediaBuffering() {
1191
+ var mediaElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1192
+ var _useState = useState(false),
1193
+ _useState2 = _slicedToArray(_useState, 2),
1194
+ buffering = _useState2[0],
1195
+ setBuffering = _useState2[1];
1196
+ useEffect(function () {
1197
+ if (mediaElement === null) {
1198
+ return function () {};
1199
+ }
1200
+ function onBufferingEvent(e) {
1201
+ // networkstate
1202
+ if (mediaElement.networkState === mediaElement.NETWORK_LOADING) {
1203
+ // The user agent is actively trying to download data.
1204
+ setBuffering(true);
1205
+ }
1206
+
1207
+ // readystate
1208
+ if (mediaElement.readyState < mediaElement.HAVE_FUTURE_DATA) {
1209
+ // There is not enough data to keep playing from this point
1210
+ setBuffering(true);
1211
+ }
1212
+ }
1213
+ function onPlay() {
1214
+ setBuffering(false);
1215
+ }
1216
+ function onPlaying() {
1217
+ setBuffering(false);
1218
+ }
1219
+ function onPause() {
1220
+ setBuffering(false);
1221
+ }
1222
+ function onEnded() {
1223
+ setBuffering(false);
1224
+ }
1225
+ mediaElement.addEventListener('waiting', onBufferingEvent);
1226
+ mediaElement.addEventListener('stalled', onBufferingEvent);
1227
+ mediaElement.addEventListener('play', onPlay);
1228
+ mediaElement.addEventListener('playing', onPlaying);
1229
+ mediaElement.addEventListener('pause', onPause);
1230
+ mediaElement.addEventListener('ended', onEnded);
1231
+ return function () {
1232
+ mediaElement.removeEventListener('waiting', onBufferingEvent);
1233
+ mediaElement.removeEventListener('stalled', onBufferingEvent);
1234
+ mediaElement.removeEventListener('play', onPlay);
1235
+ mediaElement.removeEventListener('playing', onPlaying);
1236
+ mediaElement.removeEventListener('pause', onPause);
1237
+ mediaElement.removeEventListener('ended', onEnded);
1238
+ };
1239
+ }, [mediaElement]);
1240
+
1241
+ // useEffect(() => {
1242
+ // if (mediaElement === null) {
1243
+ // return () => {};
1244
+ // }
1245
+ // let lastPlayPos = 0;
1246
+ // let currentPlayPos = 0;
1247
+ // let bufferingDetected = false;
1248
+
1249
+ // function checkBuffering(player, checkInterval) {
1250
+ // currentPlayPos = player.currentTime;
1251
+
1252
+ // // checking offset should be at most the check interval
1253
+ // // but allow for some margin
1254
+ // const offset = (checkInterval - 20) / 1000;
1255
+
1256
+ // // if no buffering is currently detected,
1257
+ // // and the position does not seem to increase
1258
+ // // and the player isn't manually paused...
1259
+ // if (!bufferingDetected && currentPlayPos < lastPlayPos + offset && !player.paused) {
1260
+ // console.log('buffering!');
1261
+ // bufferingDetected = true;
1262
+ // }
1263
+
1264
+ // // if we were buffering but the player has advanced,
1265
+ // // then there is no buffering
1266
+ // if (bufferingDetected && currentPlayPos > lastPlayPos + offset && !player.paused) {
1267
+ // console.log('not buffering anymore!');
1268
+ // bufferingDetected = false;
1269
+ // }
1270
+ // lastPlayPos = currentPlayPos;
1271
+
1272
+ // return bufferingDetected;
1273
+ // }
1274
+
1275
+ // const id = setInterval(() => {
1276
+ // setBuffering(checkBuffering(mediaElement, interval));
1277
+ // }, interval);
1278
+
1279
+ // return () => {
1280
+ // clearInterval(id);
1281
+ // };
1282
+ // }, [mediaElement, interval]);
1283
+
1284
+ return {
1285
+ buffering: buffering
1286
+ };
1287
+ };
1288
+
1289
+ var useMediaState = function useMediaState() {
1290
+ var mediaElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1291
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1292
+ _ref$playing = _ref.playing,
1293
+ wantedPlaying = _ref$playing === void 0 ? false : _ref$playing,
1294
+ _ref$muted = _ref.muted,
1295
+ wantedMuted = _ref$muted === void 0 ? false : _ref$muted;
1296
+ var debug = useMemo(function () {
1297
+ var mediaKey = mediaElement !== null && isString(mediaElement.src) ? mediaElement.src.split('/')[mediaElement.src.split('/').length - 1].split('#')[0] || null : null;
1298
+ return createDebug(mediaKey !== null ? "micromag:media:".concat(mediaKey) : 'micromag:media');
1299
+ }, [mediaElement]);
1300
+ var _useState = useState(wantedPlaying),
1301
+ _useState2 = _slicedToArray(_useState, 2),
1302
+ playing = _useState2[0],
1303
+ setPlaying = _useState2[1];
1304
+ var _useState3 = useState(false),
1305
+ _useState4 = _slicedToArray(_useState3, 2),
1306
+ buffering = _useState4[0],
1307
+ setBuffering = _useState4[1];
1308
+ var _useState5 = useState(mediaElement !== null && (mediaElement.muted || mediaElement.volume === 0) || wantedMuted),
1309
+ _useState6 = _slicedToArray(_useState5, 2),
1310
+ muted = _useState6[0],
1311
+ setMuted = _useState6[1];
1312
+ useEffect(function () {
1313
+ debug('State change %o', {
1314
+ playing: playing,
1315
+ buffering: buffering,
1316
+ muted: muted
1317
+ });
1318
+ }, [playing, buffering, muted, debug]);
1319
+ useEffect(function () {
1320
+ if (mediaElement === null) {
1321
+ setPlaying(wantedPlaying);
1322
+ setBuffering(false);
1323
+ setMuted(wantedMuted);
1324
+ debug('Unset media: %o', {
1325
+ wantedPlaying: wantedPlaying,
1326
+ wantedMuted: wantedMuted
1327
+ });
1328
+ }
1329
+ }, [mediaElement, debug, wantedPlaying, wantedMuted]);
1330
+ useEffect(function () {
1331
+ if (mediaElement === null) {
1332
+ return function () {};
1333
+ }
1334
+ function onBufferingEvent(e) {
1335
+ // networkstate
1336
+ if (mediaElement.networkState === mediaElement.NETWORK_LOADING) {
1337
+ debug('onBufferingEvent: NETWORK_LOADING');
1338
+ setBuffering(true);
1339
+ }
1340
+
1341
+ // readystate
1342
+ if (mediaElement.readyState < mediaElement.HAVE_FUTURE_DATA) {
1343
+ debug('onBufferingEvent: HAVE_FUTURE_DATA');
1344
+ setBuffering(true);
1345
+ }
1346
+ }
1347
+ function onPlay() {
1348
+ debug('onPlay');
1349
+ setPlaying(true);
1350
+ setBuffering(false);
1351
+ }
1352
+ function onPlaying() {
1353
+ debug('onPlaying');
1354
+ setPlaying(true);
1355
+ setBuffering(false);
1356
+ }
1357
+ function onTimeUpdate(e) {
1358
+ debug('onTimeUpdate');
1359
+ setPlaying(!e.currentTarget.paused && !e.currentTarget.ended);
1360
+ setBuffering(false);
1361
+ }
1362
+ function onPause() {
1363
+ debug('onPause');
1364
+ setPlaying(false);
1365
+ setBuffering(false);
1366
+ }
1367
+ function onEnded() {
1368
+ debug('onEnded');
1369
+ setPlaying(false);
1370
+ setBuffering(false);
1371
+ }
1372
+ function onSuspend(e) {
1373
+ debug('onSuspend');
1374
+ setPlaying(!e.currentTarget.paused && !e.currentTarget.ended);
1375
+ setBuffering(false);
1376
+ }
1377
+ function onVolumeChange() {
1378
+ setMuted(mediaElement.muted || mediaElement.volume === 0);
1379
+ }
1380
+ if (mediaElement.paused || mediaElement.ended) {
1381
+ setPlaying(false);
1382
+ }
1383
+ if (muted !== mediaElement.muted) {
1384
+ setMuted(mediaElement.muted);
1385
+ }
1386
+ mediaElement.addEventListener('waiting', onBufferingEvent);
1387
+ mediaElement.addEventListener('stalled', onBufferingEvent);
1388
+ mediaElement.addEventListener('timeupdate', onTimeUpdate);
1389
+ mediaElement.addEventListener('play', onPlay);
1390
+ mediaElement.addEventListener('playing', onPlaying);
1391
+ mediaElement.addEventListener('pause', onPause);
1392
+ mediaElement.addEventListener('suspend', onSuspend);
1393
+ mediaElement.addEventListener('ended', onEnded);
1394
+ mediaElement.addEventListener('volumechange', onVolumeChange);
1395
+ return function () {
1396
+ mediaElement.removeEventListener('waiting', onBufferingEvent);
1397
+ mediaElement.removeEventListener('stalled', onBufferingEvent);
1398
+ mediaElement.removeEventListener('timeupdate', onTimeUpdate);
1399
+ mediaElement.removeEventListener('play', onPlay);
1400
+ mediaElement.removeEventListener('playing', onPlaying);
1401
+ mediaElement.removeEventListener('pause', onPause);
1402
+ mediaElement.removeEventListener('suspend', onSuspend);
1403
+ mediaElement.removeEventListener('ended', onEnded);
1404
+ mediaElement.removeEventListener('volumechange', onVolumeChange);
1405
+ };
1406
+ }, [mediaElement, debug]);
1407
+ return {
1408
+ playing: playing,
1409
+ muted: muted,
1410
+ buffering: buffering
1411
+ };
1412
+ };
1413
+
1183
1414
  function useMediaCurrentTime(element) {
1184
1415
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1185
1416
  _ref$id = _ref.id,
@@ -1347,28 +1578,31 @@ function useMediaProgress(media) {
1347
1578
  if (media === null) {
1348
1579
  return function () {};
1349
1580
  }
1350
- function onResume() {
1351
- if (!playing) {
1352
- setPlaying(true);
1353
- }
1354
- updateProgress(media.currentTime / media.duration);
1581
+ function onResume(e) {
1582
+ setPlaying(true);
1583
+ var newProgress = media.currentTime / media.duration;
1584
+ updateProgress(newProgress);
1585
+ }
1586
+ function onUpdate(e) {
1587
+ setPlaying(!e.currentTarget.paused && !e.currentTarget.ended);
1588
+ var newProgress = media.currentTime / media.duration;
1589
+ updateProgress(newProgress);
1355
1590
  }
1356
1591
  function onPause() {
1357
- if (playing) {
1358
- setPlaying(false);
1359
- }
1360
- updateProgress(media.currentTime / media.duration);
1592
+ setPlaying(false);
1593
+ var newProgress = media.currentTime / media.duration;
1594
+ updateProgress(newProgress);
1361
1595
  }
1362
1596
  media.addEventListener('play', onResume);
1363
- media.addEventListener('seeked', onResume);
1364
1597
  media.addEventListener('playing', onResume);
1365
- // media.addEventListener('timeupdate', onResume);
1598
+ media.addEventListener('seeked', onUpdate);
1599
+ // media.addEventListener('timeupdate', onUpdate);
1366
1600
  media.addEventListener('pause', onPause);
1367
1601
  media.addEventListener('ended', onPause);
1368
1602
  media.addEventListener('waiting', onPause);
1369
1603
  media.addEventListener('stalled', onPause);
1370
1604
  media.addEventListener('seeking', onPause);
1371
- // media.addEventListener('suspend', onPause);
1605
+ media.addEventListener('suspend', onUpdate);
1372
1606
  // if (media.paused) {
1373
1607
  // onPause();
1374
1608
  // } else {
@@ -1384,7 +1618,7 @@ function useMediaProgress(media) {
1384
1618
  media.removeEventListener('waiting', onPause);
1385
1619
  media.removeEventListener('stalled', onPause);
1386
1620
  media.removeEventListener('seeking', onPause);
1387
- // media.removeEventListener('suspend', onPause);
1621
+ media.removeEventListener('suspend', onUpdate);
1388
1622
  };
1389
1623
  }, [media, updateProgress, setPlaying, playing]);
1390
1624
  useEffect(function () {
@@ -1399,9 +1633,8 @@ function useMediaProgress(media) {
1399
1633
  }
1400
1634
  var newTime = Date.now() / 1000;
1401
1635
  var elapsed = newTime - updateTimeRef.current;
1402
- updateTimeRef.current = newTime;
1403
1636
  var step = elapsed / duration;
1404
- var newProgress = realProgressRef.current + step;
1637
+ var newProgress = realProgressRef.current < 0.1 ? media.currentTime / media.duration : realProgressRef.current + step;
1405
1638
  updateProgress(newProgress);
1406
1639
  handle = raf(tick);
1407
1640
  }
@@ -2103,4 +2336,4 @@ var useTrackMedia = function useTrackMedia() {
2103
2336
  var eventsManager = typeof window !== 'undefined' ? new EventsManager(window) : null;
2104
2337
  var useWindowEvent = createUseEvent(eventsManager);
2105
2338
 
2106
- export { getObserver, useActivityDetector, useAnimationFrame, useDebounced as useDebounce, useDimensionObserver, useDocumentEvent, useDragProgress, useForm, useFormTransition, useFormattedDate, useFormattedTime, useFullscreen, useIntersectionObserver, useIsVisible, useLoadedFonts, useLongPress, useMediaApi, useMediaCurrentTime, useMediaDuration, useMediaLoad, useMediaProgress, useMediaReady, useMediaThumbnail, useMediaWaveform, useMediasParser, useObserver, useParsedStory, useProgressSteps, useResizeObserver, useScreenSizeFromElement, useScreenSizeFromWindow, useSpringValue, useSwipe, useThemeParser, useTrackEvent, useTrackMedia, useTrackScreenEvent, useTrackScreenMedia, useTrackScreenView, useWindowEvent };
2339
+ export { getObserver, useActivityDetector, useAnimationFrame, useDebounced as useDebounce, useDimensionObserver, useDocumentEvent, useDragProgress, useForm, useFormTransition, useFormattedDate, useFormattedTime, useFullscreen, useIntersectionObserver, useIsVisible, useLoadedFonts, useLongPress, useMediaApi, useMediaBuffering, useMediaCurrentTime, useMediaDuration, useMediaLoad, useMediaProgress, useMediaReady, useMediaState, useMediaThumbnail, useMediaWaveform, useMediasParser, useObserver, useParsedStory, useProgressSteps, useResizeObserver, useScreenSizeFromElement, useScreenSizeFromWindow, useSpringValue, useSwipe, useThemeParser, useTrackEvent, useTrackMedia, useTrackScreenEvent, useTrackScreenMedia, useTrackScreenView, useWindowEvent };
package/es/index.js CHANGED
@@ -9,8 +9,8 @@ import isArray from 'lodash/isArray';
9
9
  import isObject from 'lodash/isObject';
10
10
  import uniqWith from 'lodash/uniqWith';
11
11
  import sortBy from 'lodash/sortBy';
12
+ import _callSuper from '@babel/runtime/helpers/callSuper';
12
13
  import _inherits from '@babel/runtime/helpers/inherits';
13
- import _createSuper from '@babel/runtime/helpers/createSuper';
14
14
  import EventEmitter from 'wolfy87-eventemitter';
15
15
  import 'lodash/isNumber';
16
16
  import '@babel/runtime/helpers/regeneratorRuntime';
@@ -1012,12 +1012,11 @@ var getComponentFromName = function getComponentFromName() {
1012
1012
 
1013
1013
  var ComponentsManager = /*#__PURE__*/function (_EventEmitter) {
1014
1014
  _inherits(ComponentsManager, _EventEmitter);
1015
- var _super = _createSuper(ComponentsManager);
1016
1015
  function ComponentsManager() {
1017
1016
  var _this;
1018
1017
  var components = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1019
1018
  _classCallCheck(this, ComponentsManager);
1020
- _this = _super.call(this);
1019
+ _this = _callSuper(this, ComponentsManager);
1021
1020
  _this.components = components;
1022
1021
  return _this;
1023
1022
  }
@@ -1086,12 +1085,11 @@ var ComponentsManager = /*#__PURE__*/function (_EventEmitter) {
1086
1085
 
1087
1086
  var DefinitionsManager = /*#__PURE__*/function (_EventEmitter) {
1088
1087
  _inherits(DefinitionsManager, _EventEmitter);
1089
- var _super = _createSuper(DefinitionsManager);
1090
1088
  function DefinitionsManager() {
1091
1089
  var _this;
1092
1090
  var definitions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
1093
1091
  _classCallCheck(this, DefinitionsManager);
1094
- _this = _super.call(this);
1092
+ _this = _callSuper(this, DefinitionsManager);
1095
1093
  _this.definitions = definitions || [];
1096
1094
  return _this;
1097
1095
  }
@@ -1166,11 +1164,10 @@ var DefinitionsManager = /*#__PURE__*/function (_EventEmitter) {
1166
1164
 
1167
1165
  var EventsManager = /*#__PURE__*/function (_EventEmitter) {
1168
1166
  _inherits(EventsManager, _EventEmitter);
1169
- var _super = _createSuper(EventsManager);
1170
1167
  function EventsManager(element) {
1171
1168
  var _this;
1172
1169
  _classCallCheck(this, EventsManager);
1173
- _this = _super.call(this);
1170
+ _this = _callSuper(this, EventsManager);
1174
1171
  _this.element = element;
1175
1172
  _this.events = {};
1176
1173
  _this.listeners = {};
@@ -1228,10 +1225,9 @@ var EventsManager = /*#__PURE__*/function (_EventEmitter) {
1228
1225
 
1229
1226
  var FieldsManager = /*#__PURE__*/function (_DefinitionsManager) {
1230
1227
  _inherits(FieldsManager, _DefinitionsManager);
1231
- var _super = _createSuper(FieldsManager);
1232
1228
  function FieldsManager() {
1233
1229
  _classCallCheck(this, FieldsManager);
1234
- return _super.apply(this, arguments);
1230
+ return _callSuper(this, FieldsManager, arguments);
1235
1231
  }
1236
1232
  _createClass(FieldsManager, [{
1237
1233
  key: "filter",
@@ -1518,10 +1514,9 @@ var MediasParser = /*#__PURE__*/function () {
1518
1514
 
1519
1515
  var ScreensManager = /*#__PURE__*/function (_DefinitionsManager) {
1520
1516
  _inherits(ScreensManager, _DefinitionsManager);
1521
- var _super = _createSuper(ScreensManager);
1522
1517
  function ScreensManager() {
1523
1518
  _classCallCheck(this, ScreensManager);
1524
- return _super.apply(this, arguments);
1519
+ return _callSuper(this, ScreensManager, arguments);
1525
1520
  }
1526
1521
  _createClass(ScreensManager, [{
1527
1522
  key: "getFields",
@@ -2152,12 +2147,11 @@ var _excluded = ["value"],
2152
2147
  _excluded2 = ["value", "currentTime"];
2153
2148
  var Tracking = /*#__PURE__*/function (_BaseTracking) {
2154
2149
  _inherits(Tracking, _BaseTracking);
2155
- var _super = _createSuper(Tracking);
2156
2150
  function Tracking() {
2157
2151
  var _this;
2158
2152
  var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
2159
2153
  _classCallCheck(this, Tracking);
2160
- _this = _super.call(this, opts);
2154
+ _this = _callSuper(this, Tracking, [opts]);
2161
2155
  var _this$options$variabl = _this.options.variables,
2162
2156
  variables = _this$options$variabl === void 0 ? null : _this$options$variabl;
2163
2157
  _this.variables = null;
package/lib/contexts.js CHANGED
@@ -1976,7 +1976,7 @@ var VisitorProvider = function VisitorProvider(_ref) {
1976
1976
  VisitorProvider.propTypes = propTypes;
1977
1977
  VisitorProvider.defaultProps = defaultProps;
1978
1978
 
1979
- Object.defineProperty(exports, 'TrackingContext', {
1979
+ Object.defineProperty(exports, "TrackingContext", {
1980
1980
  enumerable: true,
1981
1981
  get: function () { return tracking.TrackingContext; }
1982
1982
  });