@arcware-cloud/pixelstreaming-websdk 1.3.11 → 1.3.13

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/index.esm.js CHANGED
@@ -23356,11 +23356,13 @@ __webpack_require__.r(__webpack_exports__);
23356
23356
  /* harmony export */ "ArcwareConfig": () => (/* binding */ ArcwareConfig),
23357
23357
  /* harmony export */ "DefaultUrl": () => (/* binding */ DefaultUrl)
23358
23358
  /* harmony export */ });
23359
- /* harmony import */ var zod__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1604);
23360
- /* harmony import */ var _epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(7800);
23361
- /* harmony import */ var _epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7463);
23359
+ /* harmony import */ var zod__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1604);
23360
+ /* harmony import */ var _epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7800);
23361
+ /* harmony import */ var _epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7463);
23362
23362
  /* harmony import */ var _domain_Session__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2469);
23363
23363
  /* harmony import */ var _domain_ArcwareSettingsSchema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5602);
23364
+ /* harmony import */ var _features_whiteLabelling__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3545);
23365
+
23364
23366
 
23365
23367
 
23366
23368
 
@@ -23379,8 +23381,8 @@ Logger.Error = (message: string) => {
23379
23381
  if (message?.startsWith("unhandled Stat Type")) return;
23380
23382
  console.error(message);
23381
23383
  };*/
23382
- _epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBPACK_IMPORTED_MODULE_2__.Logger.InitLogging(2, false);
23383
- class ArcwareConfig extends _epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBPACK_IMPORTED_MODULE_3__.Config {
23384
+ _epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBPACK_IMPORTED_MODULE_3__.Logger.InitLogging(2, false);
23385
+ class ArcwareConfig extends _epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBPACK_IMPORTED_MODULE_4__.Config {
23384
23386
  /**
23385
23387
  * Can be used to fetch projectId and shareId from the current url.
23386
23388
  * Example:
@@ -23399,15 +23401,15 @@ class ArcwareConfig extends _epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBP
23399
23401
  static PickIdsOfUrl() {
23400
23402
  const { pathname } = new URL(window.location.href);
23401
23403
  const sections = pathname.split("/");
23402
- const projectId = sections.find((section) => zod__WEBPACK_IMPORTED_MODULE_4__.z.string().uuid().safeParse(section).success);
23403
- const shareId = sections.find((section) => zod__WEBPACK_IMPORTED_MODULE_4__.z.string().startsWith("share-").safeParse(section).success);
23404
+ const projectId = sections.find((section) => zod__WEBPACK_IMPORTED_MODULE_5__.z.string().uuid().safeParse(section).success);
23405
+ const shareId = sections.find((section) => zod__WEBPACK_IMPORTED_MODULE_5__.z.string().startsWith("share-").safeParse(section).success);
23404
23406
  return {
23405
23407
  projectId,
23406
23408
  shareId
23407
23409
  };
23408
23410
  }
23409
23411
  constructor(config) {
23410
- var _a, _b;
23412
+ var _a, _b, _c;
23411
23413
  const dfToken = new URL(window.location.href).search
23412
23414
  .slice(1)
23413
23415
  .split("&")
@@ -23428,15 +23430,25 @@ class ArcwareConfig extends _epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBP
23428
23430
  if (!config.initialSettings.ss)
23429
23431
  config.initialSettings.ss = DefaultUrl;
23430
23432
  super(config);
23431
- this.VERSION = "1.3.11";
23433
+ this.VERSION = "1.3.13";
23432
23434
  this.settings = settings;
23433
23435
  this.session = new _domain_Session__WEBPACK_IMPORTED_MODULE_0__.Session();
23434
23436
  this._initialSettings = config.initialSettings;
23435
23437
  // Setup arcware default settings.
23436
- this.setFlagEnabled(_epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBPACK_IMPORTED_MODULE_3__.Flags.AFKDetection, true);
23438
+ this.setFlagEnabled(_epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBPACK_IMPORTED_MODULE_4__.Flags.AFKDetection, true);
23437
23439
  // IMPORTANT NOTE: The feature BrowserSendOffer is no longer supported in PSInfra 5.5.
23438
23440
  // The offer is now expected to come from UE. Ensure that your signalling server supports this behaviour.
23439
23441
  //this.setFlagEnabled(Flags.BrowserSendOffer, true);
23442
+ if (this.useUrlParams) {
23443
+ // Get the query string from URL
23444
+ const qs = new URLSearchParams(window.location.search);
23445
+ // Retrieve image loading from there
23446
+ const wlParsed = this.useUrlParams ? (0,_features_whiteLabelling__WEBPACK_IMPORTED_MODULE_2__.readWhiteLabelFromQuery)(qs) : undefined; // respect useUrlParams
23447
+ if (wlParsed) {
23448
+ this.settings.whiteLabelling = Object.assign(Object.assign({}, ((_c = this.settings.whiteLabelling) !== null && _c !== void 0 ? _c : {})), wlParsed);
23449
+ }
23450
+ this.settings.infoButton = qs.has("i") || qs.has("info");
23451
+ }
23440
23452
  }
23441
23453
  /** Setup connection string. */
23442
23454
  get urlFlags() {
@@ -23489,7 +23501,7 @@ class ArcwareConfig extends _epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBP
23489
23501
  return this._initialSettings;
23490
23502
  }
23491
23503
  modifyInitialSettings(mouseLock) {
23492
- this.setFlagEnabled(_epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBPACK_IMPORTED_MODULE_3__.Flags.HoveringMouseMode, mouseLock);
23504
+ this.setFlagEnabled(_epicgames_ps_lib_pixelstreamingfrontend_ue5_5__WEBPACK_IMPORTED_MODULE_4__.Flags.HoveringMouseMode, mouseLock);
23493
23505
  }
23494
23506
  }
23495
23507
 
@@ -23547,7 +23559,14 @@ function ArcwareInit({ shareId, projectId }, configuration, forceRefresh = false
23547
23559
  useUrlParams: (configuration === null || configuration === void 0 ? void 0 : configuration.useUrlParams) === true,
23548
23560
  initialSettings: Object.assign({ ss: _ArcwareConfig__WEBPACK_IMPORTED_MODULE_0__.DefaultUrl, AutoConnect: false, StartVideoMuted: true, AutoPlayVideo: true, KeyboardInput: true, MouseInput: true, GamepadInput: true, TouchInput: true, XRControllerInput: true, UseMic: true, SuppressBrowserKeys: true, FakeMouseWithTouches: false, ForceMonoAudio: false, HoveringMouse: true }, configuration === null || configuration === void 0 ? void 0 : configuration.initialSettings),
23549
23561
  settings: Object.assign({ shareId,
23550
- projectId, fullscreenButton: true, audioButton: true, stopButton: false, infoButton: false, micButton: false, settingsButton: false, connectionStrengthIcon: false, connectionIdentifierLoggingDisabled: undefined, errorHandler: undefined, loveLetterHandler: undefined, loveLetterLogging: undefined, queueHandler: undefined, sessionIdHandler: undefined, startHeight: undefined, startWidth: undefined, orientationZoom: undefined }, configuration === null || configuration === void 0 ? void 0 : configuration.settings)
23562
+ projectId, fullscreenButton: true, audioButton: true, stopButton: false, infoButton: false, micButton: false, settingsButton: false, connectionStrengthIcon: false, connectionIdentifierLoggingDisabled: undefined, errorHandler: undefined, loveLetterHandler: undefined, loveLetterLogging: undefined, queueHandler: undefined, sessionIdHandler: undefined, startHeight: undefined, startWidth: undefined, orientationZoom: undefined, whiteLabelling: {
23563
+ splashScreenUrl: undefined,
23564
+ loadingIconFadeMs: undefined,
23565
+ loadingIconUrl: undefined,
23566
+ splashScreenMode: undefined,
23567
+ splashScreenPosition: undefined,
23568
+ splashScreenBgColor: undefined
23569
+ } }, configuration === null || configuration === void 0 ? void 0 : configuration.settings)
23551
23570
  });
