stormcloud-video-player 0.7.37 → 0.7.39

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.
@@ -9,6 +9,11 @@ type StormcloudVideoPlayerProps = Omit<StormcloudVideoPlayerConfig, "videoElemen
9
9
  licenseKey?: string;
10
10
  swirlProjectId?: number;
11
11
  swirlShowcaseDemo?: boolean;
12
+ swirlOverlayApiBaseUrl?: string;
13
+ swirlOverlayCoordinateSpace?: {
14
+ width: number;
15
+ height: number;
16
+ } | null;
12
17
  adcisionChannelId?: number;
13
18
  disableOverlays?: boolean;
14
19
  showAdsControl?: boolean;
@@ -28,6 +28,34 @@ function _async_to_generator(fn) {
28
28
  });
29
29
  };
30
30
  }
31
+ function _define_property(obj, key, value) {
32
+ if (key in obj) {
33
+ Object.defineProperty(obj, key, {
34
+ value: value,
35
+ enumerable: true,
36
+ configurable: true,
37
+ writable: true
38
+ });
39
+ } else {
40
+ obj[key] = value;
41
+ }
42
+ return obj;
43
+ }
44
+ function _object_spread(target) {
45
+ for(var i = 1; i < arguments.length; i++){
46
+ var source = arguments[i] != null ? arguments[i] : {};
47
+ var ownKeys = Object.keys(source);
48
+ if (typeof Object.getOwnPropertySymbols === "function") {
49
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
50
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
51
+ }));
52
+ }
53
+ ownKeys.forEach(function(key) {
54
+ _define_property(target, key, source[key]);
55
+ });
56
+ }
57
+ return target;
58
+ }
31
59
  function _type_of(obj) {
32
60
  "@swc/helpers - typeof";
33
61
  return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
@@ -180,6 +208,9 @@ var __toCommonJS = function __toCommonJS(mod) {
180
208
  // src/utils/overlays.ts
181
209
  var overlays_exports = {};
182
210
  __export(overlays_exports, {
211
+ OVERLAY_API_BASE: function OVERLAY_API_BASE1() {
212
+ return OVERLAY_API_BASE;
213
+ },
183
214
  createDemoStockTickerOverlay: function createDemoStockTickerOverlay1() {
184
215
  return createDemoStockTickerOverlay;
185
216
  },
@@ -189,9 +220,15 @@ __export(overlays_exports, {
189
220
  isOverlayActive: function isOverlayActive1() {
190
221
  return isOverlayActive;
191
222
  },
223
+ normalizeSwirlOverlay: function normalizeSwirlOverlay1() {
224
+ return normalizeSwirlOverlay;
225
+ },
192
226
  resolveImageUrl: function resolveImageUrl1() {
193
227
  return resolveImageUrl;
194
228
  },
229
+ scrollerLooksLikeMarketsStock: function scrollerLooksLikeMarketsStock1() {
230
+ return scrollerLooksLikeMarketsStock;
231
+ },
195
232
  timeStringToSeconds: function timeStringToSeconds1() {
196
233
  return timeStringToSeconds;
197
234
  }
@@ -232,7 +269,15 @@ function isOverlayActive(overlay, currentTime) {
232
269
  if (durationSec <= 0) return false;
233
270
  return currentTime >= startSec && currentTime < startSec + durationSec;
234
271
  }
235
- function createDemoStockTickerOverlay(projectId) {
272
+ function scrollerLooksLikeMarketsStock(o) {
273
+ var _ref, _ref1, _ref2, _ref3;
274
+ if (o.type !== "scroller") return false;
275
+ var cfg = o.scroller_config;
276
+ 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 : "");
277
+ return /\b(MARKETS?|NYSE|NASDAQ|DJIA|\bS&P\b|STOCK|AAPL|TSLA|NVDA|EQUITIES)\b/i.test(blob);
278
+ }
279
+ function createDemoStockTickerOverlay(projectId, opts) {
280
+ var stack = (opts === null || opts === void 0 ? void 0 : opts.stackAboveNews) === true;
236
281
  return {
237
282
  id: -9001,
238
283
  project_id: projectId,
@@ -240,13 +285,13 @@ function createDemoStockTickerOverlay(projectId) {
240
285
  type: "scroller",
241
286
  visible: true,
242
287
  x: 144,
243
- y: 950,
288
+ y: stack ? 818 : 950,
244
289
  width: 1632,
245
- height: 97,
290
+ height: stack ? 78 : 97,
246
291
  opacity: 100,
247
292
  start_time: "00:00:00.000",
248
293
  duration: "24:00:00.000",
249
- z_index: 120,
294
+ z_index: stack ? 125 : 120,
250
295
  scroller_config: {
251
296
  use_custom_text: true,
252
297
  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%",
@@ -268,17 +313,43 @@ function createDemoStockTickerOverlay(projectId) {
268
313
  }
269
314
  };
270
315
  }
316
+ function normalizeScrollerConfig(raw) {
317
+ if (!raw || (typeof raw === "undefined" ? "undefined" : _type_of(raw)) !== "object") return void 0;
318
+ var r = raw;
319
+ var merged = _object_spread({}, raw);
320
+ if (merged.use_custom_text === void 0 && typeof r.useCustomText === "boolean") {
321
+ merged.use_custom_text = r.useCustomText;
322
+ }
323
+ if ((merged.custom_text === void 0 || merged.custom_text === "") && typeof r.customText === "string") {
324
+ merged.custom_text = r.customText;
325
+ }
326
+ if (!merged.rss_url && typeof r.rssUrl === "string") {
327
+ merged.rss_url = r.rssUrl;
328
+ }
329
+ return merged;
330
+ }
331
+ function normalizeSwirlOverlay(raw) {
332
+ var o = _object_spread({}, raw);
333
+ if (o.type === "scroller") {
334
+ var _raw_scroller_config;
335
+ var sc = (_raw_scroller_config = raw.scroller_config) !== null && _raw_scroller_config !== void 0 ? _raw_scroller_config : raw.scrollerConfig;
336
+ var normalized = normalizeScrollerConfig(sc);
337
+ if (normalized) o.scroller_config = normalized;
338
+ }
339
+ return o;
340
+ }
271
341
  function fetchProjectOverlays(_0) {
272
342
  return _async_to_generator(function(projectId) {
273
- var apiBaseUrl, response, data;
343
+ var apiBaseUrl, base, response, data;
274
344
  var _arguments = arguments;
275
345
  return _ts_generator(this, function(_state) {
276
346
  switch(_state.label){
277
347
  case 0:
278
348
  apiBaseUrl = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : OVERLAY_API_BASE;
349
+ base = apiBaseUrl.replace(/\/$/, "");
279
350
  return [
280
351
  4,
281
- fetch("".concat(apiBaseUrl, "/adstorm/swirl/projects/").concat(projectId, "/overlays"))
352
+ fetch("".concat(base, "/adstorm/swirl/projects/").concat(projectId, "/overlays"))
282
353
  ];
283
354
  case 1:
284
355
  response = _state.sent();
@@ -291,9 +362,15 @@ function fetchProjectOverlays(_0) {
291
362
  ];
292
363
  case 2:
293
364
  data = _state.sent();
365
+ if (!Array.isArray(data)) return [
366
+ 2,
367
+ []
368
+ ];
294
369
  return [
295
370
  2,
296
- Array.isArray(data) ? data : []
371
+ data.map(function(row) {
372
+ return normalizeSwirlOverlay(row);
373
+ })
297
374
  ];
298
375
  }
299
376
  });
@@ -317,10 +394,13 @@ function resolveImageUrl(imageUrl) {
317
394
  }
318
395
  // Annotate the CommonJS export names for ESM import in node:
319
396
  0 && (module.exports = {
397
+ OVERLAY_API_BASE: OVERLAY_API_BASE,
320
398
  createDemoStockTickerOverlay: createDemoStockTickerOverlay,
321
399
  fetchProjectOverlays: fetchProjectOverlays,
322
400
  isOverlayActive: isOverlayActive,
401
+ normalizeSwirlOverlay: normalizeSwirlOverlay,
323
402
  resolveImageUrl: resolveImageUrl,
403
+ scrollerLooksLikeMarketsStock: scrollerLooksLikeMarketsStock,
324
404
  timeStringToSeconds: timeStringToSeconds
325
405
  });
326
406
  //# sourceMappingURL=overlays.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/ubuntu24-new/Dev/stormcloud-vp/lib/utils/overlays.cjs"],"names":[],"mappings":"AAAA","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 createDemoStockTickerOverlay: () => createDemoStockTickerOverlay,\n fetchProjectOverlays: () => fetchProjectOverlays,\n isOverlayActive: () => isOverlayActive,\n resolveImageUrl: () => resolveImageUrl,\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}\nfunction createDemoStockTickerOverlay(projectId) {\n return {\n id: -9001,\n project_id: projectId,\n name: \"Demo stock ticker\",\n type: \"scroller\",\n visible: true,\n x: 144,\n y: 950,\n width: 1632,\n height: 97,\n opacity: 100,\n start_time: \"00:00:00.000\",\n duration: \"24:00:00.000\",\n z_index: 120,\n scroller_config: {\n use_custom_text: true,\n 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%\",\n direction: \"left\",\n scroll_speed: 42,\n font_size: 15,\n font_weight: \"700\",\n text_color: \"#f8fafc\",\n background_color: \"#0f172a\",\n background_opacity: 92,\n border_radius: 4,\n label: \"MARKETS\",\n label_line2: \"LIVE\",\n label_color: \"#0ea5e9\",\n label_text_color: \"#ffffff\",\n accent_color: \"#38bdf8\",\n show_accent_line: true,\n separator_char: \"\\u2022\"\n }\n };\n}\nasync function fetchProjectOverlays(projectId, apiBaseUrl = OVERLAY_API_BASE) {\n const response = await fetch(\n `${apiBaseUrl}/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 return Array.isArray(data) ? data : [];\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 createDemoStockTickerOverlay,\n fetchProjectOverlays,\n isOverlayActive,\n resolveImageUrl,\n timeStringToSeconds\n});\n"]}
1
+ {"version":3,"sources":["/home/ubuntu24-new/Dev/stormcloud-vp/lib/utils/overlays.cjs"],"names":["__defProp","defineProperty","Object","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IACA,EAAIA,KAAAA,GAAmBC,OAAnBD,IAAYE,QAAOD,KAAAA,EAAc,KAAdA;AACvB,IAAIE,mBAAmBD,OAAOE,wBAAwB;AACtD,IAAIC,oBAAoBH,OAAOI,mBAAmB,WAAA;AAClD,IAAIC,CAAAA,CAAAA,OAAAA,MAAeL,CAAAA,GAAAA,GAAOM,SAAS,CAACC,cAAc;IAClD,kBAAA,EAAIC,WAAW,kBAACC,QAAQC;oCACtB,IAAK,IAAIC,QAAQD,IACfZ,UAAUW,QAAQE,MAAM;gCAAEC,KAAKF,GAAG,CAACC,KAAK;2BAAEE,YAAY;6BAAK;IAC/D,iBAAA;IACA,+BAAA,EAAIC,cAAc,qBAACC,IAAIC,MAAMC,QAAQC;2BACnC,IAAIF,QAAQ,CAAA,OAAOA,qCAAP,SAAOA,KAAG,MAAM,YAAY,OAAOA,SAAS,YAAY;aAC7D,kCAAA,2BAAA","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 createDemoStockTickerOverlay: () => createDemoStockTickerOverlay,\n fetchProjectOverlays: () => fetchProjectOverlays,\n isOverlayActive: () => isOverlayActive,\n normalizeSwirlOverlay: () => normalizeSwirlOverlay,\n resolveImageUrl: () => resolveImageUrl,\n scrollerLooksLikeMarketsStock: () => scrollerLooksLikeMarketsStock,\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}\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 stack = opts?.stackAboveNews === true;\n return {\n id: -9001,\n project_id: projectId,\n name: \"Demo stock ticker\",\n type: \"scroller\",\n visible: true,\n x: 144,\n y: stack ? 818 : 950,\n width: 1632,\n height: stack ? 78 : 97,\n opacity: 100,\n start_time: \"00:00:00.000\",\n duration: \"24:00:00.000\",\n z_index: stack ? 125 : 120,\n scroller_config: {\n use_custom_text: true,\n 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%\",\n direction: \"left\",\n scroll_speed: 42,\n font_size: 15,\n font_weight: \"700\",\n text_color: \"#f8fafc\",\n background_color: \"#0f172a\",\n background_opacity: 92,\n border_radius: 4,\n label: \"MARKETS\",\n label_line2: \"LIVE\",\n label_color: \"#0ea5e9\",\n label_text_color: \"#ffffff\",\n accent_color: \"#38bdf8\",\n show_accent_line: true,\n separator_char: \"\\u2022\"\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 createDemoStockTickerOverlay,\n fetchProjectOverlays,\n isOverlayActive,\n normalizeSwirlOverlay,\n resolveImageUrl,\n scrollerLooksLikeMarketsStock,\n timeStringToSeconds\n});\n"]}
@@ -1,3 +1,4 @@
1
+ declare const OVERLAY_API_BASE = "https://adstorm.co/api-adstorm-dev";
1
2
  interface OverlayCoordinateSpace {
2
3
  width: number;
3
4
  height: number;
@@ -62,8 +63,13 @@ interface SwirlOverlay {
62
63
  }
63
64
  declare function timeStringToSeconds(timeStr: string): number;
64
65
  declare function isOverlayActive(overlay: SwirlOverlay, currentTime: number): boolean;
65
- declare function createDemoStockTickerOverlay(projectId: number): SwirlOverlay;
66
+ declare function scrollerLooksLikeMarketsStock(o: SwirlOverlay): boolean;
67
+ type DemoStockTickerOptions = {
68
+ stackAboveNews?: boolean;
69
+ };
70
+ declare function createDemoStockTickerOverlay(projectId: number, opts?: DemoStockTickerOptions): SwirlOverlay;
71
+ declare function normalizeSwirlOverlay(raw: SwirlOverlay & Record<string, unknown>): SwirlOverlay;
66
72
  declare function fetchProjectOverlays(projectId: number, apiBaseUrl?: string): Promise<SwirlOverlay[]>;
67
73
  declare function resolveImageUrl(imageUrl: string, apiBaseUrl?: string): string;
68
74
 
69
- export { type OverlayCoordinateSpace, type SwirlOverlay, type SwirlOverlayType, type SwirlScrollerConfig, createDemoStockTickerOverlay, fetchProjectOverlays, isOverlayActive, resolveImageUrl, timeStringToSeconds };
75
+ export { type DemoStockTickerOptions, OVERLAY_API_BASE, type OverlayCoordinateSpace, type SwirlOverlay, type SwirlOverlayType, type SwirlScrollerConfig, createDemoStockTickerOverlay, fetchProjectOverlays, isOverlayActive, normalizeSwirlOverlay, resolveImageUrl, scrollerLooksLikeMarketsStock, timeStringToSeconds };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stormcloud-video-player",
3
- "version": "0.7.37",
3
+ "version": "0.7.39",
4
4
  "main": "lib/index.js",
5
5
  "typings": "lib/index.d.ts",
6
6
  "scripts": {