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.
package/lib/index.cjs CHANGED
@@ -5892,27 +5892,16 @@ var SWIRL_HD_AUTHORING_WIDTH = 1920;
5892
5892
  var SWIRL_HD_AUTHORING_HEIGHT = 1080;
5893
5893
  var NAB_DEMO_NAME_PREFIX = "NAB Demo \u2014 ";
5894
5894
  function overlayAuthoringDimensions(overlay, decodeWidth, decodeHeight) {
5895
- if (!decodeWidth || !decodeHeight) {
5895
+ if (overlay.name.startsWith(NAB_DEMO_NAME_PREFIX)) {
5896
5896
  return {
5897
- width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
5898
- height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
5899
- };
5900
- }
5901
- if (!overlay.visible) {
5902
- return {
5903
- width: decodeWidth,
5904
- height: decodeHeight
5897
+ width: SWIRL_HD_AUTHORING_WIDTH,
5898
+ height: SWIRL_HD_AUTHORING_HEIGHT
5905
5899
  };
5906
5900
  }
5907
- var extR = overlay.x + overlay.width;
5908
- var extB = overlay.y + overlay.height;
5909
- var EPS = 2;
5910
- var exceedsDecode = extR > decodeWidth + EPS || extB > decodeHeight + EPS;
5911
- var isNabDemo = overlay.name.startsWith(NAB_DEMO_NAME_PREFIX);
5912
- if (exceedsDecode && isNabDemo) {
5901
+ if (!decodeWidth || !decodeHeight) {
5913
5902
  return {
5914
- width: SWIRL_HD_AUTHORING_WIDTH,
5915
- height: SWIRL_HD_AUTHORING_HEIGHT
5903
+ width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
5904
+ height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
5916
5905
  };
5917
5906
  }
5918
5907
  return {
@@ -7506,11 +7495,19 @@ function hexToRgb(hex) {
7506
7495
  return "".concat(num >> 16 & 255, ",").concat(num >> 8 & 255, ",").concat(num & 255);
7507
7496
  }
7508
7497
  var FADE_DURATION_MS = 1e3;
7509
- var SHOWCASE_CYCLE_MS_DEFAULT = 6e4;
7510
- var SHOWCASE_POP_IN_MS = 420;
7511
- var SHOWCASE_STEADY_END_MS = 46e3;
7512
- var SHOWCASE_POP_OUT_MS = 450;
7513
- var SHOWCASE_POP_OUT_END_MS = SHOWCASE_STEADY_END_MS + SHOWCASE_POP_OUT_MS;
7498
+ var SHOWCASE_CYCLE_MS_DEFAULT = 36e3;
7499
+ var SHOWCASE_MIN_BEAT_MS = 6e3;
7500
+ var BEAT_POP_IN_MS = 520;
7501
+ var BEAT_POP_OUT_MS = 520;
7502
+ var SHOWCASE_PERSISTENT_TYPES = /* @__PURE__ */ new Set([
7503
+ "scroller",
7504
+ "breaking_news",
7505
+ "image",
7506
+ "text",
7507
+ "shape",
7508
+ "countdown",
7509
+ "qr_code"
7510
+ ]);
7514
7511
  function easeOutCubic(t) {
7515
7512
  var u = 1 - t;
7516
7513
  return 1 - u * u * u;
@@ -7523,38 +7520,108 @@ function easeOutBack(t) {
7523
7520
  var c3 = c1 + 1;
7524
7521
  return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
7525
7522
  }
7526
- function showcaseOpacity(phase) {
7527
- if (phase < SHOWCASE_POP_IN_MS) return easeOutCubic(phase / SHOWCASE_POP_IN_MS);
7528
- if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
7529
- return 1 - easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
7523
+ function beatOpacity(phase, beatMs) {
7524
+ if (phase < BEAT_POP_IN_MS) return easeOutCubic(phase / BEAT_POP_IN_MS);
7525
+ var holdEnd = beatMs - BEAT_POP_OUT_MS;
7526
+ if (phase >= holdEnd) {
7527
+ return Math.max(0, 1 - easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS));
7530
7528
  }
7531
7529
  return 1;
7532
7530
  }
7533
- function showcaseScale(phase) {
7534
- if (phase < SHOWCASE_POP_IN_MS) {
7535
- return Math.min(1, 0.78 + 0.22 * easeOutBack(phase / SHOWCASE_POP_IN_MS));
7531
+ function beatScale(phase, beatMs) {
7532
+ if (phase < BEAT_POP_IN_MS) {
7533
+ return Math.min(1, 0.92 + 0.08 * easeOutBack(phase / BEAT_POP_IN_MS));
7536
7534
  }
7537
- if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
7538
- return 1 - 0.14 * easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
7535
+ var holdEnd = beatMs - BEAT_POP_OUT_MS;
7536
+ if (phase >= holdEnd) {
7537
+ return 1 - 0.06 * easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS);
7539
7538
  }
7540
7539
  return 1;
7541
7540
  }
7542
- function useShowcasePhase(enabled, cycleMs) {
7543
- var _ref = _sliced_to_array((0, import_react.useState)(0), 2), phase = _ref[0], setPhase = _ref[1];
7541
+ function partitionShowcase(overlays) {
7542
+ var visible = overlays.filter(function(o) {
7543
+ return o.visible;
7544
+ });
7545
+ var persistent = [];
7546
+ var spotlight = [];
7547
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
7548
+ try {
7549
+ for(var _iterator = visible[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
7550
+ var o = _step.value;
7551
+ if (SHOWCASE_PERSISTENT_TYPES.has(o.type)) persistent.push(o);
7552
+ else spotlight.push(o);
7553
+ }
7554
+ } catch (err) {
7555
+ _didIteratorError = true;
7556
+ _iteratorError = err;
7557
+ } finally{
7558
+ try {
7559
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
7560
+ _iterator.return();
7561
+ }
7562
+ } finally{
7563
+ if (_didIteratorError) {
7564
+ throw _iteratorError;
7565
+ }
7566
+ }
7567
+ }
7568
+ spotlight.sort(function(a, b) {
7569
+ return a.z_index - b.z_index || a.id - b.id;
7570
+ });
7571
+ var beats = [];
7572
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
7573
+ try {
7574
+ for(var _iterator1 = spotlight[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
7575
+ var o1 = _step1.value;
7576
+ beats.push([
7577
+ o1
7578
+ ]);
7579
+ }
7580
+ } catch (err) {
7581
+ _didIteratorError1 = true;
7582
+ _iteratorError1 = err;
7583
+ } finally{
7584
+ try {
7585
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
7586
+ _iterator1.return();
7587
+ }
7588
+ } finally{
7589
+ if (_didIteratorError1) {
7590
+ throw _iteratorError1;
7591
+ }
7592
+ }
7593
+ }
7594
+ return {
7595
+ persistent: persistent,
7596
+ beats: beats
7597
+ };
7598
+ }
7599
+ function useShowcaseBeat(enabled, cycleMs, beats) {
7600
+ var safeBeats = Math.max(1, beats);
7601
+ var beatMs = Math.max(SHOWCASE_MIN_BEAT_MS, Math.floor(cycleMs / safeBeats));
7602
+ var totalMs = beatMs * safeBeats;
7603
+ var _ref = _sliced_to_array((0, import_react.useState)(function() {
7604
+ return Date.now();
7605
+ }), 2), now = _ref[0], setNow = _ref[1];
7544
7606
  (0, import_react.useEffect)(function() {
7545
7607
  if (!enabled) return;
7546
- setPhase(Date.now() % cycleMs);
7547
7608
  var id = window.setInterval(function() {
7548
- setPhase(Date.now() % cycleMs);
7549
- }, 48);
7609
+ return setNow(Date.now());
7610
+ }, 64);
7550
7611
  return function() {
7551
7612
  return clearInterval(id);
7552
7613
  };
7553
7614
  }, [
7554
- enabled,
7555
- cycleMs
7615
+ enabled
7556
7616
  ]);
7557
- return phase;
7617
+ var phase = now % totalMs;
7618
+ var beatIndex = Math.min(safeBeats - 1, Math.floor(phase / beatMs));
7619
+ var beatPhase = phase - beatIndex * beatMs;
7620
+ return {
7621
+ beatIndex: beatIndex,
7622
+ beatPhase: beatPhase,
7623
+ beatMs: beatMs
7624
+ };
7558
7625
  }
7559
7626
  var OverlayRenderer = function OverlayRenderer(param) {
7560
7627
  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;
@@ -7562,7 +7629,28 @@ var OverlayRenderer = function OverlayRenderer(param) {
7562
7629
  var rafRef = (0, import_react.useRef)(null);
7563
7630
  var _ref1 = _sliced_to_array((0, import_react.useState)(/* @__PURE__ */ new Map()), 2), fadeMap = _ref1[0], setFadeMap = _ref1[1];
7564
7631
  var removeTimers = (0, import_react.useRef)(/* @__PURE__ */ new Map());
7565
- var showcasePhase = useShowcasePhase(showcaseMode, showcaseCycleMs);
7632
+ var _ref2 = (0, import_react.useMemo)(function() {
7633
+ return partitionShowcase(overlays);
7634
+ }, [
7635
+ overlays
7636
+ ]), showcasePersistent = _ref2.persistent, showcaseBeats = _ref2.beats;
7637
+ var _useShowcaseBeat = useShowcaseBeat(showcaseMode, showcaseCycleMs, showcaseBeats.length), showcaseBeatIndex = _useShowcaseBeat.beatIndex, showcaseBeatPhase = _useShowcaseBeat.beatPhase, showcaseBeatMs = _useShowcaseBeat.beatMs;
7638
+ var showcasePersistentIds = (0, import_react.useMemo)(function() {
7639
+ return new Set(showcasePersistent.map(function(o) {
7640
+ return o.id;
7641
+ }));
7642
+ }, [
7643
+ showcasePersistent
7644
+ ]);
7645
+ var showcaseSpotlightIds = (0, import_react.useMemo)(function() {
7646
+ var beat = showcaseBeats[showcaseBeatIndex];
7647
+ return new Set((beat !== null && beat !== void 0 ? beat : []).map(function(o) {
7648
+ return o.id;
7649
+ }));
7650
+ }, [
7651
+ showcaseBeats,
7652
+ showcaseBeatIndex
7653
+ ]);
7566
7654
  var updateDims = (0, import_react.useCallback)(function() {
7567
7655
  var video = videoRef.current;
7568
7656
  if (video) {
@@ -7595,10 +7683,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
7595
7683
  ]);
7596
7684
  var activeOverlays = (0, import_react.useMemo)(function() {
7597
7685
  if (showcaseMode) {
7598
- return overlays.filter(function(o) {
7599
- if (!o.visible) return false;
7600
- return showcasePhase < SHOWCASE_POP_OUT_END_MS;
7601
- });
7686
+ var _showcaseBeats_showcaseBeatIndex;
7687
+ var beat = (_showcaseBeats_showcaseBeatIndex = showcaseBeats[showcaseBeatIndex]) !== null && _showcaseBeats_showcaseBeatIndex !== void 0 ? _showcaseBeats_showcaseBeatIndex : [];
7688
+ return _to_consumable_array(showcasePersistent).concat(_to_consumable_array(beat));
7602
7689
  }
7603
7690
  return overlays.filter(function(o) {
7604
7691
  return isOverlayActive(o, currentTime);
@@ -7607,14 +7694,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
7607
7694
  overlays,
7608
7695
  currentTime,
7609
7696
  showcaseMode,
7610
- showcasePhase
7611
- ]);
7612
- var activeBeatIds = (0, import_react.useMemo)(function() {
7613
- return new Set(activeOverlays.map(function(o) {
7614
- return o.id;
7615
- }));
7616
- }, [
7617
- activeOverlays
7697
+ showcasePersistent,
7698
+ showcaseBeats,
7699
+ showcaseBeatIndex
7618
7700
  ]);
7619
7701
  (0, import_react.useLayoutEffect)(function() {
7620
7702
  var activeIds = new Set(activeOverlays.map(function(o) {
@@ -7809,10 +7891,12 @@ var OverlayRenderer = function OverlayRenderer(param) {
7809
7891
  var width = overlay.width * scaleX;
7810
7892
  var height = overlay.height * scaleY;
7811
7893
  var baseOpacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
7812
- var inShowcaseBeat = showcaseMode && activeBeatIds.has(overlay.id);
7813
- var useShowcasePop = inShowcaseBeat;
7814
- var opacity = useShowcasePop ? baseOpacity * showcaseOpacity(showcasePhase) : visible ? baseOpacity : 0;
7815
- var popScale = useShowcasePop ? showcaseScale(showcasePhase) : 1;
7894
+ var isShowcasePersistent = showcaseMode && showcasePersistentIds.has(overlay.id);
7895
+ var isShowcaseSpotlight = showcaseMode && showcaseSpotlightIds.has(overlay.id);
7896
+ var isShowcaseDormant = showcaseMode && !isShowcasePersistent && !isShowcaseSpotlight;
7897
+ var useShowcasePop = isShowcaseSpotlight;
7898
+ var opacity = useShowcasePop ? baseOpacity * beatOpacity(showcaseBeatPhase, showcaseBeatMs) : isShowcaseDormant ? 0 : visible ? baseOpacity : 0;
7899
+ var popScale = useShowcasePop ? beatScale(showcaseBeatPhase, showcaseBeatMs) : 1;
7816
7900
  var sz = {
7817
7901
  w: width,
7818
7902
  h: height