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
|
@@ -5649,6 +5649,42 @@ function isOverlayActive(overlay, currentTime) {
|
|
|
5649
5649
|
if (durationSec <= 0) return false;
|
|
5650
5650
|
return currentTime >= startSec && currentTime < startSec + durationSec;
|
|
5651
5651
|
}
|
|
5652
|
+
function createDemoStockTickerOverlay(projectId) {
|
|
5653
|
+
return {
|
|
5654
|
+
id: -9001,
|
|
5655
|
+
project_id: projectId,
|
|
5656
|
+
name: "Demo stock ticker",
|
|
5657
|
+
type: "scroller",
|
|
5658
|
+
visible: true,
|
|
5659
|
+
x: 144,
|
|
5660
|
+
y: 950,
|
|
5661
|
+
width: 1632,
|
|
5662
|
+
height: 97,
|
|
5663
|
+
opacity: 100,
|
|
5664
|
+
start_time: "00:00:00.000",
|
|
5665
|
+
duration: "24:00:00.000",
|
|
5666
|
+
z_index: 120,
|
|
5667
|
+
scroller_config: {
|
|
5668
|
+
use_custom_text: true,
|
|
5669
|
+
custom_text: "AAPL +1.24% \u2022 MSFT +0.42% \u2022 GOOGL \u22120.11% \u2022 TSLA +2.31% \u2022 NVDA +1.87% \u2022 AMZN +0.65% \u2022 META +0.38% \u2022 DJIA +0.52% \u2022 S&P 500 +0.33% \u2022 NDAQ +0.41%",
|
|
5670
|
+
direction: "left",
|
|
5671
|
+
scroll_speed: 42,
|
|
5672
|
+
font_size: 15,
|
|
5673
|
+
font_weight: "700",
|
|
5674
|
+
text_color: "#f8fafc",
|
|
5675
|
+
background_color: "#0f172a",
|
|
5676
|
+
background_opacity: 92,
|
|
5677
|
+
border_radius: 4,
|
|
5678
|
+
label: "MARKETS",
|
|
5679
|
+
label_line2: "LIVE",
|
|
5680
|
+
label_color: "#0ea5e9",
|
|
5681
|
+
label_text_color: "#ffffff",
|
|
5682
|
+
accent_color: "#38bdf8",
|
|
5683
|
+
show_accent_line: true,
|
|
5684
|
+
separator_char: "\u2022"
|
|
5685
|
+
}
|
|
5686
|
+
};
|
|
5687
|
+
}
|
|
5652
5688
|
function fetchProjectOverlays(_0) {
|
|
5653
5689
|
return _async_to_generator(function(projectId) {
|
|
5654
5690
|
var apiBaseUrl, response, data;
|
|
@@ -7059,12 +7095,63 @@ function hexToRgb(hex) {
|
|
|
7059
7095
|
return "".concat(num >> 16 & 255, ",").concat(num >> 8 & 255, ",").concat(num & 255);
|
|
7060
7096
|
}
|
|
7061
7097
|
var FADE_DURATION_MS = 1e3;
|
|
7098
|
+
var SHOWCASE_CYCLE_MS_DEFAULT = 6e4;
|
|
7099
|
+
var SHOWCASE_POP_IN_MS = 420;
|
|
7100
|
+
var SHOWCASE_STEADY_END_MS = 46e3;
|
|
7101
|
+
var SHOWCASE_POP_OUT_MS = 450;
|
|
7102
|
+
var SHOWCASE_POP_OUT_END_MS = SHOWCASE_STEADY_END_MS + SHOWCASE_POP_OUT_MS;
|
|
7103
|
+
function easeOutCubic(t) {
|
|
7104
|
+
var u = 1 - t;
|
|
7105
|
+
return 1 - u * u * u;
|
|
7106
|
+
}
|
|
7107
|
+
function easeInCubic(t) {
|
|
7108
|
+
return t * t * t;
|
|
7109
|
+
}
|
|
7110
|
+
function easeOutBack(t) {
|
|
7111
|
+
var c1 = 1.70158;
|
|
7112
|
+
var c3 = c1 + 1;
|
|
7113
|
+
return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
|
|
7114
|
+
}
|
|
7115
|
+
function showcaseOpacity(phase) {
|
|
7116
|
+
if (phase < SHOWCASE_POP_IN_MS) return easeOutCubic(phase / SHOWCASE_POP_IN_MS);
|
|
7117
|
+
if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
|
|
7118
|
+
return 1 - easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
|
|
7119
|
+
}
|
|
7120
|
+
return 1;
|
|
7121
|
+
}
|
|
7122
|
+
function showcaseScale(phase) {
|
|
7123
|
+
if (phase < SHOWCASE_POP_IN_MS) {
|
|
7124
|
+
return 0.78 + 0.22 * easeOutBack(phase / SHOWCASE_POP_IN_MS);
|
|
7125
|
+
}
|
|
7126
|
+
if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
|
|
7127
|
+
return 1 - 0.14 * easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
|
|
7128
|
+
}
|
|
7129
|
+
return 1;
|
|
7130
|
+
}
|
|
7131
|
+
function useShowcasePhase(enabled, cycleMs) {
|
|
7132
|
+
var _ref = _sliced_to_array((0, import_react.useState)(0), 2), phase = _ref[0], setPhase = _ref[1];
|
|
7133
|
+
(0, import_react.useEffect)(function() {
|
|
7134
|
+
if (!enabled) return;
|
|
7135
|
+
setPhase(Date.now() % cycleMs);
|
|
7136
|
+
var id = window.setInterval(function() {
|
|
7137
|
+
setPhase(Date.now() % cycleMs);
|
|
7138
|
+
}, 48);
|
|
7139
|
+
return function() {
|
|
7140
|
+
return clearInterval(id);
|
|
7141
|
+
};
|
|
7142
|
+
}, [
|
|
7143
|
+
enabled,
|
|
7144
|
+
cycleMs
|
|
7145
|
+
]);
|
|
7146
|
+
return phase;
|
|
7147
|
+
}
|
|
7062
7148
|
var OverlayRenderer = function OverlayRenderer(param) {
|
|
7063
|
-
var overlays = param.overlays, currentTime = param.currentTime, videoRef = param.videoRef, coordinateSpace = param.coordinateSpace;
|
|
7149
|
+
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;
|
|
7064
7150
|
var _ref = _sliced_to_array((0, import_react.useState)(null), 2), dims = _ref[0], setDims = _ref[1];
|
|
7065
7151
|
var rafRef = (0, import_react.useRef)(null);
|
|
7066
7152
|
var _ref1 = _sliced_to_array((0, import_react.useState)(/* @__PURE__ */ new Map()), 2), fadeMap = _ref1[0], setFadeMap = _ref1[1];
|
|
7067
7153
|
var removeTimers = (0, import_react.useRef)(/* @__PURE__ */ new Map());
|
|
7154
|
+
var showcasePhase = useShowcasePhase(showcaseMode, showcaseCycleMs);
|
|
7068
7155
|
var updateDims = (0, import_react.useCallback)(function() {
|
|
7069
7156
|
var video = videoRef.current;
|
|
7070
7157
|
if (video) {
|
|
@@ -7096,12 +7183,26 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
7096
7183
|
updateDims
|
|
7097
7184
|
]);
|
|
7098
7185
|
var activeOverlays = (0, import_react.useMemo)(function() {
|
|
7186
|
+
if (showcaseMode) {
|
|
7187
|
+
return overlays.filter(function(o) {
|
|
7188
|
+
return o.visible && showcasePhase < SHOWCASE_POP_OUT_END_MS;
|
|
7189
|
+
});
|
|
7190
|
+
}
|
|
7099
7191
|
return overlays.filter(function(o) {
|
|
7100
7192
|
return isOverlayActive(o, currentTime);
|
|
7101
7193
|
});
|
|
7102
7194
|
}, [
|
|
7103
7195
|
overlays,
|
|
7104
|
-
currentTime
|
|
7196
|
+
currentTime,
|
|
7197
|
+
showcaseMode,
|
|
7198
|
+
showcasePhase
|
|
7199
|
+
]);
|
|
7200
|
+
var activeBeatIds = (0, import_react.useMemo)(function() {
|
|
7201
|
+
return new Set(activeOverlays.map(function(o) {
|
|
7202
|
+
return o.id;
|
|
7203
|
+
}));
|
|
7204
|
+
}, [
|
|
7205
|
+
activeOverlays
|
|
7105
7206
|
]);
|
|
7106
7207
|
(0, import_react.useEffect)(function() {
|
|
7107
7208
|
var activeIds = new Set(activeOverlays.map(function(o) {
|
|
@@ -7291,7 +7392,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
7291
7392
|
var width = overlay.width * scaleX;
|
|
7292
7393
|
var height = overlay.height * scaleY;
|
|
7293
7394
|
var baseOpacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
|
|
7294
|
-
var
|
|
7395
|
+
var inShowcaseBeat = showcaseMode && activeBeatIds.has(overlay.id);
|
|
7396
|
+
var opacity = inShowcaseBeat ? baseOpacity * showcaseOpacity(showcasePhase) : visible ? baseOpacity : 0;
|
|
7397
|
+
var popScale = inShowcaseBeat ? showcaseScale(showcasePhase) : 1;
|
|
7295
7398
|
var sz = {
|
|
7296
7399
|
w: width,
|
|
7297
7400
|
h: height
|
|
@@ -7304,7 +7407,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
7304
7407
|
width: "".concat(width, "px"),
|
|
7305
7408
|
height: "".concat(height, "px"),
|
|
7306
7409
|
opacity: opacity,
|
|
7307
|
-
transition: "opacity ".concat(FADE_DURATION_MS, "ms ease"),
|
|
7410
|
+
transition: inShowcaseBeat ? "none" : "opacity ".concat(FADE_DURATION_MS, "ms ease"),
|
|
7411
|
+
transform: showcaseMode ? "scale(".concat(popScale, ")") : void 0,
|
|
7412
|
+
transformOrigin: showcaseMode ? "center center" : void 0,
|
|
7308
7413
|
zIndex: overlay.z_index,
|
|
7309
7414
|
overflow: "hidden"
|
|
7310
7415
|
},
|
|
@@ -7430,7 +7535,7 @@ var PANEL_BASE_RIGHT_OFFSET = 10;
|
|
|
7430
7535
|
var StormcloudVideoPlayerComponent = import_react2.default.memo(function(props) {
|
|
7431
7536
|
var _ref;
|
|
7432
7537
|
var _aiLiveContext_context;
|
|
7433
|
-
var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, driftToleranceMs = props.driftToleranceMs, immediateManifestAds = props.immediateManifestAds, debugAdTiming = props.debugAdTiming, showCustomControls = props.showCustomControls, hideLoadingIndicator = props.hideLoadingIndicator, onVolumeToggle = props.onVolumeToggle, onFullscreenToggle = props.onFullscreenToggle, onControlClick = props.onControlClick, onReady = props.onReady, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, className = props.className, style = props.style, controls = props.controls, playsInline = props.playsInline, preload = props.preload, poster = props.poster, children = props.children, licenseKey = props.licenseKey, minSegmentsBeforePlay = props.minSegmentsBeforePlay, disableAds = props.disableAds, disableFiller = props.disableFiller, swirlProjectId = props.swirlProjectId, adcisionChannelId = props.adcisionChannelId, disableOverlays = props.disableOverlays, showAdsControl = props.showAdsControl, showOverlaysControl = props.showOverlaysControl, showAiContextControl = props.showAiContextControl, showDebugControl = props.showDebugControl, restVideoAttrs = _object_without_properties(props, [
|
|
7538
|
+
var src = props.src, autoplay = props.autoplay, muted = props.muted, lowLatencyMode = props.lowLatencyMode, allowNativeHls = props.allowNativeHls, driftToleranceMs = props.driftToleranceMs, immediateManifestAds = props.immediateManifestAds, debugAdTiming = props.debugAdTiming, showCustomControls = props.showCustomControls, hideLoadingIndicator = props.hideLoadingIndicator, onVolumeToggle = props.onVolumeToggle, onFullscreenToggle = props.onFullscreenToggle, onControlClick = props.onControlClick, onReady = props.onReady, wrapperClassName = props.wrapperClassName, wrapperStyle = props.wrapperStyle, className = props.className, style = props.style, controls = props.controls, playsInline = props.playsInline, preload = props.preload, poster = props.poster, children = props.children, licenseKey = props.licenseKey, minSegmentsBeforePlay = props.minSegmentsBeforePlay, disableAds = props.disableAds, disableFiller = props.disableFiller, swirlProjectId = props.swirlProjectId, swirlShowcaseDemo = props.swirlShowcaseDemo, adcisionChannelId = props.adcisionChannelId, disableOverlays = props.disableOverlays, showAdsControl = props.showAdsControl, showOverlaysControl = props.showOverlaysControl, showAiContextControl = props.showAiContextControl, showDebugControl = props.showDebugControl, restVideoAttrs = _object_without_properties(props, [
|
|
7434
7539
|
"src",
|
|
7435
7540
|
"autoplay",
|
|
7436
7541
|
"muted",
|
|
@@ -7459,6 +7564,7 @@ var StormcloudVideoPlayerComponent = import_react2.default.memo(function(props)
|
|
|
7459
7564
|
"disableAds",
|
|
7460
7565
|
"disableFiller",
|
|
7461
7566
|
"swirlProjectId",
|
|
7567
|
+
"swirlShowcaseDemo",
|
|
7462
7568
|
"adcisionChannelId",
|
|
7463
7569
|
"disableOverlays",
|
|
7464
7570
|
"showAdsControl",
|
|
@@ -7495,6 +7601,19 @@ var StormcloudVideoPlayerComponent = import_react2.default.memo(function(props)
|
|
|
7495
7601
|
var _import_react2_default_useState14 = _sliced_to_array(import_react2.default.useState(false), 2), showLicenseWarning = _import_react2_default_useState14[0], setShowLicenseWarning = _import_react2_default_useState14[1];
|
|
7496
7602
|
var _import_react2_default_useState15 = _sliced_to_array(import_react2.default.useState(true), 2), controlsVisible = _import_react2_default_useState15[0], setControlsVisible = _import_react2_default_useState15[1];
|
|
7497
7603
|
var _import_react2_default_useState16 = _sliced_to_array(import_react2.default.useState([]), 2), overlays = _import_react2_default_useState16[0], setOverlays = _import_react2_default_useState16[1];
|
|
7604
|
+
var displayOverlays = import_react2.default.useMemo(function() {
|
|
7605
|
+
if (!swirlProjectId || !swirlShowcaseDemo) return overlays;
|
|
7606
|
+
if (overlays.some(function(o) {
|
|
7607
|
+
return o.type === "scroller";
|
|
7608
|
+
})) return overlays;
|
|
7609
|
+
return _to_consumable_array(overlays).concat([
|
|
7610
|
+
createDemoStockTickerOverlay(swirlProjectId)
|
|
7611
|
+
]);
|
|
7612
|
+
}, [
|
|
7613
|
+
overlays,
|
|
7614
|
+
swirlProjectId,
|
|
7615
|
+
swirlShowcaseDemo
|
|
7616
|
+
]);
|
|
7498
7617
|
var _import_react2_default_useState17 = _sliced_to_array(import_react2.default.useState(null), 2), overlayCoordSpace = _import_react2_default_useState17[0], setOverlayCoordSpace = _import_react2_default_useState17[1];
|
|
7499
7618
|
var _import_react2_default_useState18 = _sliced_to_array(import_react2.default.useState(typeof window !== "undefined" ? window.innerWidth : 1920), 2), viewportWidth = _import_react2_default_useState18[0], setViewportWidth = _import_react2_default_useState18[1];
|
|
7500
7619
|
var _import_react2_default_useState19 = _sliced_to_array(import_react2.default.useState(typeof window !== "undefined" ? window.innerHeight > window.innerWidth : false), 2), isPortrait = _import_react2_default_useState19[0], setIsPortrait = _import_react2_default_useState19[1];
|
|
@@ -8240,11 +8359,12 @@ var StormcloudVideoPlayerComponent = import_react2.default.memo(function(props)
|
|
|
8240
8359
|
}, restVideoAttrs), {
|
|
8241
8360
|
children: children
|
|
8242
8361
|
})),
|
|
8243
|
-
|
|
8244
|
-
overlays:
|
|
8362
|
+
displayOverlays.length > 0 && !adStatus.showAds && !overlaysDisabled && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(OverlayRenderer, {
|
|
8363
|
+
overlays: displayOverlays,
|
|
8245
8364
|
currentTime: currentTime,
|
|
8246
8365
|
videoRef: videoRef,
|
|
8247
|
-
coordinateSpace: overlayCoordSpace
|
|
8366
|
+
coordinateSpace: overlayCoordSpace,
|
|
8367
|
+
showcaseMode: !!swirlShowcaseDemo
|
|
8248
8368
|
}),
|
|
8249
8369
|
(isLoading || isBuffering) && !hideLoadingIndicator && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", {
|
|
8250
8370
|
className: "sc-loading-indicator",
|
|
@@ -9613,6 +9733,7 @@ var StormcloudVideoPlayerComponent = import_react2.default.memo(function(props)
|
|
|
9613
9733
|
"poster",
|
|
9614
9734
|
"children",
|
|
9615
9735
|
"swirlProjectId",
|
|
9736
|
+
"swirlShowcaseDemo",
|
|
9616
9737
|
"adcisionChannelId",
|
|
9617
9738
|
"disableOverlays",
|
|
9618
9739
|
"showAdsControl",
|