stormcloud-video-player 0.7.32 → 0.7.33
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
package/lib/index.cjs
CHANGED
|
@@ -461,6 +461,9 @@ __export(index_exports, {
|
|
|
461
461
|
createAdStormPlayer: function createAdStormPlayer1() {
|
|
462
462
|
return createAdStormPlayer;
|
|
463
463
|
},
|
|
464
|
+
createDemoStockTickerOverlay: function createDemoStockTickerOverlay1() {
|
|
465
|
+
return createDemoStockTickerOverlay;
|
|
466
|
+
},
|
|
464
467
|
createStormcloudPlayer: function createStormcloudPlayer1() {
|
|
465
468
|
return createStormcloudPlayer;
|
|
466
469
|
},
|
|
@@ -5827,6 +5830,42 @@ function isOverlayActive(overlay, currentTime) {
|
|
|
5827
5830
|
if (durationSec <= 0) return false;
|
|
5828
5831
|
return currentTime >= startSec && currentTime < startSec + durationSec;
|
|
5829
5832
|
}
|
|
5833
|
+
function createDemoStockTickerOverlay(projectId) {
|
|
5834
|
+
return {
|
|
5835
|
+
id: -9001,
|
|
5836
|
+
project_id: projectId,
|
|
5837
|
+
name: "Demo stock ticker",
|
|
5838
|
+
type: "scroller",
|
|
5839
|
+
visible: true,
|
|
5840
|
+
x: 144,
|
|
5841
|
+
y: 950,
|
|
5842
|
+
width: 1632,
|
|
5843
|
+
height: 97,
|
|
5844
|
+
opacity: 100,
|
|
5845
|
+
start_time: "00:00:00.000",
|
|
5846
|
+
duration: "24:00:00.000",
|
|
5847
|
+
z_index: 120,
|
|
5848
|
+
scroller_config: {
|
|
5849
|
+
use_custom_text: true,
|
|
5850
|
+
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%",
|
|
5851
|
+
direction: "left",
|
|
5852
|
+
scroll_speed: 42,
|
|
5853
|
+
font_size: 15,
|
|
5854
|
+
font_weight: "700",
|
|
5855
|
+
text_color: "#f8fafc",
|
|
5856
|
+
background_color: "#0f172a",
|
|
5857
|
+
background_opacity: 92,
|
|
5858
|
+
border_radius: 4,
|
|
5859
|
+
label: "MARKETS",
|
|
5860
|
+
label_line2: "LIVE",
|
|
5861
|
+
label_color: "#0ea5e9",
|
|
5862
|
+
label_text_color: "#ffffff",
|
|
5863
|
+
accent_color: "#38bdf8",
|
|
5864
|
+
show_accent_line: true,
|
|
5865
|
+
separator_char: "\u2022"
|
|
5866
|
+
}
|
|
5867
|
+
};
|
|
5868
|
+
}
|
|
5830
5869
|
function fetchProjectOverlays(_0) {
|
|
5831
5870
|
return _async_to_generator(function(projectId) {
|
|
5832
5871
|
var apiBaseUrl, response, data;
|
|
@@ -7237,12 +7276,63 @@ function hexToRgb(hex) {
|
|
|
7237
7276
|
return "".concat(num >> 16 & 255, ",").concat(num >> 8 & 255, ",").concat(num & 255);
|
|
7238
7277
|
}
|
|
7239
7278
|
var FADE_DURATION_MS = 1e3;
|
|
7279
|
+
var SHOWCASE_CYCLE_MS_DEFAULT = 6e4;
|
|
7280
|
+
var SHOWCASE_POP_IN_MS = 420;
|
|
7281
|
+
var SHOWCASE_STEADY_END_MS = 46e3;
|
|
7282
|
+
var SHOWCASE_POP_OUT_MS = 450;
|
|
7283
|
+
var SHOWCASE_POP_OUT_END_MS = SHOWCASE_STEADY_END_MS + SHOWCASE_POP_OUT_MS;
|
|
7284
|
+
function easeOutCubic(t) {
|
|
7285
|
+
var u = 1 - t;
|
|
7286
|
+
return 1 - u * u * u;
|
|
7287
|
+
}
|
|
7288
|
+
function easeInCubic(t) {
|
|
7289
|
+
return t * t * t;
|
|
7290
|
+
}
|
|
7291
|
+
function easeOutBack(t) {
|
|
7292
|
+
var c1 = 1.70158;
|
|
7293
|
+
var c3 = c1 + 1;
|
|
7294
|
+
return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
|
|
7295
|
+
}
|
|
7296
|
+
function showcaseOpacity(phase) {
|
|
7297
|
+
if (phase < SHOWCASE_POP_IN_MS) return easeOutCubic(phase / SHOWCASE_POP_IN_MS);
|
|
7298
|
+
if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
|
|
7299
|
+
return 1 - easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
|
|
7300
|
+
}
|
|
7301
|
+
return 1;
|
|
7302
|
+
}
|
|
7303
|
+
function showcaseScale(phase) {
|
|
7304
|
+
if (phase < SHOWCASE_POP_IN_MS) {
|
|
7305
|
+
return 0.78 + 0.22 * easeOutBack(phase / SHOWCASE_POP_IN_MS);
|
|
7306
|
+
}
|
|
7307
|
+
if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
|
|
7308
|
+
return 1 - 0.14 * easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
|
|
7309
|
+
}
|
|
7310
|
+
return 1;
|
|
7311
|
+
}
|
|
7312
|
+
function useShowcasePhase(enabled, cycleMs) {
|
|
7313
|
+
var _ref = _sliced_to_array((0, import_react.useState)(0), 2), phase = _ref[0], setPhase = _ref[1];
|
|
7314
|
+
(0, import_react.useEffect)(function() {
|
|
7315
|
+
if (!enabled) return;
|
|
7316
|
+
setPhase(Date.now() % cycleMs);
|
|
7317
|
+
var id = window.setInterval(function() {
|
|
7318
|
+
setPhase(Date.now() % cycleMs);
|
|
7319
|
+
}, 48);
|
|
7320
|
+
return function() {
|
|
7321
|
+
return clearInterval(id);
|
|
7322
|
+
};
|
|
7323
|
+
}, [
|
|
7324
|
+
enabled,
|
|
7325
|
+
cycleMs
|
|
7326
|
+
]);
|
|
7327
|
+
return phase;
|
|
7328
|
+
}
|
|
7240
7329
|
var OverlayRenderer = function OverlayRenderer(param) {
|
|
7241
|
-
var overlays = param.overlays, currentTime = param.currentTime, videoRef = param.videoRef, coordinateSpace = param.coordinateSpace;
|
|
7330
|
+
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;
|
|
7242
7331
|
var _ref = _sliced_to_array((0, import_react.useState)(null), 2), dims = _ref[0], setDims = _ref[1];
|
|
7243
7332
|
var rafRef = (0, import_react.useRef)(null);
|
|
7244
7333
|
var _ref1 = _sliced_to_array((0, import_react.useState)(/* @__PURE__ */ new Map()), 2), fadeMap = _ref1[0], setFadeMap = _ref1[1];
|
|
7245
7334
|
var removeTimers = (0, import_react.useRef)(/* @__PURE__ */ new Map());
|
|
7335
|
+
var showcasePhase = useShowcasePhase(showcaseMode, showcaseCycleMs);
|
|
7246
7336
|
var updateDims = (0, import_react.useCallback)(function() {
|
|
7247
7337
|
var video = videoRef.current;
|
|
7248
7338
|
if (video) {
|
|
@@ -7274,12 +7364,26 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
7274
7364
|
updateDims
|
|
7275
7365
|
]);
|
|
7276
7366
|
var activeOverlays = (0, import_react.useMemo)(function() {
|
|
7367
|
+
if (showcaseMode) {
|
|
7368
|
+
return overlays.filter(function(o) {
|
|
7369
|
+
return o.visible && showcasePhase < SHOWCASE_POP_OUT_END_MS;
|
|
7370
|
+
});
|
|
7371
|
+
}
|
|
7277
7372
|
return overlays.filter(function(o) {
|
|
7278
7373
|
return isOverlayActive(o, currentTime);
|
|
7279
7374
|
});
|
|
7280
7375
|
}, [
|
|
7281
7376
|
overlays,
|
|
7282
|
-
currentTime
|
|
7377
|
+
currentTime,
|
|
7378
|
+
showcaseMode,
|
|
7379
|
+
showcasePhase
|
|
7380
|
+
]);
|
|
7381
|
+
var activeBeatIds = (0, import_react.useMemo)(function() {
|
|
7382
|
+
return new Set(activeOverlays.map(function(o) {
|
|
7383
|
+
return o.id;
|
|
7384
|
+
}));
|
|
7385
|
+
}, [
|
|
7386
|
+
activeOverlays
|
|
7283
7387
|
]);
|
|
7284
7388
|
(0, import_react.useEffect)(function() {
|
|
7285
7389
|
var activeIds = new Set(activeOverlays.map(function(o) {
|
|
@@ -7469,7 +7573,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
7469
7573
|
var width = overlay.width * scaleX;
|
|
7470
7574
|
var height = overlay.height * scaleY;
|
|
7471
7575
|
var baseOpacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
|
|
7472
|
-
var
|
|
7576
|
+
var inShowcaseBeat = showcaseMode && activeBeatIds.has(overlay.id);
|
|
7577
|
+
var opacity = inShowcaseBeat ? baseOpacity * showcaseOpacity(showcasePhase) : visible ? baseOpacity : 0;
|
|
7578
|
+
var popScale = inShowcaseBeat ? showcaseScale(showcasePhase) : 1;
|
|
7473
7579
|
var sz = {
|
|
7474
7580
|
w: width,
|
|
7475
7581
|
h: height
|
|
@@ -7482,7 +7588,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
|
|
|
7482
7588
|
width: "".concat(width, "px"),
|
|
7483
7589
|
height: "".concat(height, "px"),
|
|
7484
7590
|
opacity: opacity,
|
|
7485
|
-
transition: "opacity ".concat(FADE_DURATION_MS, "ms ease"),
|
|
7591
|
+
transition: inShowcaseBeat ? "none" : "opacity ".concat(FADE_DURATION_MS, "ms ease"),
|
|
7592
|
+
transform: showcaseMode ? "scale(".concat(popScale, ")") : void 0,
|
|
7593
|
+
transformOrigin: showcaseMode ? "center center" : void 0,
|
|
7486
7594
|
zIndex: overlay.z_index,
|
|
7487
7595
|
overflow: "hidden"
|
|
7488
7596
|
},
|
|
@@ -7608,7 +7716,7 @@ var PANEL_BASE_RIGHT_OFFSET = 10;
|
|
|
7608
7716
|
var StormcloudVideoPlayerComponent = import_react2.default.memo(function(props) {
|
|
7609
7717
|
var _ref;
|
|
7610
7718
|
var _aiLiveContext_context;
|
|
7611
|
-
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, [
|
|
7719
|
+
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, [
|
|
7612
7720
|
"src",
|
|
7613
7721
|
"autoplay",
|
|
7614
7722
|
"muted",
|
|
@@ -7637,6 +7745,7 @@ var StormcloudVideoPlayerComponent = import_react2.default.memo(function(props)
|
|
|
7637
7745
|
"disableAds",
|
|
7638
7746
|
"disableFiller",
|
|
7639
7747
|
"swirlProjectId",
|
|
7748
|
+
"swirlShowcaseDemo",
|
|
7640
7749
|
"adcisionChannelId",
|
|
7641
7750
|
"disableOverlays",
|
|
7642
7751
|
"showAdsControl",
|
|
@@ -7673,6 +7782,19 @@ var StormcloudVideoPlayerComponent = import_react2.default.memo(function(props)
|
|
|
7673
7782
|
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];
|
|
7674
7783
|
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];
|
|
7675
7784
|
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];
|
|
7785
|
+
var displayOverlays = import_react2.default.useMemo(function() {
|
|
7786
|
+
if (!swirlProjectId || !swirlShowcaseDemo) return overlays;
|
|
7787
|
+
if (overlays.some(function(o) {
|
|
7788
|
+
return o.type === "scroller";
|
|
7789
|
+
})) return overlays;
|
|
7790
|
+
return _to_consumable_array(overlays).concat([
|
|
7791
|
+
createDemoStockTickerOverlay(swirlProjectId)
|
|
7792
|
+
]);
|
|
7793
|
+
}, [
|
|
7794
|
+
overlays,
|
|
7795
|
+
swirlProjectId,
|
|
7796
|
+
swirlShowcaseDemo
|
|
7797
|
+
]);
|
|
7676
7798
|
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];
|
|
7677
7799
|
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];
|
|
7678
7800
|
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];
|
|
@@ -8418,11 +8540,12 @@ var StormcloudVideoPlayerComponent = import_react2.default.memo(function(props)
|
|
|
8418
8540
|
}, restVideoAttrs), {
|
|
8419
8541
|
children: children
|
|
8420
8542
|
})),
|
|
8421
|
-
|
|
8422
|
-
overlays:
|
|
8543
|
+
displayOverlays.length > 0 && !adStatus.showAds && !overlaysDisabled && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(OverlayRenderer, {
|
|
8544
|
+
overlays: displayOverlays,
|
|
8423
8545
|
currentTime: currentTime,
|
|
8424
8546
|
videoRef: videoRef,
|
|
8425
|
-
coordinateSpace: overlayCoordSpace
|
|
8547
|
+
coordinateSpace: overlayCoordSpace,
|
|
8548
|
+
showcaseMode: !!swirlShowcaseDemo
|
|
8426
8549
|
}),
|
|
8427
8550
|
(isLoading || isBuffering) && !hideLoadingIndicator && /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", {
|
|
8428
8551
|
className: "sc-loading-indicator",
|
|
@@ -9791,6 +9914,7 @@ var StormcloudVideoPlayerComponent = import_react2.default.memo(function(props)
|
|
|
9791
9914
|
"poster",
|
|
9792
9915
|
"children",
|
|
9793
9916
|
"swirlProjectId",
|
|
9917
|
+
"swirlShowcaseDemo",
|
|
9794
9918
|
"adcisionChannelId",
|
|
9795
9919
|
"disableOverlays",
|
|
9796
9920
|
"showAdsControl",
|
|
@@ -11025,6 +11149,7 @@ var StormcloudPlayer_default = StormcloudPlayer;
|
|
|
11025
11149
|
StormcloudVideoPlayerComponent: StormcloudVideoPlayerComponent,
|
|
11026
11150
|
canPlay: canPlay,
|
|
11027
11151
|
createAdStormPlayer: createAdStormPlayer,
|
|
11152
|
+
createDemoStockTickerOverlay: createDemoStockTickerOverlay,
|
|
11028
11153
|
createStormcloudPlayer: createStormcloudPlayer,
|
|
11029
11154
|
detectBrowser: detectBrowser,
|
|
11030
11155
|
fetchProjectOverlays: fetchProjectOverlays,
|