@micromag/core 0.3.460 → 0.3.463

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
@@ -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 createDebug = require('debug');
21
22
  var raf = require('raf');
22
23
  var contexts = require('@micromag/core/contexts');
23
24
  var cssMediaquery = require('css-mediaquery');
@@ -974,6 +975,10 @@ var useMediaApi = function useMediaApi() {
974
975
  setPlaying(true);
975
976
  setSuspended(false);
976
977
  }, [initialPlay, setPlaying, onPlay]);
978
+ var onCustomPlaying = react.useCallback(function () {
979
+ setPlaying(true);
980
+ setSuspended(false);
981
+ }, []);
977
982
  var onCustomPause = react.useCallback(function (e) {
978
983
  var eventMedia = e.currentTarget;
979
984
  setPlaying(false);
@@ -1074,6 +1079,7 @@ var useMediaApi = function useMediaApi() {
1074
1079
  if (media !== null) {
1075
1080
  media.addEventListener('volumechange', onCustomVolumeChange);
1076
1081
  media.addEventListener('play', onCustomPlay);
1082
+ media.addEventListener('playing', onCustomPlaying);
1077
1083
  media.addEventListener('pause', onCustomPause);
1078
1084
  media.addEventListener('ended', onCustomEnded);
1079
1085
  media.addEventListener('seeked', onCustomSeeked);
@@ -1087,6 +1093,7 @@ var useMediaApi = function useMediaApi() {
1087
1093
  if (media !== null) {
1088
1094
  media.removeEventListener('volumechange', onCustomVolumeChange);
1089
1095
  media.removeEventListener('play', onCustomPlay);
1096
+ media.removeEventListener('playing', onCustomPlaying);
1090
1097
  media.removeEventListener('pause', onCustomPause);
1091
1098
  media.removeEventListener('ended', onCustomEnded);
1092
1099
  media.removeEventListener('seeked', onCustomSeeked);
@@ -1182,6 +1189,232 @@ var useMediaApi = function useMediaApi() {
1182
1189
  };
1183
1190
  };
1184
1191
 
1192
+ var useMediaBuffering = function useMediaBuffering() {
1193
+ var mediaElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1194
+ var _useState = react.useState(false),
1195
+ _useState2 = _slicedToArray(_useState, 2),
1196
+ buffering = _useState2[0],
1197
+ setBuffering = _useState2[1];
1198
+ react.useEffect(function () {
1199
+ if (mediaElement === null) {
1200
+ return function () {};
1201
+ }
1202
+ function onBufferingEvent(e) {
1203
+ // networkstate
1204
+ if (mediaElement.networkState === mediaElement.NETWORK_LOADING) {
1205
+ // The user agent is actively trying to download data.
1206
+ console.log('buffering? NETWORK_LOADING', e);
1207
+ setBuffering(true);
1208
+ }
1209
+
1210
+ // readystate
1211
+ if (mediaElement.readyState < mediaElement.HAVE_FUTURE_DATA) {
1212
+ // There is not enough data to keep playing from this point
1213
+ console.log('buffering? You have very little data', e);
1214
+ setBuffering(true);
1215
+ }
1216
+ }
1217
+ function onPlay() {
1218
+ setBuffering(false);
1219
+ }
1220
+ function onPlaying() {
1221
+ setBuffering(false);
1222
+ }
1223
+ function onPause() {
1224
+ setBuffering(false);
1225
+ }
1226
+ function onEnded() {
1227
+ setBuffering(false);
1228
+ }
1229
+ mediaElement.addEventListener('waiting', onBufferingEvent);
1230
+ mediaElement.addEventListener('stalled', onBufferingEvent);
1231
+ mediaElement.addEventListener('play', onPlay);
1232
+ mediaElement.addEventListener('playing', onPlaying);
1233
+ mediaElement.addEventListener('pause', onPause);
1234
+ mediaElement.addEventListener('ended', onEnded);
1235
+ return function () {
1236
+ mediaElement.removeEventListener('waiting', onBufferingEvent);
1237
+ mediaElement.removeEventListener('stalled', onBufferingEvent);
1238
+ mediaElement.removeEventListener('play', onPlay);
1239
+ mediaElement.removeEventListener('playing', onPlaying);
1240
+ mediaElement.removeEventListener('pause', onPause);
1241
+ mediaElement.removeEventListener('ended', onEnded);
1242
+ };
1243
+ }, [mediaElement]);
1244
+
1245
+ // useEffect(() => {
1246
+ // if (mediaElement === null) {
1247
+ // return () => {};
1248
+ // }
1249
+ // let lastPlayPos = 0;
1250
+ // let currentPlayPos = 0;
1251
+ // let bufferingDetected = false;
1252
+
1253
+ // function checkBuffering(player, checkInterval) {
1254
+ // currentPlayPos = player.currentTime;
1255
+
1256
+ // // checking offset should be at most the check interval
1257
+ // // but allow for some margin
1258
+ // const offset = (checkInterval - 20) / 1000;
1259
+
1260
+ // // if no buffering is currently detected,
1261
+ // // and the position does not seem to increase
1262
+ // // and the player isn't manually paused...
1263
+ // if (!bufferingDetected && currentPlayPos < lastPlayPos + offset && !player.paused) {
1264
+ // console.log('buffering!');
1265
+ // bufferingDetected = true;
1266
+ // }
1267
+
1268
+ // // if we were buffering but the player has advanced,
1269
+ // // then there is no buffering
1270
+ // if (bufferingDetected && currentPlayPos > lastPlayPos + offset && !player.paused) {
1271
+ // console.log('not buffering anymore!');
1272
+ // bufferingDetected = false;
1273
+ // }
1274
+ // lastPlayPos = currentPlayPos;
1275
+
1276
+ // return bufferingDetected;
1277
+ // }
1278
+
1279
+ // const id = setInterval(() => {
1280
+ // setBuffering(checkBuffering(mediaElement, interval));
1281
+ // }, interval);
1282
+
1283
+ // return () => {
1284
+ // clearInterval(id);
1285
+ // };
1286
+ // }, [mediaElement, interval]);
1287
+
1288
+ return {
1289
+ buffering: buffering
1290
+ };
1291
+ };
1292
+
1293
+ var useMediaState = function useMediaState() {
1294
+ var mediaElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
1295
+ var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1296
+ _ref$playing = _ref.playing,
1297
+ wantedPlaying = _ref$playing === void 0 ? false : _ref$playing,
1298
+ _ref$muted = _ref.muted,
1299
+ wantedMuted = _ref$muted === void 0 ? false : _ref$muted;
1300
+ var debug = react.useMemo(function () {
1301
+ var mediaKey = mediaElement !== null && isString(mediaElement.src) ? mediaElement.src.split('/')[mediaElement.src.split('/').length - 1].split('#')[0] || null : null;
1302
+ return createDebug(mediaKey !== null ? "micromag:media:".concat(mediaKey) : 'micromag:media');
1303
+ }, [mediaElement]);
1304
+ var _useState = react.useState(wantedPlaying),
1305
+ _useState2 = _slicedToArray(_useState, 2),
1306
+ playing = _useState2[0],
1307
+ setPlaying = _useState2[1];
1308
+ var _useState3 = react.useState(false),
1309
+ _useState4 = _slicedToArray(_useState3, 2),
1310
+ buffering = _useState4[0],
1311
+ setBuffering = _useState4[1];
1312
+ var _useState5 = react.useState(mediaElement !== null && (mediaElement.muted || mediaElement.volume === 0) || wantedMuted),
1313
+ _useState6 = _slicedToArray(_useState5, 2),
1314
+ muted = _useState6[0],
1315
+ setMuted = _useState6[1];
1316
+ react.useEffect(function () {
1317
+ debug('State change %o', {
1318
+ playing: playing,
1319
+ buffering: buffering,
1320
+ muted: muted
1321
+ });
1322
+ }, [playing, buffering, muted, debug]);
1323
+ react.useEffect(function () {
1324
+ if (mediaElement === null) {
1325
+ setPlaying(wantedPlaying);
1326
+ setBuffering(false);
1327
+ setMuted(wantedMuted);
1328
+ debug('Unset media: %o', {
1329
+ wantedPlaying: wantedPlaying,
1330
+ wantedMuted: wantedMuted
1331
+ });
1332
+ }
1333
+ }, [mediaElement, debug, wantedPlaying, wantedMuted]);
1334
+ react.useEffect(function () {
1335
+ if (mediaElement === null) {
1336
+ return function () {};
1337
+ }
1338
+ function onBufferingEvent(e) {
1339
+ // networkstate
1340
+ if (mediaElement.networkState === mediaElement.NETWORK_LOADING) {
1341
+ debug('onBufferingEvent: NETWORK_LOADING');
1342
+ setBuffering(true);
1343
+ }
1344
+
1345
+ // readystate
1346
+ if (mediaElement.readyState < mediaElement.HAVE_FUTURE_DATA) {
1347
+ debug('onBufferingEvent: HAVE_FUTURE_DATA');
1348
+ setBuffering(true);
1349
+ }
1350
+ }
1351
+ function onPlay() {
1352
+ debug('onPlay');
1353
+ setPlaying(true);
1354
+ setBuffering(false);
1355
+ }
1356
+ function onPlaying() {
1357
+ debug('onPlaying');
1358
+ setPlaying(true);
1359
+ setBuffering(false);
1360
+ }
1361
+ function onTimeUpdate(e) {
1362
+ debug('onTimeUpdate');
1363
+ setPlaying(!e.currentTarget.paused && !e.currentTarget.ended);
1364
+ setBuffering(false);
1365
+ }
1366
+ function onPause() {
1367
+ debug('onPause');
1368
+ setPlaying(false);
1369
+ setBuffering(false);
1370
+ }
1371
+ function onEnded() {
1372
+ debug('onEnded');
1373
+ setPlaying(false);
1374
+ setBuffering(false);
1375
+ }
1376
+ function onSuspend(e) {
1377
+ debug('onSuspend');
1378
+ setPlaying(!e.currentTarget.paused && !e.currentTarget.ended);
1379
+ setBuffering(false);
1380
+ }
1381
+ function onVolumeChange() {
1382
+ setMuted(mediaElement.muted || mediaElement.volume === 0);
1383
+ }
1384
+ if (mediaElement.paused || mediaElement.ended) {
1385
+ setPlaying(false);
1386
+ }
1387
+ if (muted !== mediaElement.muted) {
1388
+ setMuted(mediaElement.muted);
1389
+ }
1390
+ mediaElement.addEventListener('waiting', onBufferingEvent);
1391
+ mediaElement.addEventListener('stalled', onBufferingEvent);
1392
+ mediaElement.addEventListener('timeupdate', onTimeUpdate);
1393
+ mediaElement.addEventListener('play', onPlay);
1394
+ mediaElement.addEventListener('playing', onPlaying);
1395
+ mediaElement.addEventListener('pause', onPause);
1396
+ mediaElement.addEventListener('suspend', onSuspend);
1397
+ mediaElement.addEventListener('ended', onEnded);
1398
+ mediaElement.addEventListener('volumechange', onVolumeChange);
1399
+ return function () {
1400
+ mediaElement.removeEventListener('waiting', onBufferingEvent);
1401
+ mediaElement.removeEventListener('stalled', onBufferingEvent);
1402
+ mediaElement.removeEventListener('timeupdate', onTimeUpdate);
1403
+ mediaElement.removeEventListener('play', onPlay);
1404
+ mediaElement.removeEventListener('playing', onPlaying);
1405
+ mediaElement.removeEventListener('pause', onPause);
1406
+ mediaElement.removeEventListener('suspend', onSuspend);
1407
+ mediaElement.removeEventListener('ended', onEnded);
1408
+ mediaElement.removeEventListener('volumechange', onVolumeChange);
1409
+ };
1410
+ }, [mediaElement, debug]);
1411
+ return {
1412
+ playing: playing,
1413
+ muted: muted,
1414
+ buffering: buffering
1415
+ };
1416
+ };
1417
+
1185
1418
  function useMediaCurrentTime(element) {
1186
1419
  var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
1187
1420
  _ref$id = _ref.id,
@@ -1349,28 +1582,31 @@ function useMediaProgress(media) {
1349
1582
  if (media === null) {
1350
1583
  return function () {};
1351
1584
  }
1352
- function onResume() {
1353
- if (!playing) {
1354
- setPlaying(true);
1355
- }
1356
- updateProgress(media.currentTime / media.duration);
1585
+ function onResume(e) {
1586
+ setPlaying(true);
1587
+ var newProgress = media.currentTime / media.duration;
1588
+ updateProgress(newProgress);
1589
+ }
1590
+ function onUpdate(e) {
1591
+ setPlaying(!e.currentTarget.paused && !e.currentTarget.ended);
1592
+ var newProgress = media.currentTime / media.duration;
1593
+ updateProgress(newProgress);
1357
1594
  }
1358
1595
  function onPause() {
1359
- if (playing) {
1360
- setPlaying(false);
1361
- }
1362
- updateProgress(media.currentTime / media.duration);
1596
+ setPlaying(false);
1597
+ var newProgress = media.currentTime / media.duration;
1598
+ updateProgress(newProgress);
1363
1599
  }
1364
1600
  media.addEventListener('play', onResume);
1365
- media.addEventListener('seeked', onResume);
1366
1601
  media.addEventListener('playing', onResume);
1367
- // media.addEventListener('timeupdate', onResume);
1602
+ media.addEventListener('seeked', onUpdate);
1603
+ // media.addEventListener('timeupdate', onUpdate);
1368
1604
  media.addEventListener('pause', onPause);
1369
1605
  media.addEventListener('ended', onPause);
1370
1606
  media.addEventListener('waiting', onPause);
1371
1607
  media.addEventListener('stalled', onPause);
1372
1608
  media.addEventListener('seeking', onPause);
1373
- // media.addEventListener('suspend', onPause);
1609
+ media.addEventListener('suspend', onUpdate);
1374
1610
  // if (media.paused) {
1375
1611
  // onPause();
1376
1612
  // } else {
@@ -1386,7 +1622,7 @@ function useMediaProgress(media) {
1386
1622
  media.removeEventListener('waiting', onPause);
1387
1623
  media.removeEventListener('stalled', onPause);
1388
1624
  media.removeEventListener('seeking', onPause);
1389
- // media.removeEventListener('suspend', onPause);
1625
+ media.removeEventListener('suspend', onUpdate);
1390
1626
  };
1391
1627
  }, [media, updateProgress, setPlaying, playing]);
1392
1628
  react.useEffect(function () {
@@ -1401,9 +1637,8 @@ function useMediaProgress(media) {
1401
1637
  }
1402
1638
  var newTime = Date.now() / 1000;
1403
1639
  var elapsed = newTime - updateTimeRef.current;
1404
- updateTimeRef.current = newTime;
1405
1640
  var step = elapsed / duration;
1406
- var newProgress = realProgressRef.current + step;
1641
+ var newProgress = realProgressRef.current < 0.1 ? media.currentTime / media.duration : realProgressRef.current + step;
1407
1642
  updateProgress(newProgress);
1408
1643
  handle = raf(tick);
1409
1644
  }
@@ -2122,11 +2357,13 @@ exports.useIsVisible = useIsVisible;
2122
2357
  exports.useLoadedFonts = useLoadedFonts;
2123
2358
  exports.useLongPress = useLongPress;
2124
2359
  exports.useMediaApi = useMediaApi;
2360
+ exports.useMediaBuffering = useMediaBuffering;
2125
2361
  exports.useMediaCurrentTime = useMediaCurrentTime;
2126
2362
  exports.useMediaDuration = useMediaDuration;
2127
2363
  exports.useMediaLoad = useMediaLoad;
2128
2364
  exports.useMediaProgress = useMediaProgress;
2129
2365
  exports.useMediaReady = useMediaReady;
2366
+ exports.useMediaState = useMediaState;
2130
2367
  exports.useMediaThumbnail = useMediaThumbnail;
2131
2368
  exports.useMediaWaveform = useMediaWaveform;
2132
2369
  exports.useMediasParser = useMediasParser;
package/lib/index.js CHANGED
@@ -11,8 +11,8 @@ var isArray = require('lodash/isArray');
11
11
  var isObject = require('lodash/isObject');
12
12
  var uniqWith = require('lodash/uniqWith');
13
13
  var sortBy = require('lodash/sortBy');
14
+ var _callSuper = require('@babel/runtime/helpers/callSuper');
14
15
  var _inherits = require('@babel/runtime/helpers/inherits');
15
- var _createSuper = require('@babel/runtime/helpers/createSuper');
16
16
  var EventEmitter = require('wolfy87-eventemitter');
17
17
  require('lodash/isNumber');
18
18
  require('@babel/runtime/helpers/regeneratorRuntime');
@@ -1014,12 +1014,11 @@ var getComponentFromName = function getComponentFromName() {
1014
1014
 
1015
1015
  var ComponentsManager = /*#__PURE__*/function (_EventEmitter) {
1016
1016
  _inherits(ComponentsManager, _EventEmitter);
1017
- var _super = _createSuper(ComponentsManager);
1018
1017
  function ComponentsManager() {
1019
1018
  var _this;
1020
1019
  var components = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
1021
1020
  _classCallCheck(this, ComponentsManager);
1022
- _this = _super.call(this);
1021
+ _this = _callSuper(this, ComponentsManager);
1023
1022
  _this.components = components;
1024
1023
  return _this;
1025
1024
  }
@@ -1088,12 +1087,11 @@ var ComponentsManager = /*#__PURE__*/function (_EventEmitter) {
1088
1087
 
1089
1088
  var DefinitionsManager = /*#__PURE__*/function (_EventEmitter) {
1090
1089
  _inherits(DefinitionsManager, _EventEmitter);
1091
- var _super = _createSuper(DefinitionsManager);
1092
1090
  function DefinitionsManager() {
1093
1091
  var _this;
1094
1092
  var definitions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
1095
1093
  _classCallCheck(this, DefinitionsManager);
1096
- _this = _super.call(this);
1094
+ _this = _callSuper(this, DefinitionsManager);
1097
1095
  _this.definitions = definitions || [];
1098
1096
  return _this;
1099
1097
  }
@@ -1168,11 +1166,10 @@ var DefinitionsManager = /*#__PURE__*/function (_EventEmitter) {
1168
1166
 
1169
1167
  var EventsManager = /*#__PURE__*/function (_EventEmitter) {
1170
1168
  _inherits(EventsManager, _EventEmitter);
1171
- var _super = _createSuper(EventsManager);
1172
1169
  function EventsManager(element) {
1173
1170
  var _this;
1174
1171
  _classCallCheck(this, EventsManager);
1175
- _this = _super.call(this);
1172
+ _this = _callSuper(this, EventsManager);
1176
1173
  _this.element = element;
1177
1174
  _this.events = {};
1178
1175
  _this.listeners = {};
@@ -1230,10 +1227,9 @@ var EventsManager = /*#__PURE__*/function (_EventEmitter) {
1230
1227
 
1231
1228
  var FieldsManager = /*#__PURE__*/function (_DefinitionsManager) {
1232
1229
  _inherits(FieldsManager, _DefinitionsManager);
1233
- var _super = _createSuper(FieldsManager);
1234
1230
  function FieldsManager() {
1235
1231
  _classCallCheck(this, FieldsManager);
1236
- return _super.apply(this, arguments);
1232
+ return _callSuper(this, FieldsManager, arguments);
1237
1233
  }
1238
1234
  _createClass(FieldsManager, [{
1239
1235
  key: "filter",
@@ -1520,10 +1516,9 @@ var MediasParser = /*#__PURE__*/function () {
1520
1516
 
1521
1517
  var ScreensManager = /*#__PURE__*/function (_DefinitionsManager) {
1522
1518
  _inherits(ScreensManager, _DefinitionsManager);
1523
- var _super = _createSuper(ScreensManager);
1524
1519
  function ScreensManager() {
1525
1520
  _classCallCheck(this, ScreensManager);
1526
- return _super.apply(this, arguments);
1521
+ return _callSuper(this, ScreensManager, arguments);
1527
1522
  }
1528
1523
  _createClass(ScreensManager, [{
1529
1524
  key: "getFields",
@@ -2154,12 +2149,11 @@ var _excluded = ["value"],
2154
2149
  _excluded2 = ["value", "currentTime"];
2155
2150
  var Tracking = /*#__PURE__*/function (_BaseTracking) {
2156
2151
  _inherits(Tracking, _BaseTracking);
2157
- var _super = _createSuper(Tracking);
2158
2152
  function Tracking() {
2159
2153
  var _this;
2160
2154
  var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
2161
2155
  _classCallCheck(this, Tracking);
2162
- _this = _super.call(this, opts);
2156
+ _this = _callSuper(this, Tracking, [opts]);
2163
2157
  var _this$options$variabl = _this.options.variables,
2164
2158
  variables = _this$options$variabl === void 0 ? null : _this$options$variabl;
2165
2159
  _this.variables = null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@micromag/core",
3
- "version": "0.3.460",
3
+ "version": "0.3.463",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "keywords": [
@@ -131,7 +131,7 @@
131
131
  "classnames": "^2.2.6",
132
132
  "css-mediaquery": "^0.1.2",
133
133
  "dayjs": "^1.11.10",
134
- "debug": "^4.3.1",
134
+ "debug": "^4.3.4",
135
135
  "flat": "^5.0.2",
136
136
  "hoist-non-react-statics": "^3.3.2",
137
137
  "lodash": "^4.17.21",
@@ -155,5 +155,5 @@
155
155
  "access": "public",
156
156
  "registry": "https://registry.npmjs.org/"
157
157
  },
158
- "gitHead": "7e5a6ed3d80be59cdd74716781b467be88a4ccc6"
158
+ "gitHead": "a2eb34209cb2dcbcd6a15d1325a02778543a8bca"
159
159
  }