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.
- package/dist/stormcloud-vp.min.js +1 -1
- package/lib/index.cjs +133 -8
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +3 -1
- package/lib/index.d.ts +3 -1
- package/lib/index.js +130 -9
- package/lib/index.js.map +1 -1
- package/lib/ui/OverlayRenderer.cjs +73 -4
- package/lib/ui/OverlayRenderer.cjs.map +1 -1
- package/lib/ui/OverlayRenderer.d.cts +2 -0
- package/lib/ui/StormcloudVideoPlayer.cjs +129 -8
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.d.cts +1 -0
- package/lib/utils/overlays.cjs +40 -0
- package/lib/utils/overlays.cjs.map +1 -1
- package/lib/utils/overlays.d.cts +2 -1
- package/package.json +1 -1
|
@@ -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
|
|
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
|
},
|