stormcloud-video-player 0.7.42 → 0.7.43

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.
@@ -5693,27 +5693,16 @@ var SWIRL_HD_AUTHORING_WIDTH = 1920;
5693
5693
  var SWIRL_HD_AUTHORING_HEIGHT = 1080;
5694
5694
  var NAB_DEMO_NAME_PREFIX = "NAB Demo \u2014 ";
5695
5695
  function overlayAuthoringDimensions(overlay, decodeWidth, decodeHeight) {
5696
- if (!decodeWidth || !decodeHeight) {
5696
+ if (overlay.name.startsWith(NAB_DEMO_NAME_PREFIX)) {
5697
5697
  return {
5698
- width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
5699
- height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
5700
- };
5701
- }
5702
- if (!overlay.visible) {
5703
- return {
5704
- width: decodeWidth,
5705
- height: decodeHeight
5698
+ width: SWIRL_HD_AUTHORING_WIDTH,
5699
+ height: SWIRL_HD_AUTHORING_HEIGHT
5706
5700
  };
5707
5701
  }
5708
- var extR = overlay.x + overlay.width;
5709
- var extB = overlay.y + overlay.height;
5710
- var EPS = 2;
5711
- var exceedsDecode = extR > decodeWidth + EPS || extB > decodeHeight + EPS;
5712
- var isNabDemo = overlay.name.startsWith(NAB_DEMO_NAME_PREFIX);
5713
- if (exceedsDecode && isNabDemo) {
5702
+ if (!decodeWidth || !decodeHeight) {
5714
5703
  return {
5715
- width: SWIRL_HD_AUTHORING_WIDTH,
5716
- height: SWIRL_HD_AUTHORING_HEIGHT
5704
+ width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
5705
+ height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
5717
5706
  };
5718
5707
  }
5719
5708
  return {
@@ -7307,11 +7296,19 @@ function hexToRgb(hex) {
7307
7296
  return "".concat(num >> 16 & 255, ",").concat(num >> 8 & 255, ",").concat(num & 255);
7308
7297
  }
7309
7298
  var FADE_DURATION_MS = 1e3;
7310
- var SHOWCASE_CYCLE_MS_DEFAULT = 6e4;
7311
- var SHOWCASE_POP_IN_MS = 420;
7312
- var SHOWCASE_STEADY_END_MS = 46e3;
7313
- var SHOWCASE_POP_OUT_MS = 450;
7314
- var SHOWCASE_POP_OUT_END_MS = SHOWCASE_STEADY_END_MS + SHOWCASE_POP_OUT_MS;
7299
+ var SHOWCASE_CYCLE_MS_DEFAULT = 36e3;
7300
+ var SHOWCASE_MIN_BEAT_MS = 6e3;
7301
+ var BEAT_POP_IN_MS = 520;
7302
+ var BEAT_POP_OUT_MS = 520;
7303
+ var SHOWCASE_PERSISTENT_TYPES = /* @__PURE__ */ new Set([
7304
+ "scroller",
7305
+ "breaking_news",
7306
+ "image",
7307
+ "text",
7308
+ "shape",
7309
+ "countdown",
7310
+ "qr_code"
7311
+ ]);
7315
7312
  function easeOutCubic(t) {
7316
7313
  var u = 1 - t;
7317
7314
  return 1 - u * u * u;
@@ -7324,38 +7321,108 @@ function easeOutBack(t) {
7324
7321
  var c3 = c1 + 1;
7325
7322
  return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
7326
7323
  }
7327
- function showcaseOpacity(phase) {
7328
- if (phase < SHOWCASE_POP_IN_MS) return easeOutCubic(phase / SHOWCASE_POP_IN_MS);
7329
- if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
7330
- return 1 - easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
7324
+ function beatOpacity(phase, beatMs) {
7325
+ if (phase < BEAT_POP_IN_MS) return easeOutCubic(phase / BEAT_POP_IN_MS);
7326
+ var holdEnd = beatMs - BEAT_POP_OUT_MS;
7327
+ if (phase >= holdEnd) {
7328
+ return Math.max(0, 1 - easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS));
7331
7329
  }
7332
7330
  return 1;
7333
7331
  }
7334
- function showcaseScale(phase) {
7335
- if (phase < SHOWCASE_POP_IN_MS) {
7336
- return Math.min(1, 0.78 + 0.22 * easeOutBack(phase / SHOWCASE_POP_IN_MS));
7332
+ function beatScale(phase, beatMs) {
7333
+ if (phase < BEAT_POP_IN_MS) {
7334
+ return Math.min(1, 0.92 + 0.08 * easeOutBack(phase / BEAT_POP_IN_MS));
7337
7335
  }
7338
- if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
7339
- return 1 - 0.14 * easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
7336
+ var holdEnd = beatMs - BEAT_POP_OUT_MS;
7337
+ if (phase >= holdEnd) {
7338
+ return 1 - 0.06 * easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS);
7340
7339
  }
7341
7340
  return 1;
7342
7341
  }
7343
- function useShowcasePhase(enabled, cycleMs) {
7344
- var _ref = _sliced_to_array((0, import_react.useState)(0), 2), phase = _ref[0], setPhase = _ref[1];
7342
+ function partitionShowcase(overlays) {
7343
+ var visible = overlays.filter(function(o) {
7344
+ return o.visible;
7345
+ });
7346
+ var persistent = [];
7347
+ var spotlight = [];
7348
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
7349
+ try {
7350
+ for(var _iterator = visible[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
7351
+ var o = _step.value;
7352
+ if (SHOWCASE_PERSISTENT_TYPES.has(o.type)) persistent.push(o);
7353
+ else spotlight.push(o);
7354
+ }
7355
+ } catch (err) {
7356
+ _didIteratorError = true;
7357
+ _iteratorError = err;
7358
+ } finally{
7359
+ try {
7360
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
7361
+ _iterator.return();
7362
+ }
7363
+ } finally{
7364
+ if (_didIteratorError) {
7365
+ throw _iteratorError;
7366
+ }
7367
+ }
7368
+ }
7369
+ spotlight.sort(function(a, b) {
7370
+ return a.z_index - b.z_index || a.id - b.id;
7371
+ });
7372
+ var beats = [];
7373
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
7374
+ try {
7375
+ for(var _iterator1 = spotlight[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
7376
+ var o1 = _step1.value;
7377
+ beats.push([
7378
+ o1
7379
+ ]);
7380
+ }
7381
+ } catch (err) {
7382
+ _didIteratorError1 = true;
7383
+ _iteratorError1 = err;
7384
+ } finally{
7385
+ try {
7386
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
7387
+ _iterator1.return();
7388
+ }
7389
+ } finally{
7390
+ if (_didIteratorError1) {
7391
+ throw _iteratorError1;
7392
+ }
7393
+ }
7394
+ }
7395
+ return {
7396
+ persistent: persistent,
7397
+ beats: beats
7398
+ };
7399
+ }
7400
+ function useShowcaseBeat(enabled, cycleMs, beats) {
7401
+ var safeBeats = Math.max(1, beats);
7402
+ var beatMs = Math.max(SHOWCASE_MIN_BEAT_MS, Math.floor(cycleMs / safeBeats));
7403
+ var totalMs = beatMs * safeBeats;
7404
+ var _ref = _sliced_to_array((0, import_react.useState)(function() {
7405
+ return Date.now();
7406
+ }), 2), now = _ref[0], setNow = _ref[1];
7345
7407
  (0, import_react.useEffect)(function() {
7346
7408
  if (!enabled) return;
7347
- setPhase(Date.now() % cycleMs);
7348
7409
  var id = window.setInterval(function() {
7349
- setPhase(Date.now() % cycleMs);
7350
- }, 48);
7410
+ return setNow(Date.now());
7411
+ }, 64);
7351
7412
  return function() {
7352
7413
  return clearInterval(id);
7353
7414
  };
7354
7415
  }, [
7355
- enabled,
7356
- cycleMs
7416
+ enabled
7357
7417
  ]);
7358
- return phase;
7418
+ var phase = now % totalMs;
7419
+ var beatIndex = Math.min(safeBeats - 1, Math.floor(phase / beatMs));
7420
+ var beatPhase = phase - beatIndex * beatMs;
7421
+ return {
7422
+ beatIndex: beatIndex,
7423
+ beatPhase: beatPhase,
7424
+ beatMs: beatMs
7425
+ };
7359
7426
  }
7360
7427
  var OverlayRenderer = function OverlayRenderer(param) {
7361
7428
  var overlays = param.overlays, currentTime = param.currentTime, videoRef = param.videoRef, coordinateSpace = param.coordinateSpace, _param_showcaseMode = param.showcaseMode, showcaseMode = _param_showcaseMode === void 0 ? false : _param_showcaseMode, _param_showcaseCycleMs = param.showcaseCycleMs, showcaseCycleMs = _param_showcaseCycleMs === void 0 ? SHOWCASE_CYCLE_MS_DEFAULT : _param_showcaseCycleMs;
@@ -7363,7 +7430,28 @@ var OverlayRenderer = function OverlayRenderer(param) {
7363
7430
  var rafRef = (0, import_react.useRef)(null);
7364
7431
  var _ref1 = _sliced_to_array((0, import_react.useState)(/* @__PURE__ */ new Map()), 2), fadeMap = _ref1[0], setFadeMap = _ref1[1];
7365
7432
  var removeTimers = (0, import_react.useRef)(/* @__PURE__ */ new Map());
7366
- var showcasePhase = useShowcasePhase(showcaseMode, showcaseCycleMs);
7433
+ var _ref2 = (0, import_react.useMemo)(function() {
7434
+ return partitionShowcase(overlays);
7435
+ }, [
7436
+ overlays
7437
+ ]), showcasePersistent = _ref2.persistent, showcaseBeats = _ref2.beats;
7438
+ var _useShowcaseBeat = useShowcaseBeat(showcaseMode, showcaseCycleMs, showcaseBeats.length), showcaseBeatIndex = _useShowcaseBeat.beatIndex, showcaseBeatPhase = _useShowcaseBeat.beatPhase, showcaseBeatMs = _useShowcaseBeat.beatMs;
7439
+ var showcasePersistentIds = (0, import_react.useMemo)(function() {
7440
+ return new Set(showcasePersistent.map(function(o) {
7441
+ return o.id;
7442
+ }));
7443
+ }, [
7444
+ showcasePersistent
7445
+ ]);
7446
+ var showcaseSpotlightIds = (0, import_react.useMemo)(function() {
7447
+ var beat = showcaseBeats[showcaseBeatIndex];
7448
+ return new Set((beat !== null && beat !== void 0 ? beat : []).map(function(o) {
7449
+ return o.id;
7450
+ }));
7451
+ }, [
7452
+ showcaseBeats,
7453
+ showcaseBeatIndex
7454
+ ]);
7367
7455
  var updateDims = (0, import_react.useCallback)(function() {
7368
7456
  var video = videoRef.current;
7369
7457
  if (video) {
@@ -7396,10 +7484,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
7396
7484
  ]);
7397
7485
  var activeOverlays = (0, import_react.useMemo)(function() {
7398
7486
  if (showcaseMode) {
7399
- return overlays.filter(function(o) {
7400
- if (!o.visible) return false;
7401
- return showcasePhase < SHOWCASE_POP_OUT_END_MS;
7402
- });
7487
+ var _showcaseBeats_showcaseBeatIndex;
7488
+ var beat = (_showcaseBeats_showcaseBeatIndex = showcaseBeats[showcaseBeatIndex]) !== null && _showcaseBeats_showcaseBeatIndex !== void 0 ? _showcaseBeats_showcaseBeatIndex : [];
7489
+ return _to_consumable_array(showcasePersistent).concat(_to_consumable_array(beat));
7403
7490
  }
7404
7491
  return overlays.filter(function(o) {
7405
7492
  return isOverlayActive(o, currentTime);
@@ -7408,14 +7495,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
7408
7495
  overlays,
7409
7496
  currentTime,
7410
7497
  showcaseMode,
7411
- showcasePhase
7412
- ]);
7413
- var activeBeatIds = (0, import_react.useMemo)(function() {
7414
- return new Set(activeOverlays.map(function(o) {
7415
- return o.id;
7416
- }));
7417
- }, [
7418
- activeOverlays
7498
+ showcasePersistent,
7499
+ showcaseBeats,
7500
+ showcaseBeatIndex
7419
7501
  ]);
7420
7502
  (0, import_react.useLayoutEffect)(function() {
7421
7503
  var activeIds = new Set(activeOverlays.map(function(o) {
@@ -7610,10 +7692,12 @@ var OverlayRenderer = function OverlayRenderer(param) {
7610
7692
  var width = overlay.width * scaleX;
7611
7693
  var height = overlay.height * scaleY;
7612
7694
  var baseOpacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
7613
- var inShowcaseBeat = showcaseMode && activeBeatIds.has(overlay.id);
7614
- var useShowcasePop = inShowcaseBeat;
7615
- var opacity = useShowcasePop ? baseOpacity * showcaseOpacity(showcasePhase) : visible ? baseOpacity : 0;
7616
- var popScale = useShowcasePop ? showcaseScale(showcasePhase) : 1;
7695
+ var isShowcasePersistent = showcaseMode && showcasePersistentIds.has(overlay.id);
7696
+ var isShowcaseSpotlight = showcaseMode && showcaseSpotlightIds.has(overlay.id);
7697
+ var isShowcaseDormant = showcaseMode && !isShowcasePersistent && !isShowcaseSpotlight;
7698
+ var useShowcasePop = isShowcaseSpotlight;
7699
+ var opacity = useShowcasePop ? baseOpacity * beatOpacity(showcaseBeatPhase, showcaseBeatMs) : isShowcaseDormant ? 0 : visible ? baseOpacity : 0;
7700
+ var popScale = useShowcasePop ? beatScale(showcaseBeatPhase, showcaseBeatMs) : 1;
7617
7701
  var sz = {
7618
7702
  w: width,
7619
7703
  h: height