stormcloud-video-player 0.7.41 → 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.
@@ -348,28 +348,16 @@ var SWIRL_HD_AUTHORING_WIDTH = 1920;
348
348
  var SWIRL_HD_AUTHORING_HEIGHT = 1080;
349
349
  var NAB_DEMO_NAME_PREFIX = "NAB Demo \u2014 ";
350
350
  function overlayAuthoringDimensions(overlay, decodeWidth, decodeHeight) {
351
- if (!decodeWidth || !decodeHeight) {
351
+ if (overlay.name.startsWith(NAB_DEMO_NAME_PREFIX)) {
352
352
  return {
353
- width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
354
- height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
355
- };
356
- }
357
- if (!overlay.visible) {
358
- return {
359
- width: decodeWidth,
360
- height: decodeHeight
353
+ width: SWIRL_HD_AUTHORING_WIDTH,
354
+ height: SWIRL_HD_AUTHORING_HEIGHT
361
355
  };
362
356
  }
363
- var extR = overlay.x + overlay.width;
364
- var extB = overlay.y + overlay.height;
365
- var EPS = 2;
366
- var exceedsDecode = extR > decodeWidth + EPS || extB > decodeHeight + EPS;
367
- var isNabDemo = overlay.name.startsWith(NAB_DEMO_NAME_PREFIX);
368
- var isSyntheticMarketsTicker = overlay.id === -9001 || overlay.name === "Demo stock ticker";
369
- if (exceedsDecode && (isNabDemo || isSyntheticMarketsTicker)) {
357
+ if (!decodeWidth || !decodeHeight) {
370
358
  return {
371
- width: SWIRL_HD_AUTHORING_WIDTH,
372
- height: SWIRL_HD_AUTHORING_HEIGHT
359
+ width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
360
+ height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
373
361
  };
374
362
  }
375
363
  return {
@@ -1813,11 +1801,19 @@ function hexToRgb(hex) {
1813
1801
  return "".concat(num >> 16 & 255, ",").concat(num >> 8 & 255, ",").concat(num & 255);
1814
1802
  }
1815
1803
  var FADE_DURATION_MS = 1e3;
1816
- var SHOWCASE_CYCLE_MS_DEFAULT = 6e4;
1817
- var SHOWCASE_POP_IN_MS = 420;
1818
- var SHOWCASE_STEADY_END_MS = 46e3;
1819
- var SHOWCASE_POP_OUT_MS = 450;
1820
- var SHOWCASE_POP_OUT_END_MS = SHOWCASE_STEADY_END_MS + SHOWCASE_POP_OUT_MS;
1804
+ var SHOWCASE_CYCLE_MS_DEFAULT = 36e3;
1805
+ var SHOWCASE_MIN_BEAT_MS = 6e3;
1806
+ var BEAT_POP_IN_MS = 520;
1807
+ var BEAT_POP_OUT_MS = 520;
1808
+ var SHOWCASE_PERSISTENT_TYPES = /* @__PURE__ */ new Set([
1809
+ "scroller",
1810
+ "breaking_news",
1811
+ "image",
1812
+ "text",
1813
+ "shape",
1814
+ "countdown",
1815
+ "qr_code"
1816
+ ]);
1821
1817
  function easeOutCubic(t) {
1822
1818
  var u = 1 - t;
1823
1819
  return 1 - u * u * u;
@@ -1830,38 +1826,108 @@ function easeOutBack(t) {
1830
1826
  var c3 = c1 + 1;
1831
1827
  return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
1832
1828
  }
1833
- function showcaseOpacity(phase) {
1834
- if (phase < SHOWCASE_POP_IN_MS) return easeOutCubic(phase / SHOWCASE_POP_IN_MS);
1835
- if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
1836
- return 1 - easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
1829
+ function beatOpacity(phase, beatMs) {
1830
+ if (phase < BEAT_POP_IN_MS) return easeOutCubic(phase / BEAT_POP_IN_MS);
1831
+ var holdEnd = beatMs - BEAT_POP_OUT_MS;
1832
+ if (phase >= holdEnd) {
1833
+ return Math.max(0, 1 - easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS));
1837
1834
  }
1838
1835
  return 1;
1839
1836
  }
1840
- function showcaseScale(phase) {
1841
- if (phase < SHOWCASE_POP_IN_MS) {
1842
- return Math.min(1, 0.78 + 0.22 * easeOutBack(phase / SHOWCASE_POP_IN_MS));
1837
+ function beatScale(phase, beatMs) {
1838
+ if (phase < BEAT_POP_IN_MS) {
1839
+ return Math.min(1, 0.92 + 0.08 * easeOutBack(phase / BEAT_POP_IN_MS));
1843
1840
  }
1844
- if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
1845
- return 1 - 0.14 * easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
1841
+ var holdEnd = beatMs - BEAT_POP_OUT_MS;
1842
+ if (phase >= holdEnd) {
1843
+ return 1 - 0.06 * easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS);
1846
1844
  }
1847
1845
  return 1;
1848
1846
  }
1849
- function useShowcasePhase(enabled, cycleMs) {
1850
- var _ref = _sliced_to_array((0, import_react.useState)(0), 2), phase = _ref[0], setPhase = _ref[1];
1847
+ function partitionShowcase(overlays) {
1848
+ var visible = overlays.filter(function(o) {
1849
+ return o.visible;
1850
+ });
1851
+ var persistent = [];
1852
+ var spotlight = [];
1853
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1854
+ try {
1855
+ for(var _iterator = visible[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1856
+ var o = _step.value;
1857
+ if (SHOWCASE_PERSISTENT_TYPES.has(o.type)) persistent.push(o);
1858
+ else spotlight.push(o);
1859
+ }
1860
+ } catch (err) {
1861
+ _didIteratorError = true;
1862
+ _iteratorError = err;
1863
+ } finally{
1864
+ try {
1865
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1866
+ _iterator.return();
1867
+ }
1868
+ } finally{
1869
+ if (_didIteratorError) {
1870
+ throw _iteratorError;
1871
+ }
1872
+ }
1873
+ }
1874
+ spotlight.sort(function(a, b) {
1875
+ return a.z_index - b.z_index || a.id - b.id;
1876
+ });
1877
+ var beats = [];
1878
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
1879
+ try {
1880
+ for(var _iterator1 = spotlight[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
1881
+ var o1 = _step1.value;
1882
+ beats.push([
1883
+ o1
1884
+ ]);
1885
+ }
1886
+ } catch (err) {
1887
+ _didIteratorError1 = true;
1888
+ _iteratorError1 = err;
1889
+ } finally{
1890
+ try {
1891
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
1892
+ _iterator1.return();
1893
+ }
1894
+ } finally{
1895
+ if (_didIteratorError1) {
1896
+ throw _iteratorError1;
1897
+ }
1898
+ }
1899
+ }
1900
+ return {
1901
+ persistent: persistent,
1902
+ beats: beats
1903
+ };
1904
+ }
1905
+ function useShowcaseBeat(enabled, cycleMs, beats) {
1906
+ var safeBeats = Math.max(1, beats);
1907
+ var beatMs = Math.max(SHOWCASE_MIN_BEAT_MS, Math.floor(cycleMs / safeBeats));
1908
+ var totalMs = beatMs * safeBeats;
1909
+ var _ref = _sliced_to_array((0, import_react.useState)(function() {
1910
+ return Date.now();
1911
+ }), 2), now = _ref[0], setNow = _ref[1];
1851
1912
  (0, import_react.useEffect)(function() {
1852
1913
  if (!enabled) return;
1853
- setPhase(Date.now() % cycleMs);
1854
1914
  var id = window.setInterval(function() {
1855
- setPhase(Date.now() % cycleMs);
1856
- }, 48);
1915
+ return setNow(Date.now());
1916
+ }, 64);
1857
1917
  return function() {
1858
1918
  return clearInterval(id);
1859
1919
  };
1860
1920
  }, [
1861
- enabled,
1862
- cycleMs
1921
+ enabled
1863
1922
  ]);
1864
- return phase;
1923
+ var phase = now % totalMs;
1924
+ var beatIndex = Math.min(safeBeats - 1, Math.floor(phase / beatMs));
1925
+ var beatPhase = phase - beatIndex * beatMs;
1926
+ return {
1927
+ beatIndex: beatIndex,
1928
+ beatPhase: beatPhase,
1929
+ beatMs: beatMs
1930
+ };
1865
1931
  }
1866
1932
  var OverlayRenderer = function OverlayRenderer(param) {
1867
1933
  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;
@@ -1869,7 +1935,28 @@ var OverlayRenderer = function OverlayRenderer(param) {
1869
1935
  var rafRef = (0, import_react.useRef)(null);
1870
1936
  var _ref1 = _sliced_to_array((0, import_react.useState)(/* @__PURE__ */ new Map()), 2), fadeMap = _ref1[0], setFadeMap = _ref1[1];
1871
1937
  var removeTimers = (0, import_react.useRef)(/* @__PURE__ */ new Map());
1872
- var showcasePhase = useShowcasePhase(showcaseMode, showcaseCycleMs);
1938
+ var _ref2 = (0, import_react.useMemo)(function() {
1939
+ return partitionShowcase(overlays);
1940
+ }, [
1941
+ overlays
1942
+ ]), showcasePersistent = _ref2.persistent, showcaseBeats = _ref2.beats;
1943
+ var _useShowcaseBeat = useShowcaseBeat(showcaseMode, showcaseCycleMs, showcaseBeats.length), showcaseBeatIndex = _useShowcaseBeat.beatIndex, showcaseBeatPhase = _useShowcaseBeat.beatPhase, showcaseBeatMs = _useShowcaseBeat.beatMs;
1944
+ var showcasePersistentIds = (0, import_react.useMemo)(function() {
1945
+ return new Set(showcasePersistent.map(function(o) {
1946
+ return o.id;
1947
+ }));
1948
+ }, [
1949
+ showcasePersistent
1950
+ ]);
1951
+ var showcaseSpotlightIds = (0, import_react.useMemo)(function() {
1952
+ var beat = showcaseBeats[showcaseBeatIndex];
1953
+ return new Set((beat !== null && beat !== void 0 ? beat : []).map(function(o) {
1954
+ return o.id;
1955
+ }));
1956
+ }, [
1957
+ showcaseBeats,
1958
+ showcaseBeatIndex
1959
+ ]);
1873
1960
  var updateDims = (0, import_react.useCallback)(function() {
1874
1961
  var video = videoRef.current;
1875
1962
  if (video) {
@@ -1902,10 +1989,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
1902
1989
  ]);
1903
1990
  var activeOverlays = (0, import_react.useMemo)(function() {
1904
1991
  if (showcaseMode) {
1905
- return overlays.filter(function(o) {
1906
- if (!o.visible) return false;
1907
- return showcasePhase < SHOWCASE_POP_OUT_END_MS;
1908
- });
1992
+ var _showcaseBeats_showcaseBeatIndex;
1993
+ var beat = (_showcaseBeats_showcaseBeatIndex = showcaseBeats[showcaseBeatIndex]) !== null && _showcaseBeats_showcaseBeatIndex !== void 0 ? _showcaseBeats_showcaseBeatIndex : [];
1994
+ return _to_consumable_array(showcasePersistent).concat(_to_consumable_array(beat));
1909
1995
  }
1910
1996
  return overlays.filter(function(o) {
1911
1997
  return isOverlayActive(o, currentTime);
@@ -1914,14 +2000,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
1914
2000
  overlays,
1915
2001
  currentTime,
1916
2002
  showcaseMode,
1917
- showcasePhase
1918
- ]);
1919
- var activeBeatIds = (0, import_react.useMemo)(function() {
1920
- return new Set(activeOverlays.map(function(o) {
1921
- return o.id;
1922
- }));
1923
- }, [
1924
- activeOverlays
2003
+ showcasePersistent,
2004
+ showcaseBeats,
2005
+ showcaseBeatIndex
1925
2006
  ]);
1926
2007
  (0, import_react.useLayoutEffect)(function() {
1927
2008
  var activeIds = new Set(activeOverlays.map(function(o) {
@@ -2116,10 +2197,12 @@ var OverlayRenderer = function OverlayRenderer(param) {
2116
2197
  var width = overlay.width * scaleX;
2117
2198
  var height = overlay.height * scaleY;
2118
2199
  var baseOpacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
2119
- var inShowcaseBeat = showcaseMode && activeBeatIds.has(overlay.id);
2120
- var useShowcasePop = inShowcaseBeat;
2121
- var opacity = useShowcasePop ? baseOpacity * showcaseOpacity(showcasePhase) : visible ? baseOpacity : 0;
2122
- var popScale = useShowcasePop ? showcaseScale(showcasePhase) : 1;
2200
+ var isShowcasePersistent = showcaseMode && showcasePersistentIds.has(overlay.id);
2201
+ var isShowcaseSpotlight = showcaseMode && showcaseSpotlightIds.has(overlay.id);
2202
+ var isShowcaseDormant = showcaseMode && !isShowcasePersistent && !isShowcaseSpotlight;
2203
+ var useShowcasePop = isShowcaseSpotlight;
2204
+ var opacity = useShowcasePop ? baseOpacity * beatOpacity(showcaseBeatPhase, showcaseBeatMs) : isShowcaseDormant ? 0 : visible ? baseOpacity : 0;
2205
+ var popScale = useShowcasePop ? beatScale(showcaseBeatPhase, showcaseBeatMs) : 1;
2123
2206
  var sz = {
2124
2207
  w: width,
2125
2208
  h: height