@virtualdisplay.io/client 4.0.0-alpha.29 → 4.0.0-alpha.30

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.
@@ -23,6 +23,10 @@ const c = {
23
23
  }, It = {
24
24
  FOCUSED: "focused"
25
25
  }, Ot = {
26
+ /** Price and submit button both shown (default). */
27
+ AVAILABLE: "available",
28
+ /** Price shown, submit hidden (sold out / coming soon). */
29
+ VIEW_ONLY: "view_only",
26
30
  /** Behaves exactly like an unpriced combination: no price, no button. */
27
31
  HIDDEN: "hidden"
28
32
  }, Lt = new Set(Object.values(c));
@@ -33,58 +37,58 @@ function Mt(n) {
33
37
  return typeof t.target == "string" ? !1 : typeof t.type == "string" && Lt.has(t.type);
34
38
  }
35
39
  function Nt(n) {
36
- const t = w(n);
40
+ const t = S(n);
37
41
  return t !== null && t.type === c.HANDSHAKE;
38
42
  }
39
43
  function zt(n) {
40
- const t = w(n);
44
+ const t = S(n);
41
45
  return t !== null && t.type === c.SESSION && typeof t.sessionId == "string";
42
46
  }
43
47
  function Pt(n) {
44
- const t = w(n);
48
+ const t = S(n);
45
49
  return t !== null && t.type === c.APP_RESOLVED && typeof t.appType == "string" && t.appType !== "" && typeof t.name == "string";
46
50
  }
47
51
  function Ft(n) {
48
- const t = w(n);
52
+ const t = S(n);
49
53
  return t !== null && t.type === c.MUTATION && typeof t.instance == "string" && t.instance !== "" && Array.isArray(t.results);
50
54
  }
