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.
@@ -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 (!decodeWidth || !decodeHeight) {
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: decodeWidth,
300
- height: decodeHeight
287
+ width: SWIRL_HD_AUTHORING_WIDTH,
288
+ height: SWIRL_HD_AUTHORING_HEIGHT
301
289
  };
302
290
  }
303
- var extR = overlay.x + overlay.width;
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"]}
@@ -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 { type DemoStockTickerOptions, OVERLAY_API_BASE, type OverlayCoordinateSpace, SWIRL_HD_AUTHORING_HEIGHT, SWIRL_HD_AUTHORING_WIDTH, type SwirlOverlay, type SwirlOverlayType, type SwirlScrollerConfig, createDemoStockTickerOverlay, fetchProjectOverlays, inferSwirlOverlayCoordinateSpace, isOverlayActive, normalizeSwirlOverlay, overlayAuthoringDimensions, resolveImageUrl, scrollerLooksLikeMarketsStock, swirlProjectHasNabDemoMixedWithOther, timeStringToSeconds };
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 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stormcloud-video-player",
3
- "version": "0.7.41",
3
+ "version": "0.7.43",
4
4
  "main": "lib/index.js",
5
5
  "typings": "lib/index.d.ts",
6
6
  "scripts": {