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.
- package/dist/stormcloud-vp.min.js +1 -1
- package/lib/index.cjs +141 -143
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +1 -7
- package/lib/index.d.ts +1 -7
- package/lib/index.js +142 -136
- package/lib/index.js.map +1 -1
- package/lib/ui/OverlayRenderer.cjs +140 -57
- package/lib/ui/OverlayRenderer.cjs.map +1 -1
- package/lib/ui/StormcloudVideoPlayer.cjs +141 -135
- package/lib/ui/StormcloudVideoPlayer.cjs.map +1 -1
- package/lib/utils/overlays.cjs +6 -83
- package/lib/utils/overlays.cjs.map +1 -1
- package/lib/utils/overlays.d.cts +1 -7
- package/package.json +1 -1
package/lib/utils/overlays.cjs
CHANGED
|
@@ -217,9 +217,6 @@ __export(overlays_exports, {
|
|
|
217
217
|
SWIRL_HD_AUTHORING_WIDTH: function SWIRL_HD_AUTHORING_WIDTH1() {
|
|
218
218
|
return SWIRL_HD_AUTHORING_WIDTH;
|
|
219
219
|
},
|
|
220
|
-
createDemoStockTickerOverlay: function createDemoStockTickerOverlay1() {
|
|
221
|
-
return createDemoStockTickerOverlay;
|
|
222
|
-
},
|
|
223
220
|
fetchProjectOverlays: function fetchProjectOverlays1() {
|
|
224
221
|
return fetchProjectOverlays;
|
|
225
222
|
},
|
|
@@ -238,9 +235,6 @@ __export(overlays_exports, {
|
|
|
238
235
|
resolveImageUrl: function resolveImageUrl1() {
|
|
239
236
|
return resolveImageUrl;
|
|
240
237
|
},
|
|
241
|
-
scrollerLooksLikeMarketsStock: function scrollerLooksLikeMarketsStock1() {
|
|
242
|
-
return scrollerLooksLikeMarketsStock;
|
|
243
|
-
},
|
|
244
238
|
swirlProjectHasNabDemoMixedWithOther: function swirlProjectHasNabDemoMixedWithOther1() {
|
|
245
239
|
return swirlProjectHasNabDemoMixedWithOther;
|
|
246
240
|
},
|
|
@@ -288,28 +282,16 @@ var SWIRL_HD_AUTHORING_WIDTH = 1920;
|
|
|
288
282
|
var SWIRL_HD_AUTHORING_HEIGHT = 1080;
|
|
289
283
|
var NAB_DEMO_NAME_PREFIX = "NAB Demo \u2014 ";
|
|
290
284
|
function overlayAuthoringDimensions(overlay, decodeWidth, decodeHeight) {
|
|
291
|
-
if (
|
|
292
|
-
return {
|
|
293
|
-
width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
|
|
294
|
-
height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
|
|
295
|
-
};
|
|
296
|
-
}
|
|
297
|
-
if (!overlay.visible) {
|
|
285
|
+
if (overlay.name.startsWith(NAB_DEMO_NAME_PREFIX)) {
|
|
298
286
|
return {
|
|
299
|
-
width:
|
|
300
|
-
height:
|
|
287
|
+
width: SWIRL_HD_AUTHORING_WIDTH,
|
|
288
|
+
height: SWIRL_HD_AUTHORING_HEIGHT
|
|
301
289
|
};
|
|
302
290
|
}
|
|
303
|
-
|
|
304
|
-
var extB = overlay.y + overlay.height;
|
|
305
|
-
var EPS = 2;
|
|
306
|
-
var exceedsDecode = extR > decodeWidth + EPS || extB > decodeHeight + EPS;
|
|
307
|
-
var isNabDemo = overlay.name.startsWith(NAB_DEMO_NAME_PREFIX);
|
|
308
|
-
var isSyntheticMarketsTicker = overlay.id === -9001 || overlay.name === "Demo stock ticker";
|
|
309
|
-
if (exceedsDecode && (isNabDemo || isSyntheticMarketsTicker)) {
|
|
291
|
+
if (!decodeWidth || !decodeHeight) {
|
|
310
292
|
return {
|
|
311
|
-
width: SWIRL_HD_AUTHORING_WIDTH,
|
|
312
|
-
height: SWIRL_HD_AUTHORING_HEIGHT
|
|
293
|
+
width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
|
|
294
|
+
height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
|
|
313
295
|
};
|
|
314
296
|
}
|
|
315
297
|
return {
|
|
@@ -404,63 +386,6 @@ function inferSwirlOverlayCoordinateSpace(overlays, videoWidth, videoHeight) {
|
|
|
404
386
|
height: videoHeight
|
|
405
387
|
};
|
|
406
388
|
}
|
|
407
|
-
function scrollerLooksLikeMarketsStock(o) {
|
|
408
|
-
var _ref, _ref1, _ref2, _ref3;
|
|
409
|
-
if (o.type !== "scroller") return false;
|
|
410
|
-
var cfg = o.scroller_config;
|
|
411
|
-
var blob = "".concat(o.name, " ").concat((_ref = cfg === null || cfg === void 0 ? void 0 : cfg.label) !== null && _ref !== void 0 ? _ref : "", " ").concat((_ref1 = cfg === null || cfg === void 0 ? void 0 : cfg.label_line2) !== null && _ref1 !== void 0 ? _ref1 : "", " ").concat((_ref2 = cfg === null || cfg === void 0 ? void 0 : cfg.custom_text) !== null && _ref2 !== void 0 ? _ref2 : "", " ").concat((_ref3 = cfg === null || cfg === void 0 ? void 0 : cfg.preset) !== null && _ref3 !== void 0 ? _ref3 : "");
|
|
412
|
-
return /\b(MARKETS?|NYSE|NASDAQ|DJIA|\bS&P\b|STOCK|AAPL|TSLA|NVDA|EQUITIES)\b/i.test(blob);
|
|
413
|
-
}
|
|
414
|
-
function createDemoStockTickerOverlay(projectId, opts) {
|
|
415
|
-
var cw = (opts === null || opts === void 0 ? void 0 : opts.coordinateWidth) && opts.coordinateWidth > 0 ? opts.coordinateWidth : SWIRL_HD_AUTHORING_WIDTH;
|
|
416
|
-
var ch = (opts === null || opts === void 0 ? void 0 : opts.coordinateHeight) && opts.coordinateHeight > 0 ? opts.coordinateHeight : SWIRL_HD_AUTHORING_HEIGHT;
|
|
417
|
-
var sx = cw / SWIRL_HD_AUTHORING_WIDTH;
|
|
418
|
-
var sy = ch / SWIRL_HD_AUTHORING_HEIGHT;
|
|
419
|
-
var x = 36 * sx;
|
|
420
|
-
var y = 1002 * sy;
|
|
421
|
-
var width = 1848 * sx;
|
|
422
|
-
var height = 66 * sy;
|
|
423
|
-
var fontSize = Math.max(8, Math.round(13 * sy));
|
|
424
|
-
var scrollSpeed = Math.max(8, Math.round(36 * sx));
|
|
425
|
-
var borderRadius = Math.max(1, Math.round(4 * sy));
|
|
426
|
-
return {
|
|
427
|
-
id: -9001,
|
|
428
|
-
project_id: projectId,
|
|
429
|
-
name: "Demo stock ticker",
|
|
430
|
-
type: "scroller",
|
|
431
|
-
visible: true,
|
|
432
|
-
x: x,
|
|
433
|
-
y: y,
|
|
434
|
-
width: width,
|
|
435
|
-
height: height,
|
|
436
|
-
opacity: 100,
|
|
437
|
-
start_time: "00:00:00.000",
|
|
438
|
-
duration: "24:00:00.000",
|
|
439
|
-
z_index: 120,
|
|
440
|
-
scroller_config: {
|
|
441
|
-
preset: "equities_strip",
|
|
442
|
-
use_custom_text: true,
|
|
443
|
-
custom_text: "AAPL +0.84% \u2022 MSFT +0.31% \u2022 GOOGL \u22120.22% \u2022 AMZN +0.47% \u2022 NVDA +1.12% \u2022 META +0.19% \u2022 BRK.B +0.11% \u2022 JPM +0.55% \u2022 V +0.28% \u2022 UNH \u22120.17% \u2022 DJIA +0.41% \u2022 S&P 500 +0.29% \u2022 Nasdaq Composite +0.36% \u2022 Russell 2000 +0.52% \u2022 WTI crude $78.40 +0.6% \u2022 Gold $2,348/oz \u22120.2% \u2022 10Y Treasury 4.28%",
|
|
444
|
-
direction: "left",
|
|
445
|
-
scroll_speed: scrollSpeed,
|
|
446
|
-
font_size: fontSize,
|
|
447
|
-
font_weight: "600",
|
|
448
|
-
text_color: "#e2e8f0",
|
|
449
|
-
background_color: "#0a0f18",
|
|
450
|
-
background_opacity: 92,
|
|
451
|
-
border_radius: borderRadius,
|
|
452
|
-
padding: Math.max(3, Math.round(6 * sy)),
|
|
453
|
-
label: "U.S. equities",
|
|
454
|
-
label_line2: "",
|
|
455
|
-
label_color: "#1e3a5f",
|
|
456
|
-
label_text_color: "#f8fafc",
|
|
457
|
-
accent_color: "#38bdf8",
|
|
458
|
-
show_accent_line: true,
|
|
459
|
-
separator_char: "\u2022",
|
|
460
|
-
item_spacing: Math.max(28, Math.round(48 * sx))
|
|
461
|
-
}
|
|
462
|
-
};
|
|
463
|
-
}
|
|
464
389
|
function normalizeScrollerConfig(raw) {
|
|
465
390
|
if (!raw || (typeof raw === "undefined" ? "undefined" : _type_of(raw)) !== "object") return void 0;
|
|
466
391
|
var r = raw;
|
|
@@ -545,14 +470,12 @@ function resolveImageUrl(imageUrl) {
|
|
|
545
470
|
OVERLAY_API_BASE: OVERLAY_API_BASE,
|
|
546
471
|
SWIRL_HD_AUTHORING_HEIGHT: SWIRL_HD_AUTHORING_HEIGHT,
|
|
547
472
|
SWIRL_HD_AUTHORING_WIDTH: SWIRL_HD_AUTHORING_WIDTH,
|
|
548
|
-
createDemoStockTickerOverlay: createDemoStockTickerOverlay,
|
|
549
473
|
fetchProjectOverlays: fetchProjectOverlays,
|
|
550
474
|
inferSwirlOverlayCoordinateSpace: inferSwirlOverlayCoordinateSpace,
|
|
551
475
|
isOverlayActive: isOverlayActive,
|
|
552
476
|
normalizeSwirlOverlay: normalizeSwirlOverlay,
|
|
553
477
|
overlayAuthoringDimensions: overlayAuthoringDimensions,
|
|
554
478
|
resolveImageUrl: resolveImageUrl,
|
|
555
|
-
scrollerLooksLikeMarketsStock: scrollerLooksLikeMarketsStock,
|
|
556
479
|
swirlProjectHasNabDemoMixedWithOther: swirlProjectHasNabDemoMixedWithOther,
|
|
557
480
|
timeStringToSeconds: timeStringToSeconds
|
|
558
481
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/ubuntu24-new/Dev/stormcloud-vp/lib/utils/overlays.cjs","../../src/utils/overlays.ts"],"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","overlays_exports","OVERLAY_API_BASE","SWIRL_HD_AUTHORING_HEIGHT","SWIRL_HD_AUTHORING_WIDTH","createDemoStockTickerOverlay","fetchProjectOverlays","normalizeSwirlOverlay","inferSwirlOverlayCoordinateSpace","isOverlayActive","overlayAuthoringDimensions","resolveImageUrl","scrollerLooksLikeMarketsStock","swirlProjectHasNabDemoMixedWithOther","timeStringToSeconds","module","exports","timeStr","parts","split","length","hours","parseInt","minutes","secStr","dotIdx","indexOf","seconds","substring","msFrag","ms","padEnd"],"mappings":"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","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/utils/overlays.ts\nvar overlays_exports = {};\n__export(overlays_exports, {\n OVERLAY_API_BASE: () => OVERLAY_API_BASE,\n SWIRL_HD_AUTHORING_HEIGHT: () => SWIRL_HD_AUTHORING_HEIGHT,\n SWIRL_HD_AUTHORING_WIDTH: () => SWIRL_HD_AUTHORING_WIDTH,\n createDemoStockTickerOverlay: () => createDemoStockTickerOverlay,\n fetchProjectOverlays: () => fetchProjectOverlays,\n inferSwirlOverlayCoordinateSpace: () => inferSwirlOverlayCoordinateSpace,\n isOverlayActive: () => isOverlayActive,\n normalizeSwirlOverlay: () => normalizeSwirlOverlay,\n overlayAuthoringDimensions: () => overlayAuthoringDimensions,\n resolveImageUrl: () => resolveImageUrl,\n scrollerLooksLikeMarketsStock: () => scrollerLooksLikeMarketsStock,\n swirlProjectHasNabDemoMixedWithOther: () => swirlProjectHasNabDemoMixedWithOther,\n timeStringToSeconds: () => timeStringToSeconds\n});\nmodule.exports = __toCommonJS(overlays_exports);\nvar OVERLAY_API_BASE = \"https://adstorm.co/api-adstorm-dev\";\nfunction timeStringToSeconds(timeStr) {\n if (!timeStr) return 0;\n const parts = timeStr.split(\":\");\n if (parts.length >= 3) {\n const hours = parseInt(parts[0] ?? \"0\", 10) || 0;\n const minutes = parseInt(parts[1] ?? \"0\", 10) || 0;\n const secStr = parts[2] ?? \"0\";\n const dotIdx = secStr.indexOf(\".\");\n const seconds = parseInt(dotIdx >= 0 ? secStr.substring(0, dotIdx) : secStr, 10) || 0;\n const msFrag = dotIdx >= 0 ? secStr.substring(dotIdx + 1) : \"\";\n const ms = msFrag ? parseInt(msFrag.padEnd(3, \"0\").substring(0, 3), 10) || 0 : 0;\n return hours * 3600 + minutes * 60 + seconds + ms / 1e3;\n }\n if (parts.length === 2) {\n const minutes = parseInt(parts[0] ?? \"0\", 10) || 0;\n const secStr = parts[1] ?? \"0\";\n const dotIdx = secStr.indexOf(\".\");\n const seconds = parseInt(dotIdx >= 0 ? secStr.substring(0, dotIdx) : secStr, 10) || 0;\n const msFrag = dotIdx >= 0 ? secStr.substring(dotIdx + 1) : \"\";\n const ms = msFrag ? parseInt(msFrag.padEnd(3, \"0\").substring(0, 3), 10) || 0 : 0;\n return minutes * 60 + seconds + ms / 1e3;\n }\n const num = parseFloat(timeStr);\n return isFinite(num) ? Math.max(0, num) : 0;\n}\nfunction isOverlayActive(overlay, currentTime) {\n if (!overlay.visible) return false;\n const startSec = timeStringToSeconds(overlay.start_time);\n const durationSec = timeStringToSeconds(overlay.duration);\n if (durationSec <= 0) return false;\n return currentTime >= startSec && currentTime < startSec + durationSec;\n}\nvar SWIRL_HD_AUTHORING_WIDTH = 1920;\nvar SWIRL_HD_AUTHORING_HEIGHT = 1080;\nvar NAB_DEMO_NAME_PREFIX = \"NAB Demo \\u2014 \";\nfunction overlayAuthoringDimensions(overlay, decodeWidth, decodeHeight) {\n if (!decodeWidth || !decodeHeight) {\n return {\n width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,\n height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT\n };\n }\n if (!overlay.visible) {\n return { width: decodeWidth, height: decodeHeight };\n }\n const extR = overlay.x + overlay.width;\n const extB = overlay.y + overlay.height;\n const EPS = 2;\n const exceedsDecode = extR > decodeWidth + EPS || extB > decodeHeight + EPS;\n const isNabDemo = overlay.name.startsWith(NAB_DEMO_NAME_PREFIX);\n const isSyntheticMarketsTicker = overlay.id === -9001 || overlay.name === \"Demo stock ticker\";\n if (exceedsDecode && (isNabDemo || isSyntheticMarketsTicker)) {\n return {\n width: SWIRL_HD_AUTHORING_WIDTH,\n height: SWIRL_HD_AUTHORING_HEIGHT\n };\n }\n return { width: decodeWidth, height: decodeHeight };\n}\nfunction overlayExtents(overlays) {\n let maxR = 0;\n let maxB = 0;\n for (const o of overlays) {\n if (!o.visible) continue;\n maxR = Math.max(maxR, o.x + o.width);\n maxB = Math.max(maxB, o.y + o.height);\n }\n return { maxR, maxB };\n}\nfunction swirlProjectHasNabDemoMixedWithOther(overlays) {\n let hasNab = false;\n let hasOther = false;\n for (const o of overlays) {\n if (!o.visible) continue;\n if (o.name.startsWith(NAB_DEMO_NAME_PREFIX)) hasNab = true;\n else hasOther = true;\n }\n return hasNab && hasOther;\n}\nfunction inferSwirlOverlayCoordinateSpace(overlays, videoWidth, videoHeight) {\n if (!videoWidth || !videoHeight) {\n return {\n width: videoWidth || SWIRL_HD_AUTHORING_WIDTH,\n height: videoHeight || SWIRL_HD_AUTHORING_HEIGHT\n };\n }\n if (!overlays.length) {\n return { width: videoWidth, height: videoHeight };\n }\n const { maxR, maxB } = overlayExtents(overlays);\n const EPS = 1;\n const exceedsDecode = maxR > videoWidth + EPS || maxB > videoHeight + EPS;\n const fitsHdCanvas = maxR <= SWIRL_HD_AUTHORING_WIDTH + EPS && maxB <= SWIRL_HD_AUTHORING_HEIGHT + EPS;\n const mixed = swirlProjectHasNabDemoMixedWithOther(overlays);\n const decodeLargerThanHd = videoWidth > SWIRL_HD_AUTHORING_WIDTH + EPS || videoHeight > SWIRL_HD_AUTHORING_HEIGHT + EPS;\n if (fitsHdCanvas && (decodeLargerThanHd || exceedsDecode && !mixed)) {\n return {\n width: SWIRL_HD_AUTHORING_WIDTH,\n height: SWIRL_HD_AUTHORING_HEIGHT\n };\n }\n return { width: videoWidth, height: videoHeight };\n}\nfunction scrollerLooksLikeMarketsStock(o) {\n if (o.type !== \"scroller\") return false;\n const cfg = o.scroller_config;\n const blob = `${o.name} ${cfg?.label ?? \"\"} ${cfg?.label_line2 ?? \"\"} ${cfg?.custom_text ?? \"\"} ${cfg?.preset ?? \"\"}`;\n return /\\b(MARKETS?|NYSE|NASDAQ|DJIA|\\bS&P\\b|STOCK|AAPL|TSLA|NVDA|EQUITIES)\\b/i.test(blob);\n}\nfunction createDemoStockTickerOverlay(projectId, opts) {\n const cw = opts?.coordinateWidth && opts.coordinateWidth > 0 ? opts.coordinateWidth : SWIRL_HD_AUTHORING_WIDTH;\n const ch = opts?.coordinateHeight && opts.coordinateHeight > 0 ? opts.coordinateHeight : SWIRL_HD_AUTHORING_HEIGHT;\n const sx = cw / SWIRL_HD_AUTHORING_WIDTH;\n const sy = ch / SWIRL_HD_AUTHORING_HEIGHT;\n const x = 36 * sx;\n const y = 1002 * sy;\n const width = 1848 * sx;\n const height = 66 * sy;\n const fontSize = Math.max(8, Math.round(13 * sy));\n const scrollSpeed = Math.max(8, Math.round(36 * sx));\n const borderRadius = Math.max(1, Math.round(4 * sy));\n return {\n id: -9001,\n project_id: projectId,\n name: \"Demo stock ticker\",\n type: \"scroller\",\n visible: true,\n x,\n y,\n width,\n height,\n opacity: 100,\n start_time: \"00:00:00.000\",\n duration: \"24:00:00.000\",\n z_index: 120,\n scroller_config: {\n preset: \"equities_strip\",\n use_custom_text: true,\n custom_text: \"AAPL +0.84% \\u2022 MSFT +0.31% \\u2022 GOOGL \\u22120.22% \\u2022 AMZN +0.47% \\u2022 NVDA +1.12% \\u2022 META +0.19% \\u2022 BRK.B +0.11% \\u2022 JPM +0.55% \\u2022 V +0.28% \\u2022 UNH \\u22120.17% \\u2022 DJIA +0.41% \\u2022 S&P 500 +0.29% \\u2022 Nasdaq Composite +0.36% \\u2022 Russell 2000 +0.52% \\u2022 WTI crude $78.40 +0.6% \\u2022 Gold $2,348/oz \\u22120.2% \\u2022 10Y Treasury 4.28%\",\n direction: \"left\",\n scroll_speed: scrollSpeed,\n font_size: fontSize,\n font_weight: \"600\",\n text_color: \"#e2e8f0\",\n background_color: \"#0a0f18\",\n background_opacity: 92,\n border_radius: borderRadius,\n padding: Math.max(3, Math.round(6 * sy)),\n label: \"U.S. equities\",\n label_line2: \"\",\n label_color: \"#1e3a5f\",\n label_text_color: \"#f8fafc\",\n accent_color: \"#38bdf8\",\n show_accent_line: true,\n separator_char: \"\\u2022\",\n item_spacing: Math.max(28, Math.round(48 * sx))\n }\n };\n}\nfunction normalizeScrollerConfig(raw) {\n if (!raw || typeof raw !== \"object\") return void 0;\n const r = raw;\n const merged = { ...raw };\n if (merged.use_custom_text === void 0 && typeof r.useCustomText === \"boolean\") {\n merged.use_custom_text = r.useCustomText;\n }\n if ((merged.custom_text === void 0 || merged.custom_text === \"\") && typeof r.customText === \"string\") {\n merged.custom_text = r.customText;\n }\n if (!merged.rss_url && typeof r.rssUrl === \"string\") {\n merged.rss_url = r.rssUrl;\n }\n return merged;\n}\nfunction normalizeSwirlOverlay(raw) {\n const o = { ...raw };\n if (o.type === \"scroller\") {\n const sc = raw.scroller_config ?? raw.scrollerConfig;\n const normalized = normalizeScrollerConfig(sc);\n if (normalized) o.scroller_config = normalized;\n }\n return o;\n}\nasync function fetchProjectOverlays(projectId, apiBaseUrl = OVERLAY_API_BASE) {\n const base = apiBaseUrl.replace(/\\/$/, \"\");\n const response = await fetch(\n `${base}/adstorm/swirl/projects/${projectId}/overlays`\n );\n if (!response.ok) {\n throw new Error(\n `Failed to fetch overlays: ${response.status} ${response.statusText}`\n );\n }\n const data = await response.json();\n if (!Array.isArray(data)) return [];\n return data.map(\n (row) => normalizeSwirlOverlay(row)\n );\n}\nfunction resolveImageUrl(imageUrl, apiBaseUrl = OVERLAY_API_BASE) {\n if (!imageUrl) return \"\";\n if (imageUrl.startsWith(\"http://\") || imageUrl.startsWith(\"https://\")) {\n return imageUrl;\n }\n if (imageUrl.startsWith(\"/\")) {\n try {\n const url = new URL(apiBaseUrl);\n return `${url.origin}${imageUrl}`;\n } catch {\n return imageUrl;\n }\n }\n return `${apiBaseUrl}/${imageUrl}`;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n OVERLAY_API_BASE,\n SWIRL_HD_AUTHORING_HEIGHT,\n SWIRL_HD_AUTHORING_WIDTH,\n createDemoStockTickerOverlay,\n fetchProjectOverlays,\n inferSwirlOverlayCoordinateSpace,\n isOverlayActive,\n normalizeSwirlOverlay,\n overlayAuthoringDimensions,\n resolveImageUrl,\n scrollerLooksLikeMarketsStock,\n swirlProjectHasNabDemoMixedWithOther,\n timeStringToSeconds\n});\n","export const OVERLAY_API_BASE = \"https://adstorm.co/api-adstorm-dev\";\n\nexport interface OverlayCoordinateSpace {\n width: number;\n height: number;\n}\n\nexport interface SwirlScrollerConfig {\n rss_url?: string;\n update_interval?: number;\n scroll_speed?: number;\n direction?: string;\n font_size?: number;\n font_family?: string;\n font_weight?: string;\n text_color?: string;\n background_color?: string;\n background_opacity?: number;\n border_color?: string;\n border_width?: number;\n border_radius?: number;\n padding?: number;\n margin?: number;\n show_title?: boolean;\n show_description?: boolean;\n show_timestamp?: boolean;\n show_author?: boolean;\n show_category?: boolean;\n max_items?: number;\n item_spacing?: number;\n fade_in_out?: boolean;\n fade_distance?: number;\n auto_refresh?: boolean;\n use_custom_text?: boolean;\n custom_text?: string;\n label?: string;\n label_line2?: string;\n label_color?: string;\n label_text_color?: string;\n accent_color?: string;\n show_accent_line?: boolean;\n separator_char?: string;\n preset?: string;\n}\n\nexport type SwirlOverlayType =\n | \"image\"\n | \"text\"\n | \"scroller\"\n | \"shape\"\n | \"score_bug\"\n | \"lower_third\"\n | \"qr_code\"\n | \"coming_up_next\"\n | \"contextual_trigger\"\n | \"odds_betting\"\n | \"breaking_news\"\n | \"countdown\";\n\nexport interface SwirlOverlay {\n id: number;\n project_id: number;\n name: string;\n type: SwirlOverlayType | string;\n visible: boolean;\n x: number;\n y: number;\n width: number;\n height: number;\n opacity: number;\n start_time: string;\n duration: string;\n content?: string;\n image_url?: string;\n scroller_config?: SwirlScrollerConfig;\n z_index: number;\n created_at?: string;\n updated_at?: string;\n}\n\nexport function timeStringToSeconds(timeStr: string): number {\n if (!timeStr) return 0;\n\n const parts = timeStr.split(\":\");\n\n if (parts.length >= 3) {\n const hours = parseInt(parts[0] ?? \"0\", 10) || 0;\n const minutes = parseInt(parts[1] ?? \"0\", 10) || 0;\n const secStr = parts[2] ?? \"0\";\n const dotIdx = secStr.indexOf(\".\");\n const seconds =\n parseInt(dotIdx >= 0 ? secStr.substring(0, dotIdx) : secStr, 10) || 0;\n const msFrag = dotIdx >= 0 ? secStr.substring(dotIdx + 1) : \"\";\n const ms = msFrag ? parseInt(msFrag.padEnd(3, \"0\").substring(0, 3), 10) || 0 : 0;\n return hours * 3600 + minutes * 60 + seconds + ms / 1000;\n }\n\n if (parts.length === 2) {\n const minutes = parseInt(parts[0] ?? \"0\", 10) || 0;\n const secStr = parts[1] ?? \"0\";\n const dotIdx = secStr.indexOf(\".\");\n const seconds =\n parseInt(dotIdx >= 0 ? secStr.substring(0, dotIdx) : secStr, 10) || 0;\n const msFrag = dotIdx >= 0 ? secStr.substring(dotIdx + 1) : \"\";\n const ms = msFrag ? parseInt(msFrag.padEnd(3, \"0\").substring(0, 3), 10) || 0 : 0;\n return minutes * 60 + seconds + ms / 1000;\n }\n\n const num = parseFloat(timeStr);\n return isFinite(num) ? Math.max(0, num) : 0;\n}\n\nexport function isOverlayActive(\n overlay: SwirlOverlay,\n currentTime: number\n): boolean {\n if (!overlay.visible) return false;\n const startSec = timeStringToSeconds(overlay.start_time);\n const durationSec = timeStringToSeconds(overlay.duration);\n if (durationSec <= 0) return false;\n return currentTime >= startSec && currentTime < startSec + durationSec;\n}\n\nexport const SWIRL_HD_AUTHORING_WIDTH = 1920;\nexport const SWIRL_HD_AUTHORING_HEIGHT = 1080;\n\nconst NAB_DEMO_NAME_PREFIX = \"NAB Demo — \";\n\nexport function overlayAuthoringDimensions(\n overlay: SwirlOverlay,\n decodeWidth: number,\n decodeHeight: number\n): { width: number; height: number } {\n if (!decodeWidth || !decodeHeight) {\n return {\n width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,\n height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT,\n };\n }\n if (!overlay.visible) {\n return { width: decodeWidth, height: decodeHeight };\n }\n const extR = overlay.x + overlay.width;\n const extB = overlay.y + overlay.height;\n const EPS = 2;\n const exceedsDecode =\n extR > decodeWidth + EPS || extB > decodeHeight + EPS;\n const isNabDemo = overlay.name.startsWith(NAB_DEMO_NAME_PREFIX);\n const isSyntheticMarketsTicker =\n overlay.id === -9001 || overlay.name === \"Demo stock ticker\";\n\n if (exceedsDecode && (isNabDemo || isSyntheticMarketsTicker)) {\n return {\n width: SWIRL_HD_AUTHORING_WIDTH,\n height: SWIRL_HD_AUTHORING_HEIGHT,\n };\n }\n return { width: decodeWidth, height: decodeHeight };\n}\n\nfunction overlayExtents(overlays: SwirlOverlay[]): { maxR: number; maxB: number } {\n let maxR = 0;\n let maxB = 0;\n for (const o of overlays) {\n if (!o.visible) continue;\n maxR = Math.max(maxR, o.x + o.width);\n maxB = Math.max(maxB, o.y + o.height);\n }\n return { maxR, maxB };\n}\n\nexport function swirlProjectHasNabDemoMixedWithOther(overlays: SwirlOverlay[]): boolean {\n let hasNab = false;\n let hasOther = false;\n for (const o of overlays) {\n if (!o.visible) continue;\n if (o.name.startsWith(NAB_DEMO_NAME_PREFIX)) hasNab = true;\n else hasOther = true;\n }\n return hasNab && hasOther;\n}\n\nexport function inferSwirlOverlayCoordinateSpace(\n overlays: SwirlOverlay[],\n videoWidth: number,\n videoHeight: number\n): OverlayCoordinateSpace {\n if (!videoWidth || !videoHeight) {\n return {\n width: videoWidth || SWIRL_HD_AUTHORING_WIDTH,\n height: videoHeight || SWIRL_HD_AUTHORING_HEIGHT,\n };\n }\n if (!overlays.length) {\n return { width: videoWidth, height: videoHeight };\n }\n\n const { maxR, maxB } = overlayExtents(overlays);\n const EPS = 1;\n const exceedsDecode = maxR > videoWidth + EPS || maxB > videoHeight + EPS;\n const fitsHdCanvas =\n maxR <= SWIRL_HD_AUTHORING_WIDTH + EPS &&\n maxB <= SWIRL_HD_AUTHORING_HEIGHT + EPS;\n const mixed = swirlProjectHasNabDemoMixedWithOther(overlays);\n const decodeLargerThanHd =\n videoWidth > SWIRL_HD_AUTHORING_WIDTH + EPS ||\n videoHeight > SWIRL_HD_AUTHORING_HEIGHT + EPS;\n\n if (fitsHdCanvas && (decodeLargerThanHd || (exceedsDecode && !mixed))) {\n return {\n width: SWIRL_HD_AUTHORING_WIDTH,\n height: SWIRL_HD_AUTHORING_HEIGHT,\n };\n }\n\n return { width: videoWidth, height: videoHeight };\n}\n\nexport function scrollerLooksLikeMarketsStock(o: SwirlOverlay): boolean {\n if (o.type !== \"scroller\") return false;\n const cfg = o.scroller_config;\n const blob = `${o.name} ${cfg?.label ?? \"\"} ${cfg?.label_line2 ?? \"\"} ${cfg?.custom_text ?? \"\"} ${cfg?.preset ?? \"\"}`;\n return /\\b(MARKETS?|NYSE|NASDAQ|DJIA|\\bS&P\\b|STOCK|AAPL|TSLA|NVDA|EQUITIES)\\b/i.test(blob);\n}\n\nexport type DemoStockTickerOptions = {\n coordinateWidth?: number;\n coordinateHeight?: number;\n};\n\nexport function createDemoStockTickerOverlay(\n projectId: number,\n opts?: DemoStockTickerOptions\n): SwirlOverlay {\n const cw =\n opts?.coordinateWidth && opts.coordinateWidth > 0\n ? opts.coordinateWidth\n : SWIRL_HD_AUTHORING_WIDTH;\n const ch =\n opts?.coordinateHeight && opts.coordinateHeight > 0\n ? opts.coordinateHeight\n : SWIRL_HD_AUTHORING_HEIGHT;\n const sx = cw / SWIRL_HD_AUTHORING_WIDTH;\n const sy = ch / SWIRL_HD_AUTHORING_HEIGHT;\n\n const x = 36 * sx;\n const y = 1002 * sy;\n const width = 1848 * sx;\n const height = 66 * sy;\n\n const fontSize = Math.max(8, Math.round(13 * sy));\n const scrollSpeed = Math.max(8, Math.round(36 * sx));\n const borderRadius = Math.max(1, Math.round(4 * sy));\n\n return {\n id: -9001,\n project_id: projectId,\n name: \"Demo stock ticker\",\n type: \"scroller\",\n visible: true,\n x,\n y,\n width,\n height,\n opacity: 100,\n start_time: \"00:00:00.000\",\n duration: \"24:00:00.000\",\n z_index: 120,\n scroller_config: {\n preset: \"equities_strip\",\n use_custom_text: true,\n custom_text:\n \"AAPL +0.84% • MSFT +0.31% • GOOGL −0.22% • AMZN +0.47% • NVDA +1.12% • META +0.19% • BRK.B +0.11% • JPM +0.55% • V +0.28% • UNH −0.17% • DJIA +0.41% • S&P 500 +0.29% • Nasdaq Composite +0.36% • Russell 2000 +0.52% • WTI crude $78.40 +0.6% • Gold $2,348/oz −0.2% • 10Y Treasury 4.28%\",\n direction: \"left\",\n scroll_speed: scrollSpeed,\n font_size: fontSize,\n font_weight: \"600\",\n text_color: \"#e2e8f0\",\n background_color: \"#0a0f18\",\n background_opacity: 92,\n border_radius: borderRadius,\n padding: Math.max(3, Math.round(6 * sy)),\n label: \"U.S. equities\",\n label_line2: \"\",\n label_color: \"#1e3a5f\",\n label_text_color: \"#f8fafc\",\n accent_color: \"#38bdf8\",\n show_accent_line: true,\n separator_char: \"•\",\n item_spacing: Math.max(28, Math.round(48 * sx)),\n },\n };\n}\n\nfunction normalizeScrollerConfig(\n raw: SwirlScrollerConfig | Record<string, unknown> | undefined\n): SwirlScrollerConfig | undefined {\n if (!raw || typeof raw !== \"object\") return undefined;\n const r = raw as Record<string, unknown>;\n const merged: SwirlScrollerConfig = { ...(raw as SwirlScrollerConfig) };\n if (merged.use_custom_text === undefined && typeof r.useCustomText === \"boolean\") {\n merged.use_custom_text = r.useCustomText;\n }\n if ((merged.custom_text === undefined || merged.custom_text === \"\") && typeof r.customText === \"string\") {\n merged.custom_text = r.customText;\n }\n if (!merged.rss_url && typeof r.rssUrl === \"string\") {\n merged.rss_url = r.rssUrl;\n }\n return merged;\n}\n\nexport function normalizeSwirlOverlay(raw: SwirlOverlay & Record<string, unknown>): SwirlOverlay {\n const o = { ...raw };\n if (o.type === \"scroller\") {\n const sc = raw.scroller_config ?? (raw as Record<string, unknown>).scrollerConfig;\n const normalized = normalizeScrollerConfig(sc as SwirlScrollerConfig);\n if (normalized) o.scroller_config = normalized;\n }\n return o;\n}\n\nexport async function fetchProjectOverlays(\n projectId: number,\n apiBaseUrl: string = OVERLAY_API_BASE\n): Promise<SwirlOverlay[]> {\n const base = apiBaseUrl.replace(/\\/$/, \"\");\n const response = await fetch(\n `${base}/adstorm/swirl/projects/${projectId}/overlays`\n );\n if (!response.ok) {\n throw new Error(\n `Failed to fetch overlays: ${response.status} ${response.statusText}`\n );\n }\n const data = await response.json();\n if (!Array.isArray(data)) return [];\n return data.map((row: SwirlOverlay & Record<string, unknown>) =>\n normalizeSwirlOverlay(row)\n );\n}\n\nexport function resolveImageUrl(\n imageUrl: string,\n apiBaseUrl: string = OVERLAY_API_BASE\n): string {\n if (!imageUrl) return \"\";\n if (imageUrl.startsWith(\"http://\") || imageUrl.startsWith(\"https://\")) {\n return imageUrl;\n }\n if (imageUrl.startsWith(\"/\")) {\n try {\n const url = new URL(apiBaseUrl);\n return `${url.origin}${imageUrl}`;\n } catch {\n return imageUrl;\n }\n }\n return `${apiBaseUrl}/${imageUrl}`;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/home/ubuntu24-new/Dev/stormcloud-vp/lib/utils/overlays.cjs"],"names":["__hasOwnProp","__defProp","Object","defineProperty","__getOwnPropNames","getOwnPropertyNames","prototype","hasOwnProperty","__export","target","all","name","get","__copyProps","to","from","except","desc","key","call","enumerable","__getOwnPropDesc"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAIIA;;;;;;;;;;;;;;wCAHAC,SAAYC,OAAOC,aAAc,OAAdA,EAAc,OAAA,MAAA,EAAA,KAAA,OAAA,SAAA,UAAA;oBAErC,EAAIC,oBAAoBF,OAAOG,mBAAmB;oBAC9CL;;wBAAeE,KAAOI,IAAAA,IAAAA,CAAS,CAACC,cAAc;;;oBAA9CP,OAAAA,IAAeE;oBACnB,EAAIM,EAAAA,CAAAA,MAAAA,EAAW,KAAA,CAAA,OAAA,KAACC,QAAQC;;;;sBACtB,IAAK;;wBAAA,GAAIC,EAAAA,GAAAA,GAAQD,IACfT,MAA0BW,IAAhBH,QAAQE,MAAM;mCAAOD,GAAG,CAACC,KAAK,aAAA;;;;;QAAmB;;AAC/D,SAAA,gBAAA,QAAA;QAAA,aAAA,iEAAA;IACA,EAAIE,EAAAA,CAAAA,UAAAA,CAAc,MAAA,eAACC,IAAIC,MAAMC,QAAQC;MACnC,EAAA,EAAIF,OAAAA,CAAQ,CAAA,OAAOA,CAAAA,CAAAA,cAAAA,SAAAA,UAAAA,CAAAA,CAAP,SAAOA,GAAAA,EAAG,MAAM,YAAY,OAAOA,SAAS,YAAY;gBAC7D,kCAAA,2BAAA;;;oBAAA,IAAIG,MAAJ;oBACH,EAAA,EAAI,CAAClB,CAAAA,IAAAA,QAAamB,IAAI,CAACL,IAAII,QAAQA,QAAQF,QACzCf,UAAUa,IAAII,KAAK;sBAAO,WAALN,KAAK,CAAA,EAALA,OAAK,KAALA;4CAAWG,IAAI,CAACG,IAAI;;wBAAEE,YAAY,CAAEH,CAAAA,OAAOI,iBAAiBN,MAAMG,IAAG,KAAMD,KAAKG,UAAU;kBAAC;;YAFpH,QAAK,YAAWhB,kBAAkBW,0BAA7B,SAAA,6BAAA,QAAA,yBAAA;;YAAA,CAAA,OAAA,GAAA;gCAAA;;;6CAAA,6BAAA;wDAAA;;;kDAAA;6CAAA","sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/utils/overlays.ts\nvar overlays_exports = {};\n__export(overlays_exports, {\n OVERLAY_API_BASE: () => OVERLAY_API_BASE,\n SWIRL_HD_AUTHORING_HEIGHT: () => SWIRL_HD_AUTHORING_HEIGHT,\n SWIRL_HD_AUTHORING_WIDTH: () => SWIRL_HD_AUTHORING_WIDTH,\n fetchProjectOverlays: () => fetchProjectOverlays,\n inferSwirlOverlayCoordinateSpace: () => inferSwirlOverlayCoordinateSpace,\n isOverlayActive: () => isOverlayActive,\n normalizeSwirlOverlay: () => normalizeSwirlOverlay,\n overlayAuthoringDimensions: () => overlayAuthoringDimensions,\n resolveImageUrl: () => resolveImageUrl,\n swirlProjectHasNabDemoMixedWithOther: () => swirlProjectHasNabDemoMixedWithOther,\n timeStringToSeconds: () => timeStringToSeconds\n});\nmodule.exports = __toCommonJS(overlays_exports);\nvar OVERLAY_API_BASE = \"https://adstorm.co/api-adstorm-dev\";\nfunction timeStringToSeconds(timeStr) {\n if (!timeStr) return 0;\n const parts = timeStr.split(\":\");\n if (parts.length >= 3) {\n const hours = parseInt(parts[0] ?? \"0\", 10) || 0;\n const minutes = parseInt(parts[1] ?? \"0\", 10) || 0;\n const secStr = parts[2] ?? \"0\";\n const dotIdx = secStr.indexOf(\".\");\n const seconds = parseInt(dotIdx >= 0 ? secStr.substring(0, dotIdx) : secStr, 10) || 0;\n const msFrag = dotIdx >= 0 ? secStr.substring(dotIdx + 1) : \"\";\n const ms = msFrag ? parseInt(msFrag.padEnd(3, \"0\").substring(0, 3), 10) || 0 : 0;\n return hours * 3600 + minutes * 60 + seconds + ms / 1e3;\n }\n if (parts.length === 2) {\n const minutes = parseInt(parts[0] ?? \"0\", 10) || 0;\n const secStr = parts[1] ?? \"0\";\n const dotIdx = secStr.indexOf(\".\");\n const seconds = parseInt(dotIdx >= 0 ? secStr.substring(0, dotIdx) : secStr, 10) || 0;\n const msFrag = dotIdx >= 0 ? secStr.substring(dotIdx + 1) : \"\";\n const ms = msFrag ? parseInt(msFrag.padEnd(3, \"0\").substring(0, 3), 10) || 0 : 0;\n return minutes * 60 + seconds + ms / 1e3;\n }\n const num = parseFloat(timeStr);\n return isFinite(num) ? Math.max(0, num) : 0;\n}\nfunction isOverlayActive(overlay, currentTime) {\n if (!overlay.visible) return false;\n const startSec = timeStringToSeconds(overlay.start_time);\n const durationSec = timeStringToSeconds(overlay.duration);\n if (durationSec <= 0) return false;\n return currentTime >= startSec && currentTime < startSec + durationSec;\n}\nvar SWIRL_HD_AUTHORING_WIDTH = 1920;\nvar SWIRL_HD_AUTHORING_HEIGHT = 1080;\nvar NAB_DEMO_NAME_PREFIX = \"NAB Demo \\u2014 \";\nfunction overlayAuthoringDimensions(overlay, decodeWidth, decodeHeight) {\n if (overlay.name.startsWith(NAB_DEMO_NAME_PREFIX)) {\n return {\n width: SWIRL_HD_AUTHORING_WIDTH,\n height: SWIRL_HD_AUTHORING_HEIGHT\n };\n }\n if (!decodeWidth || !decodeHeight) {\n return {\n width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,\n height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT\n };\n }\n return { width: decodeWidth, height: decodeHeight };\n}\nfunction overlayExtents(overlays) {\n let maxR = 0;\n let maxB = 0;\n for (const o of overlays) {\n if (!o.visible) continue;\n maxR = Math.max(maxR, o.x + o.width);\n maxB = Math.max(maxB, o.y + o.height);\n }\n return { maxR, maxB };\n}\nfunction swirlProjectHasNabDemoMixedWithOther(overlays) {\n let hasNab = false;\n let hasOther = false;\n for (const o of overlays) {\n if (!o.visible) continue;\n if (o.name.startsWith(NAB_DEMO_NAME_PREFIX)) hasNab = true;\n else hasOther = true;\n }\n return hasNab && hasOther;\n}\nfunction inferSwirlOverlayCoordinateSpace(overlays, videoWidth, videoHeight) {\n if (!videoWidth || !videoHeight) {\n return {\n width: videoWidth || SWIRL_HD_AUTHORING_WIDTH,\n height: videoHeight || SWIRL_HD_AUTHORING_HEIGHT\n };\n }\n if (!overlays.length) {\n return { width: videoWidth, height: videoHeight };\n }\n const { maxR, maxB } = overlayExtents(overlays);\n const EPS = 1;\n const exceedsDecode = maxR > videoWidth + EPS || maxB > videoHeight + EPS;\n const fitsHdCanvas = maxR <= SWIRL_HD_AUTHORING_WIDTH + EPS && maxB <= SWIRL_HD_AUTHORING_HEIGHT + EPS;\n const mixed = swirlProjectHasNabDemoMixedWithOther(overlays);\n const decodeLargerThanHd = videoWidth > SWIRL_HD_AUTHORING_WIDTH + EPS || videoHeight > SWIRL_HD_AUTHORING_HEIGHT + EPS;\n if (fitsHdCanvas && (decodeLargerThanHd || exceedsDecode && !mixed)) {\n return {\n width: SWIRL_HD_AUTHORING_WIDTH,\n height: SWIRL_HD_AUTHORING_HEIGHT\n };\n }\n return { width: videoWidth, height: videoHeight };\n}\nfunction normalizeScrollerConfig(raw) {\n if (!raw || typeof raw !== \"object\") return void 0;\n const r = raw;\n const merged = { ...raw };\n if (merged.use_custom_text === void 0 && typeof r.useCustomText === \"boolean\") {\n merged.use_custom_text = r.useCustomText;\n }\n if ((merged.custom_text === void 0 || merged.custom_text === \"\") && typeof r.customText === \"string\") {\n merged.custom_text = r.customText;\n }\n if (!merged.rss_url && typeof r.rssUrl === \"string\") {\n merged.rss_url = r.rssUrl;\n }\n return merged;\n}\nfunction normalizeSwirlOverlay(raw) {\n const o = { ...raw };\n if (o.type === \"scroller\") {\n const sc = raw.scroller_config ?? raw.scrollerConfig;\n const normalized = normalizeScrollerConfig(sc);\n if (normalized) o.scroller_config = normalized;\n }\n return o;\n}\nasync function fetchProjectOverlays(projectId, apiBaseUrl = OVERLAY_API_BASE) {\n const base = apiBaseUrl.replace(/\\/$/, \"\");\n const response = await fetch(\n `${base}/adstorm/swirl/projects/${projectId}/overlays`\n );\n if (!response.ok) {\n throw new Error(\n `Failed to fetch overlays: ${response.status} ${response.statusText}`\n );\n }\n const data = await response.json();\n if (!Array.isArray(data)) return [];\n return data.map(\n (row) => normalizeSwirlOverlay(row)\n );\n}\nfunction resolveImageUrl(imageUrl, apiBaseUrl = OVERLAY_API_BASE) {\n if (!imageUrl) return \"\";\n if (imageUrl.startsWith(\"http://\") || imageUrl.startsWith(\"https://\")) {\n return imageUrl;\n }\n if (imageUrl.startsWith(\"/\")) {\n try {\n const url = new URL(apiBaseUrl);\n return `${url.origin}${imageUrl}`;\n } catch {\n return imageUrl;\n }\n }\n return `${apiBaseUrl}/${imageUrl}`;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n OVERLAY_API_BASE,\n SWIRL_HD_AUTHORING_HEIGHT,\n SWIRL_HD_AUTHORING_WIDTH,\n fetchProjectOverlays,\n inferSwirlOverlayCoordinateSpace,\n isOverlayActive,\n normalizeSwirlOverlay,\n overlayAuthoringDimensions,\n resolveImageUrl,\n swirlProjectHasNabDemoMixedWithOther,\n timeStringToSeconds\n});\n"]}
|
package/lib/utils/overlays.d.cts
CHANGED
|
@@ -71,14 +71,8 @@ declare function overlayAuthoringDimensions(overlay: SwirlOverlay, decodeWidth:
|
|
|
71
71
|
};
|
|
72
72
|
declare function swirlProjectHasNabDemoMixedWithOther(overlays: SwirlOverlay[]): boolean;
|
|
73
73
|
declare function inferSwirlOverlayCoordinateSpace(overlays: SwirlOverlay[], videoWidth: number, videoHeight: number): OverlayCoordinateSpace;
|
|
74
|
-
declare function scrollerLooksLikeMarketsStock(o: SwirlOverlay): boolean;
|
|
75
|
-
type DemoStockTickerOptions = {
|
|
76
|
-
coordinateWidth?: number;
|
|
77
|
-
coordinateHeight?: number;
|
|
78
|
-
};
|
|
79
|
-
declare function createDemoStockTickerOverlay(projectId: number, opts?: DemoStockTickerOptions): SwirlOverlay;
|
|
80
74
|
declare function normalizeSwirlOverlay(raw: SwirlOverlay & Record<string, unknown>): SwirlOverlay;
|
|
81
75
|
declare function fetchProjectOverlays(projectId: number, apiBaseUrl?: string): Promise<SwirlOverlay[]>;
|
|
82
76
|
declare function resolveImageUrl(imageUrl: string, apiBaseUrl?: string): string;
|
|
83
77
|
|
|
84
|
-
export {
|
|
78
|
+
export { OVERLAY_API_BASE, type OverlayCoordinateSpace, SWIRL_HD_AUTHORING_HEIGHT, SWIRL_HD_AUTHORING_WIDTH, type SwirlOverlay, type SwirlOverlayType, type SwirlScrollerConfig, fetchProjectOverlays, inferSwirlOverlayCoordinateSpace, isOverlayActive, normalizeSwirlOverlay, overlayAuthoringDimensions, resolveImageUrl, swirlProjectHasNabDemoMixedWithOther, timeStringToSeconds };
|