51
- function Dt(n) {
52
- const t = w(n);
55
+ function $t(n) {
56
+ const t = S(n);
53
57
  return t !== null && t.type === c.SNAPSHOT && ("data" in t || "error" in t);
54
58
  }
55
- function $t(n) {
56
- const t = w(n);
59
+ function Dt(n) {
60
+ const t = S(n);
57
61
  return t !== null && t.type === c.CAMERA && Array.isArray(t.transforms);
58
62
  }
59
63
  function Bt(n) {
60
- const t = w(n);
64
+ const t = S(n);
61
65
  return t !== null && t.type === c.MAPPING && typeof t.instance == "string" && t.instance !== "" && Array.isArray(t.attributes);
62
66
  }
63
67
  function Ut(n) {
64
- const t = w(n);
68
+ const t = S(n);
65
69
  return t !== null && t.type === c.LOADING_INDICATOR && typeof t.progress == "number";
66
70
  }
67
71
  function Vt(n) {
68
- const t = w(n);
72
+ const t = S(n);
69
73
  return t !== null && t.type === c.SYNC && typeof t.connected == "boolean";
70
74
  }
71
- function jt(n) {
72
- const t = w(n);
75
+ function Ht(n) {
76
+ const t = S(n);
73
77
  return t !== null && t.type === c.SELECTABLE && typeof t.instance == "string" && t.instance !== "" && Array.isArray(t.attributes);
74
78
  }
75
- function Ht(n) {
76
- const t = w(n);
79
+ function jt(n) {
80
+ const t = S(n);
77
81
  return t !== null && t.type === c.CONFIG && typeof t.viewerSettings == "object";
78
82
  }
79
83
  function qt(n) {
80
- const t = w(n);
84
+ const t = S(n);
81
85
  return t !== null && t.type === c.FOCUS && typeof t.instance == "string" && t.instance !== "" && typeof t.state == "string";
82
86
  }
83
87
  function Gt(n) {
84
- const t = w(n);
88
+ const t = S(n);
85
89
  return t !== null && t.type === c.PRICING && typeof t.instance == "string" && t.instance !== "" && typeof t.pricing == "object" && t.pricing !== null;
86
90
  }
87
- function w(n) {
91
+ function S(n) {
88
92
  return typeof n != "object" || n === null ? null : n;
89
93
  }
90
94
  class nt {
@@ -136,7 +140,7 @@ class nt {
136
140
  }
137
141
  class Zt {
138
142
  constructor(t, e) {
139
- this.getTarget = t, this.sourceId = `vd-${Math.random().toString(36).slice(2, 8)}`, this.targetOrigin = "*", this.isValid = e?.isValid ?? Mt, this.publisher = new nt((i) => this.post(i)), this.consumer = new nt((i) => this.routeToHandler(i)), e?.bufferIncoming !== !0 && this.consumer.markReady();
143
+ this.getTarget = t, this.sourceId = `vd-${Math.random().toString(36).slice(2, 8)}`, this.targetOrigin = "*", this.isValid = e?.isValid ?? Mt, this.onHandlerError = e?.onHandlerError ?? Wt, this.publisher = new nt((i) => this.post(i)), this.consumer = new nt((i) => this.routeToHandler(i)), e?.bufferIncoming !== !0 && this.consumer.markReady();
140
144
  }
141
145
  getTarget;
142
146
  handlers = /* @__PURE__ */ new Map();
@@ -146,6 +150,7 @@ class Zt {
146
150
  sourceId;
147
151
  targetOrigin;
148
152
  isValid;
153
+ onHandlerError;
149
154
  /**
150
155
  * Register a handler for a specific message type
151
156
  */
@@ -226,12 +231,16 @@ class Zt {
226
231
  return;
227
232
  const i = e(t);
228
233
  i instanceof Promise && i.catch((o) => {
229
- const s = o instanceof Error ? o.message : String(o);
230
- console.error(`Virtualdisplay: error handling ${t.type}: ${s}`);
234
+ this.onHandlerError(t, o);
231
235
  });
232
236
  }
233
237
  }
234
- class Wt {
238
+ function Wt(n, t) {
239
+ const e = t instanceof Error ? t.message : String(t);
240
+ console.error(`Virtualdisplay: error handling ${n.type}: ${e}`);
241
+ }
242
+ class Qt {
243
+ /** @internal */
235
244
  constructor(t, e) {
236
245
  this.send = t, this.instance = e;
237
246
  }
@@ -245,7 +254,8 @@ class Wt {
245
254
  });
246
255
  }
247
256
  }
248
- class Qt {
257
+ class Yt {
258
+ /** @internal */
249
259
  constructor(t, e) {
250
260
  this.value = t, this.attribute = e;
251
261
  }
@@ -255,6 +265,7 @@ class Qt {
255
265
  get isSelected() {
256
266
  return this.isSelectedValue;
257
267
  }
268
+ /** @internal */
258
269
  setSelected(t) {
259
270
  this.isSelectedValue = t;
260
271
  }
@@ -288,12 +299,13 @@ class y extends Error {
288
299
  return new y(t, A.INVALID_PARAMETER);
289
300
  }
290
301
  }
291
- class Yt {
302
+ class Kt {
292
303
  name;
293
304
  defaultValue;
294
305
  values;
295
306
  onSelect;
296
307
  onChangeCallback;
308
+ /** @internal */
297
309
  constructor(t) {
298
310
  this.name = t.name, this.defaultValue = t.defaultValue, this.onSelect = t.onSelect, this.values = this.createValues(t.values);
299
311
  }
@@ -328,6 +340,7 @@ class Yt {
328
340
  /**
329
341
  * Update selection state from server mutation result
330
342
  * Direct value comparison - no source/target translation
343
+ * @internal
331
344
  */
332
345
  handleResult(t) {
333
346
  let e;
@@ -340,18 +353,18 @@ class Yt {
340
353
  createValues(t) {
341
354
  const e = /* @__PURE__ */ new Map();
342
355
  for (const i of t) {
343
- const o = new Qt(i, this.name);
356
+ const o = new Yt(i, this.name);
344
357
  i === this.defaultValue && o.setSelected(!0), e.set(i, o);
345
358
  }
346
359
  return e;
347
360
  }
348
361
  }
349
- class Kt {
362
+ class Xt {
350
363
  attributes = /* @__PURE__ */ new Map();
351
364
  constructor(t, e, i) {
352
365
  for (const o of t) {
353
366
  const s = this.buildOptions(o, e);
354
- this.attributes.set(o.name, new Yt(s));
367
+ this.attributes.set(o.name, new Kt(s));
355
368
  }
356
369
  this.onMutationFailed = i;
357
370
  }
@@ -368,6 +381,7 @@ class Kt {
368
381
  }
369
382
  return t;
370
383
  }
384
+ /** @internal */
371
385
  handleResults(t) {
372
386
  for (const e of t) {
373
387
  if (!e.success) {
@@ -388,32 +402,32 @@ class Kt {
388
402
  return t.defaultValue !== void 0 ? { ...i, defaultValue: t.defaultValue } : i;
389
403
  }
390
404
  }
391
- const N = 4096, D = 16384, Xt = [1024, 256, 64], Jt = 20, Q = ["timestamp", "level", "msg", "service", "trace_id", "span_id"];
392
- function te(n) {
405
+ const N = 4096, $ = 16384, Jt = [1024, 256, 64], te = 20, Q = ["timestamp", "level", "msg", "service", "trace_id", "span_id"];
406
+ function ee(n) {
393
407
  const t = new Date(n.timestamp).toLocaleTimeString("en-GB", { hour12: !1 }), e = n.level.toUpperCase().padEnd(5), i = n.trace_id?.slice(0, 8) ?? "--------", o = n.msg, s = Object.entries(n).filter(([r]) => !Q.includes(r)).map(([r, a]) => `${r}=${O(a, N).line}`).join(" ");
394
408
  return `${t} ${e} [${i}] ${o}${s ? " " + s : ""}`;
395
409
  }
396
- function ee(n) {
397
- for (const o of [N, ...Xt]) {
410
+ function ne(n) {
411
+ for (const o of [N, ...Jt]) {
398
412
  const { line: s, truncated: r } = O(n, o);
399
413
  if (!r) {
400
- if (s.length <= D)
414
+ if (s.length <= $)
401
415
  return s;
402
416
  continue;
403
417
  }
404
418
  const { line: a } = O({ ...n, log_truncated: !0 }, o);
405
- if (a.length <= D)
419
+ if (a.length <= $)
406
420
  return a;
407
421
  }
408
- const t = Object.keys(n).filter((o) => !Q.includes(o)), e = { ...ie(n, Q), log_truncated: !0, log_dropped_count: t.length }, i = O({ ...e, log_dropped_attrs: t.slice(0, Jt) }, N);
409
- return i.line.length <= D ? i.line : O(e, N).line;
422
+ const t = Object.keys(n).filter((o) => !Q.includes(o)), e = { ...oe(n, Q), log_truncated: !0, log_dropped_count: t.length }, i = O({ ...e, log_dropped_attrs: t.slice(0, te) }, N);
423
+ return i.line.length <= $ ? i.line : O(e, N).line;
410
424
  }
411
425
  function O(n, t) {
412
426
  const e = [];
413
427
  let i = !1;
414
428
  return { line: JSON.stringify(n, function(r, a) {
415
429
  if (typeof a == "string")
416
- return a.length > t && (i = !0), ne(a, t);
430
+ return a.length > t && (i = !0), ie(a, t);
417
431
  if (typeof a == "bigint")
418
432
  return a.toString();
419
433
  if (typeof a != "object" || a === null)
@@ -423,17 +437,17 @@ function O(n, t) {
423
437
  return e.includes(a) ? "[Circular]" : (e.push(a), a);
424
438
  }), truncated: i };
425
439
  }
426
- function ne(n, t) {
440
+ function ie(n, t) {
427
441
  return n.length <= t ? n : `${n.slice(0, t)}...[truncated ${n.length - t} chars]`;
428
442
  }
429
- function ie(n, t) {
443
+ function oe(n, t) {
430
444
  const e = {};
431
445
  for (const i of t)
432
446
  n[i] !== void 0 && (e[i] = n[i]);
433
447
  return e;
434
448
  }
435
- function oe(n, t) {
436
- const e = t ? te(n) : ee(n);
449
+ function se(n, t) {
450
+ const e = t ? ee(n) : ne(n);
437
451
  n.level === "error" ? console.error(e) : n.level === "warn" ? console.warn(e) : console.log(e);
438
452
  }
439
453
  function ft(n, t = 0) {
@@ -450,34 +464,34 @@ function ft(n, t = 0) {
450
464
  }
451
465
  return n.cause !== void 0 && n.cause !== null && (e.cause = n.cause instanceof Error && t < 5 ? ft(n.cause, t + 1) : String(n.cause)), e;
452
466
  }
453
- function se(n) {
467
+ function re(n) {
454
468
  const t = {};
455
469
  for (const [e, i] of Object.entries(n))
456
470
  t[e] = i instanceof Error ? ft(i) : i;
457
471
  return t;
458
472
  }
459
- function re() {
473
+ function ae() {
460
474
  return /* @__PURE__ */ new Date();
461
475
  }
462
- function ae(n) {
476
+ function le(n) {
463
477
  return n.toISOString();
464
478
  }
465
479
  function gt() {
466
480
  return typeof navigator > "u" ? "" : navigator.userAgent;
467
481
  }
468
- function le() {
469
- return typeof navigator > "u" ? !1 : navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1;
470
- }
471
482
  function ce() {
472
- return /iPhone|iPad|iPod/i.test(gt()) || le();
483
+ return typeof navigator > "u" ? !1 : navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1;
473
484
  }
474
485
  function de() {
475
- return /Android/i.test(gt());
486
+ return /iPhone|iPad|iPod/i.test(gt()) || ce();
476
487
  }
477
488
  function ue() {
478
- return ce() || de();
489
+ return /Android/i.test(gt());
490
+ }
491
+ function he() {
492
+ return de() || ue();
479
493
  }
480
- class he {
494
+ class pe {
481
495
  constructor(t) {
482
496
  this.config = t;
483
497
  }
@@ -487,14 +501,14 @@ class he {
487
501
  */
488
502
  log(t, e, i = {}) {
489
503
  const o = this.config.traceProvider?.() ?? {}, s = {
490
- timestamp: ae(re()),
504
+ timestamp: le(ae()),
491
505
  level: t,
492
506
  msg: e,
493
507
  service: this.config.service,
494
508
  ...o,
495
- ...se(i)
509
+ ...re(i)
496
510
  };
497
- oe(s, this.config.isDev);
511
+ se(s, this.config.isDev);
498
512
  }
499
513
  /**
500
514
  * Log at DEBUG level (development only).
@@ -523,7 +537,7 @@ class he {
523
537
  }
524
538
  function bt(n, t) {
525
539
  const e = t?.isDev !== void 0 ? t.isDev : typeof process < "u" ? process.env.NODE_ENV !== "production" : !0;
526
- return new he({ service: n, isDev: e, traceProvider: t?.traceProvider });
540
+ return new pe({ service: n, isDev: e, traceProvider: t?.traceProvider });
527
541
  }
528
542
  function M(n) {
529
543
  if (n !== void 0)
@@ -537,14 +551,15 @@ function vt(n) {
537
551
  error: (t, e) => n.error(t, M(e))
538
552
  };
539
553
  }
540
- let yt = !1, k = vt(bt("client", { isDev: !1 }));
541
- function pe() {
542
- yt = !0, k = vt(bt("client", { isDev: !0 }));
554
+ let yt = !1, w = vt(bt("client", { isDev: !1 }));
555
+ function me() {
556
+ yt = !0, w = vt(bt("client", { isDev: !0 }));
543
557
  }
544
- function Co() {
558
+ function Ao() {
545
559
  return yt;
546
560
  }
547
- class me {
561
+ class fe {
562
+ /** @internal */
548
563
  constructor(t, e, i) {
549
564
  this.send = t, this.instance = e, this.onMutationFailed = i;
550
565
  }
@@ -555,16 +570,18 @@ class me {
555
570
  pendingCallbacks = [];
556
571
  /**
557
572
  * Handle incoming MAPPING message from server
573
+ * @internal
558
574
  */
559
575
  handleMappingReceived(t) {
560
- k.debug("Initializing from server mapping", {
576
+ w.debug("Initializing from server mapping", {
561
577
  attributeCount: t.attributes.length
562
- }), this.registry = new Kt(
578
+ }), this.registry = new Xt(
563
579
  t.attributes,
564
580
  (e, i) => this.sendMutation(e, i),
565
581
  this.onMutationFailed
566
582
  ), this.replayPendingCallbacks();
567
583
  }
584
+ /** @internal */
568
585
  handleMutationResult(t) {
569
586
  this.registry?.handleResults(t.results);
570
587
  }
@@ -604,7 +621,7 @@ class me {
604
621
  }
605
622
  const i = this.registry.get(t);
606
623
  if (i === void 0) {
607
- k.warn(`onChange: attribute "${t}" not found — callback will not fire`);
624
+ w.warn(`onChange: attribute "${t}" not found — callback will not fire`);
608
625
  return;
609
626
  }
610
627
  i.onChange(e);
@@ -629,14 +646,15 @@ class me {
629
646
  replayPendingCallbacks() {
630
647
  for (const { name: t, callback: e } of this.pendingCallbacks) {
631
648
  const i = this.registry?.get(t);
632
- i === void 0 && k.warn(`onChange: attribute "${t}" not found — buffered callback will not fire`), i?.onChange(e);
649
+ i === void 0 && w.warn(`onChange: attribute "${t}" not found — buffered callback will not fire`), i?.onChange(e);
633
650
  }
634
651
  this.pendingCallbacks.length = 0;
635
652
  }
636
653
  }
637
- class fe {
654
+ class ge {
638
655
  snapshot;
639
656
  callbacks = [];
657
+ /** @internal */
640
658
  handleSnapshot(t) {
641
659
  this.snapshot = t.attributes;
642
660
  for (const e of this.callbacks)
@@ -654,7 +672,8 @@ class fe {
654
672
  return this.snapshot ?? [];
655
673
  }
656
674
  }
657
- let ge = class {
675
+ let be = class {
676
+ /** @internal */
658
677
  constructor(t) {
659
678
  this.send = t;
660
679
  }
@@ -717,10 +736,11 @@ let ge = class {
717
736
  this.send(t);
718
737
  }
719
738
  };
720
- class be {
739
+ class ve {
721
740
  state;
722
741
  limitsState;
723
742
  changeCallbacks = [];
743
+ /** @internal */
724
744
  constructor() {
725
745
  this.state = {
726
746
  rotation: 0,
@@ -747,9 +767,9 @@ class be {
747
767
  return this.state.zoom;
748
768
  }
749
769
  /**
750
- * Subscribe to camera position changes.
751
- * Also fires when limits are applied via applyLimits() so components
752
- * can re-evaluate disabled states without a separate callback.
770
+ * Subscribe to camera position changes. Also fires when the viewer reports new
771
+ * movement limits, so controls can re-evaluate their disabled state without a
772
+ * second callback.
753
773
  */
754
774
  onChange(t) {
755
775
  this.changeCallbacks.push(t);
@@ -764,6 +784,7 @@ class be {
764
784
  /**
765
785
  * Apply camera limits received from the server CONFIG message.
766
786
  * Fires onChange callbacks so button disabled states update immediately.
787
+ * @internal
767
788
  */
768
789
  applyLimits(t) {
769
790
  this.limitsState = t;
@@ -773,12 +794,14 @@ class be {
773
794
  }
774
795
  /**
775
796
  * Handle incoming camera position message from server
797
+ * @internal
776
798
  */
777
799
  handlePositionUpdate(t) {
778
800
  this.update(t.transforms);
779
801
  }
780
802
  /**
781
803
  * Update camera position from server transforms
804
+ * @internal
782
805
  */
783
806
  update(t) {
784
807
  let e = !1;
@@ -805,20 +828,21 @@ class be {
805
828
  }
806
829
  }
807
830
  }
808
- function ve(n, t) {
809
- const e = n.filter((s) => ye(s, t));
831
+ function ye(n, t) {
832
+ const e = n.filter((s) => we(s, t));
810
833
  if (e.length === 0)
811
834
  return;
812
835
  const i = Math.max(...e.map(it)), o = e.filter((s) => it(s) === i);
813
836
  return o.length === 1 ? o[0] : void 0;
814
837
  }
815
- function ye(n, t) {
838
+ function we(n, t) {
816
839
  return Object.entries(n.attributes).every(([e, i]) => t[e] === i);
817
840
  }
818
841
  function it(n) {
819
842
  return Object.keys(n.attributes).length;
820
843
  }
821
- class we {
844
+ class Se {
845
+ /** @internal */
822
846
  constructor(t, e) {
823
847
  this.dispatchChange = t, this.dispatchSubmit = e;
824
848
  }
@@ -888,6 +912,7 @@ class we {
888
912
  * resolve and when a submit handler is registered (which can switch the button
889
913
  * on without a configuration change). Separate from `onChange`, which stays the
890
914
  * host-facing, mutation-driven contract. Returns a disposer.
915
+ * @internal
891
916
  */
892
917
  onRender(t) {
893
918
  return this.renderCallbacks.push(t), () => {
@@ -907,11 +932,17 @@ class we {
907
932
  const t = this.resolved !== void 0 ? { attributes: this.resolved.attributes, reference: this.resolved.reference } : { attributes: { ...this.selection }, reference: "" };
908
933
  this.dispatchSubmit(t), await this.submitCallback?.(t);
909
934
  }
910
- /** Called by the client when a PRICING message arrives from the viewer. */
935
+ /**
936
+ * Called by the client when a PRICING message arrives from the viewer.
937
+ * @internal
938
+ */
911
939
  handlePricingReceived(t) {
912
940
  this.pricing = t, this.recompute();
913
941
  }
914
- /** Called by the client after every mutation result, with the full selection. */
942
+ /**
943
+ * Called by the client after every mutation result, with the full selection.
944
+ * @internal
945
+ */
915
946
  handleSelectionChanged(t) {
916
947
  this.selection = t, this.recompute();
917
948
  }
@@ -928,7 +959,7 @@ class we {
928
959
  resolve() {
929
960
  if (this.pricing === void 0)
930
961
  return;
931
- const t = ve(this.pricing.rules, this.selection);
962
+ const t = ye(this.pricing.rules, this.selection);
932
963
  if (!(t === void 0 || t.availability === Ot.HIDDEN))
933
964
  return {
934
965
  attributes: { ...this.selection },
@@ -939,7 +970,8 @@ class we {
939
970
  };
940
971
  }
941
972
  }
942
- class Se {
973
+ class _e {
974
+ /** @internal */
943
975
  constructor(t, e, i) {
944
976
  this.send = t, this.dispatch = e, this.instance = i;
945
977
  }
@@ -980,7 +1012,10 @@ class Se {
980
1012
  onChange(t) {
981
1013
  this.changeCallbacks.push(t);
982
1014
  }
983
- /** Called by the client when a FocusStateMessage is received from the viewer. */
1015
+ /**
1016
+ * Called by the client when a FocusStateMessage is received from the viewer.
1017
+ * @internal
1018
+ */
984
1019
  handleStateReceived(t) {
985
1020
  t.state === It.FOCUSED && t.component !== void 0 ? (this.focused = t.component, this.attributes = t.attributes ?? []) : (this.focused = null, this.attributes = []);
986
1021
  const e = this.focused !== null ? { component: this.focused, attributes: this.attributes } : null;
@@ -990,6 +1025,7 @@ class Se {
990
1025
  }
991
1026
  }
992
1027
  class ke {
1028
+ /** @internal */
993
1029
  constructor(t) {
994
1030
  this.filename = t;
995
1031
  }
@@ -1027,6 +1063,7 @@ class ke {
1027
1063
  /**
1028
1064
  * Mark the photo as developed and notify all callbacks
1029
1065
  * This method is called by Snapshot when the photo data arrives from the server
1066
+ * @internal
1030
1067
  */
1031
1068
  develop(t) {
1032
1069
  this.developed || this.failed || (this.photoData = t, this.developed = !0, this.developedCallbacks.forEach((e) => {
@@ -1035,6 +1072,7 @@ class ke {
1035
1072
  }
1036
1073
  /**
1037
1074
  * Mark the photo as failed and notify error callbacks
1075
+ * @internal
1038
1076
  */
1039
1077
  fail(t) {
1040
1078
  this.developed || this.failed || (this.failed = !0, this.errorCallbacks.forEach((e) => {
@@ -1044,6 +1082,7 @@ class ke {
1044
1082
  }
1045
1083
  const ot = 3e4;
1046
1084
  class Ce {
1085
+ /** @internal */
1047
1086
  constructor(t) {
1048
1087
  this.send = t;
1049
1088
  }
@@ -1058,9 +1097,9 @@ class Ce {
1058
1097
  * @throws VirtualdisplayError if filename is invalid
1059
1098
  */
1060
1099
  take(t) {
1061
- this.validateFilename(t), k.debug("Taking snapshot", { filename: t });
1100
+ this.validateFilename(t), w.debug("Taking snapshot", { filename: t });
1062
1101
  const e = new ke(t), i = setTimeout(() => {
1063
- this.pendingPhotos.delete(t), k.warn("Snapshot timed out", { filename: t }), e.fail(new y(
1102
+ this.pendingPhotos.delete(t), w.warn("Snapshot timed out", { filename: t }), e.fail(new y(
1064
1103
  `Snapshot timed out: the viewer did not respond within ${ot}ms`,
1065
1104
  A.SNAPSHOT_FAILED
1066
1105
  ));
@@ -1073,11 +1112,12 @@ class Ce {
1073
1112
  /**
1074
1113
  * Handle incoming snapshot result from server
1075
1114
  * Matches the message to a pending photo by filename, then develops or fails it
1115
+ * @internal
1076
1116
  */
1077
1117
  handleSnapshotResult(t) {
1078
1118
  const e = this.pendingPhotos.get(t.filename);
1079
1119
  if (e === void 0) {
1080
- k.warn("No pending photo found for filename", {
1120
+ w.warn("No pending photo found for filename", {
1081
1121
  filename: t.filename,
1082
1122
  pendingFilenames: Array.from(this.pendingPhotos.keys())
1083
1123
  });
@@ -1130,7 +1170,7 @@ class Ce {
1130
1170
  );
1131
1171
  }
1132
1172
  }
1133
- class _e {
1173
+ class Ae {
1134
1174
  container = null;
1135
1175
  attach(t) {
1136
1176
  this.container = t;
@@ -1151,7 +1191,7 @@ class _e {
1151
1191
  };
1152
1192
  }
1153
1193
  }
1154
- const Ae = {}, Ee = "en", wt = (
1194
+ const Ee = {}, xe = "en", wt = (
1155
1195
  /** @type {const} */
1156
1196
  ["en", "nl", "de"]
1157
1197
  ), X = [
@@ -1163,25 +1203,25 @@ globalThis.__paraglide.ssr = /** @type {any} */
1163
1203
  globalThis.__paraglide.ssr ?? {};
1164
1204
  let rt = !1, p = () => {
1165
1205
  let n = X;
1166
- !Y && typeof window < "u" && window.location?.href && (n = kt(window.location.href));
1167
- const t = xe(n);
1206
+ !Y && typeof window < "u" && window.location?.href && (n = _t(window.location.href));
1207
+ const t = Te(n);
1168
1208
  if (t)
1169
1209
  return rt || (rt = !0, St(t, { reload: !1 })), t;
1170
1210
  throw new Error("No locale found. Read the docs https://paraglidejs.com/errors#no-locale-found");
1171
1211
  };
1172
- function xe(n, t) {
1212
+ function Te(n, t) {
1173
1213
  let e;
1174
1214
  for (const i of n) {
1175
1215
  if (i === "baseLocale")
1176
- e = Ee;
1177
- else if (Ct(i) && z.has(i)) {
1216
+ e = xe;
1217
+ else if (kt(i) && z.has(i)) {
1178
1218
  const s = z.get(i);
1179
1219
  if (s) {
1180
1220
  const r = s.getLocale();
1181
1221
  if (r instanceof Promise)
1182
1222
  continue;
1183
1223
  if (r !== void 0)
1184
- return Ie(r);
1224
+ return Oe(r);
1185
1225
  }
1186
1226
  }
1187
1227
  const o = J(e);
@@ -1189,7 +1229,7 @@ function xe(n, t) {
1189
1229
  return o;
1190
1230
  }
1191
1231
  }
1192
- const Te = (n) => {
1232
+ const Re = (n) => {
1193
1233
  window.location.reload();
1194
1234
  };
1195
1235
  let St = (n, t) => {
@@ -1204,9 +1244,9 @@ let St = (n, t) => {
1204
1244
  }
1205
1245
  const o = [];
1206
1246
  let s = X;
1207
- !Y && typeof window < "u" && window.location?.href && (s = kt(window.location.href));
1247
+ !Y && typeof window < "u" && window.location?.href && (s = _t(window.location.href));
1208
1248
  for (const a of s)
1209
- if (a !== "baseLocale" && Ct(a) && z.has(a)) {
1249
+ if (a !== "baseLocale" && kt(a) && z.has(a)) {
1210
1250
  const d = z.get(a);
1211
1251
  if (d) {
1212
1252
  let u = d.setLocale(n);
@@ -1218,14 +1258,14 @@ let St = (n, t) => {
1218
1258
  }
1219
1259
  }
1220
1260
  const r = () => {
1221
- !Y && e.reload && window.location && n !== i && Te();
1261
+ !Y && e.reload && window.location && n !== i && Re();
1222
1262
  };
1223
1263
  if (o.length)
1224
1264
  return Promise.all(o).then(() => {
1225
1265
  r();
1226
1266
  });
1227
1267
  r();
1228
- }, Re = () => typeof window < "u" ? window.location.origin : "http://fallback.com";
1268
+ }, Ie = () => typeof window < "u" ? window.location.origin : "http://fallback.com";
1229
1269
  function J(n) {
1230
1270
  if (typeof n != "string")
1231
1271
  return;
@@ -1234,553 +1274,558 @@ function J(n) {
1234
1274
  if (e.toLowerCase() === t)
1235
1275
  return e;
1236
1276
  }
1237
- function Ie(n) {
1277
+ function Oe(n) {
1238
1278
  const t = J(n);
1239
1279
  if (t)
1240
1280
  return t;
1241
1281
  throw new Error(`Invalid locale: ${n}. Expected one of: ${wt.join(", ")}`);
1242
1282
  }
1243
- function Oe(n) {
1244
- return Le(n);
1283
+ function Le(n, t) {
1284
+ return n.exec(t.href);
1285
+ }
1286
+ function Me(n) {
1287
+ return Ne(n);
1245
1288
  }
1246
- function Le(n) {
1247
- const t = typeof n == "string" ? new URL(n, Re()) : new URL(n), e = t.pathname.split("/").filter(Boolean);
1289
+ function Ne(n) {
1290
+ const t = typeof n == "string" ? new URL(n, Ie()) : new URL(n), e = t.pathname.split("/").filter(Boolean);
1248
1291
  return e.length > 0 && J(e[0]) && (t.pathname = "/" + e.slice(1).join("/")), t;
1249
1292
  }
1250
1293
  let at, lt;
1251
- function Me(n) {
1294
+ function ze(n) {
1252
1295
  if (st.length === 0)
1253
1296
  return;
1254
1297
  const t = typeof n == "string" ? n : n.href;
1255
1298
  if (at === t)
1256
1299
  return lt;
1257
- const e = new URL(t, "http://example.com"), i = Oe(e), o = i.href === e.href ? [e] : [e, i];
1300
+ const e = new URL(t, "http://example.com"), i = Me(e), o = i.href === e.href ? [e] : [e, i];
1258
1301
  let s;
1259
1302
  for (const r of o) {
1260
- for (const a of st)
1261
- if (new Ae(a.match, r.href).exec(r.href)) {
1303
+ for (const a of st) {
1304
+ const d = new Ee(a.match, r.href);
1305
+ if (Le(d, r)) {
1262
1306
  s = a;
1263
1307
  break;
1264
1308
  }
1309
+ }
1265
1310
  if (s)
1266
1311
  break;
1267
1312
  }
1268
1313
  return at = t, lt = s, s;
1269
1314
  }
1270
- function kt(n) {
1271
- const t = Me(n);
1315
+ function _t(n) {
1316
+ const t = ze(n);
1272
1317
  return t && t.exclude !== !0 && Array.isArray(t.strategy) ? t.strategy : X;
1273
1318
  }
1274
1319
  const z = /* @__PURE__ */ new Map();
1275
- function Ct(n) {
1320
+ function kt(n) {
1276
1321
  return typeof n == "string" && /^custom-[A-Za-z0-9_-]+$/.test(n);
1277
1322
  }
1278
- const Ne = (
1279
- /** @type {(inputs: Controls_Ar_Buttonlabel1Inputs) => LocalizedString} */
1323
+ const Pe = (
1324
+ /** @type {(inputs: Commerce_Submit_BusyInputs) => LocalizedString} */
1280
1325
  () => (
1281
1326
  /** @type {LocalizedString} */
1282
- "Activate AR"
1327
+ "Working…"
1283
1328
  )
1284
- ), ze = (
1285
- /** @type {(inputs: Controls_Ar_Buttonlabel1Inputs) => LocalizedString} */
1329
+ ), Fe = (
1330
+ /** @type {(inputs: Commerce_Submit_BusyInputs) => LocalizedString} */
1286
1331
  () => (
1287
1332
  /** @type {LocalizedString} */
1288
- "AR activeren"
1333
+ "Bezig…"
1289
1334
  )
1290
- ), Pe = (
1291
- /** @type {(inputs: Controls_Ar_Buttonlabel1Inputs) => LocalizedString} */
1335
+ ), $e = (
1336
+ /** @type {(inputs: Commerce_Submit_BusyInputs) => LocalizedString} */
1292
1337
  () => (
1293
1338
  /** @type {LocalizedString} */
1294
- "AR aktivieren"
1339
+ "Läuft…"
1295
1340
  )
1296
- ), Fe = (
1297
- /** @type {((inputs?: Controls_Ar_Buttonlabel1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Ar_Buttonlabel1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1341
+ ), De = (
1342
+ /** @type {((inputs?: Commerce_Submit_BusyInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Commerce_Submit_BusyInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1298
1343
  ((n = {}, t = {}) => {
1299
1344
  const e = t.locale ?? p();
1300
- return e === "nl" ? ze() : e === "de" ? Pe() : Ne();
1345
+ return e === "nl" ? Fe() : e === "de" ? $e() : Pe();
1301
1346
  })
1302
- ), De = (
1303
- /** @type {(inputs: Controls_Qr_Modaltitle1Inputs) => LocalizedString} */
1304
- () => (
1305
- /** @type {LocalizedString} */
1306
- "Scan to view in AR"
1307
- )
1308
- ), $e = (
1309
- /** @type {(inputs: Controls_Qr_Modaltitle1Inputs) => LocalizedString} */
1310
- () => (
1311
- /** @type {LocalizedString} */
1312
- "Scan om in AR te bekijken"
1313
- )
1314
1347
  ), Be = (
1315
- /** @type {(inputs: Controls_Qr_Modaltitle1Inputs) => LocalizedString} */
1348
+ /** @type {(inputs: Commerce_Submit_FailedInputs) => LocalizedString} */
1316
1349
  () => (
1317
1350
  /** @type {LocalizedString} */
1318
- "Scannen für AR-Ansicht"
1351
+ "Failed"
1319
1352
  )
1320
1353
  ), Ue = (
1321
- /** @type {((inputs?: Controls_Qr_Modaltitle1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Qr_Modaltitle1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1322
- ((n = {}, t = {}) => {
1323
- const e = t.locale ?? p();
1324
- return e === "nl" ? $e() : e === "de" ? Be() : De();
1325
- })
1326
- ), Ve = (
1327
- /** @type {(inputs: Controls_Qr_Modaldescription1Inputs) => LocalizedString} */
1354
+ /** @type {(inputs: Commerce_Submit_FailedInputs) => LocalizedString} */
1328
1355
  () => (
1329
1356
  /** @type {LocalizedString} */
1330
- "Use your smartphone camera to scan this QR code"
1357
+ "Mislukt"
1331
1358
  )
1332
- ), je = (
1333
- /** @type {(inputs: Controls_Qr_Modaldescription1Inputs) => LocalizedString} */
1359
+ ), Ve = (
1360
+ /** @type {(inputs: Commerce_Submit_FailedInputs) => LocalizedString} */
1334
1361
  () => (
1335
1362
  /** @type {LocalizedString} */
1336
- "Gebruik de camera van je smartphone om deze QR-code te scannen"
1363
+ "Fehlgeschlagen"
1337
1364
  )
1338
1365
  ), He = (
1339
- /** @type {(inputs: Controls_Qr_Modaldescription1Inputs) => LocalizedString} */
1340
- () => (
1341
- /** @type {LocalizedString} */
1342
- "Verwende die Kamera deines Smartphones, um diesen QR-Code zu scannen"
1343
- )
1344
- ), qe = (
1345
- /** @type {((inputs?: Controls_Qr_Modaldescription1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Qr_Modaldescription1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1346
- ((n = {}, t = {}) => {
1347
- const e = t.locale ?? p();
1348
- return e === "nl" ? je() : e === "de" ? He() : Ve();
1349
- })
1350
- ), Ge = (
1351
- /** @type {(inputs: Controls_Qr_Modalinstructions1Inputs) => LocalizedString} */
1352
- () => (
1353
- /** @type {LocalizedString} */
1354
- "Your phone will open the 3D model in AR mode."
1355
- )
1356
- ), Ze = (
1357
- /** @type {(inputs: Controls_Qr_Modalinstructions1Inputs) => LocalizedString} */
1358
- () => (
1359
- /** @type {LocalizedString} */
1360
- "Je telefoon opent het 3D-model in AR-modus."
1361
- )
1362
- ), We = (
1363
- /** @type {(inputs: Controls_Qr_Modalinstructions1Inputs) => LocalizedString} */
1364
- () => (
1365
- /** @type {LocalizedString} */
1366
- "Dein Telefon öffnet das 3D-Modell im AR-Modus."
1367
- )
1368
- ), Qe = (
1369
- /** @type {((inputs?: Controls_Qr_Modalinstructions1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Qr_Modalinstructions1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1366
+ /** @type {((inputs?: Commerce_Submit_FailedInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Commerce_Submit_FailedInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1370
1367
  ((n = {}, t = {}) => {
1371
1368
  const e = t.locale ?? p();
1372
- return e === "nl" ? Ze() : e === "de" ? We() : Ge();
1369
+ return e === "nl" ? Ue() : e === "de" ? Ve() : Be();
1373
1370
  })
1374
- ), Ye = (
1375
- /** @type {(inputs: Controls_Qr_Closebutton1Inputs) => LocalizedString} */
1371
+ ), je = (
1372
+ /** @type {(inputs: Commerce_Submit_SuccessInputs) => LocalizedString} */
1376
1373
  () => (
1377
1374
  /** @type {LocalizedString} */
1378
- "Close"
1375
+ "Done"
1379
1376
  )
1380
- ), Ke = (
1381
- /** @type {(inputs: Controls_Qr_Closebutton1Inputs) => LocalizedString} */
1377
+ ), qe = (
1378
+ /** @type {(inputs: Commerce_Submit_SuccessInputs) => LocalizedString} */
1382
1379
  () => (
1383
1380
  /** @type {LocalizedString} */
1384
- "Sluiten"
1381
+ "Gelukt"
1385
1382
  )
1386
- ), Xe = (
1387
- /** @type {(inputs: Controls_Qr_Closebutton1Inputs) => LocalizedString} */
1383
+ ), Ge = (
1384
+ /** @type {(inputs: Commerce_Submit_SuccessInputs) => LocalizedString} */
1388
1385
  () => (
1389
1386
  /** @type {LocalizedString} */
1390
- "Schließen"
1387
+ "Fertig"
1391
1388
  )
1392
- ), Je = (
1393
- /** @type {((inputs?: Controls_Qr_Closebutton1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Qr_Closebutton1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1389
+ ), Ze = (
1390
+ /** @type {((inputs?: Commerce_Submit_SuccessInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Commerce_Submit_SuccessInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1394
1391
  ((n = {}, t = {}) => {
1395
1392
  const e = t.locale ?? p();
1396
- return e === "nl" ? Ke() : e === "de" ? Xe() : Ye();
1393
+ return e === "nl" ? qe() : e === "de" ? Ge() : je();
1397
1394
  })
1398
- ), tn = (
1395
+ ), We = (
1399
1396
  /** @type {(inputs: Controls_Annotations_Buttonlabel1Inputs) => LocalizedString} */
1400
1397
  () => (
1401
1398
  /** @type {LocalizedString} */
1402
1399
  "Annotations"
1403
1400
  )
1404
- ), en = (
1401
+ ), Qe = (
1405
1402
  /** @type {(inputs: Controls_Annotations_Buttonlabel1Inputs) => LocalizedString} */
1406
1403
  () => (
1407
1404
  /** @type {LocalizedString} */
1408
1405
  "Annotaties"
1409
1406
  )
1410
- ), nn = (
1407
+ ), Ye = (
1411
1408
  /** @type {(inputs: Controls_Annotations_Buttonlabel1Inputs) => LocalizedString} */
1412
1409
  () => (
1413
1410
  /** @type {LocalizedString} */
1414
1411
  "Anmerkungen"
1415
1412
  )
1416
- ), on = (
1413
+ ), Ke = (
1417
1414
  /** @type {((inputs?: Controls_Annotations_Buttonlabel1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Annotations_Buttonlabel1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1418
1415
  ((n = {}, t = {}) => {
1419
1416
  const e = t.locale ?? p();
1420
- return e === "nl" ? en() : e === "de" ? nn() : tn();
1417
+ return e === "nl" ? Qe() : e === "de" ? Ye() : We();
1421
1418
  })
1422
- ), sn = (
1423
- /** @type {(inputs: Controls_Fullscreen_Buttonlabel1Inputs) => LocalizedString} */
1419
+ ), Xe = (
1420
+ /** @type {(inputs: Controls_Ar_Buttonlabel1Inputs) => LocalizedString} */
1424
1421
  () => (
1425
1422
  /** @type {LocalizedString} */
1426
- "Fullscreen"
1423
+ "Activate AR"
1427
1424
  )
1428
- ), rn = (
1429
- /** @type {(inputs: Controls_Fullscreen_Buttonlabel1Inputs) => LocalizedString} */
1425
+ ), Je = (
1426
+ /** @type {(inputs: Controls_Ar_Buttonlabel1Inputs) => LocalizedString} */
1430
1427
  () => (
1431
1428
  /** @type {LocalizedString} */
1432
- "Volledig scherm"
1429
+ "AR activeren"
1433
1430
  )
1434
- ), an = (
1435
- /** @type {(inputs: Controls_Fullscreen_Buttonlabel1Inputs) => LocalizedString} */
1431
+ ), tn = (
1432
+ /** @type {(inputs: Controls_Ar_Buttonlabel1Inputs) => LocalizedString} */
1436
1433
  () => (
1437
1434
  /** @type {LocalizedString} */
1438
- "Vollbild"
1435
+ "AR aktivieren"
1439
1436
  )
1440
- ), ln = (
1441
- /** @type {((inputs?: Controls_Fullscreen_Buttonlabel1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Fullscreen_Buttonlabel1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1437
+ ), en = (
1438
+ /** @type {((inputs?: Controls_Ar_Buttonlabel1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Ar_Buttonlabel1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1442
1439
  ((n = {}, t = {}) => {
1443
1440
  const e = t.locale ?? p();
1444
- return e === "nl" ? rn() : e === "de" ? an() : sn();
1441
+ return e === "nl" ? Je() : e === "de" ? tn() : Xe();
1445
1442
  })
1446
- ), cn = (
1447
- /** @type {(inputs: Loading_Downloadingshort1Inputs) => LocalizedString} */
1443
+ ), nn = (
1444
+ /** @type {(inputs: Controls_Camera_ResetInputs) => LocalizedString} */
1448
1445
  () => (
1449
1446
  /** @type {LocalizedString} */
1450
- "Downloading"
1447
+ "Reset camera"
1451
1448
  )
1452
- ), dn = (
1453
- /** @type {(inputs: Loading_Downloadingshort1Inputs) => LocalizedString} */
1449
+ ), on = (
1450
+ /** @type {(inputs: Controls_Camera_ResetInputs) => LocalizedString} */
1454
1451
  () => (
1455
1452
  /** @type {LocalizedString} */
1456
- "Downloaden"
1453
+ "Camera resetten"
1457
1454
  )
1458
- ), un = (
1459
- /** @type {(inputs: Loading_Downloadingshort1Inputs) => LocalizedString} */
1455
+ ), sn = (
1456
+ /** @type {(inputs: Controls_Camera_ResetInputs) => LocalizedString} */
1460
1457
  () => (
1461
1458
  /** @type {LocalizedString} */
1462
- "Herunterladen"
1459
+ "Kamera zurücksetzen"
1463
1460
  )
1464
- ), hn = (
1465
- /** @type {((inputs?: Loading_Downloadingshort1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Loading_Downloadingshort1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1461
+ ), rn = (
1462
+ /** @type {((inputs?: Controls_Camera_ResetInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_ResetInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1466
1463
  ((n = {}, t = {}) => {
1467
1464
  const e = t.locale ?? p();
1468
- return e === "nl" ? dn() : e === "de" ? un() : cn();
1465
+ return e === "nl" ? on() : e === "de" ? sn() : nn();
1469
1466
  })
1470
- ), pn = (
1471
- /** @type {(inputs: Controls_Screenshot_Buttonlabel1Inputs) => LocalizedString} */
1467
+ ), an = (
1468
+ /** @type {(inputs: Controls_Camera_Rotateleft1Inputs) => LocalizedString} */
1472
1469
  () => (
1473
1470
  /** @type {LocalizedString} */
1474
- "Screenshot"
1471
+ "Rotate left"
1475
1472
  )
1476
- ), mn = (
1477
- /** @type {(inputs: Controls_Screenshot_Buttonlabel1Inputs) => LocalizedString} */
1473
+ ), ln = (
1474
+ /** @type {(inputs: Controls_Camera_Rotateleft1Inputs) => LocalizedString} */
1478
1475
  () => (
1479
1476
  /** @type {LocalizedString} */
1480
- "Screenshot"
1477
+ "Naar links draaien"
1481
1478
  )
1482
- ), fn = (
1483
- /** @type {(inputs: Controls_Screenshot_Buttonlabel1Inputs) => LocalizedString} */
1479
+ ), cn = (
1480
+ /** @type {(inputs: Controls_Camera_Rotateleft1Inputs) => LocalizedString} */
1484
1481
  () => (
1485
1482
  /** @type {LocalizedString} */
1486
- "Screenshot"
1483
+ "Nach links drehen"
1487
1484
  )
1488
- ), gn = (
1489
- /** @type {((inputs?: Controls_Screenshot_Buttonlabel1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Screenshot_Buttonlabel1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1485
+ ), dn = (
1486
+ /** @type {((inputs?: Controls_Camera_Rotateleft1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Rotateleft1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1490
1487
  ((n = {}, t = {}) => {
1491
1488
  const e = t.locale ?? p();
1492
- return e === "nl" ? mn() : e === "de" ? fn() : pn();
1489
+ return e === "nl" ? ln() : e === "de" ? cn() : an();
1493
1490
  })
1494
- ), bn = (
1495
- /** @type {(inputs: Controls_Configurator_OpenInputs) => LocalizedString} */
1491
+ ), un = (
1492
+ /** @type {(inputs: Controls_Camera_Rotateright1Inputs) => LocalizedString} */
1496
1493
  () => (
1497
1494
  /** @type {LocalizedString} */
1498
- "Configure"
1495
+ "Rotate right"
1499
1496
  )
1500
- ), vn = (
1501
- /** @type {(inputs: Controls_Configurator_OpenInputs) => LocalizedString} */
1497
+ ), hn = (
1498
+ /** @type {(inputs: Controls_Camera_Rotateright1Inputs) => LocalizedString} */
1502
1499
  () => (
1503
1500
  /** @type {LocalizedString} */
1504
- "Configureren"
1501
+ "Naar rechts draaien"
1505
1502
  )
1506
- ), yn = (
1507
- /** @type {(inputs: Controls_Configurator_OpenInputs) => LocalizedString} */
1503
+ ), pn = (
1504
+ /** @type {(inputs: Controls_Camera_Rotateright1Inputs) => LocalizedString} */
1508
1505
  () => (
1509
1506
  /** @type {LocalizedString} */
1510
- "Konfigurieren"
1507
+ "Nach rechts drehen"
1511
1508
  )
1512
- ), wn = (
1513
- /** @type {((inputs?: Controls_Configurator_OpenInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Configurator_OpenInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1509
+ ), mn = (
1510
+ /** @type {((inputs?: Controls_Camera_Rotateright1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Rotateright1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1514
1511
  ((n = {}, t = {}) => {
1515
1512
  const e = t.locale ?? p();
1516
- return e === "nl" ? vn() : e === "de" ? yn() : bn();
1513
+ return e === "nl" ? hn() : e === "de" ? pn() : un();
1517
1514
  })
1518
- ), Sn = (
1519
- /** @type {(inputs: Controls_Configurator_CloseInputs) => LocalizedString} */
1515
+ ), fn = (
1516
+ /** @type {(inputs: Controls_Camera_Tiltdown1Inputs) => LocalizedString} */
1520
1517
  () => (
1521
1518
  /** @type {LocalizedString} */
1522
- "Close"
1519
+ "Tilt down"
1523
1520
  )
1524
- ), kn = (
1525
- /** @type {(inputs: Controls_Configurator_CloseInputs) => LocalizedString} */
1521
+ ), gn = (
1522
+ /** @type {(inputs: Controls_Camera_Tiltdown1Inputs) => LocalizedString} */
1526
1523
  () => (
1527
1524
  /** @type {LocalizedString} */
1528
- "Sluiten"
1525
+ "Omlaag kantelen"
1529
1526
  )
1530
- ), Cn = (
1531
- /** @type {(inputs: Controls_Configurator_CloseInputs) => LocalizedString} */
1527
+ ), bn = (
1528
+ /** @type {(inputs: Controls_Camera_Tiltdown1Inputs) => LocalizedString} */
1532
1529
  () => (
1533
1530
  /** @type {LocalizedString} */
1534
- "Schließen"
1531
+ "Nach unten kippen"
1535
1532
  )
1536
- ), _n = (
1537
- /** @type {((inputs?: Controls_Configurator_CloseInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Configurator_CloseInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1533
+ ), vn = (
1534
+ /** @type {((inputs?: Controls_Camera_Tiltdown1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Tiltdown1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1538
1535
  ((n = {}, t = {}) => {
1539
1536
  const e = t.locale ?? p();
1540
- return e === "nl" ? kn() : e === "de" ? Cn() : Sn();
1537
+ return e === "nl" ? gn() : e === "de" ? bn() : fn();
1541
1538
  })
1542
- ), An = (
1543
- /** @type {(inputs: Controls_Camera_ResetInputs) => LocalizedString} */
1539
+ ), yn = (
1540
+ /** @type {(inputs: Controls_Camera_Tiltup1Inputs) => LocalizedString} */
1544
1541
  () => (
1545
1542
  /** @type {LocalizedString} */
1546
- "Reset camera"
1543
+ "Tilt up"
1547
1544
  )
1548
- ), En = (
1549
- /** @type {(inputs: Controls_Camera_ResetInputs) => LocalizedString} */
1545
+ ), wn = (
1546
+ /** @type {(inputs: Controls_Camera_Tiltup1Inputs) => LocalizedString} */
1550
1547
  () => (
1551
1548
  /** @type {LocalizedString} */
1552
- "Camera resetten"
1549
+ "Omhoog kantelen"
1553
1550
  )
1554
- ), xn = (
1555
- /** @type {(inputs: Controls_Camera_ResetInputs) => LocalizedString} */
1551
+ ), Sn = (
1552
+ /** @type {(inputs: Controls_Camera_Tiltup1Inputs) => LocalizedString} */
1556
1553
  () => (
1557
1554
  /** @type {LocalizedString} */
1558
- "Kamera zurücksetzen"
1555
+ "Nach oben kippen"
1559
1556
  )
1560
- ), Tn = (
1561
- /** @type {((inputs?: Controls_Camera_ResetInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_ResetInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1557
+ ), _n = (
1558
+ /** @type {((inputs?: Controls_Camera_Tiltup1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Tiltup1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1562
1559
  ((n = {}, t = {}) => {
1563
1560
  const e = t.locale ?? p();
1564
- return e === "nl" ? En() : e === "de" ? xn() : An();
1561
+ return e === "nl" ? wn() : e === "de" ? Sn() : yn();
1565
1562
  })
1566
- ), Rn = (
1563
+ ), kn = (
1567
1564
  /** @type {(inputs: Controls_Camera_Zoomin1Inputs) => LocalizedString} */
1568
1565
  () => (
1569
1566
  /** @type {LocalizedString} */
1570
1567
  "Zoom in"
1571
1568
  )
1572
- ), In = (
1569
+ ), Cn = (
1573
1570
  /** @type {(inputs: Controls_Camera_Zoomin1Inputs) => LocalizedString} */
1574
1571
  () => (
1575
1572
  /** @type {LocalizedString} */
1576
1573
  "Inzoomen"
1577
1574
  )
1578
- ), On = (
1575
+ ), An = (
1579
1576
  /** @type {(inputs: Controls_Camera_Zoomin1Inputs) => LocalizedString} */
1580
1577
  () => (
1581
1578
  /** @type {LocalizedString} */
1582
1579
  "Hineinzoomen"
1583
1580
  )
1584
- ), Ln = (
1581
+ ), En = (
1585
1582
  /** @type {((inputs?: Controls_Camera_Zoomin1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Zoomin1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1586
1583
  ((n = {}, t = {}) => {
1587
1584
  const e = t.locale ?? p();
1588
- return e === "nl" ? In() : e === "de" ? On() : Rn();
1585
+ return e === "nl" ? Cn() : e === "de" ? An() : kn();
1589
1586
  })
1590
- ), Mn = (
1587
+ ), xn = (
1591
1588
  /** @type {(inputs: Controls_Camera_Zoomout1Inputs) => LocalizedString} */
1592
1589
  () => (
1593
1590
  /** @type {LocalizedString} */
1594
1591
  "Zoom out"
1595
1592
  )
1596
- ), Nn = (
1593
+ ), Tn = (
1597
1594
  /** @type {(inputs: Controls_Camera_Zoomout1Inputs) => LocalizedString} */
1598
1595
  () => (
1599
1596
  /** @type {LocalizedString} */
1600
1597
  "Uitzoomen"
1601
1598
  )
1602
- ), zn = (
1599
+ ), Rn = (
1603
1600
  /** @type {(inputs: Controls_Camera_Zoomout1Inputs) => LocalizedString} */
1604
1601
  () => (
1605
1602
  /** @type {LocalizedString} */
1606
1603
  "Herauszoomen"
1607
1604
  )
1608
- ), Pn = (
1605
+ ), In = (
1609
1606
  /** @type {((inputs?: Controls_Camera_Zoomout1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Zoomout1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1610
1607
  ((n = {}, t = {}) => {
1611
1608
  const e = t.locale ?? p();
1612
- return e === "nl" ? Nn() : e === "de" ? zn() : Mn();
1609
+ return e === "nl" ? Tn() : e === "de" ? Rn() : xn();
1613
1610
  })
1614
- ), Fn = (
1615
- /** @type {(inputs: Controls_Camera_Rotateleft1Inputs) => LocalizedString} */
1611
+ ), On = (
1612
+ /** @type {(inputs: Controls_Configurator_CloseInputs) => LocalizedString} */
1616
1613
  () => (
1617
1614
  /** @type {LocalizedString} */
1618
- "Rotate left"
1615
+ "Close"
1619
1616
  )
1620
- ), Dn = (
1621
- /** @type {(inputs: Controls_Camera_Rotateleft1Inputs) => LocalizedString} */
1617
+ ), Ln = (
1618
+ /** @type {(inputs: Controls_Configurator_CloseInputs) => LocalizedString} */
1622
1619
  () => (
1623
1620
  /** @type {LocalizedString} */
1624
- "Naar links draaien"
1621
+ "Sluiten"
1625
1622
  )
1626
- ), $n = (
1627
- /** @type {(inputs: Controls_Camera_Rotateleft1Inputs) => LocalizedString} */
1623
+ ), Mn = (
1624
+ /** @type {(inputs: Controls_Configurator_CloseInputs) => LocalizedString} */
1628
1625
  () => (
1629
1626
  /** @type {LocalizedString} */
1630
- "Nach links drehen"
1627
+ "Schließen"
1631
1628
  )
1632
- ), Bn = (
1633
- /** @type {((inputs?: Controls_Camera_Rotateleft1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Rotateleft1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1629
+ ), Nn = (
1630
+ /** @type {((inputs?: Controls_Configurator_CloseInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Configurator_CloseInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1631
+ ((n = {}, t = {}) => {
1632
+ const e = t.locale ?? p();
1633
+ return e === "nl" ? Ln() : e === "de" ? Mn() : On();
1634
+ })
1635
+ ), zn = (
1636
+ /** @type {(inputs: Controls_Configurator_OpenInputs) => LocalizedString} */
1637
+ () => (
1638
+ /** @type {LocalizedString} */
1639
+ "Configure"
1640
+ )
1641
+ ), Pn = (
1642
+ /** @type {(inputs: Controls_Configurator_OpenInputs) => LocalizedString} */
1643
+ () => (
1644
+ /** @type {LocalizedString} */
1645
+ "Configureren"
1646
+ )
1647
+ ), Fn = (
1648
+ /** @type {(inputs: Controls_Configurator_OpenInputs) => LocalizedString} */
1649
+ () => (
1650
+ /** @type {LocalizedString} */
1651
+ "Konfigurieren"
1652
+ )
1653
+ ), $n = (
1654
+ /** @type {((inputs?: Controls_Configurator_OpenInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Configurator_OpenInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1634
1655
  ((n = {}, t = {}) => {
1635
1656
  const e = t.locale ?? p();
1636
- return e === "nl" ? Dn() : e === "de" ? $n() : Fn();
1657
+ return e === "nl" ? Pn() : e === "de" ? Fn() : zn();
1637
1658
  })
1659
+ ), Dn = (
1660
+ /** @type {(inputs: Controls_Fullscreen_Buttonlabel1Inputs) => LocalizedString} */
1661
+ () => (
1662
+ /** @type {LocalizedString} */
1663
+ "Fullscreen"
1664
+ )
1665
+ ), Bn = (
1666
+ /** @type {(inputs: Controls_Fullscreen_Buttonlabel1Inputs) => LocalizedString} */
1667
+ () => (
1668
+ /** @type {LocalizedString} */
1669
+ "Volledig scherm"
1670
+ )
1638
1671
  ), Un = (
1639
- /** @type {(inputs: Controls_Camera_Rotateright1Inputs) => LocalizedString} */
1672
+ /** @type {(inputs: Controls_Fullscreen_Buttonlabel1Inputs) => LocalizedString} */
1640
1673
  () => (
1641
1674
  /** @type {LocalizedString} */
1642
- "Rotate right"
1675
+ "Vollbild"
1643
1676
  )
1644
1677
  ), Vn = (
1645
- /** @type {(inputs: Controls_Camera_Rotateright1Inputs) => LocalizedString} */
1678
+ /** @type {((inputs?: Controls_Fullscreen_Buttonlabel1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Fullscreen_Buttonlabel1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1679
+ ((n = {}, t = {}) => {
1680
+ const e = t.locale ?? p();
1681
+ return e === "nl" ? Bn() : e === "de" ? Un() : Dn();
1682
+ })
1683
+ ), Hn = (
1684
+ /** @type {(inputs: Controls_Qr_Closebutton1Inputs) => LocalizedString} */
1646
1685
  () => (
1647
1686
  /** @type {LocalizedString} */
1648
- "Naar rechts draaien"
1687
+ "Close"
1649
1688
  )
1650
1689
  ), jn = (
1651
- /** @type {(inputs: Controls_Camera_Rotateright1Inputs) => LocalizedString} */
1690
+ /** @type {(inputs: Controls_Qr_Closebutton1Inputs) => LocalizedString} */
1652
1691
  () => (
1653
1692
  /** @type {LocalizedString} */
1654
- "Nach rechts drehen"
1693
+ "Sluiten"
1655
1694
  )
1656
- ), Hn = (
1657
- /** @type {((inputs?: Controls_Camera_Rotateright1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Rotateright1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1695
+ ), qn = (
1696
+ /** @type {(inputs: Controls_Qr_Closebutton1Inputs) => LocalizedString} */
1697
+ () => (
1698
+ /** @type {LocalizedString} */
1699
+ "Schließen"
1700
+ )
1701
+ ), Gn = (
1702
+ /** @type {((inputs?: Controls_Qr_Closebutton1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Qr_Closebutton1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1658
1703
  ((n = {}, t = {}) => {
1659
1704
  const e = t.locale ?? p();
1660
- return e === "nl" ? Vn() : e === "de" ? jn() : Un();
1705
+ return e === "nl" ? jn() : e === "de" ? qn() : Hn();
1661
1706
  })
1662
- ), qn = (
1663
- /** @type {(inputs: Controls_Camera_Tiltup1Inputs) => LocalizedString} */
1707
+ ), Zn = (
1708
+ /** @type {(inputs: Controls_Qr_Modaldescription1Inputs) => LocalizedString} */
1664
1709
  () => (
1665
1710
  /** @type {LocalizedString} */
1666
- "Tilt up"
1711
+ "Use your smartphone camera to scan this QR code"
1667
1712
  )
1668
- ), Gn = (
1669
- /** @type {(inputs: Controls_Camera_Tiltup1Inputs) => LocalizedString} */
1713
+ ), Wn = (
1714
+ /** @type {(inputs: Controls_Qr_Modaldescription1Inputs) => LocalizedString} */
1670
1715
  () => (
1671
1716
  /** @type {LocalizedString} */
1672
- "Omhoog kantelen"
1717
+ "Gebruik de camera van je smartphone om deze QR-code te scannen"
1673
1718
  )
1674
- ), Zn = (
1675
- /** @type {(inputs: Controls_Camera_Tiltup1Inputs) => LocalizedString} */
1719
+ ), Qn = (
1720
+ /** @type {(inputs: Controls_Qr_Modaldescription1Inputs) => LocalizedString} */
1676
1721
  () => (
1677
1722
  /** @type {LocalizedString} */
1678
- "Nach oben kippen"
1723
+ "Verwende die Kamera deines Smartphones, um diesen QR-Code zu scannen"
1679
1724
  )
1680
- ), Wn = (
1681
- /** @type {((inputs?: Controls_Camera_Tiltup1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Tiltup1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1725
+ ), Yn = (
1726
+ /** @type {((inputs?: Controls_Qr_Modaldescription1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Qr_Modaldescription1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1682
1727
  ((n = {}, t = {}) => {
1683
1728
  const e = t.locale ?? p();
1684
- return e === "nl" ? Gn() : e === "de" ? Zn() : qn();
1729
+ return e === "nl" ? Wn() : e === "de" ? Qn() : Zn();
1685
1730
  })
1686
- ), Qn = (
1687
- /** @type {(inputs: Controls_Camera_Tiltdown1Inputs) => LocalizedString} */
1731
+ ), Kn = (
1732
+ /** @type {(inputs: Controls_Qr_Modalinstructions1Inputs) => LocalizedString} */
1688
1733
  () => (
1689
1734
  /** @type {LocalizedString} */
1690
- "Tilt down"
1735
+ "Your phone will open the 3D model in AR mode."
1691
1736
  )
1692
- ), Yn = (
1693
- /** @type {(inputs: Controls_Camera_Tiltdown1Inputs) => LocalizedString} */
1737
+ ), Xn = (
1738
+ /** @type {(inputs: Controls_Qr_Modalinstructions1Inputs) => LocalizedString} */
1694
1739
  () => (
1695
1740
  /** @type {LocalizedString} */
1696
- "Omlaag kantelen"
1741
+ "Je telefoon opent het 3D-model in AR-modus."
1697
1742
  )
1698
- ), Kn = (
1699
- /** @type {(inputs: Controls_Camera_Tiltdown1Inputs) => LocalizedString} */
1743
+ ), Jn = (
1744
+ /** @type {(inputs: Controls_Qr_Modalinstructions1Inputs) => LocalizedString} */
1700
1745
  () => (
1701
1746
  /** @type {LocalizedString} */
1702
- "Nach unten kippen"
1747
+ "Dein Telefon öffnet das 3D-Modell im AR-Modus."
1703
1748
  )
1704
- ), Xn = (
1705
- /** @type {((inputs?: Controls_Camera_Tiltdown1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Tiltdown1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1749
+ ), ti = (
1750
+ /** @type {((inputs?: Controls_Qr_Modalinstructions1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Qr_Modalinstructions1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1706
1751
  ((n = {}, t = {}) => {
1707
1752
  const e = t.locale ?? p();
1708
- return e === "nl" ? Yn() : e === "de" ? Kn() : Qn();
1753
+ return e === "nl" ? Xn() : e === "de" ? Jn() : Kn();
1709
1754
  })
1710
- ), Jn = (
1711
- /** @type {(inputs: Commerce_Submit_BusyInputs) => LocalizedString} */
1755
+ ), ei = (
1756
+ /** @type {(inputs: Controls_Qr_Modaltitle1Inputs) => LocalizedString} */
1712
1757
  () => (
1713
1758
  /** @type {LocalizedString} */
1714
- "Working…"
1759
+ "Scan to view in AR"
1715
1760
  )
1716
- ), ti = (
1717
- /** @type {(inputs: Commerce_Submit_BusyInputs) => LocalizedString} */
1761
+ ), ni = (
1762
+ /** @type {(inputs: Controls_Qr_Modaltitle1Inputs) => LocalizedString} */
1718
1763
  () => (
1719
1764
  /** @type {LocalizedString} */
1720
- "Bezig…"
1765
+ "Scan om in AR te bekijken"
1721
1766
  )
1722
- ), ei = (
1723
- /** @type {(inputs: Commerce_Submit_BusyInputs) => LocalizedString} */
1767
+ ), ii = (
1768
+ /** @type {(inputs: Controls_Qr_Modaltitle1Inputs) => LocalizedString} */
1724
1769
  () => (
1725
1770
  /** @type {LocalizedString} */
1726
- "Läuft…"
1771
+ "Scannen für AR-Ansicht"
1727
1772
  )
1728
- ), ni = (
1729
- /** @type {((inputs?: Commerce_Submit_BusyInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Commerce_Submit_BusyInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1773
+ ), oi = (
1774
+ /** @type {((inputs?: Controls_Qr_Modaltitle1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Qr_Modaltitle1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1730
1775
  ((n = {}, t = {}) => {
1731
1776
  const e = t.locale ?? p();
1732
- return e === "nl" ? ti() : e === "de" ? ei() : Jn();
1777
+ return e === "nl" ? ni() : e === "de" ? ii() : ei();
1733
1778
  })
1734
- ), ii = (
1735
- /** @type {(inputs: Commerce_Submit_SuccessInputs) => LocalizedString} */
1779
+ ), si = (
1780
+ /** @type {(inputs: Controls_Screenshot_Buttonlabel1Inputs) => LocalizedString} */
1736
1781
  () => (
1737
1782
  /** @type {LocalizedString} */
1738
- "Done"
1783
+ "Screenshot"
1739
1784
  )
1740
- ), oi = (
1741
- /** @type {(inputs: Commerce_Submit_SuccessInputs) => LocalizedString} */
1785
+ ), ri = (
1786
+ /** @type {(inputs: Controls_Screenshot_Buttonlabel1Inputs) => LocalizedString} */
1742
1787
  () => (
1743
1788
  /** @type {LocalizedString} */
1744
- "Gelukt"
1789
+ "Screenshot"
1745
1790
  )
1746
- ), si = (
1747
- /** @type {(inputs: Commerce_Submit_SuccessInputs) => LocalizedString} */
1791
+ ), ai = (
1792
+ /** @type {(inputs: Controls_Screenshot_Buttonlabel1Inputs) => LocalizedString} */
1748
1793
  () => (
1749
1794
  /** @type {LocalizedString} */
1750
- "Fertig"
1795
+ "Screenshot"
1751
1796
  )
1752
- ), ri = (
1753
- /** @type {((inputs?: Commerce_Submit_SuccessInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Commerce_Submit_SuccessInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1797
+ ), li = (
1798
+ /** @type {((inputs?: Controls_Screenshot_Buttonlabel1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Screenshot_Buttonlabel1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1754
1799
  ((n = {}, t = {}) => {
1755
1800
  const e = t.locale ?? p();
1756
- return e === "nl" ? oi() : e === "de" ? si() : ii();
1801
+ return e === "nl" ? ri() : e === "de" ? ai() : si();
1757
1802
  })
1758
- ), ai = (
1759
- /** @type {(inputs: Commerce_Submit_FailedInputs) => LocalizedString} */
1803
+ ), ci = (
1804
+ /** @type {(inputs: Loading_Downloadingshort1Inputs) => LocalizedString} */
1760
1805
  () => (
1761
1806
  /** @type {LocalizedString} */
1762
- "Failed"
1807
+ "Downloading"
1763
1808
  )
1764
- ), li = (
1765
- /** @type {(inputs: Commerce_Submit_FailedInputs) => LocalizedString} */
1809
+ ), di = (
1810
+ /** @type {(inputs: Loading_Downloadingshort1Inputs) => LocalizedString} */
1766
1811
  () => (
1767
1812
  /** @type {LocalizedString} */
1768
- "Mislukt"
1813
+ "Downloaden"
1769
1814
  )
1770
- ), ci = (
1771
- /** @type {(inputs: Commerce_Submit_FailedInputs) => LocalizedString} */
1815
+ ), ui = (
1816
+ /** @type {(inputs: Loading_Downloadingshort1Inputs) => LocalizedString} */
1772
1817
  () => (
1773
1818
  /** @type {LocalizedString} */
1774
- "Fehlgeschlagen"
1819
+ "Herunterladen"
1775
1820
  )
1776
- ), di = (
1777
- /** @type {((inputs?: Commerce_Submit_FailedInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Commerce_Submit_FailedInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1821
+ ), hi = (
1822
+ /** @type {((inputs?: Loading_Downloadingshort1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Loading_Downloadingshort1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1778
1823
  ((n = {}, t = {}) => {
1779
1824
  const e = t.locale ?? p();
1780
- return e === "nl" ? li() : e === "de" ? ci() : ai();
1825
+ return e === "nl" ? di() : e === "de" ? ui() : ci();
1781
1826
  })
1782
1827
  );
1783
- const ui = {
1828
+ const pi = {
1784
1829
  xmlns: "http://www.w3.org/2000/svg",
1785
1830
  width: 24,
1786
1831
  height: 24,
@@ -1791,22 +1836,22 @@ const ui = {
1791
1836
  "stroke-linecap": "round",
1792
1837
  "stroke-linejoin": "round"
1793
1838
  };
1794
- const _t = ([n, t, e]) => {
1839
+ const Ct = ([n, t, e]) => {
1795
1840
  const i = document.createElementNS("http://www.w3.org/2000/svg", n);
1796
1841
  return Object.keys(t).forEach((o) => {
1797
1842
  i.setAttribute(o, String(t[o]));
1798
1843
  }), e?.length && e.forEach((o) => {
1799
- const s = _t(o);
1844
+ const s = Ct(o);
1800
1845
  i.appendChild(s);
1801
1846
  }), i;
1802
1847
  }, At = (n, t = {}) => {
1803
1848
  const i = {
1804
- ...ui,
1849
+ ...pi,
1805
1850
  ...t
1806
1851
  };
1807
- return _t(["svg", i, n]);
1852
+ return Ct(["svg", i, n]);
1808
1853
  };
1809
- const hi = [
1854
+ const mi = [
1810
1855
  [
1811
1856
  "path",
1812
1857
  {
@@ -1816,7 +1861,7 @@ const hi = [
1816
1861
  ["path", { d: "m3.3 7 8.7 5 8.7-5" }],
1817
1862
  ["path", { d: "M12 22V12" }]
1818
1863
  ];
1819
- const pi = [
1864
+ const fi = [
1820
1865
  [
1821
1866
  "path",
1822
1867
  {
@@ -1826,10 +1871,10 @@ const pi = [
1826
1871
  ["circle", { cx: "12", cy: "13", r: "3" }]
1827
1872
  ];
1828
1873
  const Et = [["path", { d: "m6 9 6 6 6-6" }]];
1829
- const mi = [["path", { d: "m15 18-6-6 6-6" }]];
1830
- const fi = [["path", { d: "m9 18 6-6-6-6" }]];
1831
- const gi = [["path", { d: "m18 15-6-6-6 6" }]];
1832
- const bi = [
1874
+ const gi = [["path", { d: "m15 18-6-6 6-6" }]];
1875
+ const bi = [["path", { d: "m9 18 6-6-6-6" }]];
1876
+ const vi = [["path", { d: "m18 15-6-6-6 6" }]];
1877
+ const yi = [
1833
1878
  ["path", { d: "M12.75 7.09a3 3 0 0 1 2.16 2.16" }],
1834
1879
  [
1835
1880
  "path",
@@ -1841,7 +1886,7 @@ const bi = [
1841
1886
  ["path", { d: "M8.475 2.818A8 8 0 0 1 20 10c0 1.183-.31 2.377-.81 3.533" }],
1842
1887
  ["path", { d: "M9.13 9.13a3 3 0 0 0 3.74 3.74" }]
1843
1888
  ];
1844
- const vi = [
1889
+ const wi = [
1845
1890
  [
1846
1891
  "path",
1847
1892
  {
@@ -1850,23 +1895,23 @@ const vi = [
1850
1895
  ],
1851
1896
  ["circle", { cx: "12", cy: "10", r: "3" }]
1852
1897
  ];
1853
- const yi = [
1898
+ const Si = [
1854
1899
  ["path", { d: "M15 3h6v6" }],
1855
1900
  ["path", { d: "m21 3-7 7" }],
1856
1901
  ["path", { d: "m3 21 7-7" }],
1857
1902
  ["path", { d: "M9 21H3v-6" }]
1858
1903
  ];
1859
- const wi = [
1904
+ const _i = [
1860
1905
  ["path", { d: "m14 10 7-7" }],
1861
1906
  ["path", { d: "M20 10h-6V4" }],
1862
1907
  ["path", { d: "m3 21 7-7" }],
1863
1908
  ["path", { d: "M4 14h6v6" }]
1864
1909
  ];
1865
- const Si = [
1910
+ const ki = [
1866
1911
  ["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }],
1867
1912
  ["path", { d: "M3 3v5h5" }]
1868
1913
  ];
1869
- const ki = [
1914
+ const Ci = [
1870
1915
  ["path", { d: "M10 5H3" }],
1871
1916
  ["path", { d: "M12 19H3" }],
1872
1917
  ["path", { d: "M14 3v4" }],
@@ -1877,17 +1922,17 @@ const ki = [
1877
1922
  ["path", { d: "M8 10v4" }],
1878
1923
  ["path", { d: "M8 12H3" }]
1879
1924
  ];
1880
- const Ci = [
1925
+ const Ai = [
1881
1926
  ["path", { d: "M18 6 6 18" }],
1882
1927
  ["path", { d: "m6 6 12 12" }]
1883
1928
  ];
1884
- const _i = [
1929
+ const Ei = [
1885
1930
  ["circle", { cx: "11", cy: "11", r: "8" }],
1886
1931
  ["line", { x1: "21", x2: "16.65", y1: "21", y2: "16.65" }],
1887
1932
  ["line", { x1: "11", x2: "11", y1: "8", y2: "14" }],
1888
1933
  ["line", { x1: "8", x2: "14", y1: "11", y2: "11" }]
1889
1934
  ];
1890
- const Ai = [
1935
+ const xi = [
1891
1936
  ["circle", { cx: "11", cy: "11", r: "8" }],
1892
1937
  ["line", { x1: "21", x2: "16.65", y1: "21", y2: "16.65" }],
1893
1938
  ["line", { x1: "8", x2: "14", y1: "11", y2: "11" }]
@@ -1896,21 +1941,21 @@ function b(n, { size: t = 20, strokeWidth: e = 1.75 } = {}) {
1896
1941
  return At(n, { width: t, height: t, "stroke-width": e });
1897
1942
  }
1898
1943
  const g = {
1899
- ar: (n) => b(hi, n),
1900
- annotations: (n) => b(vi, n),
1901
- annotationsOff: (n) => b(bi, n),
1902
- fullscreen: (n) => b(yi, n),
1903
- exitFullscreen: (n) => b(wi, n),
1904
- screenshot: (n) => b(pi, n),
1905
- tiltUp: (n) => b(gi, n),
1944
+ ar: (n) => b(mi, n),
1945
+ annotations: (n) => b(wi, n),
1946
+ annotationsOff: (n) => b(yi, n),
1947
+ fullscreen: (n) => b(Si, n),
1948
+ exitFullscreen: (n) => b(_i, n),
1949
+ screenshot: (n) => b(fi, n),
1950
+ tiltUp: (n) => b(vi, n),
1906
1951
  tiltDown: (n) => b(Et, n),
1907
- rotateLeft: (n) => b(mi, n),
1908
- rotateRight: (n) => b(fi, n),
1909
- zoomIn: (n) => b(_i, n),
1910
- zoomOut: (n) => b(Ai, n),
1911
- reset: (n) => b(Si, n),
1912
- configurator: (n) => b(ki, n),
1913
- close: (n) => b(Ci, n)
1952
+ rotateLeft: (n) => b(gi, n),
1953
+ rotateRight: (n) => b(bi, n),
1954
+ zoomIn: (n) => b(Ei, n),
1955
+ zoomOut: (n) => b(xi, n),
1956
+ reset: (n) => b(ki, n),
1957
+ configurator: (n) => b(Ci, n),
1958
+ close: (n) => b(Ai, n)
1914
1959
  };
1915
1960
  class v {
1916
1961
  element;
@@ -1956,7 +2001,7 @@ const m = {
1956
2001
  // 32px
1957
2002
  9: "2.25rem"
1958
2003
  };
1959
- class Ei {
2004
+ class Ti {
1960
2005
  element;
1961
2006
  constructor() {
1962
2007
  this.element = document.createElement("div"), Object.assign(this.element.style, {
@@ -1969,9 +2014,9 @@ class Ei {
1969
2014
  });
1970
2015
  }
1971
2016
  }
1972
- class xi {
2017
+ class Ri {
1973
2018
  constructor(t = {}) {
1974
- this.options = t, this.card = new Ei(), this.backdrop = this.createBackdrop(), this.backdrop.appendChild(this.card.element);
2019
+ this.options = t, this.card = new Ti(), this.backdrop = this.createBackdrop(), this.backdrop.appendChild(this.card.element);
1975
2020
  }
1976
2021
  options;
1977
2022
  card;
@@ -2000,7 +2045,7 @@ class xi {
2000
2045
  }), t;
2001
2046
  }
2002
2047
  }
2003
- class Ti {
2048
+ class Ii {
2004
2049
  element;
2005
2050
  selectCallback = null;
2006
2051
  constructor(t, e, i) {
@@ -2033,7 +2078,7 @@ class Ti {
2033
2078
  }
2034
2079
  }
2035
2080
  }
2036
- class Ri {
2081
+ class Oi {
2037
2082
  element;
2038
2083
  select;
2039
2084
  constructor(t, e, i, o, s) {
@@ -2063,7 +2108,7 @@ class Ri {
2063
2108
  e.value !== "" && (e.disabled = t !== null && !t.includes(e.value));
2064
2109
  }
2065
2110
  }
2066
- class Ii {
2111
+ class Li {
2067
2112
  element;
2068
2113
  input;
2069
2114
  valueText;
@@ -2128,7 +2173,7 @@ class Ii {
2128
2173
  return this.options.unit === void 0 ? e : `${e} ${this.options.unit}`;
2129
2174
  }
2130
2175
  }
2131
- const S = {
2176
+ const _ = {
2132
2177
  fontFamily: {
2133
2178
  sans: ["Mona Sans", "ui-sans-serif", "system-ui", "sans-serif", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"]
2134
2179
  },
@@ -2145,7 +2190,7 @@ const S = {
2145
2190
  medium: "500",
2146
2191
  semibold: "600"
2147
2192
  }
2148
- }, x = S.fontFamily.sans.join(", "), Oi = `
2193
+ }, x = _.fontFamily.sans.join(", "), Mi = `
2149
2194
  --primary: oklch(5% 0 0);
2150
2195
  --primary-foreground: oklch(100% 0 0);
2151
2196
  --secondary: oklch(92% 0 0);
@@ -2158,8 +2203,8 @@ const S = {
2158
2203
  --accent: oklch(92% 0 0);
2159
2204
  --accent-foreground: oklch(5% 0 0);
2160
2205
  --muted-foreground: oklch(44% 0 0);
2161
- `, Li = `
2162
- :root { ${Oi} }
2206
+ `, Ni = `
2207
+ :root { ${Mi} }
2163
2208
 
2164
2209
  /* ── Button ──────────────────────────────────────────────── */
2165
2210
  .ui-btn {
@@ -2550,37 +2595,37 @@ function xt() {
2550
2595
  return;
2551
2596
  ct = !0;
2552
2597
  const n = document.createElement("style");
2553
- n.id = "vd-ui-vanilla", n.textContent = Li, document.head.appendChild(n);
2598
+ n.id = "vd-ui-vanilla", n.textContent = Ni, document.head.appendChild(n);
2554
2599
  }
2555
- const Mi = S.fontFamily.sans.join(", ");
2556
- class Ni {
2600
+ const zi = _.fontFamily.sans.join(", ");
2601
+ class Pi {
2557
2602
  qrLib = null;
2558
2603
  dialog = null;
2559
2604
  qrSlot = null;
2560
2605
  /** Open the modal immediately, with a loading placeholder in the QR slot. */
2561
2606
  show() {
2562
- this.hide(), xt(), this.dialog = new xi({ onClose: () => {
2607
+ this.hide(), xt(), this.dialog = new Ri({ onClose: () => {
2563
2608
  this.dialog = null, this.qrSlot = null;
2564
2609
  } }), Object.assign(this.dialog.card.element.style, {
2565
2610
  display: "flex",
2566
2611
  flexDirection: "column",
2567
2612
  alignItems: "center",
2568
2613
  gap: l[3],
2569
- fontFamily: Mi
2570
- }), this.dialog.card.element.appendChild(this.createText(Ue(), {
2571
- fontSize: S.fontSize.base,
2572
- fontWeight: S.fontWeight.semibold,
2614
+ fontFamily: zi
2615
+ }), this.dialog.card.element.appendChild(this.createText(oi(), {
2616
+ fontSize: _.fontSize.base,
2617
+ fontWeight: _.fontWeight.semibold,
2573
2618
  color: m.neutral[900]
2574
- })), this.dialog.card.element.appendChild(this.createText(qe(), {
2575
- fontSize: S.fontSize.sm,
2619
+ })), this.dialog.card.element.appendChild(this.createText(Yn(), {
2620
+ fontSize: _.fontSize.sm,
2576
2621
  color: m.neutral[600]
2577
- })), this.qrSlot = this.createQrSlot(), this.dialog.card.element.appendChild(this.qrSlot), this.dialog.card.element.appendChild(this.createText(Qe(), {
2578
- fontSize: S.fontSize.xs,
2622
+ })), this.qrSlot = this.createQrSlot(), this.dialog.card.element.appendChild(this.qrSlot), this.dialog.card.element.appendChild(this.createText(ti(), {
2623
+ fontSize: _.fontSize.xs,
2579
2624
  color: m.neutral[500]
2580
2625
  }));
2581
2626
  const t = new v({
2582
2627
  variant: "outline",
2583
- label: Je(),
2628
+ label: Gn(),
2584
2629
  onClick: () => {
2585
2630
  this.hide();
2586
2631
  }
@@ -2622,36 +2667,36 @@ function dt(n) {
2622
2667
  const t = Math.max(0, Math.min(1, n));
2623
2668
  return t * t * (3 - 2 * t);
2624
2669
  }
2625
- function zi(n, t, e, i, o, s) {
2626
- const [r, a, d] = n, u = Math.cos(t), f = Math.sin(t), h = u * r + f * d, E = -f * r + u * d, _ = Math.cos(e), C = Math.sin(e), I = _ * a - C * E, F = C * a + _ * E, tt = 0.55;
2670
+ function Fi(n, t, e, i, o, s) {
2671
+ const [r, a, d] = n, u = Math.cos(t), f = Math.sin(t), h = u * r + f * d, E = -f * r + u * d, C = Math.cos(e), k = Math.sin(e), I = C * a - k * E, F = k * a + C * E, tt = 0.55;
2627
2672
  return [i + h * s * tt, o - I * s * tt, F];
2628
2673
  }
2629
- function Pi(n, t, e) {
2674
+ function $i(n, t, e) {
2630
2675
  n.beginPath(), n.moveTo(t[0], t[1]), n.lineTo(e[0], e[1]), n.strokeStyle = "#000", n.lineWidth = 2, n.stroke();
2631
2676
  }
2632
- function Fi(n, t, e, i, o) {
2677
+ function Di(n, t, e, i, o) {
2633
2678
  const s = t(e), r = t(i), a = [
2634
2679
  s[0] + (r[0] - s[0]) * o,
2635
2680
  s[1] + (r[1] - s[1]) * o,
2636
2681
  s[2]
2637
2682
  ];
2638
- Pi(n, s, a);
2683
+ $i(n, s, a);
2639
2684
  }
2640
- const $ = [-1, -1, 1], B = [1, -1, 1], U = [1, -1, -1], V = [-1, -1, -1], j = [-1, 1, 1], H = [1, 1, 1], q = [1, 1, -1], G = [-1, 1, -1], ut = [
2641
- [$, B],
2685
+ const D = [-1, -1, 1], B = [1, -1, 1], U = [1, -1, -1], V = [-1, -1, -1], H = [-1, 1, 1], j = [1, 1, 1], q = [1, 1, -1], G = [-1, 1, -1], ut = [
2686
+ [D, B],
2642
2687
  [B, U],
2643
2688
  [U, V],
2644
- [V, $],
2645
- [$, j],
2646
- [B, H],
2689
+ [V, D],
2690
+ [D, H],
2691
+ [B, j],
2647
2692
  [U, q],
2648
2693
  [V, G],
2649
- [j, H],
2650
- [H, q],
2694
+ [H, j],
2695
+ [j, q],
2651
2696
  [q, G],
2652
- [G, j]
2653
- ], Di = 400, ht = '-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif';
2654
- function $i() {
2697
+ [G, H]
2698
+ ], Bi = 400, ht = '-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif';
2699
+ function Ui() {
2655
2700
  const n = document.createElement("div");
2656
2701
  Object.assign(n.style, {
2657
2702
  position: "absolute",
@@ -2694,9 +2739,9 @@ function $i() {
2694
2739
  fontSize: "13px",
2695
2740
  color: "#000",
2696
2741
  fontFamily: ht
2697
- }), o.textContent = hn(), e.appendChild(i), e.appendChild(o), n.appendChild(t), n.appendChild(e), { overlay: n, canvas: t, pctEl: i, phaseEl: o };
2742
+ }), o.textContent = hi(), e.appendChild(i), e.appendChild(o), n.appendChild(t), n.appendChild(e), { overlay: n, canvas: t, pctEl: i, phaseEl: o };
2698
2743
  }
2699
- class Bi {
2744
+ class Vi {
2700
2745
  overlay;
2701
2746
  canvas;
2702
2747
  ctx;
@@ -2709,9 +2754,9 @@ class Bi {
2709
2754
  visible = !1;
2710
2755
  constructor(t, e = {}) {
2711
2756
  this.startTime = performance.now();
2712
- const i = $i();
2757
+ const i = Ui();
2713
2758
  this.overlay = i.overlay, this.canvas = i.canvas, this.pctEl = i.pctEl, this.phaseEl = i.phaseEl, t.appendChild(this.overlay), this.ctx = this.canvas.getContext("2d"), this.ctx !== null && (this.sizeCanvas(), this.tick());
2714
- const o = e.showDelay ?? Di;
2759
+ const o = e.showDelay ?? Bi;
2715
2760
  this.showTimerId = setTimeout(() => {
2716
2761
  this.reveal();
2717
2762
  }, o);
@@ -2766,20 +2811,20 @@ class Bi {
2766
2811
  return;
2767
2812
  const t = this.canvas.width / Math.min(devicePixelRatio, 2), e = this.canvas.height / Math.min(devicePixelRatio, 2), i = (performance.now() - this.startTime) / 1e3;
2768
2813
  this.ctx.fillStyle = "#fff", this.ctx.fillRect(0, 0, t, e);
2769
- const o = t / 2, s = e * 0.44, r = Math.min(t, e) * 0.08, a = 0.785, d = 0.615, u = (C) => zi(C, a, d, o, s, r), f = 6, h = i % f / f, E = ut.length;
2770
- let _;
2771
- h < 0.35 ? _ = dt(h / 0.35) * E : h < 0.55 ? _ = E : h < 0.9 ? _ = (1 - dt((h - 0.55) / 0.35)) * E : _ = 0, this.ctx.shadowBlur = 5, this.ctx.shadowColor = "rgba(30,30,30,0.08)";
2772
- for (let C = 0; C < E && !(C >= _); C++) {
2773
- const I = ut[C];
2814
+ const o = t / 2, s = e * 0.44, r = Math.min(t, e) * 0.08, a = 0.785, d = 0.615, u = (k) => Fi(k, a, d, o, s, r), f = 6, h = i % f / f, E = ut.length;
2815
+ let C;
2816
+ h < 0.35 ? C = dt(h / 0.35) * E : h < 0.55 ? C = E : h < 0.9 ? C = (1 - dt((h - 0.55) / 0.35)) * E : C = 0, this.ctx.shadowBlur = 5, this.ctx.shadowColor = "rgba(30,30,30,0.08)";
2817
+ for (let k = 0; k < E && !(k >= C); k++) {
2818
+ const I = ut[k];
2774
2819
  if (I === void 0)
2775
2820
  continue;
2776
- const F = Math.min(1, _ - C);
2777
- Fi(this.ctx, u, I[0], I[1], F);
2821
+ const F = Math.min(1, C - k);
2822
+ Di(this.ctx, u, I[0], I[1], F);
2778
2823
  }
2779
2824
  this.ctx.shadowBlur = 0;
2780
2825
  }
2781
2826
  }
2782
- class Ui {
2827
+ class Hi {
2783
2828
  constructor(t) {
2784
2829
  this.options = t, this.element = document.createElement("div"), Object.assign(this.element.style, { display: "flex", gap: "0.375rem" }), this.onFullscreenChange = () => {
2785
2830
  this.setFullscreenIcon(document.fullscreenElement !== null);
@@ -2811,7 +2856,7 @@ class Ui {
2811
2856
  this.arBtn = this.syncButton(this.arBtn, t.ar !== !1 && this.options.onAr !== void 0, () => new v({
2812
2857
  variant: "outline",
2813
2858
  size: "icon",
2814
- label: Fe(),
2859
+ label: en(),
2815
2860
  icon: g.ar(),
2816
2861
  onClick: () => {
2817
2862
  this.options.onAr?.();
@@ -2819,7 +2864,7 @@ class Ui {
2819
2864
  })), this.fullscreenBtn = this.syncButton(this.fullscreenBtn, t.fullscreen !== !1 && this.options.onFullscreen !== void 0, () => new v({
2820
2865
  variant: "outline",
2821
2866
  size: "icon",
2822
- label: ln(),
2867
+ label: Vn(),
2823
2868
  icon: g.fullscreen(),
2824
2869
  onClick: () => {
2825
2870
  this.options.onFullscreen?.();
@@ -2831,7 +2876,7 @@ class Ui {
2831
2876
  const i = new v({
2832
2877
  variant: "outline",
2833
2878
  size: "icon",
2834
- label: on(),
2879
+ label: Ke(),
2835
2880
  icon: this.annotationsShown ? g.annotations() : g.annotationsOff(),
2836
2881
  onClick: () => {
2837
2882
  this.flipAnnotations();
@@ -2857,9 +2902,9 @@ class P {
2857
2902
  targetTilt: e.tilt,
2858
2903
  targetZoom: e.zoom,
2859
2904
  thetaOffset: 0
2860
- }, o = Vi(t, e, i);
2905
+ }, o = ji(t, e, i);
2861
2906
  e.onChange((s) => {
2862
- i.targetRotation = s.rotation - i.thetaOffset, i.targetTilt = s.tilt, i.targetZoom = s.zoom, ji(o, e, s);
2907
+ i.targetRotation = s.rotation - i.thetaOffset, i.targetTilt = s.tilt, i.targetZoom = s.zoom, qi(o, e, s);
2863
2908
  }), this.element.appendChild(P.buildZoom(o.zoomOut, o.zoomIn)), this.element.appendChild(P.buildDpad(o.tiltUp, o.rotateLeft, o.reset, o.rotateRight, o.tiltDown));
2864
2909
  }
2865
2910
  static buildZoom(t, e) {
@@ -2880,7 +2925,7 @@ class P {
2880
2925
  return r;
2881
2926
  }
2882
2927
  }
2883
- function Vi(n, t, e) {
2928
+ function ji(n, t, e) {
2884
2929
  const i = (r) => Math.max(t.limits?.minZoom ?? 1, Math.min(t.limits?.maxZoom ?? 1 / 0, r)), o = (r) => {
2885
2930
  const a = t.limits?.minRotate, d = t.limits?.maxRotate;
2886
2931
  return a !== void 0 || d !== void 0 ? Math.max(a ?? -1 / 0, Math.min(d ?? 1 / 0, r)) : r;
@@ -2894,30 +2939,30 @@ function Vi(n, t, e) {
2894
2939
  u > 180 || u < 0 ? (e.targetTilt = u > 180 ? 360 - u : -u, e.thetaOffset = (e.thetaOffset + 180) % 360, n.tilt(e.targetTilt).rotate(e.targetRotation + e.thetaOffset).set()) : (e.targetTilt = u, n.tilt(e.targetTilt).set());
2895
2940
  };
2896
2941
  return {
2897
- zoomOut: new v({ variant: "outline", size: "icon", label: Pn(), icon: g.zoomOut(), onClick: () => {
2942
+ zoomOut: new v({ variant: "outline", size: "icon", label: In(), icon: g.zoomOut(), onClick: () => {
2898
2943
  e.targetZoom = i(e.targetZoom - 10), n.zoom(e.targetZoom).set();
2899
2944
  } }),
2900
- zoomIn: new v({ variant: "outline", size: "icon", label: Ln(), icon: g.zoomIn(), onClick: () => {
2945
+ zoomIn: new v({ variant: "outline", size: "icon", label: En(), icon: g.zoomIn(), onClick: () => {
2901
2946
  e.targetZoom = i(e.targetZoom + 10), n.zoom(e.targetZoom).set();
2902
2947
  } }),
2903
- tiltUp: new v({ variant: "outline", size: "icon", label: Wn(), icon: g.tiltUp(), onClick: () => {
2948
+ tiltUp: new v({ variant: "outline", size: "icon", label: _n(), icon: g.tiltUp(), onClick: () => {
2904
2949
  s(-15);
2905
2950
  } }),
2906
- rotateLeft: new v({ variant: "outline", size: "icon", label: Bn(), icon: g.rotateLeft(), onClick: () => {
2951
+ rotateLeft: new v({ variant: "outline", size: "icon", label: dn(), icon: g.rotateLeft(), onClick: () => {
2907
2952
  e.targetRotation = o(e.targetRotation - 15), n.rotate(e.targetRotation + e.thetaOffset).set();
2908
2953
  } }),
2909
- reset: new v({ variant: "outline", size: "icon", label: Tn(), icon: g.reset(), onClick: () => {
2954
+ reset: new v({ variant: "outline", size: "icon", label: rn(), icon: g.reset(), onClick: () => {
2910
2955
  e.thetaOffset = 0, n.reset();
2911
2956
  } }),
2912
- rotateRight: new v({ variant: "outline", size: "icon", label: Hn(), icon: g.rotateRight(), onClick: () => {
2957
+ rotateRight: new v({ variant: "outline", size: "icon", label: mn(), icon: g.rotateRight(), onClick: () => {
2913
2958
  e.targetRotation = o(e.targetRotation + 15), n.rotate(e.targetRotation + e.thetaOffset).set();
2914
2959
  } }),
2915
- tiltDown: new v({ variant: "outline", size: "icon", label: Xn(), icon: g.tiltDown(), onClick: () => {
2960
+ tiltDown: new v({ variant: "outline", size: "icon", label: vn(), icon: g.tiltDown(), onClick: () => {
2916
2961
  s(15);
2917
2962
  } })
2918
2963
  };
2919
2964
  }
2920
- function ji(n, t, e) {
2965
+ function qi(n, t, e) {
2921
2966
  const i = t.limits;
2922
2967
  i !== void 0 && (n.zoomOut.element.disabled = i.minZoom !== void 0 && e.zoom <= i.minZoom + R, n.zoomIn.element.disabled = i.maxZoom !== void 0 && e.zoom >= i.maxZoom - R, n.tiltUp.element.disabled = i.minTilt !== void 0 && e.tilt <= i.minTilt + R, n.tiltDown.element.disabled = i.maxTilt !== void 0 && e.tilt >= i.maxTilt - R, n.rotateLeft.element.disabled = i.minRotate !== void 0 && e.rotation <= i.minRotate + R, n.rotateRight.element.disabled = i.maxRotate !== void 0 && e.rotation >= i.maxRotate - R);
2923
2968
  }
@@ -2938,7 +2983,7 @@ const T = {
2938
2983
  m: 1e3,
2939
2984
  in: 25.4
2940
2985
  }, pt = 3;
2941
- function Hi(n) {
2986
+ function Gi(n) {
2942
2987
  const t = n.stepMm / Tt[n.displayUnit];
2943
2988
  for (let e = 0; e <= pt; e++) {
2944
2989
  const i = t * 10 ** e;
@@ -2947,15 +2992,15 @@ function Hi(n) {
2947
2992
  }
2948
2993
  return pt;
2949
2994
  }
2950
- function qi(n, t, e) {
2951
- const i = Hi(t), o = n / Tt[t.displayUnit];
2995
+ function Zi(n, t, e) {
2996
+ const i = Gi(t), o = n / Tt[t.displayUnit];
2952
2997
  return new Intl.NumberFormat(e, {
2953
2998
  minimumFractionDigits: i,
2954
2999
  maximumFractionDigits: i
2955
3000
  }).format(o);
2956
3001
  }
2957
- function Gi(n, t, e, i, o, s, r) {
2958
- const a = p(), d = n.values.map((h) => qi(Number(h), t, a)), u = n.values.find((h) => e.getValue(n.name, h)?.isSelected === !0) ?? n.defaultValue, f = new Ii(n.values, {
3002
+ function Wi(n, t, e, i, o, s, r) {
3003
+ const a = p(), d = n.values.map((h) => Zi(Number(h), t, a)), u = n.values.find((h) => e.getValue(n.name, h)?.isSelected === !0) ?? n.defaultValue, f = new Li(n.values, {
2959
3004
  label: n.name,
2960
3005
  labels: d,
2961
3006
  unit: t.displayUnit,
@@ -2978,20 +3023,20 @@ function Gi(n, t, e, i, o, s, r) {
2978
3023
  }
2979
3024
  };
2980
3025
  }
2981
- const Zi = 5;
2982
- let Wi = 0;
3026
+ const Qi = 5;
3027
+ let Yi = 0;
2983
3028
  function K(n) {
2984
3029
  const t = n.replace(/([A-Z])/g, " $1").trim();
2985
3030
  return t.charAt(0).toUpperCase() + t.slice(1).toLowerCase();
2986
3031
  }
2987
- function Qi(n, t, e, i, o, s) {
3032
+ function Ki(n, t, e, i, o, s) {
2988
3033
  const r = document.createElement("div");
2989
3034
  r.className = "vd-attribute", r.dataset.name = n.name;
2990
3035
  const a = document.createElement("span");
2991
- a.className = "vd-attribute-label", a.textContent = K(n.name), a.id = `vd-attribute-label-${Wi++}`, r.appendChild(a), r.setAttribute("role", "group"), r.setAttribute("aria-labelledby", a.id);
3036
+ a.className = "vd-attribute-label", a.textContent = K(n.name), a.id = `vd-attribute-label-${Yi++}`, r.appendChild(a), r.setAttribute("role", "group"), r.setAttribute("aria-labelledby", a.id);
2992
3037
  const d = (f) => {
2993
3038
  r.style.display = f ? "none" : "";
2994
- }, u = n.dimension !== void 0 ? Gi(
3039
+ }, u = n.dimension !== void 0 ? Wi(
2995
3040
  n,
2996
3041
  n.dimension,
2997
3042
  t,
@@ -2999,13 +3044,13 @@ function Qi(n, t, e, i, o, s) {
2999
3044
  o,
3000
3045
  i,
3001
3046
  s
3002
- ) : Yi(n, t, e, i, s);
3047
+ ) : Xi(n, t, e, i, s);
3003
3048
  return r.appendChild(u.element), { element: r, setSelectable: u.setSelectable, setHidden: d };
3004
3049
  }
3005
- function Yi(n, t, e, i, o) {
3050
+ function Xi(n, t, e, i, o) {
3006
3051
  const s = n.values.find(
3007
3052
  (d) => t.getValue(n.name, d)?.isSelected === !0
3008
- ), r = n.values.map(K), a = n.values.length <= Zi ? new Ti(n.values, s, r) : new Ri(n.name, n.values, K(n.name), s, r);
3053
+ ), r = n.values.map(K), a = n.values.length <= Qi ? new Ii(n.values, s, r) : new Oi(n.name, n.values, K(n.name), s, r);
3009
3054
  return a.onSelect((d) => {
3010
3055
  e.dispatch(T.SELECT, { attribute: n.name, value: d }, !0).defaultPrevented || i(n.name, d);
3011
3056
  }), o(n.name, (d) => {
@@ -3017,9 +3062,9 @@ function Yi(n, t, e, i, o) {
3017
3062
  }
3018
3063
  };
3019
3064
  }
3020
- const Ki = 80, Xi = 2500;
3021
- class Ji {
3022
- constructor(t, e = Xi) {
3065
+ const Ji = 80, to = 2500;
3066
+ class eo {
3067
+ constructor(t, e = to) {
3023
3068
  this.configuration = t, this.resetMs = e, this.element = document.createElement("div"), this.element.className = "vd-commerce vd-hidden";
3024
3069
  const i = document.createElement("div");
3025
3070
  i.className = "vd-commerce-price", this.priceEl = document.createElement("span"), this.priceEl.className = "vd-price", this.vatEl = document.createElement("span"), this.vatEl.className = "vd-vat", i.append(this.priceEl, this.vatEl), this.button = new v({ variant: "default", onClick: () => {
@@ -3051,7 +3096,7 @@ class Ji {
3051
3096
  this.priceEl.textContent = "", this.vatEl.textContent = "";
3052
3097
  return;
3053
3098
  }
3054
- this.priceEl.textContent = to(t.price, t.currency), this.vatEl.textContent = mt(this.configuration.vatDisplay);
3099
+ this.priceEl.textContent = no(t.price, t.currency), this.vatEl.textContent = mt(this.configuration.vatDisplay);
3055
3100
  }
3056
3101
  renderButton() {
3057
3102
  const t = this.configuration.submitEnabled;
@@ -3059,11 +3104,11 @@ class Ji {
3059
3104
  }
3060
3105
  async handleSubmit() {
3061
3106
  if (this.state !== "busy") {
3062
- this.setState("busy", ni());
3107
+ this.setState("busy", De());
3063
3108
  try {
3064
- await this.configuration.submit(), this.setState("success", ri());
3109
+ await this.configuration.submit(), this.setState("success", Ze());
3065
3110
  } catch {
3066
- this.setState("failed", di());
3111
+ this.setState("failed", He());
3067
3112
  }
3068
3113
  this.scheduleReset();
3069
3114
  }
@@ -3081,9 +3126,9 @@ class Ji {
3081
3126
  }
3082
3127
  }
3083
3128
  function mt(n) {
3084
- return (n ?? "").slice(0, Ki);
3129
+ return (n ?? "").slice(0, Ji);
3085
3130
  }
3086
- function to(n, t) {
3131
+ function no(n, t) {
3087
3132
  try {
3088
3133
  const e = new Intl.NumberFormat(p(), { style: "currency", currency: t }), i = e.resolvedOptions().maximumFractionDigits ?? 2;
3089
3134
  return e.format(n / 10 ** i);
@@ -3104,8 +3149,8 @@ class Rt {
3104
3149
  this.slot?.remove(), this.slot = null, this.panel = null;
3105
3150
  }
3106
3151
  }
3107
- const eo = 572;
3108
- class no {
3152
+ const io = 572;
3153
+ class oo {
3109
3154
  /** @param actionBarSlot The shared corner slot the AR/fullscreen buttons live in — the
3110
3155
  * "open configurator" toggle joins them there instead of floating as its own overlay. */
3111
3156
  constructor(t) {
@@ -3125,7 +3170,7 @@ class no {
3125
3170
  this.container = t, e.classList.add("vd-attributes-sidebar"), this.closeButton = new v({
3126
3171
  variant: "ghost",
3127
3172
  size: "icon-sm",
3128
- label: _n(),
3173
+ label: Nn(),
3129
3174
  icon: g.close({ size: 18 }),
3130
3175
  onClick: () => {
3131
3176
  this.expanded = !1, this.render();
@@ -3135,7 +3180,7 @@ class no {
3135
3180
  i.className = "vd-sidebar-header", i.appendChild(this.closeButton.element), this.body = document.createElement("div"), this.body.className = "vd-sidebar-body", this.body.appendChild(e), this.element = document.createElement("div"), this.element.className = "vd-sidebar vd-hidden", this.element.append(i, this.body), t.appendChild(this.element), this.openButton = new v({
3136
3181
  variant: "outline",
3137
3182
  size: "icon",
3138
- label: wn(),
3183
+ label: $n(),
3139
3184
  icon: g.configurator({ size: 18 }),
3140
3185
  onClick: () => {
3141
3186
  this.expanded = !0, this.render();
@@ -3151,7 +3196,7 @@ class no {
3151
3196
  observe() {
3152
3197
  typeof ResizeObserver > "u" || this.container === null || (this.observer = new ResizeObserver((t) => {
3153
3198
  const e = t[0]?.contentRect.width ?? 0;
3154
- this.setCollapsible(e > 0 && e < eo);
3199
+ this.setCollapsible(e > 0 && e < io);
3155
3200
  }), this.observer.observe(this.container));
3156
3201
  }
3157
3202
  setCollapsible(t) {
@@ -3164,7 +3209,7 @@ class no {
3164
3209
  this.element.classList.toggle("vd-hidden", !this.visible), this.element.classList.toggle("vd-sidebar-collapsed", e), this.openButton.element.classList.toggle("vd-hidden", !e), this.closeButton.element.style.display = this.collapsible ? "" : "none", this.container.classList.toggle("vd-layout-sidebar-right", t), this.container.classList.toggle("vd-layout-sidebar-permanent", t && !this.collapsible);
3165
3210
  }
3166
3211
  }
3167
- class io {
3212
+ class so {
3168
3213
  attach(t, e) {
3169
3214
  }
3170
3215
  setVisible(t) {
@@ -3172,20 +3217,20 @@ class io {
3172
3217
  destroy() {
3173
3218
  }
3174
3219
  }
3175
- const oo = {
3220
+ const ro = {
3176
3221
  "inframe-bottom-left": () => new Rt(),
3177
- "sidebar-right": (n) => new no(n),
3178
- hidden: () => new io()
3222
+ "sidebar-right": (n) => new oo(n),
3223
+ hidden: () => new so()
3179
3224
  };
3180
- function so(n, t) {
3181
- return (oo[n ?? ""] ?? (() => new Rt()))(t);
3225
+ function ao(n, t) {
3226
+ return (ro[n ?? ""] ?? (() => new Rt()))(t);
3182
3227
  }
3183
- const Z = S.fontFamily.sans.join(", "), W = `
3228
+ const Z = _.fontFamily.sans.join(", "), W = `
3184
3229
  position: absolute;
3185
3230
  display: flex;
3186
3231
  z-index: 10;
3187
3232
  transition: inset-inline-end 0.18s ease;
3188
- `, ro = `
3233
+ `, lo = `
3189
3234
  /* Override browser's default black fullscreen backdrop */
3190
3235
  .vd-container:fullscreen {
3191
3236
  background: oklch(100% 0 0);
@@ -3268,8 +3313,8 @@ const Z = S.fontFamily.sans.join(", "), W = `
3268
3313
 
3269
3314
  /* Micro-label: recedes so the controls lead. */
3270
3315
  .vd-attribute-label {
3271
- font-size: ${S.fontSize.xs};
3272
- font-weight: ${S.fontWeight.medium};
3316
+ font-size: ${_.fontSize.xs};
3317
+ font-weight: ${_.fontWeight.medium};
3273
3318
  color: ${m.neutral[500]};
3274
3319
  text-transform: uppercase;
3275
3320
  letter-spacing: 0.05em;
@@ -3365,13 +3410,13 @@ const Z = S.fontFamily.sans.join(", "), W = `
3365
3410
  }
3366
3411
 
3367
3412
  .vd-price {
3368
- font-size: ${S.fontSize.lg};
3369
- font-weight: ${S.fontWeight.semibold};
3413
+ font-size: ${_.fontSize.lg};
3414
+ font-weight: ${_.fontWeight.semibold};
3370
3415
  color: ${m.neutral[900]};
3371
3416
  }
3372
3417
 
3373
3418
  .vd-vat {
3374
- font-size: ${S.fontSize.xs};
3419
+ font-size: ${_.fontSize.xs};
3375
3420
  color: ${m.neutral[500]};
3376
3421
  }
3377
3422
 
@@ -3388,17 +3433,17 @@ const Z = S.fontFamily.sans.join(", "), W = `
3388
3433
  }
3389
3434
 
3390
3435
  `;
3391
- function ao() {
3436
+ function co() {
3392
3437
  if (xt(), document.getElementById("vd-styles") !== null)
3393
3438
  return;
3394
3439
  const n = document.createElement("style");
3395
- n.id = "vd-styles", n.textContent = ro, document.head.appendChild(n);
3440
+ n.id = "vd-styles", n.textContent = lo, document.head.appendChild(n);
3396
3441
  }
3397
- function lo(n, t) {
3442
+ function uo(n, t) {
3398
3443
  const e = document.createElement("a");
3399
3444
  e.href = `data:image/png;base64,${n}`, e.download = t, e.click();
3400
3445
  }
3401
- class co {
3446
+ class ho {
3402
3447
  options;
3403
3448
  settings = {};
3404
3449
  container = null;
@@ -3418,7 +3463,7 @@ class co {
3418
3463
  this.options = t;
3419
3464
  }
3420
3465
  attach(t) {
3421
- ao(), this.container = t, this.loading = new Bi(t), this.slots.topRight = this.createSlot(t, "vd-slot-top-right"), this.slots.bottomRight = this.createSlot(t, "vd-slot-bottom-right");
3466
+ co(), this.container = t, this.loading = new Vi(t), this.slots.topRight = this.createSlot(t, "vd-slot-top-right"), this.slots.bottomRight = this.createSlot(t, "vd-slot-bottom-right");
3422
3467
  }
3423
3468
  onReady() {
3424
3469
  this.loading?.hide(), this.loading = null, this.mountToolbar(), this.cameraControls !== null && (this.cameraControls.element.style.display = "flex"), this.layout?.setVisible(!0);
@@ -3427,7 +3472,7 @@ class co {
3427
3472
  if (this.actionBar !== null || this.slots.bottomRight === null || this.container === null)
3428
3473
  return;
3429
3474
  const t = typeof this.container.requestFullscreen == "function";
3430
- this.actionBar = new Ui({
3475
+ this.actionBar = new Hi({
3431
3476
  onAr: this.options.onAr,
3432
3477
  onFullscreen: t ? () => {
3433
3478
  this.toggleFullscreen();
@@ -3454,7 +3499,7 @@ class co {
3454
3499
  ), this.cameraControls.element.style.display = "none", this.slots.topRight.appendChild(this.cameraControls.element)), this.placeScreenshotButton(), e.length !== 0)) {
3455
3500
  this.attributes = document.createElement("div"), this.attributes.className = "vd-attributes", this.groupHandles = /* @__PURE__ */ new Map();
3456
3501
  for (const i of e) {
3457
- const o = Qi(
3502
+ const o = Ki(
3458
3503
  i,
3459
3504
  t,
3460
3505
  this.options.eventBus,
@@ -3464,7 +3509,7 @@ class co {
3464
3509
  );
3465
3510
  this.groupHandles.set(i.name, o), this.attributes.appendChild(o.element);
3466
3511
  }
3467
- this.commerce = new Ji(this.options.configuration), this.attributes.appendChild(this.commerce.element), this.layout = so(
3512
+ this.commerce = new eo(this.options.configuration), this.attributes.appendChild(this.commerce.element), this.layout = ao(
3468
3513
  this.settings.configuratorLayout,
3469
3514
  this.slots.bottomRight
3470
3515
  ), this.layout.attach(this.container, this.attributes), this.lastSelectable !== null && this.applySelectable(this.lastSelectable);
@@ -3505,11 +3550,11 @@ class co {
3505
3550
  t && this.screenshotBtn === null && (this.screenshotBtn = new v({
3506
3551
  variant: "outline",
3507
3552
  size: "icon",
3508
- label: gn(),
3553
+ label: li(),
3509
3554
  icon: g.screenshot(),
3510
3555
  onClick: () => {
3511
3556
  this.options.snapshotApi.take("snapshot.png").onDeveloped(({ data: e, filename: i }) => {
3512
- lo(e, i);
3557
+ uo(e, i);
3513
3558
  });
3514
3559
  }
3515
3560
  })), !t && this.screenshotBtn !== null && (this.screenshotBtn.element.remove(), this.screenshotBtn = null);
@@ -3518,8 +3563,8 @@ class co {
3518
3563
  this.screenshotBtn === null || this.slots.topRight === null || (this.cameraControls !== null ? this.cameraControls.element.appendChild(this.screenshotBtn.element) : this.slots.topRight.appendChild(this.screenshotBtn.element));
3519
3564
  }
3520
3565
  }
3521
- const uo = {};
3522
- class ho {
3566
+ const po = {};
3567
+ class mo {
3523
3568
  defaultServer = "https://server.virtualdisplay.io";
3524
3569
  options;
3525
3570
  serverHost;
@@ -3568,12 +3613,12 @@ class ho {
3568
3613
  t.searchParams.set("license", this.options.license), t.searchParams.set("model", this.options.model);
3569
3614
  return;
3570
3615
  }
3571
- t.searchParams.set("app", this.options.app), (this.options.license !== void 0 || this.options.model !== void 0) && k.warn("Both `app` and `license`/`model` were supplied: `app` wins, the pair was ignored");
3616
+ t.searchParams.set("app", this.options.app), (this.options.license !== void 0 || this.options.model !== void 0) && w.warn("Both `app` and `license`/`model` were supplied: `app` wins, the pair was ignored");
3572
3617
  }
3573
3618
  getServerUrl() {
3574
3619
  if (this.serverHost !== void 0)
3575
3620
  return this.serverHost;
3576
- if (uo?.VITE_VIRTUALDISPLAY_SERVER_HOST === void 0)
3621
+ if (po?.VITE_VIRTUALDISPLAY_SERVER_HOST === void 0)
3577
3622
  return this.defaultServer;
3578
3623
  }
3579
3624
  getParentElement() {
@@ -3585,27 +3630,27 @@ class ho {
3585
3630
  return t;
3586
3631
  }
3587
3632
  }
3588
- function po(n) {
3633
+ function fo(n) {
3589
3634
  const { messenger: t } = n;
3590
3635
  t.on(c.HANDSHAKE, (e) => {
3591
- Nt(e) && (k.info("Server handshake received, flushing publisher queue"), t.markReady());
3636
+ Nt(e) && (w.info("Server handshake received, flushing publisher queue"), t.markReady());
3592
3637
  }), t.on(c.SESSION, (e) => {
3593
3638
  zt(e) && n.onSession(e.sessionId);
3594
3639
  }), t.on(c.MUTATION, (e) => {
3595
3640
  Ft(e) && (n.attributes.handleMutationResult(e), n.configuration.handleSelectionChanged(n.attributes.getSelection()));
3596
3641
  }), t.on(c.SNAPSHOT, (e) => {
3597
- Dt(e) && n.snapshot.handleSnapshotResult(e);
3642
+ $t(e) && n.snapshot.handleSnapshotResult(e);
3598
3643
  }), t.on(c.CAMERA, (e) => {
3599
- $t(e) && n.cameraPosition.handlePositionUpdate(e);
3644
+ Dt(e) && n.cameraPosition.handlePositionUpdate(e);
3600
3645
  }), t.on(c.LOADING_INDICATOR, (e) => {
3601
3646
  Ut(e) && (e.error !== void 0 ? n.ui.showError(e.error) : n.ui.updateProgress(e.progress, e.phase));
3602
3647
  }), t.on(c.CONFIG, (e) => {
3603
- Ht(e) && n.applyConfig(e);
3648
+ jt(e) && n.applyConfig(e);
3604
3649
  }), t.on(c.MAPPING, (e) => {
3605
3650
  Bt(e) && (n.attributes.handleMappingReceived(e), n.configuration.handleSelectionChanged(n.attributes.getSelection()), n.ui.renderAttributeControls(n.attributes, e.attributes), n.readyStateTracker.handleMappingReceived());
3606
- }), mo(n);
3651
+ }), go(n);
3607
3652
  }
3608
- function mo(n) {
3653
+ function go(n) {
3609
3654
  const { messenger: t } = n;
3610
3655
  t.on(c.FOCUS, (e) => {
3611
3656
  qt(e) && n.focus.handleStateReceived(e);
@@ -3614,19 +3659,19 @@ function mo(n) {
3614
3659
  }), t.on(c.SYNC, (e) => {
3615
3660
  Vt(e) && n.onSync(e.connected);
3616
3661
  }), t.on(c.SELECTABLE, (e) => {
3617
- jt(e) && (n.selectable.handleSnapshot(e), n.ui.applySelectable(e.attributes));
3662
+ Ht(e) && (n.selectable.handleSnapshot(e), n.ui.applySelectable(e.attributes));
3618
3663
  }), t.on(c.APP_RESOLVED, (e) => {
3619
3664
  Pt(e) && n.onAppResolved(e);
3620
3665
  });
3621
3666
  }
3622
- class fo {
3667
+ class bo {
3623
3668
  ready = !1;
3624
3669
  onReady;
3625
3670
  constructor(t) {
3626
3671
  this.onReady = t;
3627
3672
  }
3628
3673
  handleMappingReceived() {
3629
- this.ready || (this.ready = !0, k.info("Mapping received from server, client is now ready"), this.onReady?.());
3674
+ this.ready || (this.ready = !0, w.info("Mapping received from server, client is now ready"), this.onReady?.());
3630
3675
  }
3631
3676
  get isReady() {
3632
3677
  return this.ready;
@@ -3635,13 +3680,13 @@ class fo {
3635
3680
  this.ready = !1;
3636
3681
  }
3637
3682
  }
3638
- function go(n) {
3683
+ function vo(n) {
3639
3684
  if (n === void 0)
3640
3685
  return;
3641
3686
  const { annotations: t, ...e } = n;
3642
3687
  return t === void 0 ? e : t === !0 ? { ...e, annotations: "show" } : t === !1 ? { ...e, annotations: "hide" } : { ...e, annotations: t };
3643
3688
  }
3644
- class bo {
3689
+ class yo {
3645
3690
  attributes;
3646
3691
  selectableState;
3647
3692
  readyStateTracker;
@@ -3657,48 +3702,49 @@ class bo {
3657
3702
  options;
3658
3703
  serverHost;
3659
3704
  iframeParams;
3660
- /** The composed AR flow, or undefined in a build that composes none. */
3705
+ // The composed AR flow, or undefined in a build that composes none.
3661
3706
  arActivation;
3662
- /** The composed sync tracker, or undefined in a build that composes none. */
3707
+ // The composed sync tracker, or undefined in a build that composes none.
3663
3708
  syncTracker;
3664
3709
  iframe;
3665
3710
  container;
3666
3711
  readyCallbacks = [];
3667
3712
  mutationFailedCallbacks = [];
3668
- /** The viewer's tracking session id, once the server announces it (SESSION). */
3713
+ // The viewer's tracking session id, once the server announces it (SESSION).
3669
3714
  viewerSessionId;
3670
- /** Which app the viewer resolved, once reported (APP_RESOLVED). */
3715
+ // Which app the viewer resolved, once reported (APP_RESOLVED).
3671
3716
  resolvedApp;
3672
3717
  appResolvedCallbacks = [];
3718
+ /** @internal */
3673
3719
  constructor(t, e) {
3674
3720
  this.options = t;
3675
3721
  const i = e ?? {};
3676
- this.serverHost = i.serverHost, this.iframeParams = i.iframeParams, this.initializeLogging(), this.messenger = new Zt(
3677
- () => this.iframe?.contentWindow ?? null,
3678
- i.messengerOptions
3679
- );
3722
+ this.serverHost = i.serverHost, this.iframeParams = i.iframeParams, this.initializeLogging(), this.messenger = new Zt(() => this.iframe?.contentWindow ?? null, {
3723
+ onHandlerError: (s, r) => w.error(`Error handling ${s.type}`, r),
3724
+ ...i.messengerOptions
3725
+ });
3680
3726
  const o = (s) => {
3681
3727
  this.messenger.send(s);
3682
3728
  };
3683
- this.attributes = new me(o, L, (s, r) => {
3729
+ this.attributes = new fe(o, L, (s, r) => {
3684
3730
  this.notifyMutationFailed(s, r);
3685
- }), this.selectableState = new fe(), this.snapshotApi = new Ce(o), this.annotationsApi = new Wt(o, L), this.cameraApi = new ge(o), this.cameraPositionApi = new be(), this.focusApi = new Se(o, (s) => {
3731
+ }), this.selectableState = new ge(), this.snapshotApi = new Ce(o), this.annotationsApi = new Qt(o, L), this.cameraApi = new be(o), this.cameraPositionApi = new ve(), this.focusApi = new _e(o, (s) => {
3686
3732
  this.dispatchFocusChange(s);
3687
- }, L), this.configurationApi = new we(
3733
+ }, L), this.configurationApi = new Se(
3688
3734
  (s) => {
3689
3735
  this.dispatchConfigurationChange(s);
3690
3736
  },
3691
3737
  (s) => {
3692
3738
  this.dispatchConfigurationSubmit(s);
3693
3739
  }
3694
- ), this.eventBus = new _e(), this.arActivation = i.createArActivation?.(o), this.syncTracker = i.createSyncTracker?.(), this.readyStateTracker = new fo(() => {
3740
+ ), this.eventBus = new Ae(), this.arActivation = i.createArActivation?.(o), this.syncTracker = i.createSyncTracker?.(), this.readyStateTracker = new bo(() => {
3695
3741
  this.notifyReady();
3696
3742
  }), this.ui = this.createStandardInterface(), this.wireIncomingMessages(), i.registerHandlers?.(this.messenger, o), this.messenger.start(), this.createAndConnectIframe();
3697
3743
  }
3698
- /** The configurator UI, every callback bridging it to the facade that owns the action. */
3744
+ // The configurator UI, every callback bridging it to the facade that owns the action.
3699
3745
  createStandardInterface() {
3700
3746
  const t = this.arActivation;
3701
- return new co({
3747
+ return new ho({
3702
3748
  snapshotApi: this.snapshotApi,
3703
3749
  cameraApi: this.cameraApi,
3704
3750
  cameraPositionApi: this.cameraPositionApi,
@@ -3733,9 +3779,9 @@ class bo {
3733
3779
  origin: "control"
3734
3780
  });
3735
3781
  }
3736
- /** Wire the inbound viewer protocol to the facades. */
3782
+ // Wire the inbound viewer protocol to the facades.
3737
3783
  wireIncomingMessages() {
3738
- po({
3784
+ fo({
3739
3785
  messenger: this.messenger,
3740
3786
  attributes: this.attributes,
3741
3787
  selectable: this.selectableState,
@@ -3764,22 +3810,22 @@ class bo {
3764
3810
  }
3765
3811
  });
3766
3812
  }
3767
- /** Store the resolved app and notify every registered `onAppResolved` callback. */
3813
+ // Store the resolved app and notify every registered `onAppResolved` callback.
3768
3814
  handleAppResolved(t) {
3769
3815
  this.resolvedApp = t;
3770
3816
  for (const e of this.appResolvedCallbacks)
3771
3817
  e(t);
3772
3818
  }
3773
- /** Store the tracking session id and hand it to the AR flow, which waits on it for the QR. */
3819
+ // Store the tracking session id and hand it to the AR flow, which waits on it for the QR.
3774
3820
  handleSession(t) {
3775
3821
  this.viewerSessionId = t, this.arActivation?.onSession(t);
3776
3822
  }
3777
- /** Forward a failed mutation to every registered `onMutationFailed` callback. */
3823
+ // Forward a failed mutation to every registered `onMutationFailed` callback.
3778
3824
  notifyMutationFailed(t, e) {
3779
3825
  for (const i of this.mutationFailedCallbacks)
3780
3826
  i({ attribute: t, value: e });
3781
3827
  }
3782
- /** Flush the queued `onReady` callbacks once, then let the standard interface know. */
3828
+ // Flush the queued `onReady` callbacks once, then let the standard interface know.
3783
3829
  notifyReady() {
3784
3830
  const t = this.readyCallbacks;
3785
3831
  this.readyCallbacks = [];
@@ -3787,39 +3833,35 @@ class bo {
3787
3833
  e(this);
3788
3834
  this.ui.onReady();
3789
3835
  }
3790
- /**
3791
- * Dispatch a bubbling `vd:focus-change` event on the container so a page can
3792
- * react to focus without registering an `onChange` callback.
3793
- */
3836
+ // Dispatch a bubbling `vd:focus-change` event on the container so a page can
3837
+ // react to focus without registering an `onChange` callback.
3794
3838
  dispatchFocusChange(t) {
3795
3839
  this.container?.dispatchEvent(
3796
3840
  new CustomEvent(T.FOCUS_CHANGE, { detail: t, bubbles: !0 })
3797
3841
  );
3798
3842
  }
3799
- /**
3800
- * Dispatch a bubbling `vd:configuration-change` event on the container so a
3801
- * page or tag manager can react to price changes without a client callback.
3802
- */
3843
+ // Dispatch a bubbling `vd:configuration-change` event on the container so a
3844
+ // page or tag manager can react to price changes without a client callback.
3803
3845
  dispatchConfigurationChange(t) {
3804
3846
  this.container?.dispatchEvent(
3805
3847
  new CustomEvent(T.CONFIGURATION_CHANGE, { detail: t ?? null, bubbles: !0 })
3806
3848
  );
3807
3849
  }
3808
- /** Dispatch a bubbling `vd:configuration-submit` event when the CTA is used. */
3850
+ // Dispatch a bubbling `vd:configuration-submit` event when the CTA is used.
3809
3851
  dispatchConfigurationSubmit(t) {
3810
3852
  this.container?.dispatchEvent(
3811
3853
  new CustomEvent(T.CONFIGURATION_SUBMIT, { detail: t, bubbles: !0 })
3812
3854
  );
3813
3855
  }
3814
3856
  handleConfig(t) {
3815
- const e = t.viewerSettings, i = go(this.options.viewerSettings);
3857
+ const e = t.viewerSettings, i = vo(this.options.viewerSettings);
3816
3858
  if (e !== void 0 || i !== void 0) {
3817
3859
  const o = i !== void 0 ? { ...e ?? {}, ...i } : e;
3818
3860
  if (i !== void 0 && e !== void 0) {
3819
3861
  const s = Object.entries(i).filter(([r, a]) => e[r] !== a).map(
3820
3862
  ([r, a]) => `${r} (metadata: ${e[r] ?? "undefined"}, override: ${a})`
3821
3863
  );
3822
- s.length > 0 && k.warn(`Viewer settings override active: ${s.join(", ")}`);
3864
+ s.length > 0 && w.warn(`Viewer settings override active: ${s.join(", ")}`);
3823
3865
  }
3824
3866
  this.ui.applyViewerSettings(o), this.echoAnnotationsDifference(e?.annotations, o.annotations);
3825
3867
  }
@@ -3828,24 +3870,22 @@ class bo {
3828
3870
  // The viewer already applied the announced mode itself, so speaking up when
3829
3871
  // the merged mode matches would toggle it back and forth for nothing. A boot
3830
3872
  // without overrides therefore sends no toggle at all.
3831
- /**
3832
- * Tell the viewer about the annotation mode only when the merged mode differs
3833
- * from the one it announced.
3834
- */
3873
+ // Tell the viewer about the annotation mode only when the merged mode differs
3874
+ // from the one it announced.
3835
3875
  echoAnnotationsDifference(t, e) {
3836
3876
  e === void 0 || e === t || this.annotationsApi.setEnabled(e === "show" || e === "toggle-shown");
3837
3877
  }
3838
- /** Tell the viewer the user entered fullscreen, so it records the engagement. */
3878
+ // Tell the viewer the user entered fullscreen, so it records the engagement.
3839
3879
  trackFullscreen() {
3840
3880
  this.messenger.send({ type: c.FULLSCREEN });
3841
3881
  }
3842
3882
  initializeLogging() {
3843
- this.options.debug === !0 && pe(), k.info("Initializing Virtualdisplay client", {
3883
+ this.options.debug === !0 && me(), w.info("Initializing Virtualdisplay client", {
3844
3884
  ...this.options.app === void 0 ? { model: this.options.model } : { app: this.options.app }
3845
3885
  });
3846
3886
  }
3847
3887
  createAndConnectIframe() {
3848
- const e = new ho(this.options, this.serverHost, this.iframeParams).create();
3888
+ const e = new mo(this.options, this.serverHost, this.iframeParams).create();
3849
3889
  this.container = e.container, this.iframe = e.iframe, this.eventBus.attach(this.container), this.ui.attach(this.container);
3850
3890
  try {
3851
3891
  const i = new URL(this.iframe.src).origin;
@@ -3942,15 +3982,15 @@ class bo {
3942
3982
  this.readyStateTracker.clear(), this.readyCallbacks = [], this.mutationFailedCallbacks.length = 0, this.snapshotApi.clear(), this.messenger.destroy(), this.arActivation?.destroy(), this.ui.destroy(), this.container?.parentElement !== null && this.container?.parentElement !== void 0 && this.container.parentElement.removeChild(this.container), this.container = void 0, this.iframe = void 0;
3943
3983
  }
3944
3984
  }
3945
- const vo = "ar.virtualdisplay.io";
3946
- function yo(n) {
3947
- const t = new URL(`https://${vo}/go`);
3985
+ const wo = "ar.virtualdisplay.io";
3986
+ function So(n) {
3987
+ const t = new URL(`https://${wo}/go`);
3948
3988
  return n.sessionId !== void 0 ? t.searchParams.set("session", n.sessionId) : n.app !== void 0 ? t.searchParams.set("app", n.app) : n.license !== void 0 && n.model !== void 0 && (t.searchParams.set("license", n.license), t.searchParams.set("model", n.model)), t.toString();
3949
3989
  }
3950
- const wo = 1500;
3951
- class So {
3990
+ const _o = 1500;
3991
+ class ko {
3952
3992
  options;
3953
- qrModal = new Ni();
3993
+ qrModal = new Pi();
3954
3994
  /** The viewer's tracking session id, once the engine announces it (SESSION). */
3955
3995
  sessionId;
3956
3996
  /** Callbacks waiting on the SESSION message, resolved (or timed out) exactly once each. */
@@ -3972,7 +4012,7 @@ class So {
3972
4012
  }
3973
4013
  /** The AR button handler: mobile activates AR in the engine, desktop shows the hand-off QR. */
3974
4014
  activate() {
3975
- if (ue()) {
4015
+ if (he()) {
3976
4016
  this.options.send({ type: c.AR_ACTIVATE });
3977
4017
  return;
3978
4018
  }
@@ -3996,7 +4036,7 @@ class So {
3996
4036
  const t = await this.waitForSessionId();
3997
4037
  if (this.destroyed)
3998
4038
  return;
3999
- const e = yo({
4039
+ const e = So({
4000
4040
  sessionId: t,
4001
4041
  app: this.options.app,
4002
4042
  license: this.options.license,
@@ -4018,14 +4058,14 @@ class So {
4018
4058
  return this.sessionId !== void 0 ? Promise.resolve(this.sessionId) : new Promise((t) => {
4019
4059
  const e = setTimeout(() => {
4020
4060
  this.pendingTimers.delete(e), t(void 0);
4021
- }, wo);
4061
+ }, _o);
4022
4062
  this.pendingTimers.add(e), this.waiters.push((i) => {
4023
4063
  this.pendingTimers.delete(e), clearTimeout(e), t(i);
4024
4064
  });
4025
4065
  });
4026
4066
  }
4027
4067
  }
4028
- class ko {
4068
+ class Co {
4029
4069
  callbacks = [];
4030
4070
  lastKnown;
4031
4071
  handleSync(t) {
@@ -4037,12 +4077,12 @@ class ko {
4037
4077
  this.callbacks.push(t), this.lastKnown !== void 0 && t(this.lastKnown);
4038
4078
  }
4039
4079
  }
4040
- class Ao extends bo {
4080
+ class xo extends yo {
4041
4081
  syncStatusTracker;
4042
4082
  constructor(t) {
4043
- const e = new ko();
4083
+ const e = new Co();
4044
4084
  super(t, {
4045
- createArActivation: (i) => new So({
4085
+ createArActivation: (i) => new ko({
4046
4086
  app: t.app,
4047
4087
  license: t.license,
4048
4088
  model: t.model,
@@ -4057,19 +4097,21 @@ class Ao extends bo {
4057
4097
  }
4058
4098
  }
4059
4099
  export {
4060
- Wt as Annotations,
4061
- Yt as Attribute,
4062
- Qt as AttributeValue,
4063
- ge as Camera,
4064
- we as Configuration,
4100
+ Ot as AVAILABILITY,
4101
+ Qt as Annotations,
4102
+ Kt as Attribute,
4103
+ Yt as AttributeValue,
4104
+ be as Camera,
4105
+ ve as CameraPosition,
4106
+ Se as Configuration,
4065
4107
  A as ERROR_CODES,
4066
- Se as Focus,
4108
+ _e as Focus,
4067
4109
  ke as Photo,
4068
4110
  Ce as Snapshot,
4069
4111
  T as VD_EVENTS,
4070
- Ao as VirtualdisplayClient,
4112
+ xo as VirtualdisplayClient,
4071
4113
  y as VirtualdisplayError,
4072
- pe as enableDebugMode,
4073
- Co as isDebugMode,
4074
- k as logger
4114
+ me as enableDebugMode,
4115
+ Ao as isDebugMode,
4116
+ w as logger
4075
4117
  };