23552
23571
  const PixelStreaming = new _ArcwarePixelStreaming__WEBPACK_IMPORTED_MODULE_1__.ArcwarePixelStreaming(Config);
23553
23572
  const Application = new _ArcwareApplication__WEBPACK_IMPORTED_MODULE_2__.ArcwareApplication({ stream: PixelStreaming });
@@ -23581,12 +23600,12 @@ __webpack_require__.r(__webpack_exports__);
23581
23600
  /* harmony import */ var _domain_EventHandler__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3379);
23582
23601
  /* harmony import */ var _domain_Stats__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9764);
23583
23602
  /* harmony import */ var _domain_debounce__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(9580);
23584
- /* harmony import */ var _ui_LoveLetters__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(4572);
23585
- /* harmony import */ var _ui_ArcwareLogoLoader__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(6469);
23603
+ /* harmony import */ var _ui_LoveLetters__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(4572);
23604
+ /* harmony import */ var _ui_ArcwareLogoLoader__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(6469);
23586
23605
  /* harmony import */ var _ui_MicrophoneOverlay__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(3613);
23587
23606
  /* harmony import */ var _domain_ConnectionIdentifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5999);
23588
23607
  /* harmony import */ var _features_DiagnosticsCollector__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8429);
23589
- /* harmony import */ var _features_common__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(2483);
23608
+ /* harmony import */ var _features_common__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(2483);
23590
23609
 
23591
23610
 
23592
23611
 
@@ -23911,6 +23930,7 @@ class ArcwarePixelStreaming extends _epicgames_ps_lib_pixelstreamingfrontend_ue5
23911
23930
  });
23912
23931
  }
23913
23932
  }
23933
+ this.applyBrandingFromSettings();
23914
23934
  this.handleMouseLock();
23915
23935
  this.injectCustomUI();
23916
23936
  }
@@ -24155,23 +24175,15 @@ class ArcwarePixelStreaming extends _epicgames_ps_lib_pixelstreamingfrontend_ue5
24155
24175
  limitedHeight = maxHeight;
24156
24176
  limitedWidth = maxHeight * aspectRatio;
24157
24177
  }
24158
- // width: clientWidth * Math.max(window.devicePixelRatio, 1) - for retina device, 1 is min upscale factor
24159
- const newRes = (0,_features_common__WEBPACK_IMPORTED_MODULE_12__.capScale)({
24160
- width: browserWidth * Math.max(window.devicePixelRatio, 1.25),
24161
- height: browserHeight * Math.max(window.devicePixelRatio, 1.25),
24162
- }, {
24163
- width: maxWidth,
24164
- height: maxHeight,
24165
- });
24166
24178
  // Zoom level for orientation change if provided
