stormcloud-video-player 0.7.32 → 0.7.35

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.
@@ -1723,12 +1723,63 @@ function hexToRgb(hex) {
1723
1723
  return "".concat(num >> 16 & 255, ",").concat(num >> 8 & 255, ",").concat(num & 255);
1724
1724
  }
1725
1725
  var FADE_DURATION_MS = 1e3;
1726
+ var SHOWCASE_CYCLE_MS_DEFAULT = 6e4;
1727
+ var SHOWCASE_POP_IN_MS = 420;
1728
+ var SHOWCASE_STEADY_END_MS = 46e3;
1729
+ var SHOWCASE_POP_OUT_MS = 450;
1730
+ var SHOWCASE_POP_OUT_END_MS = SHOWCASE_STEADY_END_MS + SHOWCASE_POP_OUT_MS;
1731
+ function easeOutCubic(t) {
1732
+ var u = 1 - t;
1733
+ return 1 - u * u * u;
1734
+ }
1735
+ function easeInCubic(t) {
1736
+ return t * t * t;
1737
+ }
1738
+ function easeOutBack(t) {
1739
+ var c1 = 1.70158;
1740
+ var c3 = c1 + 1;
1741
+ return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
1742
+ }
1743
+ function showcaseOpacity(phase) {
1744
+ if (phase < SHOWCASE_POP_IN_MS) return easeOutCubic(phase / SHOWCASE_POP_IN_MS);
1745
+ if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
1746
+ return 1 - easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
1747
+ }
1748
+ return 1;
1749
+ }
1750
+ function showcaseScale(phase) {
1751
+ if (phase < SHOWCASE_POP_IN_MS) {
1752
+ return 0.78 + 0.22 * easeOutBack(phase / SHOWCASE_POP_IN_MS);
1753
+ }
1754
+ if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
1755
+ return 1 - 0.14 * easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
1756
+ }
1757
+ return 1;
1758
+ }
1759
+ function useShowcasePhase(enabled, cycleMs) {
1760
+ var _ref = _sliced_to_array((0, import_react.useState)(0), 2), phase = _ref[0], setPhase = _ref[1];
1761
+ (0, import_react.useEffect)(function() {
1762
+ if (!enabled) return;
1763
+ setPhase(Date.now() % cycleMs);
1764
+ var id = window.setInterval(function() {
1765
+ setPhase(Date.now() % cycleMs);
1766
+ }, 48);
1767
+ return function() {
1768
+ return clearInterval(id);
1769
+ };
1770
+ }, [
1771
+ enabled,
1772
+ cycleMs
1773
+ ]);
1774
+ return phase;
1775
+ }
1726
1776
  var OverlayRenderer = function OverlayRenderer(param) {
1727
- var overlays = param.overlays, currentTime = param.currentTime, videoRef = param.videoRef, coordinateSpace = param.coordinateSpace;
1777
+ 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;
1728
1778
  var _ref = _sliced_to_array((0, import_react.useState)(null), 2), dims = _ref[0], setDims = _ref[1];
1729
1779
  var rafRef = (0, import_react.useRef)(null);
1730
1780
  var _ref1 = _sliced_to_array((0, import_react.useState)(/* @__PURE__ */ new Map()), 2), fadeMap = _ref1[0], setFadeMap = _ref1[1];
1731
1781
  var removeTimers = (0, import_react.useRef)(/* @__PURE__ */ new Map());
1782
+ var showcasePhase = useShowcasePhase(showcaseMode, showcaseCycleMs);
1732
1783
  var updateDims = (0, import_react.useCallback)(function() {
1733
1784
  var video = videoRef.current;
1734
1785
  if (video) {
@@ -1760,12 +1811,26 @@ var OverlayRenderer = function OverlayRenderer(param) {
1760
1811
  updateDims
1761
1812
  ]);
1762
1813
  var activeOverlays = (0, import_react.useMemo)(function() {
1814
+ if (showcaseMode) {
1815
+ return overlays.filter(function(o) {
1816
+ return o.visible && showcasePhase < SHOWCASE_POP_OUT_END_MS;
1817
+ });
1818
+ }
1763
1819
  return overlays.filter(function(o) {
1764
1820
  return isOverlayActive(o, currentTime);
1765
1821
  });
1766
1822
  }, [
1767
1823
  overlays,
1768
- currentTime
1824
+ currentTime,
1825
+ showcaseMode,
1826
+ showcasePhase
1827
+ ]);
1828
+ var activeBeatIds = (0, import_react.useMemo)(function() {
1829
+ return new Set(activeOverlays.map(function(o) {
1830
+ return o.id;
1831
+ }));
1832
+ }, [
1833
+ activeOverlays
1769
1834
  ]);
1770
1835
  (0, import_react.useEffect)(function() {
1771
1836
  var activeIds = new Set(activeOverlays.map(function(o) {
@@ -1955,7 +2020,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
1955
2020
  var width = overlay.width * scaleX;
1956
2021
  var height = overlay.height * scaleY;
1957
2022
  var baseOpacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
1958
- var opacity = visible ? baseOpacity : 0;
2023
+ var inShowcaseBeat = showcaseMode && activeBeatIds.has(overlay.id);
2024
+ var opacity = inShowcaseBeat ? baseOpacity * showcaseOpacity(showcasePhase) : visible ? baseOpacity : 0;
2025
+ var popScale = inShowcaseBeat ? showcaseScale(showcasePhase) : 1;
1959
2026
  var sz = {
1960
2027
  w: width,
1961
2028
  h: height
@@ -1968,7 +2035,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
1968
2035
  width: "".concat(width, "px"),
1969
2036
  height: "".concat(height, "px"),
1970
2037
  opacity: opacity,
1971
- transition: "opacity ".concat(FADE_DURATION_MS, "ms ease"),
2038
+ transition: inShowcaseBeat ? "none" : "opacity ".concat(FADE_DURATION_MS, "ms ease"),
2039
+ transform: showcaseMode ? "scale(".concat(popScale, ")") : void 0,
2040
+ transformOrigin: showcaseMode ? "center center" : void 0,
1972
2041
  zIndex: overlay.z_index,
1973
2042
  overflow: "hidden"
1974
2043
  },