24167
24179
  if (orientationZoom) {
24168
- if (newRes.width < newRes.height) {
24169
- if (orientationZoom.hasOwnProperty('portrait'))
24180
+ if (browserWidth < browserHeight) {
24181
+ if (orientationZoom.hasOwnProperty("portrait"))
24170
24182
  (_a = this === null || this === void 0 ? void 0 : this.webRtcController) === null || _a === void 0 ? void 0 : _a.emitUIInteraction({
24171
24183
  zoom: orientationZoom.portrait
24172
24184
  });
24173
24185
  }
24174
- else if (orientationZoom.hasOwnProperty('landscape')) {
24186
+ else if (orientationZoom.hasOwnProperty("landscape")) {
24175
24187
  (_b = this === null || this === void 0 ? void 0 : this.webRtcController) === null || _b === void 0 ? void 0 : _b.emitUIInteraction({
24176
24188
  zoom: orientationZoom.landscape
24177
24189
  });
@@ -24240,27 +24252,28 @@ class ArcwarePixelStreaming extends _epicgames_ps_lib_pixelstreamingfrontend_ue5
24240
24252
  }
24241
24253
  initLoveLettersContainer() {
24242
24254
  var _a;
24243
- const logoLoader = new _ui_ArcwareLogoLoader__WEBPACK_IMPORTED_MODULE_13__.ArcwareLogoLoader();
24255
+ const logoLoader = new _ui_ArcwareLogoLoader__WEBPACK_IMPORTED_MODULE_12__.ArcwareLogoLoader();
24256
+ this.logoLoader = logoLoader;
24244
24257
  if (!this.loveLettersContainer) {
24245
- const loveLettersContainer = document === null || document === void 0 ? void 0 : document.createElement("div");
24246
- const { videoPlayer } = this === null || this === void 0 ? void 0 : this.webRtcController;
24258
+ const loveLettersContainer = document.createElement("div");
24259
+ this.loveLettersContainer = loveLettersContainer; // keep the ref
24260
+ const { videoPlayer } = this.webRtcController;
24247
24261
  const videoElementParent = videoPlayer.getVideoParentElement();
24248
- (_a = loveLettersContainer === null || loveLettersContainer === void 0 ? void 0 : loveLettersContainer.classList) === null || _a === void 0 ? void 0 : _a.add("love-letters-box-root");
24249
- videoElementParent === null || videoElementParent === void 0 ? void 0 : videoElementParent.appendChild(loveLettersContainer);
24250
- const lettersBlock = document === null || document === void 0 ? void 0 : document.createElement("div");
24262
+ loveLettersContainer.classList.add("love-letters-box-root");
24263
+ videoElementParent.appendChild(loveLettersContainer);
24264
+ const lettersBlock = document.createElement("div");
24251
24265
  lettersBlock.id = "letters-block";
24252
- const lettersWrapper = document === null || document === void 0 ? void 0 : document.createElement("div");
24266
+ const lettersWrapper = document.createElement("div");
24253
24267
  lettersWrapper.id = "letters-wrapper";
24254
- if (loveLettersContainer) {
24255
- lettersBlock === null || lettersBlock === void 0 ? void 0 : lettersBlock.appendChild(logoLoader === null || logoLoader === void 0 ? void 0 : logoLoader.arcwareLogoLoader);
24256
- loveLettersContainer === null || loveLettersContainer === void 0 ? void 0 : loveLettersContainer.appendChild(lettersBlock);
24257
- lettersBlock === null || lettersBlock === void 0 ? void 0 : lettersBlock.appendChild(lettersWrapper);
24258
- }
24259
- lettersBlock.innerHTML = "";
24260
- if (lettersBlock) {
24261
- lettersBlock === null || lettersBlock === void 0 ? void 0 : lettersBlock.appendChild(logoLoader === null || logoLoader === void 0 ? void 0 : logoLoader.arcwareLogoLoader);
24262
- lettersBlock === null || lettersBlock === void 0 ? void 0 : lettersBlock.appendChild(lettersWrapper);
24263
- }
24268
+ // append your existing loader root (with SVG) into the lettersBlock
24269
+ const loaderRoot = logoLoader.arcwareLogoLoader; // your existing getter
24270
+ lettersBlock.appendChild(loaderRoot);
24271
+ // ensure the loader knows its host
24272
+ (_a = logoLoader.setHostElement) === null || _a === void 0 ? void 0 : _a.call(logoLoader, loaderRoot);
24273
+ loveLettersContainer.appendChild(lettersBlock);
24274
+ lettersBlock.appendChild(lettersWrapper);
24275
+ // apply current (local) settings immediately
24276
+ this.applyBrandingFromSettings();
24264
24277
  }
24265
24278
  }
24266
24279
  pushLetter(letter) {
@@ -24277,7 +24290,7 @@ class ArcwarePixelStreaming extends _epicgames_ps_lib_pixelstreamingfrontend_ue5
24277
24290
  if (letter !== undefined) {
24278
24291
  const formattedLoveLetter = letter === null || letter === void 0 ? void 0 : letter.replace(/LL: |\.$/g, "");
24279
24292
  (_a = this === null || this === void 0 ? void 0 : this.loveLettersList) === null || _a === void 0 ? void 0 : _a.push(formattedLoveLetter);
24280
- const loveLettersBox = new _ui_LoveLetters__WEBPACK_IMPORTED_MODULE_14__.LoveLetters();
24293
+ const loveLettersBox = new _ui_LoveLetters__WEBPACK_IMPORTED_MODULE_13__.LoveLetters();
24281
24294
  loveLettersBox === null || loveLettersBox === void 0 ? void 0 : loveLettersBox.addLetter(formattedLoveLetter, (_b = this === null || this === void 0 ? void 0 : this.loveLettersList) === null || _b === void 0 ? void 0 : _b.length);
24282
24295
  setTimeout(() => {
24283
24296
  this.processLoveLetterQueue();
@@ -24366,8 +24379,7 @@ class ArcwarePixelStreaming extends _epicgames_ps_lib_pixelstreamingfrontend_ue5
24366
24379
  }
24367
24380
  }
24368
24381
  injectCustomUI() {
24369
- (0,_features_common__WEBPACK_IMPORTED_MODULE_12__.waitForElement)('#stream-ui')
24370
- .then(el => {
24382
+ (0,_features_common__WEBPACK_IMPORTED_MODULE_14__.waitForElement)("#stream-ui").then((el) => {
24371
24383
  var _a;
24372
24384
  const videoElementParent = (_a = this === null || this === void 0 ? void 0 : this.videoElementParent) === null || _a === void 0 ? void 0 : _a.parentElement;
24373
24385
  if (videoElementParent) {
@@ -24375,6 +24387,61 @@ class ArcwarePixelStreaming extends _epicgames_ps_lib_pixelstreamingfrontend_ue5
24375
24387
  }
24376
24388
  });
24377
24389
  }
24390
+ applyBrandingFromSettings() {
24391
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
24392
+ const cfg = ((_b = (_a = this === null || this === void 0 ? void 0 : this.config) === null || _a === void 0 ? void 0 : _a.settings.whiteLabelling) !== null && _b !== void 0 ? _b : {});
24393
+ // Loader image + fade
24394
+ try {
24395
+ if (this.logoLoader) {
24396
+ (_d = (_c = this.logoLoader).setImage) === null || _d === void 0 ? void 0 : _d.call(_c, cfg.loadingIconUrl);
24397
+ (_f = (_e = this.logoLoader).setFade) === null || _f === void 0 ? void 0 : _f.call(_e, cfg.loadingIconFadeMs);
24398
+ }
24399
+ }
24400
+ catch (_p) { }
24401
+ // Splash on loveLettersContainer (preferred), fallback to player parent
24402
+ try {
24403
+ const el = (_m = (_g = this.loveLettersContainer) !== null && _g !== void 0 ? _g : (_l = (_k = (_j = (_h = this.webRtcController) === null || _h === void 0 ? void 0 : _h.videoPlayer) === null || _j === void 0 ? void 0 : _j.getVideoParentElement) === null || _k === void 0 ? void 0 : _k.call(_j)) === null || _l === void 0 ? void 0 : _l.parentElement) !== null && _m !== void 0 ? _m : null;
24404
+ if (!el)
24405
+ return;
24406
+ // Clear previous inline choices
24407
+ const s = el.style;
24408
+ s.removeProperty("background-image");
24409
+ s.removeProperty("background-size");
24410
+ s.removeProperty("background-repeat");
24411
+ s.removeProperty("background-position");
24412
+ s.removeProperty("background-color");
24413
+ el.classList.remove("aw-splash");
24414
+ if (cfg.splashScreenUrl) {
24415
+ el.classList.add("aw-splash"); // keeps your global defaults
24416
+ // Compute mode (default to 'contain' if not provided)
24417
+ const mode = ((_o = cfg.splashScreenMode) !== null && _o !== void 0 ? _o : "contain");
24418
+ // Apply sizing/repeat per mode
24419
+ switch (mode) {
24420
+ case "contain":
24421
+ s.backgroundSize = "contain";
24422
+ s.backgroundRepeat = "no-repeat";
24423
+ break;
24424
+ case "cover":
24425
+ s.backgroundSize = "cover";
24426
+ s.backgroundRepeat = "no-repeat";
24427
+ break;
24428
+ case "stretch":
24429
+ s.backgroundSize = "100% 100%";
24430
+ s.backgroundRepeat = "no-repeat";
24431
+ break;
24432
+ case "repeat":
24433
+ s.backgroundSize = "auto"; // keep intrinsic px
24434
+ s.backgroundRepeat = "repeat";
24435
+ break;
24436
+ }
24437
+ // Position & color (optional)
24438
+ s.backgroundPosition = cfg.splashScreenPosition || "center center";
24439
+ s.backgroundColor = cfg.splashScreenBgColor || "var(--color0)";
24440
+ s.backgroundImage = `url("${cfg.splashScreenUrl}")`;
24441
+ }
24442
+ }
24443
+ catch (_q) { }
24444
+ }
24378
24445
  }
24379
24446
 
24380
24447
 
@@ -24443,8 +24510,12 @@ const ArcwareSettingsSchema = zod__WEBPACK_IMPORTED_MODULE_1__.z.object({
24443
24510
  /** Zoom functionality */
24444
24511
  orientationZoom: zod__WEBPACK_IMPORTED_MODULE_1__.z.object({
24445
24512
  landscape: zod__WEBPACK_IMPORTED_MODULE_1__.z.number(),
24446
- portrait: zod__WEBPACK_IMPORTED_MODULE_1__.z.number(),
24447
- }).strict().optional()
24513
+ portrait: zod__WEBPACK_IMPORTED_MODULE_1__.z.number()
24514
+ })
24515
+ .strict()
24516
+ .optional(),
24517
+ /** Loader customization */
24518
+ whiteLabelling: _arcware_cloud_shared_pixelstreaming_websdk__WEBPACK_IMPORTED_MODULE_0__.ZWhiteLabel.optional()
24448
24519
  });
24449
24520
 
24450
24521
 
@@ -25252,7 +25323,6 @@ class DiagnosticsCollector {
25252
25323
 
25253
25324
  __webpack_require__.r(__webpack_exports__);
25254
25325
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
25255
- /* harmony export */ "capScale": () => (/* binding */ capScale),
25256
25326
  /* harmony export */ "extFromMime": () => (/* binding */ extFromMime),
25257
25327
  /* harmony export */ "normalizeType": () => (/* binding */ normalizeType),
25258
25328
  /* harmony export */ "parseUnknownToObject": () => (/* binding */ parseUnknownToObject),
@@ -25372,25 +25442,47 @@ function waitForElement(selector, { root = document, timeout = 3000 } = {}) {
25372
25442
  }, timeout);
25373
25443
  });
25374
25444
  }
25375
- function capScale(size, max) {
25376
- const result = { width: 0, height: 0 };
25377
- /* result.width = size.width > max.width ? max.width : size.width;
25378
- result.height = size.height > max.height ? max.height : size.height; */
25379
- result.width = Math.floor(size.width);
25380
- result.height = Math.floor(size.height);
25381
- if (result.height > max.height) {
25382
- const heightScale = max.height / result.height;
25383
- result.height = max.height;
25384
- result.width *= heightScale;
25385
- }
25386
- if (result.width > max.width) {
25387
- const heightScale = max.width / result.width;
25388
- result.width = max.width;
25389
- result.height *= heightScale;
25390
- }
25391
- result.width = (result.width % 2) + result.width;
25392
- result.height = (result.height % 2) + result.height;
25393
- return result;
25445
+
25446
+
25447
+ /***/ }),
25448
+
25449
+ /***/ 3545:
25450
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
25451
+
25452
+ __webpack_require__.r(__webpack_exports__);
25453
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
25454
+ /* harmony export */ "readWhiteLabelFromQuery": () => (/* binding */ readWhiteLabelFromQuery)
25455
+ /* harmony export */ });
25456
+ /* harmony import */ var _arcware_cloud_shared_pixelstreaming_websdk__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7910);
25457
+
25458
+ function decodeBase64OrBase64Url(raw) {
25459
+ const normalized = raw.replace(/-/g, "+").replace(/_/g, "/");
25460
+ const padded = normalized + "===".slice((normalized.length + 3) % 4);
25461
+ if (typeof atob === "function")
25462
+ return atob(padded);
25463
+ // @ts-ignore (Node fallback if this runs server-side)
25464
+ return Buffer.from(padded, "base64").toString("utf-8");
25465
+ }
25466
+ /** Parse ?wl=... (or ?whitelabel=...) → validated partial settings */
25467
+ function readWhiteLabelFromQuery(qs) {
25468
+ var _a;
25469
+ try {
25470
+ const raw = (_a = qs.get("wl")) !== null && _a !== void 0 ? _a : qs.get("whitelabel");
25471
+ if (!raw)
25472
+ return undefined;
25473
+ const jsonStr = decodeBase64OrBase64Url(raw);
25474
+ const obj = JSON.parse(jsonStr);
25475
+ const parsed = _arcware_cloud_shared_pixelstreaming_websdk__WEBPACK_IMPORTED_MODULE_0__.ZWhiteLabel.safeParse(obj);
25476
+ if (!parsed.success) {
25477
+ //console.warn("[ArcwareConfig] Invalid wl payload:", parsed.error?.flatten?.());
25478
+ return undefined;
25479
+ }
25480
+ return parsed.data;
25481
+ }
25482
+ catch (e) {
25483
+ //console.warn("[ArcwareConfig] Failed to parse wl payload:", e);
25484
+ return undefined;
25485
+ }
25394
25486
  }
25395
25487
 
25396
25488
 
@@ -25446,16 +25538,27 @@ const ArcwareStyles = {
25446
25538
  "--color11": "rgba(65,0,139,1) !important",
25447
25539
  "--color12": "#222224 !important",
25448
25540
  "--color13": "#f0f0f2 !important",
25449
- "--colorBoxShadow": "rgba(0, 0, 0, 0.20) !important",
25541
+ "--colorBoxShadow": "rgba(0, 0, 0, 0.20) !important"
25542
+ },
25543
+ ".aw-splash": {
25544
+ backgroundRepeat: "no-repeat",
25545
+ backgroundPosition: "center center",
25546
+ backgroundSize: "contain",
25547
+ backgroundColor: "var(--color0)"
25548
+ },
25549
+ "@keyframes aw-loader-fade": {
25550
+ from: { opacity: 0.25 },
25551
+ to: { opacity: 1 }
25450
25552
  },
25553
+ /* ---------- /NEW ---------- */
25451
25554
  "#playerUI *": {
25452
- fontFamily: "system-ui",
25555
+ fontFamily: "system-ui"
25453
25556
  },
25454
25557
  "#shared-stream-container": {
25455
- boxSizing: "border-box",
25558
+ boxSizing: "border-box"
25456
25559
  },
25457
25560
  "#shared-stream-container::-webkit-scrollbar": {
25458
- width: "10px",
25561
+ width: "10px"
25459
25562
  },
25460
25563
  "#shared-stream-container::-webkit-scrollbar-track": {
25461
25564
  background: "var(--color13)",
@@ -25464,10 +25567,10 @@ const ArcwareStyles = {
25464
25567
  borderTop: "20px solid var(--color0)",
25465
25568
  borderRight: "5px solid var(--color0)",
25466
25569
  borderBottom: "20px solid var(--color0)",
25467
- borderLeft: "5px solid var(--color0)",
25570
+ borderLeft: "5px solid var(--color0)"
25468
25571
  },
25469
25572
  "#shared-stream-container::-webkit-scrollbar-track-piece": {
25470
- background: "transparent",
25573
+ background: "transparent"
25471
25574
  },
25472
25575
  "#shared-stream-container::-webkit-scrollbar-thumb": {
25473
25576
  background: "var(--color13)",
@@ -25475,11 +25578,11 @@ const ArcwareStyles = {
25475
25578
  borderRight: "2px solid var(--color0)",
25476
25579
  borderLeft: "2px solid var(--color0)",
25477
25580
  transition: "all ease-in-out 0.3s",
25478
- borderRadius: "7px",
25581
+ borderRadius: "7px"
25479
25582
  },
25480
25583
  "#shared-stream-container::-webkit-scrollbar-thumb:hover": {
25481
25584
  transition: "all ease-in-out 0.3s",
25482
- background: "var(--color3)",
25585
+ background: "var(--color3)"
25483
25586
  },
25484
25587
  "#playerUI, #videoElementParent": {
25485
25588
  position: "absolute",
@@ -25493,13 +25596,13 @@ const ArcwareStyles = {
25493
25596
  left: 0,
25494
25597
  margin: "auto",
25495
25598
  boxSizing: "border-box",
25496
- pointerEvents: "all",
25599
+ pointerEvents: "all"
25497
25600
  },
25498
25601
  "#streamingVideo": {
25499
25602
  maxWidth: "100%",
25500
25603
  maxHeight: "100%",
25501
25604
  boxSizing: "border-box",
25502
- background: "#18181A",
25605
+ background: "#18181A"
25503
25606
  },
25504
25607
  "#uiFeatures #controls": {
25505
25608
  top: "auto",
@@ -25507,13 +25610,13 @@ const ArcwareStyles = {
25507
25610
  bottom: "10px",
25508
25611
  right: "20px",
25509
25612
  display: "flex",
25510
- flexDirection: "column-reverse",
25613
+ flexDirection: "column-reverse"
25511
25614
  },
25512
25615
  "#uiFeatures #connection": {
25513
25616
  bottom: "5px",
25514
25617
  left: "10px",
25515
25618
  width: "2.5rem",
25516
- heihgt: "2.5rem",
25619
+ heihgt: "2.5rem"
25517
25620
  },
25518
25621
  "#uiFeatures button": {
25519
25622
  backgroundColor: "var(--color12)",
@@ -25530,23 +25633,23 @@ const ArcwareStyles = {
25530
25633
  alignItems: "center",
25531
25634
  boxShadow: "0px 0px 24px 0px var(--colorBoxShadow)",
25532
25635
  borderRadius: "3px",
25533
- outline: "none",
25636
+ outline: "none"
25534
25637
  },
25535
25638
  "#uiFeatures button:hover, #uiFeatures button:active": {
25536
25639
  padding: "0 !important",
25537
- border: "none",
25640
+ border: "none"
25538
25641
  },
25539
25642
  "#uiFeatures button #audioIconMuted, #uiFeatures button #audioIconUnmuted, #uiFeatures button #micIconMuted, #uiFeatures button #micIconUnmuted": {
25540
25643
  width: "31px",
25541
- height: "28px",
25644
+ height: "28px"
25542
25645
  },
25543
25646
  "#uiFeatures button #maximizeIcon, #uiFeatures button #minimizeIcon": {
25544
25647
  width: "25px",
25545
- height: "25px",
25648
+ height: "25px"
25546
25649
  },
25547
25650
  "#stopIcon, #playIcon": {
25548
25651
  width: "30px",
25549
- height: "30px",
25652
+ height: "30px"
25550
25653
  },
25551
25654
  "#uiFeatures button .tooltiptext": {
25552
25655
  right: "125%",
@@ -25555,35 +25658,35 @@ const ArcwareStyles = {
25555
25658
  borderRadius: "3px",
25556
25659
  backgroundColor: "var(--color12)",
25557
25660
  width: "95px",
25558
- visibility: "hidden!important",
25661
+ visibility: "hidden!important"
25559
25662
  },
25560
25663
  "@media (hover: hover) and (pointer: fine)": {
25561
25664
  "#uiFeatures button:hover .tooltiptext": {
25562
- visibility: "visible!important",
25563
- },
25665
+ visibility: "visible!important"
25666
+ }
25564
25667
  },
25565
25668
  "#controls>*": {
25566
25669
  marginBottom: "0.5rem",
25567
25670
  display: "block",
25568
25671
  lineHeight: "1.75rem",
25569
25672
  padding: "0.5rem",
25570
- backgroundColor: "var(--color12)",
25673
+ backgroundColor: "var(--color12)"
25571
25674
  },
25572
25675
  "#uiFeatures #settingsIcon, #uiFeatures #statsIcon": {
25573
25676
  width: "27px",
25574
- height: "27px",
25677
+ height: "27px"
25575
25678
  },
25576
25679
  ".svgIcon": {
25577
- fill: "var(--color13)",
25680
+ fill: "var(--color13)"
25578
25681
  },
25579
25682
  "#uiFeatures button:hover .svgIcon, #uiFeatures button:active .svgIcon": {
25580
- fill: "var(--color12)",
25683
+ fill: "var(--color12)"
25581
25684
  },
25582
25685
  ".tgl-switch .tgl-slider, .tgl-flat:checked+.tgl-slider": {
25583
- border: "3px solid transparent",
25686
+ border: "3px solid transparent"
25584
25687
  },
25585
25688
  ".tgl-switch .tgl-slider": {
25586
- background: "none",
25689
+ background: "none"
25587
25690
  },
25588
25691
  ".tgl-switch .tgl-slider::before": {
25589
25692
  content: "''",
@@ -25597,18 +25700,18 @@ const ArcwareStyles = {
25597
25700
  top: "0",
25598
25701
  bottom: "0",
25599
25702
  left: "0",
25600
- right: "0",
25703
+ right: "0"
25601
25704
  },
25602
25705
  ".tgl-switch .tgl-slider::after": {
25603
25706
  height: "13px",
25604
25707
  width: "13px",
25605
25708
  borderRadius: "50%",
25606
25709
  top: "-2px",
25607
- left: "-1%",
25710
+ left: "-1%"
25608
25711
  },
25609
25712
  ".tgl-flat:checked+.tgl-slider:after": {
25610
25713
  left: "62%",
25611
- background: "var(--color3)",
25714
+ background: "var(--color3)"
25612
25715
  },
25613
25716
  ".form-control": {
25614
25717
  backgroundColor: "transparent",
@@ -25617,7 +25720,7 @@ const ArcwareStyles = {
25617
25720
  color: "var(--color13)",
25618
25721
  textAlign: "left",
25619
25722
  fontFamily: "inherit",
25620
- padding: "5px 15px ",
25723
+ padding: "5px 15px "
25621
25724
  },
25622
25725
  ".btn-flat": {
25623
25726
  background: "var(--color3)",
@@ -25627,31 +25730,62 @@ const ArcwareStyles = {
25627
25730
  cursor: "pointer",
25628
25731
  borderRadius: "4px",
25629
25732
  textTransform: "uppercase",
25630
- minWidth: "175px",
25733
+ minWidth: "175px"
25631
25734
  },
25632
25735
  ".btn-flat:disabled": {
25633
25736
  background: "var(--color7)",
25634
25737
  borderColor: "var(--color3)",
25635
25738
  color: "var(--color3)",
25636
- cursor: "default",
25739
+ cursor: "default"
25637
25740
  },
25638
25741
  ".btn-flat:focus": {
25639
- outline: "none",
25742
+ outline: "none"
25640
25743
  },
25641
25744
  ".arcware-logo-loader": {
25642
25745
  position: "relative",
25643
- display: "block",
25746
+ display: "flex",
25747
+ alignItems: "center",
25748
+ justifyContent: "center",
25644
25749
  width: "12.5%",
25645
25750
  height: "12.5%",
25751
+ margin: "0 auto",
25752
+ boxSizing: "border-box"
25753
+ },
25754
+ // image rendering + centering inside the box
25755
+ ".arcware-logo-loader img": {
25756
+ maxWidth: "40%",
25757
+ maxHeight: "40%",
25758
+ objectFit: "contain",
25759
+ objectPosition: "center center",
25760
+ display: "block",
25761
+ margin: 0,
25762
+ verticalAlign: "middle"
25763
+ },
25764
+ // fade stays the same
25765
+ ".arcware-logo-loader.pulse img": {
25766
+ animation: "aw-loader-fade var(--aw-fade,1200ms) ease-in-out infinite alternate"
25767
+ },
25768
+ ".arcware-logo-loader.aw-custom-loader": {
25769
+ width: "auto !important",
25770
+ height: "auto !important"
25771
+ },
25772
+ ".arcware-logo-loader.aw-custom-loader img": {
25773
+ display: "block",
25774
+ width: "auto",
25775
+ height: "auto",
25776
+ maxWidth: "80%",
25777
+ maxHeight: "80%",
25778
+ objectFit: "contain",
25779
+ margin: "0 auto" // ensure horizontal centering inside the loader
25646
25780
  },
25647
25781
  "#playOverlay img#playButton": {
25648
- width: "5%",
25782
+ width: "5%"
25649
25783
  },
25650
25784
  "#disconnectOverlay, #errorOverlay": {
25651
25785
  textTransform: "initial",
25652
25786
  textAlign: "center",
25653
25787
  fontSize: "20px",
25654
- lineHeight: 2.5,
25788
+ lineHeight: 2.5
25655
25789
  },
25656
25790
  "#disconnectOverlay .clickableState": {
25657
25791
  textTransform: "initial",
@@ -25661,13 +25795,13 @@ const ArcwareStyles = {
25661
25795
  fontSize: "18px",
25662
25796
  border: "1px solid #DAF693",
25663
25797
  margin: "25px auto 0",
25664
- width: "180px",
25798
+ width: "180px"
25665
25799
  },
25666
25800
  "#afkOverlay": {
25667
25801
  background: "none",
25668
25802
  transition: "all ease-in-out 0.5s",
25669
25803
  opacity: 1,
25670
- pointerEvents: "initial",
25804
+ pointerEvents: "initial"
25671
25805
  },
25672
25806
  "#afkOverlayInner": {
25673
25807
  textTransform: "initial",
@@ -25676,18 +25810,18 @@ const ArcwareStyles = {
25676
25810
  fontSize: "18px",
25677
25811
  width: "360px",
25678
25812
  textAlign: "center",
25679
- lineHeight: 2.5,
25813
+ lineHeight: 2.5
25680
25814
  },
25681
25815
  "#afkOverlayInner center::first-line": {
25682
25816
  textTransform: "uppercase",
25683
25817
  color: "#FF8461",
25684
25818
  fontWeight: "bold",
25685
- fontSize: "24px",
25819
+ fontSize: "24px"
25686
25820
  },
25687
25821
  "#afkOverlayInner #afkCountDownNumber": {
25688
25822
  color: "#DAF693",
25689
25823
  fontSize: "26px",
25690
- lineHeight: "22px",
25824
+ lineHeight: "22px"
25691
25825
  },
25692
25826
  "#afkOverlayInner center .retry-button": {
25693
25827
  textTransform: "initial",
@@ -25697,7 +25831,7 @@ const ArcwareStyles = {
25697
25831
  fontSize: "18px",
25698
25832
  border: "1px solid #DAF693",
25699
25833
  margin: "25px auto 0",
25700
- width: "180px",
25834
+ width: "180px"
25701
25835
  },
25702
25836
  "#connectOverlay #connectButton": {
25703
25837
  textTransform: "initial",
@@ -25707,33 +25841,33 @@ const ArcwareStyles = {
25707
25841
  fontSize: "18px",
25708
25842
  border: "1px solid #DAF693",
25709
25843
  margin: "25px auto 0",
25710
- width: "180px",
25844
+ width: "180px"
25711
25845
  },
25712
25846
  "#connectOverlay .connection-text": {
25713
25847
  textTransform: "initial",
25714
25848
  textAlign: "center",
25715
- margin: "25px auto 0",
25849
+ margin: "25px auto 0"
25716
25850
  },
25717
25851
  "#connectOverlay .connection-text .title": {
25718
25852
  color: "#ffffff",
25719
25853
  fontSize: "18px",
25720
- margin: "5px 0",
25854
+ margin: "5px 0"
25721
25855
  },
25722
25856
  "#connectOverlay .connection-text .subtitle": {
25723
25857
  color: "#ffffff",
25724
25858
  opacity: 0.5,
25725
25859
  fontSize: "12px",
25726
- margin: "10px 0",
25860
+ margin: "10px 0"
25727
25861
  },
25728
25862
  "#infoOverlay.hiddenState": {
25729
- display: "none",
25863
+ display: "none"
25730
25864
  },
25731
25865
  "#disconnectOverlay, #playOverlay, #errorOverlay, #microphoneOverlay, #connectOverlay": {
25732
25866
  background: "#18181A",
25733
25867
  display: "flex",
25734
25868
  transition: "all ease-in-out 0.5s",
25735
25869
  opacity: 1,
25736
- pointerEvents: "initial",
25870
+ pointerEvents: "initial"
25737
25871
  },
25738
25872
  "#microphoneOverlay": {
25739
25873
  textTransform: "initial",
@@ -25752,51 +25886,51 @@ const ArcwareStyles = {
25752
25886
  justifyContent: "center",
25753
25887
  alignItems: "center",
25754
25888
  flexDirection: "column",
25755
- zIndex: 99999,
25889
+ zIndex: 99999
25756
25890
  },
25757
25891
  "#microphoneOverlay .title": {
25758
25892
  fontSize: "24px",
25759
25893
  position: "relative",
25760
25894
  marginBottom: "20px",
25761
- color: "#F0F0F2",
25895
+ color: "#F0F0F2"
25762
25896
  },
25763
25897
  "#microphoneOverlay .title:after": {
25764
25898
  content: "''",
25765
25899
  display: "inline-block",
25766
25900
  animation: "dotty steps(1,end) 1s infinite",
25767
- position: "absolute",
25901
+ position: "absolute"
25768
25902
  },
25769
25903
  "#microphoneOverlay p": {
25770
25904
  margin: 0,
25771
- color: "#858588",
25905
+ color: "#858588"
25772
25906
  },
25773
25907
  "#microphoneOverlay svg": {
25774
25908
  height: "65px",
25775
25909
  marginBottom: "15px",
25776
- marginTop: "-5px",
25910
+ marginTop: "-5px"
25777
25911
  },
25778
25912
  "#microphoneOverlay .svgIcon": {
25779
- fill: "#DAF693",
25913
+ fill: "#DAF693"
25780
25914
  },
25781
25915
  "#disconnectOverlay.hiddenState, #playOverlay.hiddenState, #errorOverlay.hiddenState, #afkOverlay.hiddenState, #microphoneOverlay.hiddenState": {
25782
25916
  opacity: 0,
25783
- pointerEvents: "none",
25917
+ pointerEvents: "none"
25784
25918
  },
25785
25919
  "#disconnectOverlay.mic-overlay-is-visible, #errorOverlay.mic-overlay-is-visible, #infoOverlay.mic-overlay-is-visible": {
25786
25920
  opacity: 0,
25787
- pointerEvents: "none",
25921
+ pointerEvents: "none"
25788
25922
  },
25789
25923
  "#infoOverlay.hiddenState, #connectOverlay.hiddenState": {
25790
- display: "none",
25924
+ display: "none"
25791
25925
  },
25792
25926
  "#connectOverlay": {
25793
25927
  display: "flex",
25794
25928
  flexDirection: "column-reverse",
25795
25929
  alignItems: "center",
25796
- justifyContent: "center",
25930
+ justifyContent: "center"
25797
25931
  },
25798
25932
  "#infoOverlay": {
25799
- display: "none",
25933
+ display: "none"
25800
25934
  },
25801
25935
  ".love-letters-box-root": {
25802
25936
  display: "flex",
@@ -25808,11 +25942,11 @@ const ArcwareStyles = {
25808
25942
  alignItems: "center",
25809
25943
  flexDirection: "column",
25810
25944
  background: "#18181A",
25811
- zIndex: 1,
25945
+ zIndex: 1
25812
25946
  },
25813
25947
  ".love-letters-box-root.fade-out": {
25814
25948
  opacity: 0,
25815
- transition: "opacity 0.5s",
25949
+ transition: "opacity 0.5s"
25816
25950
  },
25817
25951
  "#letters-block": {
25818
25952
  position: "absolute",
@@ -25829,7 +25963,7 @@ const ArcwareStyles = {
25829
25963
  alignItems: "center",
25830
25964
  fontSize: "16px",
25831
25965
  textTransform: "initial",
25832
- textAlign: "center",
25966
+ textAlign: "center"
25833
25967
  },
25834
25968
  "#letters-wrapper": {
25835
25969
  height: "77px",
@@ -25840,62 +25974,88 @@ const ArcwareStyles = {
25840
25974
  alignItems: "center",
25841
25975
  justifyContent: "flex-end",
25842
25976
  marginTop: "10px",
25843
- paddingBottom: "2px",
25977
+ paddingBottom: "2px"
25844
25978
  },
25845
25979
  "#letters-wrapper p": {
25846
25980
  textAlign: "center",
25847
25981
  lineHeight: 1.25,
25848
- fontSize: "16px",
25982
+ fontSize: "16px"
25849
25983
  },
25850
25984
  ".letter-animation:nth-last-of-type(1)::after": {
25851
25985
  display: "inline-block",
25852
25986
  animation: "dotty steps(1,end) 1s infinite",
25853
25987
  content: "''",
25854
- position: "absolute",
25988
+ position: "absolute"
25855
25989
  },
25856
25990
  ".letter-animation": {
25857
25991
  transition: "all 0.5s ease-in-out",
25858
25992
  transformOrigin: "bottom",
25859
- margin: "0 auto",
25993
+ margin: "0 auto"
25860
25994
  },
25861
25995
  ".letter-animation-enter": {
25862
- animation: "fadeInUp 0.75s ease-out",
25996
+ animation: "fadeInUp 0.75s ease-out"
25863
25997
  },
25864
25998
  ".letter-animation-exit": {
25865
25999
  opacity: 0,
25866
26000
  scale: 0.9,
25867
26001
  transition: "all ease-in-out 1s",
25868
- margin: 0,
26002
+ margin: 0
25869
26003
  },
25870
26004
  "@keyframes dotty": {
25871
26005
  "0%": { content: "''" },
25872
26006
  "25%": { content: "'.'" },
25873
26007
  "50%": { content: "'..'" },
25874
26008
  "75%": { content: "'...'" },
25875
- "100%": { content: "''" },
26009
+ "100%": { content: "''" }
25876
26010
  },
25877
26011
  "@keyframes fadeInUp": {
25878
26012
  from: {
25879
26013
  opacity: 0,
25880
26014
  transform: " translateY(5px)",
25881
- scale: 0.9,
26015
+ scale: 0.9
25882
26016
  },
25883
26017
  to: {
25884
26018
  opacity: 1,
25885
26019
  transform: "translateY(0)",
25886
- scale: 1,
25887
- },
26020
+ scale: 1
26021
+ }
25888
26022
  },
25889
26023
  ".hidden": {
25890
26024
  display: "none",
25891
- opacity: 0,
26025
+ opacity: 0
25892
26026
  },
25893
26027
  ".visible": {
25894
26028
  display: "block",
25895
26029
  opacity: 1,
25896
- transition: "opacity 1s ease-out",
26030
+ transition: "opacity 1s ease-out"
25897
26031
  },
25898
- },
26032
+ // Make the host a flex centering box
26033
+ ".love-letters-box-root .arcware-logo-loader": {
26034
+ display: "flex",
26035
+ alignItems: "center",
26036
+ justifyContent: "center"
26037
+ },
26038
+ // When a custom image is active, ignore the legacy 12.5% box
26039
+ ".love-letters-box-root .arcware-logo-loader.aw-custom-loader": {
26040
+ width: "auto !important",
26041
+ height: "auto !important"
26042
+ },
26043
+ // Size & center the <img> itself (independent of host size)
26044
+ ".love-letters-box-root .arcware-logo-loader.aw-custom-loader img": {
26045
+ display: "block",
26046
+ margin: "0 auto",
26047
+ width: "min(40vmin, 40vw)",
26048
+ height: "auto",
26049
+ objectFit: "contain",
26050
+ objectPosition: "center center"
26051
+ },
26052
+ // (optional) If you prefer the old “percentage of container” behavior:
26053
+ ".love-letters-box-root .arcware-logo-loader.aw-custom-loader img.alt-40pct": {
26054
+ width: "40%",
26055
+ maxWidth: "100%",
26056
+ height: "auto"
26057
+ }
26058
+ }
25899
26059
  };
25900
26060
 
25901
26061
 
@@ -25918,6 +26078,56 @@ class ArcwareLogoLoader {
25918
26078
  arcwareLogoLoader.innerHTML = this.getSvg();
25919
26079
  return arcwareLogoLoader;
25920
26080
  }
26081
+ /** Call this once after you create the wrapper/root that contains the SVG */
26082
+ setHostElement(el) {
26083
+ this._hostEl = el;
26084
+ }
26085
+ /** Swap the loader image at runtime; pass undefined to go back to SVG */
26086
+ setImage(url) {
26087
+ var _a, _b;
26088
+ if (!this._hostEl)
26089
+ return;
26090
+ // lazily create <img> once
26091
+ if (!this._imgEl) {
26092
+ const img = document.createElement("img");
26093
+ img.alt = "Loading";
26094
+ img.style.display = "none"; // hidden until we set a URL
26095
+ this._hostEl.appendChild(img);
26096
+ this._imgEl = img;
26097
+ }
26098
+ if (url && url.trim()) {
26099
+ (_a = this._hostEl) === null || _a === void 0 ? void 0 : _a.classList.add("aw-custom-loader");
26100
+ if (this._imgEl.src !== url)
26101
+ this._imgEl.src = url;
26102
+ // show <img>, hide SVG
26103
+ this._imgEl.style.display = "";
26104
+ const svg = this._hostEl.querySelector("svg");
26105
+ if (svg)
26106
+ svg.style.display = "none";
26107
+ }
26108
+ else {
26109
+ // no url → fall back to SVG
26110
+ (_b = this._hostEl) === null || _b === void 0 ? void 0 : _b.classList.remove("aw-custom-loader");
26111
+ this._imgEl.style.display = "none";
26112
+ const svg = this._hostEl.querySelector("svg");
26113
+ if (svg)
26114
+ svg.style.display = "";
26115
+ }
26116
+ }
26117
+ /** Enable/disable pulsing fade in ms; 0 disables */
26118
+ setFade(ms) {
26119
+ if (!this._hostEl)
26120
+ return;
26121
+ const n = Number(ms) || 0;
26122
+ if (n > 0) {
26123
+ this._hostEl.style.setProperty("--aw-fade", `${n}ms`);
26124
+ this._hostEl.classList.add("pulse"); // uses #aw-loader.pulse styles you added
26125
+ }
26126
+ else {
26127
+ this._hostEl.classList.remove("pulse");
26128
+ this._hostEl.style.removeProperty("--aw-fade");
26129
+ }
26130
+ }
25921
26131
  getSvg() {
25922
26132
  return `
25923
26133
  <svg width="42" height="80" viewBox="0 0 42 80" xmlns="http://www.w3.org/2000/svg">
@@ -26527,7 +26737,8 @@ class StopIcon {
26527
26737
 
26528
26738
  __webpack_require__.r(__webpack_exports__);
26529
26739
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
26530
- /* harmony export */ "Messages": () => (/* reexport safe */ _lib__WEBPACK_IMPORTED_MODULE_0__.Messages)
26740
+ /* harmony export */ "Messages": () => (/* reexport safe */ _lib__WEBPACK_IMPORTED_MODULE_0__.Messages),
26741
+ /* harmony export */ "ZWhiteLabel": () => (/* reexport safe */ _lib__WEBPACK_IMPORTED_MODULE_0__.ZWhiteLabel)
26531
26742
  /* harmony export */ });
26532
26743
  /* harmony import */ var _lib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(318);
26533
26744
 
@@ -27010,6 +27221,39 @@ const Send = {
27010
27221
  };
27011
27222
 
27012
27223
 
27224
+ /***/ }),
27225
+
27226
+ /***/ 6750:
27227
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27228
+
27229
+ __webpack_require__.r(__webpack_exports__);
27230
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
27231
+ /* harmony export */ "ZWhiteLabel": () => (/* binding */ ZWhiteLabel)
27232
+ /* harmony export */ });
27233
+ /* harmony import */ var zod__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1604);
27234
+
27235
+ /** Absolute HTTPS URL (no http) */
27236
+ const AbsoluteHttpsUrl = zod__WEBPACK_IMPORTED_MODULE_0__.z.string()
27237
+ .url()
27238
+ .refine((u) => u.startsWith("https://"), { message: "URL must use https://" });
27239
+ /** Relative path (no scheme like http:, data:, javascript:, etc.) */
27240
+ const RelativePath = zod__WEBPACK_IMPORTED_MODULE_0__.z.string()
27241
+ .min(1)
27242
+ .refine((s) => !/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(s), { message: "Expected a relative path without a URL scheme" });
27243
+ /** Image URL can be absolute (https) or relative (e.g. /assets/logo.png, ./img.png) */
27244
+ const ImageUrl = zod__WEBPACK_IMPORTED_MODULE_0__.z.union([AbsoluteHttpsUrl, RelativePath]);
27245
+ /** Strict allowlist for white-label brand fields coming from the URL */
27246
+ const ZWhiteLabel = zod__WEBPACK_IMPORTED_MODULE_0__.z.object({
27247
+ loadingIconUrl: ImageUrl.optional(),
27248
+ loadingIconFadeMs: zod__WEBPACK_IMPORTED_MODULE_0__.z.number().int().positive().optional(),
27249
+ splashScreenUrl: ImageUrl.optional(),
27250
+ splashScreenMode: zod__WEBPACK_IMPORTED_MODULE_0__.z["enum"](["contain", "cover", "stretch", "repeat"]).optional(),
27251
+ splashScreenPosition: zod__WEBPACK_IMPORTED_MODULE_0__.z.string().optional(),
27252
+ splashScreenBgColor: zod__WEBPACK_IMPORTED_MODULE_0__.z.string().optional()
27253
+ })
27254
+ .strict();
27255
+
27256
+
27013
27257
  /***/ }),
27014
27258
 
27015
27259
  /***/ 318:
@@ -27017,9 +27261,12 @@ const Send = {
27017
27261
 
27018
27262
  __webpack_require__.r(__webpack_exports__);
27019
27263
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
27020
- /* harmony export */ "Messages": () => (/* reexport module object */ _Messages__WEBPACK_IMPORTED_MODULE_0__)
27264
+ /* harmony export */ "Messages": () => (/* reexport module object */ _Messages__WEBPACK_IMPORTED_MODULE_0__),
27265
+ /* harmony export */ "ZWhiteLabel": () => (/* reexport safe */ _Types_ZWhiteLabel__WEBPACK_IMPORTED_MODULE_1__.ZWhiteLabel)
27021
27266
  /* harmony export */ });
27022
27267
  /* harmony import */ var _Messages__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5387);
27268
+ /* harmony import */ var _Types_ZWhiteLabel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6750);
27269
+
27023
27270
 
27024
27271
 
27025
27272