@virtualdisplay.io/client 4.0.0-alpha.15 → 4.0.0-alpha.16

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.
Files changed (84) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/index.d.ts +1064 -0
  3. package/dist/virtualdisplay.client.cjs.js +3 -3
  4. package/dist/virtualdisplay.client.es.js +448 -448
  5. package/dist/virtualdisplay.client.umd.js +4 -4
  6. package/package.json +3 -3
  7. package/dist/src/annotations/annotations.d.ts +0 -20
  8. package/dist/src/annotations/annotations.d.ts.map +0 -1
  9. package/dist/src/annotations/index.d.ts +0 -2
  10. package/dist/src/annotations/index.d.ts.map +0 -1
  11. package/dist/src/attributes/attribute.d.ts +0 -40
  12. package/dist/src/attributes/attribute.d.ts.map +0 -1
  13. package/dist/src/attributes/attributes.d.ts +0 -45
  14. package/dist/src/attributes/attributes.d.ts.map +0 -1
  15. package/dist/src/attributes/selections.d.ts +0 -17
  16. package/dist/src/attributes/selections.d.ts.map +0 -1
  17. package/dist/src/attributes/value.d.ts +0 -13
  18. package/dist/src/attributes/value.d.ts.map +0 -1
  19. package/dist/src/camera/camera.d.ts +0 -40
  20. package/dist/src/camera/camera.d.ts.map +0 -1
  21. package/dist/src/camera/index.d.ts +0 -4
  22. package/dist/src/camera/index.d.ts.map +0 -1
  23. package/dist/src/camera/position.d.ts +0 -56
  24. package/dist/src/camera/position.d.ts.map +0 -1
  25. package/dist/src/client/client.d.ts +0 -71
  26. package/dist/src/client/client.d.ts.map +0 -1
  27. package/dist/src/client/error.d.ts +0 -23
  28. package/dist/src/client/error.d.ts.map +0 -1
  29. package/dist/src/client/events.d.ts +0 -22
  30. package/dist/src/client/events.d.ts.map +0 -1
  31. package/dist/src/client/iframe-builder.d.ts +0 -27
  32. package/dist/src/client/iframe-builder.d.ts.map +0 -1
  33. package/dist/src/client/options.d.ts +0 -19
  34. package/dist/src/client/options.d.ts.map +0 -1
  35. package/dist/src/client/ready-state-tracker.d.ts +0 -13
  36. package/dist/src/client/ready-state-tracker.d.ts.map +0 -1
  37. package/dist/src/client/types.d.ts +0 -20
  38. package/dist/src/client/types.d.ts.map +0 -1
  39. package/dist/src/configuration/configuration.d.ts +0 -113
  40. package/dist/src/configuration/configuration.d.ts.map +0 -1
  41. package/dist/src/configuration/index.d.ts +0 -2
  42. package/dist/src/configuration/index.d.ts.map +0 -1
  43. package/dist/src/configuration/resolver.d.ts +0 -16
  44. package/dist/src/configuration/resolver.d.ts.map +0 -1
  45. package/dist/src/focus/focus.d.ts +0 -43
  46. package/dist/src/focus/focus.d.ts.map +0 -1
  47. package/dist/src/focus/index.d.ts +0 -2
  48. package/dist/src/focus/index.d.ts.map +0 -1
  49. package/dist/src/index.d.ts +0 -16
  50. package/dist/src/index.d.ts.map +0 -1
  51. package/dist/src/snapshot/index.d.ts +0 -3
  52. package/dist/src/snapshot/index.d.ts.map +0 -1
  53. package/dist/src/snapshot/photo.d.ts +0 -47
  54. package/dist/src/snapshot/photo.d.ts.map +0 -1
  55. package/dist/src/snapshot/snapshot.d.ts +0 -36
  56. package/dist/src/snapshot/snapshot.d.ts.map +0 -1
  57. package/dist/src/ui/action-bar.d.ts +0 -18
  58. package/dist/src/ui/action-bar.d.ts.map +0 -1
  59. package/dist/src/ui/camera-controls.d.ts +0 -8
  60. package/dist/src/ui/camera-controls.d.ts.map +0 -1
  61. package/dist/src/ui/commerce-panel.d.ts +0 -31
  62. package/dist/src/ui/commerce-panel.d.ts.map +0 -1
  63. package/dist/src/ui/controls/attribute-group.d.ts +0 -6
  64. package/dist/src/ui/controls/attribute-group.d.ts.map +0 -1
  65. package/dist/src/ui/event-bus.d.ts +0 -12
  66. package/dist/src/ui/event-bus.d.ts.map +0 -1
  67. package/dist/src/ui/layouts/inframe-layout.d.ts +0 -13
  68. package/dist/src/ui/layouts/inframe-layout.d.ts.map +0 -1
  69. package/dist/src/ui/layouts/layout.d.ts +0 -15
  70. package/dist/src/ui/layouts/layout.d.ts.map +0 -1
  71. package/dist/src/ui/layouts/null-layout.d.ts +0 -12
  72. package/dist/src/ui/layouts/null-layout.d.ts.map +0 -1
  73. package/dist/src/ui/layouts/registry.d.ts +0 -4
  74. package/dist/src/ui/layouts/registry.d.ts.map +0 -1
  75. package/dist/src/ui/layouts/sidebar-layout.d.ts +0 -24
  76. package/dist/src/ui/layouts/sidebar-layout.d.ts.map +0 -1
  77. package/dist/src/ui/loading.d.ts +0 -43
  78. package/dist/src/ui/loading.d.ts.map +0 -1
  79. package/dist/src/ui/standard-interface.d.ts +0 -47
  80. package/dist/src/ui/standard-interface.d.ts.map +0 -1
  81. package/dist/src/ui/styles.d.ts +0 -3
  82. package/dist/src/ui/styles.d.ts.map +0 -1
  83. package/dist/src/utils/logger.d.ts +0 -11
  84. package/dist/src/utils/logger.d.ts.map +0 -1
@@ -223,6 +223,132 @@ class Ft {
223
223
  this.ready = !1;
224
224
  }
225
225
  }
226
+ const O = {
227
+ /** Attribute selection requested (cancelable). `detail`: `{ attribute, value }`. */
228
+ SELECT: "ui:select",
229
+ /** Attribute selection applied. `detail`: `{ attribute, value }`. */
230
+ SELECTED: "ui:selected",
231
+ /** Focus changed (bubbles). `detail`: `{ component, attributes }`, or `null` for the overview. */
232
+ FOCUS_CHANGE: "vd:focus-change",
233
+ /** Resolved configuration changed (bubbles). `detail`: the resolved configuration, or `null` when nothing matches. */
234
+ CONFIGURATION_CHANGE: "vd:configuration-change",
235
+ /** Configuration submitted (bubbles). `detail`: the resolved configuration handed to the host. */
236
+ CONFIGURATION_SUBMIT: "vd:configuration-submit"
237
+ };
238
+ class $t {
239
+ constructor(t, e) {
240
+ this.value = t, this.attribute = e;
241
+ }
242
+ value;
243
+ attribute;
244
+ isSelectedValue = !1;
245
+ get isSelected() {
246
+ return this.isSelectedValue;
247
+ }
248
+ setSelected(t) {
249
+ this.isSelectedValue = t;
250
+ }
251
+ }
252
+ class Dt {
253
+ name;
254
+ defaultValue;
255
+ values;
256
+ onSelect;
257
+ onChangeCallback;
258
+ constructor(t) {
259
+ this.name = t.name, this.defaultValue = t.defaultValue, this.onSelect = t.onSelect, this.values = this.createValues(t.values);
260
+ }
261
+ /**
262
+ * Select a value for this attribute
263
+ * @throws {VirtualdisplayError} When value not found
264
+ */
265
+ select(t) {
266
+ if (!this.values.has(t))
267
+ throw f.valueNotFound(this.name, t);
268
+ this.onSelect(this.name, t);
269
+ }
270
+ getValues() {
271
+ return Array.from(this.values.values());
272
+ }
273
+ getValue(t) {
274
+ return this.values.get(t);
275
+ }
276
+ /** The currently selected value, or undefined before any selection lands. */
277
+ get selected() {
278
+ for (const t of this.values.values())
279
+ if (t.isSelected)
280
+ return t.value;
281
+ }
282
+ /**
283
+ * Register callback that fires when selection changes
284
+ * Receives the newly selected AttributeValue
285
+ */
286
+ onChange(t) {
287
+ this.onChangeCallback = t;
288
+ }
289
+ /**
290
+ * Update selection state from server mutation result
291
+ * Direct value comparison - no source/target translation
292
+ */
293
+ handleResult(t) {
294
+ let e;
295
+ for (const i of this.values.values()) {
296
+ const o = i.value === t;
297
+ i.setSelected(o), o && (e = i);
298
+ }
299
+ e !== void 0 && this.onChangeCallback !== void 0 && this.onChangeCallback(e);
300
+ }
301
+ createValues(t) {
302
+ const e = /* @__PURE__ */ new Map();
303
+ for (const i of t) {
304
+ const o = new $t(i, this.name);
305
+ i === this.defaultValue && o.setSelected(!0), e.set(i, o);
306
+ }
307
+ return e;
308
+ }
309
+ }
310
+ class Bt {
311
+ attributes = /* @__PURE__ */ new Map();
312
+ constructor(t, e, i) {
313
+ for (const o of t) {
314
+ const s = this.buildOptions(o, e);
315
+ this.attributes.set(o.name, new Dt(s));
316
+ }
317
+ this.onMutationFailed = i;
318
+ }
319
+ onMutationFailed;
320
+ get(t) {
321
+ return this.attributes.get(t);
322
+ }
323
+ /** The current selection as attribute name→value pairs, skipping unset attributes. */
324
+ getSelection() {
325
+ const t = {};
326
+ for (const [e, i] of this.attributes) {
327
+ const o = i.selected;
328
+ o !== void 0 && (t[e] = o);
329
+ }
330
+ return t;
331
+ }
332
+ handleResults(t) {
333
+ for (const e of t) {
334
+ if (!e.success) {
335
+ this.onMutationFailed?.(e.name, e.value);
336
+ continue;
337
+ }
338
+ this.get(e.name)?.handleResult(e.value);
339
+ }
340
+ }
341
+ buildOptions(t, e) {
342
+ const i = {
343
+ name: t.name,
344
+ values: t.values,
345
+ onSelect: (o, s) => {
346
+ e([{ name: o, value: s }], !1);
347
+ }
348
+ };
349
+ return t.defaultValue !== void 0 ? { ...i, defaultValue: t.defaultValue } : i;
350
+ }
351
+ }
226
352
  const c = {
227
353
  HANDSHAKE: "handshake",
228
354
  MUTATION: "mutation",
@@ -241,55 +367,55 @@ const c = {
241
367
  }, X = {
242
368
  FOCUS: "focus",
243
369
  UNFOCUS: "unfocus"
244
- }, $t = {
370
+ }, Ut = {
245
371
  FOCUSED: "focused"
246
- }, Dt = {
372
+ }, Vt = {
247
373
  /** Behaves exactly like an unpriced combination: no price, no button. */
248
374
  HIDDEN: "hidden"
249
- }, Bt = new Set(Object.values(c));
250
- function Ut(n) {
375
+ }, jt = new Set(Object.values(c));
376
+ function Ht(n) {
251
377
  if (typeof n != "object" || n === null)
252
378
  return !1;
253
379
  const t = n;
254
- return typeof t.target == "string" ? !1 : typeof t.type == "string" && Bt.has(t.type);
380
+ return typeof t.target == "string" ? !1 : typeof t.type == "string" && jt.has(t.type);
255
381
  }
256
- function Vt(n) {
382
+ function Gt(n) {
257
383
  const t = k(n);
258
384
  return t !== null && t.type === c.HANDSHAKE;
259
385
  }
260
- function jt(n) {
386
+ function qt(n) {
261
387
  const t = k(n);
262
388
  return t !== null && t.type === c.MUTATION && Array.isArray(t.results);
263
389
  }
264
- function Ht(n) {
390
+ function Zt(n) {
265
391
  const t = k(n);
266
392
  return t !== null && t.type === c.SNAPSHOT && ("data" in t || "error" in t);
267
393
  }
268
- function Gt(n) {
394
+ function Wt(n) {
269
395
  const t = k(n);
270
396
  return t !== null && t.type === c.CAMERA && Array.isArray(t.transforms);
271
397
  }
272
- function qt(n) {
398
+ function Yt(n) {
273
399
  const t = k(n);
274
400
  return t !== null && t.type === c.MAPPING && Array.isArray(t.attributes);
275
401
  }
276
- function Zt(n) {
402
+ function Xt(n) {
277
403
  const t = k(n);
278
404
  return t !== null && t.type === c.LOADING_INDICATOR && typeof t.progress == "number";
279
405
  }
280
- function Wt(n) {
406
+ function Kt(n) {
281
407
  const t = k(n);
282
408
  return t !== null && t.type === c.CONFIG && typeof t.viewerSettings == "object";
283
409
  }
284
- function Yt(n) {
410
+ function Qt(n) {
285
411
  const t = k(n);
286
412
  return t !== null && t.type === c.ANNOTATION_PLACED && typeof t.position == "object" && t.position !== null;
287
413
  }
288
- function Xt(n) {
414
+ function Jt(n) {
289
415
  const t = k(n);
290
416
  return t !== null && t.type === c.FOCUS && typeof t.state == "string";
291
417
  }
292
- function Kt(n) {
418
+ function te(n) {
293
419
  const t = k(n);
294
420
  return t !== null && t.type === c.PRICING && typeof t.pricing == "object" && t.pricing !== null;
295
421
  }
@@ -343,7 +469,7 @@ class K {
343
469
  this.pending.length = 0;
344
470
  }
345
471
  }
346
- class Qt {
472
+ class ee {
347
473
  constructor(t, e) {
348
474
  this.getTarget = t, this.sourceId = `vd-${Math.random().toString(36).slice(2, 8)}`, this.targetOrigin = e?.targetOrigin ?? "*", this.publisher = new K((i) => this.post(i)), this.consumer = new K((i) => this.routeToHandler(i)), this.shouldBuffer = e?.shouldBuffer ?? null, e?.bufferIncoming !== !0 && this.consumer.markReady();
349
475
  }
@@ -406,7 +532,7 @@ class Qt {
406
532
  start() {
407
533
  this.listener === null && (this.listener = (t) => {
408
534
  const { data: e } = t;
409
- if (!Ut(e) || e._source === this.sourceId)
535
+ if (!Ht(e) || e._source === this.sourceId)
410
536
  return;
411
537
  const i = this.getTarget();
412
538
  if (i !== null && t.source !== null && t.source !== i)
@@ -441,165 +567,18 @@ class Qt {
441
567
  const e = this.getTarget();
442
568
  e !== null && e.postMessage({ ...t, _source: this.sourceId }, this.targetOrigin);
443
569
  }
444
- routeToHandler(t) {
445
- const e = this.handlers.get(t.type);
446
- if (e === void 0)
447
- return;
448
- const i = e(t);
449
- i instanceof Promise && i.catch((o) => {
450
- const s = o instanceof Error ? o.message : String(o);
451
- console.error(`Virtualdisplay: error handling ${t.type}: ${s}`);
452
- });
453
- }
454
- }
455
- class Jt {
456
- constructor(t) {
457
- this.send = t;
458
- }
459
- send;
460
- placedCallbacks = [];
461
- setEnabled(t) {
462
- this.send({
463
- type: c.ANNOTATION_TOGGLE,
464
- enabled: t
465
- });
466
- }
467
- startPlacing() {
468
- this.send({
469
- type: c.ANNOTATION_PLACE_MODE,
470
- enabled: !0
471
- });
472
- }
473
- stopPlacing() {
474
- this.send({
475
- type: c.ANNOTATION_PLACE_MODE,
476
- enabled: !1
477
- });
478
- }
479
- onPlaced(t) {
480
- this.placedCallbacks.push(t);
481
- }
482
- /** Called by the client when an ANNOTATION_PLACED message is received. */
483
- handlePlaced(t) {
484
- for (const e of this.placedCallbacks)
485
- e(t);
486
- }
487
- }
488
- class te {
489
- constructor(t, e) {
490
- this.value = t, this.attribute = e;
491
- }
492
- value;
493
- attribute;
494
- isSelectedValue = !1;
495
- get isSelected() {
496
- return this.isSelectedValue;
497
- }
498
- setSelected(t) {
499
- this.isSelectedValue = t;
500
- }
501
- }
502
- class ee {
503
- name;
504
- defaultValue;
505
- values;
506
- onSelect;
507
- onChangeCallback;
508
- constructor(t) {
509
- this.name = t.name, this.defaultValue = t.defaultValue, this.onSelect = t.onSelect, this.values = this.createValues(t.values);
510
- }
511
- /**
512
- * Select a value for this attribute
513
- * @throws {VirtualdisplayError} When value not found
514
- */
515
- select(t) {
516
- if (!this.values.has(t))
517
- throw f.valueNotFound(this.name, t);
518
- this.onSelect(this.name, t);
519
- }
520
- getValues() {
521
- return Array.from(this.values.values());
522
- }
523
- getValue(t) {
524
- return this.values.get(t);
525
- }
526
- /** The currently selected value, or undefined before any selection lands. */
527
- get selected() {
528
- for (const t of this.values.values())
529
- if (t.isSelected)
530
- return t.value;
531
- }
532
- /**
533
- * Register callback that fires when selection changes
534
- * Receives the newly selected AttributeValue
535
- */
536
- onChange(t) {
537
- this.onChangeCallback = t;
538
- }
539
- /**
540
- * Update selection state from server mutation result
541
- * Direct value comparison - no source/target translation
542
- */
543
- handleResult(t) {
544
- let e;
545
- for (const i of this.values.values()) {
546
- const o = i.value === t;
547
- i.setSelected(o), o && (e = i);
548
- }
549
- e !== void 0 && this.onChangeCallback !== void 0 && this.onChangeCallback(e);
550
- }
551
- createValues(t) {
552
- const e = /* @__PURE__ */ new Map();
553
- for (const i of t) {
554
- const o = new te(i, this.name);
555
- i === this.defaultValue && o.setSelected(!0), e.set(i, o);
556
- }
557
- return e;
558
- }
559
- }
560
- class ne {
561
- attributes = /* @__PURE__ */ new Map();
562
- constructor(t, e, i) {
563
- for (const o of t) {
564
- const s = this.buildOptions(o, e);
565
- this.attributes.set(o.name, new ee(s));
566
- }
567
- this.onMutationFailed = i;
568
- }
569
- onMutationFailed;
570
- get(t) {
571
- return this.attributes.get(t);
572
- }
573
- /** The current selection as attribute name→value pairs, skipping unset attributes. */
574
- getSelection() {
575
- const t = {};
576
- for (const [e, i] of this.attributes) {
577
- const o = i.selected;
578
- o !== void 0 && (t[e] = o);
579
- }
580
- return t;
581
- }
582
- handleResults(t) {
583
- for (const e of t) {
584
- if (!e.success) {
585
- this.onMutationFailed?.(e.name, e.value);
586
- continue;
587
- }
588
- this.get(e.name)?.handleResult(e.value);
589
- }
590
- }
591
- buildOptions(t, e) {
592
- const i = {
593
- name: t.name,
594
- values: t.values,
595
- onSelect: (o, s) => {
596
- e([{ name: o, value: s }], !1);
597
- }
598
- };
599
- return t.defaultValue !== void 0 ? { ...i, defaultValue: t.defaultValue } : i;
570
+ routeToHandler(t) {
571
+ const e = this.handlers.get(t.type);
572
+ if (e === void 0)
573
+ return;
574
+ const i = e(t);
575
+ i instanceof Promise && i.catch((o) => {
576
+ const s = o instanceof Error ? o.message : String(o);
577
+ console.error(`Virtualdisplay: error handling ${t.type}: ${s}`);
578
+ });
600
579
  }
601
580
  }
602
- class ie {
581
+ class ne {
603
582
  constructor(t, e) {
604
583
  this.send = t, this.onMutationFailed = e;
605
584
  }
@@ -613,7 +592,7 @@ class ie {
613
592
  handleMappingReceived(t) {
614
593
  C.debug("Initializing from server mapping", {
615
594
  attributeCount: t.attributes.length
616
- }), this.registry = new ne(
595
+ }), this.registry = new Bt(
617
596
  t.attributes,
618
597
  (e, i) => this.sendMutation(e, i),
619
598
  this.onMutationFailed
@@ -678,7 +657,7 @@ class ie {
678
657
  this.pendingCallbacks.length = 0;
679
658
  }
680
659
  }
681
- let oe = class {
660
+ let ie = class {
682
661
  constructor(t) {
683
662
  this.send = t;
684
663
  }
@@ -741,7 +720,7 @@ let oe = class {
741
720
  this.send(t);
742
721
  }
743
722
  };
744
- class se {
723
+ class oe {
745
724
  state;
746
725
  limitsState;
747
726
  changeCallbacks = [];
@@ -829,19 +808,7 @@ class se {
829
808
  }
830
809
  }
831
810
  }
832
- const O = {
833
- /** Attribute selection requested (cancelable). `detail`: `{ attribute, value }`. */
834
- SELECT: "ui:select",
835
- /** Attribute selection applied. `detail`: `{ attribute, value }`. */
836
- SELECTED: "ui:selected",
837
- /** Focus changed (bubbles). `detail`: `{ component, attributes }`, or `null` for the overview. */
838
- FOCUS_CHANGE: "vd:focus-change",
839
- /** Resolved configuration changed (bubbles). `detail`: the resolved configuration, or `null` when nothing matches. */
840
- CONFIGURATION_CHANGE: "vd:configuration-change",
841
- /** Configuration submitted (bubbles). `detail`: the resolved configuration handed to the host. */
842
- CONFIGURATION_SUBMIT: "vd:configuration-submit"
843
- };
844
- class re {
811
+ class se {
845
812
  constructor(t, e) {
846
813
  this.send = t, this.dispatch = e;
847
814
  }
@@ -878,27 +845,27 @@ class re {
878
845
  }
879
846
  /** Called by the client when a FocusStateMessage is received from the viewer. */
880
847
  handleStateReceived(t) {
881
- t.state === $t.FOCUSED && t.component !== void 0 ? (this.focused = t.component, this.attributes = t.attributes ?? []) : (this.focused = null, this.attributes = []);
848
+ t.state === Ut.FOCUSED && t.component !== void 0 ? (this.focused = t.component, this.attributes = t.attributes ?? []) : (this.focused = null, this.attributes = []);
882
849
  const e = this.focused !== null ? { component: this.focused, attributes: this.attributes } : null;
883
850
  for (const i of this.changeCallbacks)
884
851
  i(e);
885
852
  this.dispatch(e);
886
853
  }
887
854
  }
888
- function ae(n, t) {
889
- const e = n.filter((s) => le(s, t));
855
+ function re(n, t) {
856
+ const e = n.filter((s) => ae(s, t));
890
857
  if (e.length === 0)
891
858
  return;
892
859
  const i = Math.max(...e.map(Q)), o = e.filter((s) => Q(s) === i);
893
860
  return o.length === 1 ? o[0] : void 0;
894
861
  }
895
- function le(n, t) {
862
+ function ae(n, t) {
896
863
  return Object.entries(n.attributes).every(([e, i]) => t[e] === i);
897
864
  }
898
865
  function Q(n) {
899
866
  return Object.keys(n.attributes).length;
900
867
  }
901
- class ce {
868
+ class le {
902
869
  constructor(t, e) {
903
870
  this.dispatchChange = t, this.dispatchSubmit = e;
904
871
  }
@@ -1008,8 +975,8 @@ class ce {
1008
975
  resolve() {
1009
976
  if (this.pricing === void 0)
1010
977
  return;
1011
- const t = ae(this.pricing.rules, this.selection);
1012
- if (!(t === void 0 || t.availability === Dt.HIDDEN))
978
+ const t = re(this.pricing.rules, this.selection);
979
+ if (!(t === void 0 || t.availability === Vt.HIDDEN))
1013
980
  return {
1014
981
  attributes: { ...this.selection },
1015
982
  reference: t.reference,
@@ -1019,7 +986,7 @@ class ce {
1019
986
  };
1020
987
  }
1021
988
  }
1022
- class ue {
989
+ class ce {
1023
990
  constructor(t) {
1024
991
  this.filename = t;
1025
992
  }
@@ -1073,7 +1040,7 @@ class ue {
1073
1040
  }
1074
1041
  }
1075
1042
  const J = 3e4;
1076
- class de {
1043
+ class ue {
1077
1044
  constructor(t) {
1078
1045
  this.send = t;
1079
1046
  }
@@ -1089,7 +1056,7 @@ class de {
1089
1056
  */
1090
1057
  take(t) {
1091
1058
  this.validateFilename(t), C.debug("Taking snapshot", { filename: t });
1092
- const e = new ue(t), i = setTimeout(() => {
1059
+ const e = new ce(t), i = setTimeout(() => {
1093
1060
  this.pendingPhotos.delete(t), C.warn("Snapshot timed out", { filename: t }), e.fail(new f(
1094
1061
  `Snapshot timed out: the viewer did not respond within ${J}ms`,
1095
1062
  A.SNAPSHOT_FAILED
@@ -1160,7 +1127,7 @@ class de {
1160
1127
  );
1161
1128
  }
1162
1129
  }
1163
- class he {
1130
+ class de {
1164
1131
  container = null;
1165
1132
  attach(t) {
1166
1133
  this.container = t;
@@ -1181,14 +1148,14 @@ class he {
1181
1148
  };
1182
1149
  }
1183
1150
  }
1184
- const me = {}, pe = "en", pt = (
1151
+ const he = {}, me = "en", pt = (
1185
1152
  /** @type {const} */
1186
1153
  ["en", "nl", "de"]
1187
1154
  ), W = [
1188
1155
  "baseLocale"
1189
1156
  ], tt = [];
1190
1157
  let et, nt;
1191
- function fe(n) {
1158
+ function pe(n) {
1192
1159
  if (tt.length === 0)
1193
1160
  return;
1194
1161
  const t = typeof n == "string" ? n : n.href;
@@ -1197,14 +1164,14 @@ function fe(n) {
1197
1164
  const e = new URL(t, "http://dummy.com");
1198
1165
  let i;
1199
1166
  for (const o of tt)
1200
- if (new me(o.match, e.href).exec(e.href)) {
1167
+ if (new he(o.match, e.href).exec(e.href)) {
1201
1168
  i = o;
1202
1169
  break;
1203
1170
  }
1204
1171
  return et = t, nt = i, i;
1205
1172
  }
1206
1173
  function ft(n) {
1207
- const t = fe(n);
1174
+ const t = pe(n);
1208
1175
  return t && t.exclude !== !0 && Array.isArray(t.strategy) ? t.strategy : W;
1209
1176
  }
1210
1177
  const q = typeof window > "u";
@@ -1215,16 +1182,16 @@ globalThis.__paraglide.ssr ?? {};
1215
1182
  let it = !1, h = () => {
1216
1183
  let n = W;
1217
1184
  !q && typeof window < "u" && window.location?.href && (n = ft(window.location.href));
1218
- const t = ge(n);
1185
+ const t = fe(n);
1219
1186
  if (t)
1220
1187
  return it || (it = !0, gt(t, { reload: !1 })), t;
1221
1188
  throw new Error("No locale found. Read the docs https://paraglidejs.com/errors#no-locale-found");
1222
1189
  };
1223
- function ge(n, t) {
1190
+ function fe(n, t) {
1224
1191
  let e;
1225
1192
  for (const i of n) {
1226
1193
  if (i === "baseLocale")
1227
- e = pe;
1194
+ e = me;
1228
1195
  else if (vt(i) && I.has(i)) {
1229
1196
  const s = I.get(i);
1230
1197
  if (s) {
@@ -1232,7 +1199,7 @@ function ge(n, t) {
1232
1199
  if (r instanceof Promise)
1233
1200
  continue;
1234
1201
  if (r !== void 0)
1235
- return ve(r);
1202
+ return be(r);
1236
1203
  }
1237
1204
  }
1238
1205
  const o = bt(e);
@@ -1240,7 +1207,7 @@ function ge(n, t) {
1240
1207
  return o;
1241
1208
  }
1242
1209
  }
1243
- const be = (n) => {
1210
+ const ge = (n) => {
1244
1211
  window.location.reload();
1245
1212
  };
1246
1213
  let gt = (n, t) => {
@@ -1269,7 +1236,7 @@ let gt = (n, t) => {
1269
1236
  }
1270
1237
  }
1271
1238
  const r = () => {
1272
- !q && e.reload && window.location && n !== i && be();
1239
+ !q && e.reload && window.location && n !== i && ge();
1273
1240
  };
1274
1241
  if (o.length)
1275
1242
  return Promise.all(o).then(() => {
@@ -1285,7 +1252,7 @@ function bt(n) {
1285
1252
  if (e.toLowerCase() === t)
1286
1253
  return e;
1287
1254
  }
1288
- function ve(n) {
1255
+ function be(n) {
1289
1256
  const t = bt(n);
1290
1257
  if (t)
1291
1258
  return t;
@@ -1295,163 +1262,163 @@ const I = /* @__PURE__ */ new Map();
1295
1262
  function vt(n) {
1296
1263
  return typeof n == "string" && /^custom-[A-Za-z0-9_-]+$/.test(n);
1297
1264
  }
1298
- const ye = (
1265
+ const ve = (
1299
1266
  /** @type {(inputs: Controls_Ar_Buttonlabel1Inputs) => LocalizedString} */
1300
1267
  () => (
1301
1268
  /** @type {LocalizedString} */
1302
1269
  "Activate AR"
1303
1270
  )
1304
- ), _e = (
1271
+ ), ye = (
1305
1272
  /** @type {(inputs: Controls_Ar_Buttonlabel1Inputs) => LocalizedString} */
1306
1273
  () => (
1307
1274
  /** @type {LocalizedString} */
1308
1275
  "AR activeren"
1309
1276
  )
1310
- ), Ce = (
1277
+ ), _e = (
1311
1278
  /** @type {(inputs: Controls_Ar_Buttonlabel1Inputs) => LocalizedString} */
1312
1279
  () => (
1313
1280
  /** @type {LocalizedString} */
1314
1281
  "AR aktivieren"
1315
1282
  )
1316
- ), we = (
1283
+ ), Ce = (
1317
1284
  /** @type {((inputs?: Controls_Ar_Buttonlabel1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Ar_Buttonlabel1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1318
1285
  ((n = {}, t = {}) => {
1319
1286
  const e = t.locale ?? h();
1320
- return e === "en" ? ye() : e === "nl" ? _e() : Ce();
1287
+ return e === "en" ? ve() : e === "nl" ? ye() : _e();
1321
1288
  })
1322
- ), ke = (
1289
+ ), we = (
1323
1290
  /** @type {(inputs: Controls_Qr_Modaltitle1Inputs) => LocalizedString} */
1324
1291
  () => (
1325
1292
  /** @type {LocalizedString} */
1326
1293
  "Scan to view in AR"
1327
1294
  )
1328
- ), Se = (
1295
+ ), ke = (
1329
1296
  /** @type {(inputs: Controls_Qr_Modaltitle1Inputs) => LocalizedString} */
1330
1297
  () => (
1331
1298
  /** @type {LocalizedString} */
1332
1299
  "Scan om in AR te bekijken"
1333
1300
  )
1334
- ), Ae = (
1301
+ ), Se = (
1335
1302
  /** @type {(inputs: Controls_Qr_Modaltitle1Inputs) => LocalizedString} */
1336
1303
  () => (
1337
1304
  /** @type {LocalizedString} */
1338
1305
  "Scannen für AR-Ansicht"
1339
1306
  )
1340
- ), Ee = (
1307
+ ), Ae = (
1341
1308
  /** @type {((inputs?: Controls_Qr_Modaltitle1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Qr_Modaltitle1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1342
1309
  ((n = {}, t = {}) => {
1343
1310
  const e = t.locale ?? h();
1344
- return e === "en" ? ke() : e === "nl" ? Se() : Ae();
1311
+ return e === "en" ? we() : e === "nl" ? ke() : Se();
1345
1312
  })
1346
- ), xe = (
1313
+ ), Ee = (
1347
1314
  /** @type {(inputs: Controls_Qr_Modaldescription1Inputs) => LocalizedString} */
1348
1315
  () => (
1349
1316
  /** @type {LocalizedString} */
1350
1317
  "Use your smartphone camera to scan this QR code"
1351
1318
  )
1352
- ), Te = (
1319
+ ), xe = (
1353
1320
  /** @type {(inputs: Controls_Qr_Modaldescription1Inputs) => LocalizedString} */
1354
1321
  () => (
1355
1322
  /** @type {LocalizedString} */
1356
1323
  "Gebruik de camera van je smartphone om deze QR-code te scannen"
1357
1324
  )
1358
- ), Re = (
1325
+ ), Te = (
1359
1326
  /** @type {(inputs: Controls_Qr_Modaldescription1Inputs) => LocalizedString} */
1360
1327
  () => (
1361
1328
  /** @type {LocalizedString} */
1362
1329
  "Verwenden Sie die Kamera Ihres Smartphones, um diesen QR-Code zu scannen"
1363
1330
  )
1364
- ), Oe = (
1331
+ ), Re = (
1365
1332
  /** @type {((inputs?: Controls_Qr_Modaldescription1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Qr_Modaldescription1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1366
1333
  ((n = {}, t = {}) => {
1367
1334
  const e = t.locale ?? h();
1368
- return e === "en" ? xe() : e === "nl" ? Te() : Re();
1335
+ return e === "en" ? Ee() : e === "nl" ? xe() : Te();
1369
1336
  })
1370
- ), Ne = (
1337
+ ), Oe = (
1371
1338
  /** @type {(inputs: Controls_Qr_Modalinstructions1Inputs) => LocalizedString} */
1372
1339
  () => (
1373
1340
  /** @type {LocalizedString} */
1374
1341
  "Your phone will open the 3D model in AR mode."
1375
1342
  )
1376
- ), Ie = (
1343
+ ), Ne = (
1377
1344
  /** @type {(inputs: Controls_Qr_Modalinstructions1Inputs) => LocalizedString} */
1378
1345
  () => (
1379
1346
  /** @type {LocalizedString} */
1380
1347
  "Je telefoon opent het 3D-model in AR-modus."
1381
1348
  )
1382
- ), Le = (
1349
+ ), Ie = (
1383
1350
  /** @type {(inputs: Controls_Qr_Modalinstructions1Inputs) => LocalizedString} */
1384
1351
  () => (
1385
1352
  /** @type {LocalizedString} */
1386
1353
  "Das 3D-Modell wird im AR-Modus Ihres Telefons geöffnet"
1387
1354
  )
1388
- ), Me = (
1355
+ ), Le = (
1389
1356
  /** @type {((inputs?: Controls_Qr_Modalinstructions1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Qr_Modalinstructions1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1390
1357
  ((n = {}, t = {}) => {
1391
1358
  const e = t.locale ?? h();
1392
- return e === "en" ? Ne() : e === "nl" ? Ie() : Le();
1359
+ return e === "en" ? Oe() : e === "nl" ? Ne() : Ie();
1393
1360
  })
1394
- ), ze = (
1361
+ ), Me = (
1395
1362
  /** @type {(inputs: Controls_Qr_Closebutton1Inputs) => LocalizedString} */
1396
1363
  () => (
1397
1364
  /** @type {LocalizedString} */
1398
1365
  "Close"
1399
1366
  )
1400
- ), Pe = (
1367
+ ), ze = (
1401
1368
  /** @type {(inputs: Controls_Qr_Closebutton1Inputs) => LocalizedString} */
1402
1369
  () => (
1403
1370
  /** @type {LocalizedString} */
1404
1371
  "Sluiten"
1405
1372
  )
1406
- ), Fe = (
1373
+ ), Pe = (
1407
1374
  /** @type {(inputs: Controls_Qr_Closebutton1Inputs) => LocalizedString} */
1408
1375
  () => (
1409
1376
  /** @type {LocalizedString} */
1410
1377
  "Schließen"
1411
1378
  )
1412
- ), $e = (
1379
+ ), Fe = (
1413
1380
  /** @type {((inputs?: Controls_Qr_Closebutton1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Qr_Closebutton1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1414
1381
  ((n = {}, t = {}) => {
1415
1382
  const e = t.locale ?? h();
1416
- return e === "en" ? ze() : e === "nl" ? Pe() : Fe();
1383
+ return e === "en" ? Me() : e === "nl" ? ze() : Pe();
1417
1384
  })
1418
- ), De = (
1385
+ ), $e = (
1419
1386
  /** @type {(inputs: Controls_Fullscreen_Buttonlabel1Inputs) => LocalizedString} */
1420
1387
  () => (
1421
1388
  /** @type {LocalizedString} */
1422
1389
  "Fullscreen"
1423
1390
  )
1424
- ), Be = (
1391
+ ), De = (
1425
1392
  /** @type {(inputs: Controls_Fullscreen_Buttonlabel1Inputs) => LocalizedString} */
1426
1393
  () => (
1427
1394
  /** @type {LocalizedString} */
1428
1395
  "Volledig scherm"
1429
1396
  )
1430
- ), Ue = (
1397
+ ), Be = (
1431
1398
  /** @type {(inputs: Controls_Fullscreen_Buttonlabel1Inputs) => LocalizedString} */
1432
1399
  () => (
1433
1400
  /** @type {LocalizedString} */
1434
1401
  "Vollbild"
1435
1402
  )
1436
- ), Ve = (
1403
+ ), Ue = (
1437
1404
  /** @type {((inputs?: Controls_Fullscreen_Buttonlabel1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Fullscreen_Buttonlabel1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1438
1405
  ((n = {}, t = {}) => {
1439
1406
  const e = t.locale ?? h();
1440
- return e === "en" ? De() : e === "nl" ? Be() : Ue();
1407
+ return e === "en" ? $e() : e === "nl" ? De() : Be();
1441
1408
  })
1442
- ), je = (
1409
+ ), Ve = (
1443
1410
  /** @type {(inputs: Loading_Downloadingshort1Inputs) => LocalizedString} */
1444
1411
  () => (
1445
1412
  /** @type {LocalizedString} */
1446
1413
  "Downloading"
1447
1414
  )
1448
- ), He = (
1415
+ ), je = (
1449
1416
  /** @type {(inputs: Loading_Downloadingshort1Inputs) => LocalizedString} */
1450
1417
  () => (
1451
1418
  /** @type {LocalizedString} */
1452
1419
  "Downloaden"
1453
1420
  )
1454
- ), Ge = (
1421
+ ), He = (
1455
1422
  /** @type {(inputs: Loading_Downloadingshort1Inputs) => LocalizedString} */
1456
1423
  () => (
1457
1424
  /** @type {LocalizedString} */
@@ -1461,346 +1428,346 @@ const ye = (
1461
1428
  /** @type {((inputs?: Loading_Downloadingshort1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Loading_Downloadingshort1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1462
1429
  ((n = {}, t = {}) => {
1463
1430
  const e = t.locale ?? h();
1464
- return e === "en" ? je() : e === "nl" ? He() : Ge();
1431
+ return e === "en" ? Ve() : e === "nl" ? je() : He();
1465
1432
  })
1466
- ), qe = (
1433
+ ), Ge = (
1467
1434
  /** @type {(inputs: Loading_RenderingInputs) => LocalizedString} */
1468
1435
  () => (
1469
1436
  /** @type {LocalizedString} */
1470
1437
  "Rendering"
1471
1438
  )
1472
- ), Ze = (
1439
+ ), qe = (
1473
1440
  /** @type {(inputs: Loading_RenderingInputs) => LocalizedString} */
1474
1441
  () => (
1475
1442
  /** @type {LocalizedString} */
1476
1443
  "Renderen"
1477
1444
  )
1478
- ), We = (
1445
+ ), Ze = (
1479
1446
  /** @type {(inputs: Loading_RenderingInputs) => LocalizedString} */
1480
1447
  () => (
1481
1448
  /** @type {LocalizedString} */
1482
1449
  "Rendern"
1483
1450
  )
1484
- ), Ye = (
1451
+ ), We = (
1485
1452
  /** @type {((inputs?: Loading_RenderingInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Loading_RenderingInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1486
1453
  ((n = {}, t = {}) => {
1487
1454
  const e = t.locale ?? h();
1488
- return e === "en" ? qe() : e === "nl" ? Ze() : We();
1455
+ return e === "en" ? Ge() : e === "nl" ? qe() : Ze();
1489
1456
  })
1490
- ), Xe = (
1457
+ ), Ye = (
1491
1458
  /** @type {(inputs: Controls_Screenshot_Buttonlabel1Inputs) => LocalizedString} */
1492
1459
  () => (
1493
1460
  /** @type {LocalizedString} */
1494
1461
  "Screenshot"
1495
1462
  )
1496
- ), Ke = (
1463
+ ), Xe = (
1497
1464
  /** @type {(inputs: Controls_Screenshot_Buttonlabel1Inputs) => LocalizedString} */
1498
1465
  () => (
1499
1466
  /** @type {LocalizedString} */
1500
1467
  "Screenshot"
1501
1468
  )
1502
- ), Qe = (
1469
+ ), Ke = (
1503
1470
  /** @type {(inputs: Controls_Screenshot_Buttonlabel1Inputs) => LocalizedString} */
1504
1471
  () => (
1505
1472
  /** @type {LocalizedString} */
1506
1473
  "Screenshot"
1507
1474
  )
1508
- ), Je = (
1475
+ ), Qe = (
1509
1476
  /** @type {((inputs?: Controls_Screenshot_Buttonlabel1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Screenshot_Buttonlabel1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1510
1477
  ((n = {}, t = {}) => {
1511
1478
  const e = t.locale ?? h();
1512
- return e === "en" ? Xe() : e === "nl" ? Ke() : Qe();
1479
+ return e === "en" ? Ye() : e === "nl" ? Xe() : Ke();
1513
1480
  })
1514
- ), tn = (
1481
+ ), Je = (
1515
1482
  /** @type {(inputs: Controls_Configurator_OpenInputs) => LocalizedString} */
1516
1483
  () => (
1517
1484
  /** @type {LocalizedString} */
1518
1485
  "Configure"
1519
1486
  )
1520
- ), en = (
1487
+ ), tn = (
1521
1488
  /** @type {(inputs: Controls_Configurator_OpenInputs) => LocalizedString} */
1522
1489
  () => (
1523
1490
  /** @type {LocalizedString} */
1524
- "Configureer"
1491
+ "Configureren"
1525
1492
  )
1526
- ), nn = (
1493
+ ), en = (
1527
1494
  /** @type {(inputs: Controls_Configurator_OpenInputs) => LocalizedString} */
1528
1495
  () => (
1529
1496
  /** @type {LocalizedString} */
1530
1497
  "Konfigurieren"
1531
1498
  )
1532
- ), on = (
1499
+ ), nn = (
1533
1500
  /** @type {((inputs?: Controls_Configurator_OpenInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Configurator_OpenInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1534
1501
  ((n = {}, t = {}) => {
1535
1502
  const e = t.locale ?? h();
1536
- return e === "en" ? tn() : e === "nl" ? en() : nn();
1503
+ return e === "en" ? Je() : e === "nl" ? tn() : en();
1537
1504
  })
1538
- ), sn = (
1505
+ ), on = (
1539
1506
  /** @type {(inputs: Controls_Configurator_CloseInputs) => LocalizedString} */
1540
1507
  () => (
1541
1508
  /** @type {LocalizedString} */
1542
1509
  "Close"
1543
1510
  )
1544
- ), rn = (
1511
+ ), sn = (
1545
1512
  /** @type {(inputs: Controls_Configurator_CloseInputs) => LocalizedString} */
1546
1513
  () => (
1547
1514
  /** @type {LocalizedString} */
1548
1515
  "Sluiten"
1549
1516
  )
1550
- ), an = (
1517
+ ), rn = (
1551
1518
  /** @type {(inputs: Controls_Configurator_CloseInputs) => LocalizedString} */
1552
1519
  () => (
1553
1520
  /** @type {LocalizedString} */
1554
1521
  "Schließen"
1555
1522
  )
1556
- ), ln = (
1523
+ ), an = (
1557
1524
  /** @type {((inputs?: Controls_Configurator_CloseInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Configurator_CloseInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1558
1525
  ((n = {}, t = {}) => {
1559
1526
  const e = t.locale ?? h();
1560
- return e === "en" ? sn() : e === "nl" ? rn() : an();
1527
+ return e === "en" ? on() : e === "nl" ? sn() : rn();
1561
1528
  })
1562
- ), cn = (
1529
+ ), ln = (
1563
1530
  /** @type {(inputs: Controls_Camera_ResetInputs) => LocalizedString} */
1564
1531
  () => (
1565
1532
  /** @type {LocalizedString} */
1566
1533
  "Reset camera"
1567
1534
  )
1568
- ), un = (
1535
+ ), cn = (
1569
1536
  /** @type {(inputs: Controls_Camera_ResetInputs) => LocalizedString} */
1570
1537
  () => (
1571
1538
  /** @type {LocalizedString} */
1572
1539
  "Camera resetten"
1573
1540
  )
1574
- ), dn = (
1541
+ ), un = (
1575
1542
  /** @type {(inputs: Controls_Camera_ResetInputs) => LocalizedString} */
1576
1543
  () => (
1577
1544
  /** @type {LocalizedString} */
1578
1545
  "Kamera zurücksetzen"
1579
1546
  )
1580
- ), hn = (
1547
+ ), dn = (
1581
1548
  /** @type {((inputs?: Controls_Camera_ResetInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_ResetInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1582
1549
  ((n = {}, t = {}) => {
1583
1550
  const e = t.locale ?? h();
1584
- return e === "en" ? cn() : e === "nl" ? un() : dn();
1551
+ return e === "en" ? ln() : e === "nl" ? cn() : un();
1585
1552
  })
1586
- ), mn = (
1553
+ ), hn = (
1587
1554
  /** @type {(inputs: Controls_Camera_Zoomin1Inputs) => LocalizedString} */
1588
1555
  () => (
1589
1556
  /** @type {LocalizedString} */
1590
1557
  "Zoom in"
1591
1558
  )
1592
- ), pn = (
1559
+ ), mn = (
1593
1560
  /** @type {(inputs: Controls_Camera_Zoomin1Inputs) => LocalizedString} */
1594
1561
  () => (
1595
1562
  /** @type {LocalizedString} */
1596
1563
  "Inzoomen"
1597
1564
  )
1598
- ), fn = (
1565
+ ), pn = (
1599
1566
  /** @type {(inputs: Controls_Camera_Zoomin1Inputs) => LocalizedString} */
1600
1567
  () => (
1601
1568
  /** @type {LocalizedString} */
1602
1569
  "Hineinzoomen"
1603
1570
  )
1604
- ), gn = (
1571
+ ), fn = (
1605
1572
  /** @type {((inputs?: Controls_Camera_Zoomin1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Zoomin1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1606
1573
  ((n = {}, t = {}) => {
1607
1574
  const e = t.locale ?? h();
1608
- return e === "en" ? mn() : e === "nl" ? pn() : fn();
1575
+ return e === "en" ? hn() : e === "nl" ? mn() : pn();
1609
1576
  })
1610
- ), bn = (
1577
+ ), gn = (
1611
1578
  /** @type {(inputs: Controls_Camera_Zoomout1Inputs) => LocalizedString} */
1612
1579
  () => (
1613
1580
  /** @type {LocalizedString} */
1614
1581
  "Zoom out"
1615
1582
  )
1616
- ), vn = (
1583
+ ), bn = (
1617
1584
  /** @type {(inputs: Controls_Camera_Zoomout1Inputs) => LocalizedString} */
1618
1585
  () => (
1619
1586
  /** @type {LocalizedString} */
1620
1587
  "Uitzoomen"
1621
1588
  )
1622
- ), yn = (
1589
+ ), vn = (
1623
1590
  /** @type {(inputs: Controls_Camera_Zoomout1Inputs) => LocalizedString} */
1624
1591
  () => (
1625
1592
  /** @type {LocalizedString} */
1626
1593
  "Herauszoomen"
1627
1594
  )
1628
- ), _n = (
1595
+ ), yn = (
1629
1596
  /** @type {((inputs?: Controls_Camera_Zoomout1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Zoomout1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1630
1597
  ((n = {}, t = {}) => {
1631
1598
  const e = t.locale ?? h();
1632
- return e === "en" ? bn() : e === "nl" ? vn() : yn();
1599
+ return e === "en" ? gn() : e === "nl" ? bn() : vn();
1633
1600
  })
1634
- ), Cn = (
1601
+ ), _n = (
1635
1602
  /** @type {(inputs: Controls_Camera_Rotateleft1Inputs) => LocalizedString} */
1636
1603
  () => (
1637
1604
  /** @type {LocalizedString} */
1638
1605
  "Rotate left"
1639
1606
  )
1640
- ), wn = (
1607
+ ), Cn = (
1641
1608
  /** @type {(inputs: Controls_Camera_Rotateleft1Inputs) => LocalizedString} */
1642
1609
  () => (
1643
1610
  /** @type {LocalizedString} */
1644
1611
  "Naar links draaien"
1645
1612
  )
1646
- ), kn = (
1613
+ ), wn = (
1647
1614
  /** @type {(inputs: Controls_Camera_Rotateleft1Inputs) => LocalizedString} */
1648
1615
  () => (
1649
1616
  /** @type {LocalizedString} */
1650
1617
  "Nach links drehen"
1651
1618
  )
1652
- ), Sn = (
1619
+ ), kn = (
1653
1620
  /** @type {((inputs?: Controls_Camera_Rotateleft1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Rotateleft1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1654
1621
  ((n = {}, t = {}) => {
1655
1622
  const e = t.locale ?? h();
1656
- return e === "en" ? Cn() : e === "nl" ? wn() : kn();
1623
+ return e === "en" ? _n() : e === "nl" ? Cn() : wn();
1657
1624
  })
1658
- ), An = (
1625
+ ), Sn = (
1659
1626
  /** @type {(inputs: Controls_Camera_Rotateright1Inputs) => LocalizedString} */
1660
1627
  () => (
1661
1628
  /** @type {LocalizedString} */
1662
1629
  "Rotate right"
1663
1630
  )
1664
- ), En = (
1631
+ ), An = (
1665
1632
  /** @type {(inputs: Controls_Camera_Rotateright1Inputs) => LocalizedString} */
1666
1633
  () => (
1667
1634
  /** @type {LocalizedString} */
1668
1635
  "Naar rechts draaien"
1669
1636
  )
1670
- ), xn = (
1637
+ ), En = (
1671
1638
  /** @type {(inputs: Controls_Camera_Rotateright1Inputs) => LocalizedString} */
1672
1639
  () => (
1673
1640
  /** @type {LocalizedString} */
1674
1641
  "Nach rechts drehen"
1675
1642
  )
1676
- ), Tn = (
1643
+ ), xn = (
1677
1644
  /** @type {((inputs?: Controls_Camera_Rotateright1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Rotateright1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1678
1645
  ((n = {}, t = {}) => {
1679
1646
  const e = t.locale ?? h();
1680
- return e === "en" ? An() : e === "nl" ? En() : xn();
1647
+ return e === "en" ? Sn() : e === "nl" ? An() : En();
1681
1648
  })
1682
- ), Rn = (
1649
+ ), Tn = (
1683
1650
  /** @type {(inputs: Controls_Camera_Tiltup1Inputs) => LocalizedString} */
1684
1651
  () => (
1685
1652
  /** @type {LocalizedString} */
1686
1653
  "Tilt up"
1687
1654
  )
1688
- ), On = (
1655
+ ), Rn = (
1689
1656
  /** @type {(inputs: Controls_Camera_Tiltup1Inputs) => LocalizedString} */
1690
1657
  () => (
1691
1658
  /** @type {LocalizedString} */
1692
1659
  "Omhoog kantelen"
1693
1660
  )
1694
- ), Nn = (
1661
+ ), On = (
1695
1662
  /** @type {(inputs: Controls_Camera_Tiltup1Inputs) => LocalizedString} */
1696
1663
  () => (
1697
1664
  /** @type {LocalizedString} */
1698
1665
  "Nach oben kippen"
1699
1666
  )
1700
- ), In = (
1667
+ ), Nn = (
1701
1668
  /** @type {((inputs?: Controls_Camera_Tiltup1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Tiltup1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1702
1669
  ((n = {}, t = {}) => {
1703
1670
  const e = t.locale ?? h();
1704
- return e === "en" ? Rn() : e === "nl" ? On() : Nn();
1671
+ return e === "en" ? Tn() : e === "nl" ? Rn() : On();
1705
1672
  })
1706
- ), Ln = (
1673
+ ), In = (
1707
1674
  /** @type {(inputs: Controls_Camera_Tiltdown1Inputs) => LocalizedString} */
1708
1675
  () => (
1709
1676
  /** @type {LocalizedString} */
1710
1677
  "Tilt down"
1711
1678
  )
1712
- ), Mn = (
1679
+ ), Ln = (
1713
1680
  /** @type {(inputs: Controls_Camera_Tiltdown1Inputs) => LocalizedString} */
1714
1681
  () => (
1715
1682
  /** @type {LocalizedString} */
1716
1683
  "Omlaag kantelen"
1717
1684
  )
1718
- ), zn = (
1685
+ ), Mn = (
1719
1686
  /** @type {(inputs: Controls_Camera_Tiltdown1Inputs) => LocalizedString} */
1720
1687
  () => (
1721
1688
  /** @type {LocalizedString} */
1722
1689
  "Nach unten kippen"
1723
1690
  )
1724
- ), Pn = (
1691
+ ), zn = (
1725
1692
  /** @type {((inputs?: Controls_Camera_Tiltdown1Inputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Controls_Camera_Tiltdown1Inputs, { locale?: "en" | "nl" | "de" }, {}>} */
1726
1693
  ((n = {}, t = {}) => {
1727
1694
  const e = t.locale ?? h();
1728
- return e === "en" ? Ln() : e === "nl" ? Mn() : zn();
1695
+ return e === "en" ? In() : e === "nl" ? Ln() : Mn();
1729
1696
  })
1730
- ), Fn = (
1697
+ ), Pn = (
1731
1698
  /** @type {(inputs: Commerce_Submit_BusyInputs) => LocalizedString} */
1732
1699
  () => (
1733
1700
  /** @type {LocalizedString} */
1734
1701
  "Working…"
1735
1702
  )
1736
- ), $n = (
1703
+ ), Fn = (
1737
1704
  /** @type {(inputs: Commerce_Submit_BusyInputs) => LocalizedString} */
1738
1705
  () => (
1739
1706
  /** @type {LocalizedString} */
1740
1707
  "Bezig…"
1741
1708
  )
1742
- ), Dn = (
1709
+ ), $n = (
1743
1710
  /** @type {(inputs: Commerce_Submit_BusyInputs) => LocalizedString} */
1744
1711
  () => (
1745
1712
  /** @type {LocalizedString} */
1746
1713
  "Läuft…"
1747
1714
  )
1748
- ), Bn = (
1715
+ ), Dn = (
1749
1716
  /** @type {((inputs?: Commerce_Submit_BusyInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Commerce_Submit_BusyInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1750
1717
  ((n = {}, t = {}) => {
1751
1718
  const e = t.locale ?? h();
1752
- return e === "en" ? Fn() : e === "nl" ? $n() : Dn();
1719
+ return e === "en" ? Pn() : e === "nl" ? Fn() : $n();
1753
1720
  })
1754
- ), Un = (
1721
+ ), Bn = (
1755
1722
  /** @type {(inputs: Commerce_Submit_SuccessInputs) => LocalizedString} */
1756
1723
  () => (
1757
1724
  /** @type {LocalizedString} */
1758
1725
  "Done"
1759
1726
  )
1760
- ), Vn = (
1727
+ ), Un = (
1761
1728
  /** @type {(inputs: Commerce_Submit_SuccessInputs) => LocalizedString} */
1762
1729
  () => (
1763
1730
  /** @type {LocalizedString} */
1764
1731
  "Gelukt"
1765
1732
  )
1766
- ), jn = (
1733
+ ), Vn = (
1767
1734
  /** @type {(inputs: Commerce_Submit_SuccessInputs) => LocalizedString} */
1768
1735
  () => (
1769
1736
  /** @type {LocalizedString} */
1770
1737
  "Fertig"
1771
1738
  )
1772
- ), Hn = (
1739
+ ), jn = (
1773
1740
  /** @type {((inputs?: Commerce_Submit_SuccessInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Commerce_Submit_SuccessInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1774
1741
  ((n = {}, t = {}) => {
1775
1742
  const e = t.locale ?? h();
1776
- return e === "en" ? Un() : e === "nl" ? Vn() : jn();
1743
+ return e === "en" ? Bn() : e === "nl" ? Un() : Vn();
1777
1744
  })
1778
- ), Gn = (
1745
+ ), Hn = (
1779
1746
  /** @type {(inputs: Commerce_Submit_FailedInputs) => LocalizedString} */
1780
1747
  () => (
1781
1748
  /** @type {LocalizedString} */
1782
1749
  "Failed"
1783
1750
  )
1784
- ), qn = (
1751
+ ), Gn = (
1785
1752
  /** @type {(inputs: Commerce_Submit_FailedInputs) => LocalizedString} */
1786
1753
  () => (
1787
1754
  /** @type {LocalizedString} */
1788
1755
  "Mislukt"
1789
1756
  )
1790
- ), Zn = (
1757
+ ), qn = (
1791
1758
  /** @type {(inputs: Commerce_Submit_FailedInputs) => LocalizedString} */
1792
1759
  () => (
1793
1760
  /** @type {LocalizedString} */
1794
1761
  "Fehlgeschlagen"
1795
1762
  )
1796
- ), Wn = (
1763
+ ), Zn = (
1797
1764
  /** @type {((inputs?: Commerce_Submit_FailedInputs, options?: { locale?: "en" | "nl" | "de" }) => LocalizedString) & import('../runtime.js').MessageMetadata<Commerce_Submit_FailedInputs, { locale?: "en" | "nl" | "de" }, {}>} */
1798
1765
  ((n = {}, t = {}) => {
1799
1766
  const e = t.locale ?? h();
1800
- return e === "en" ? Gn() : e === "nl" ? qn() : Zn();
1767
+ return e === "en" ? Hn() : e === "nl" ? Gn() : qn();
1801
1768
  })
1802
1769
  );
1803
- const Yn = {
1770
+ const Wn = {
1804
1771
  xmlns: "http://www.w3.org/2000/svg",
1805
1772
  width: 24,
1806
1773
  height: 24,
@@ -1821,12 +1788,12 @@ const _t = ([n, t, e]) => {
1821
1788
  }), i;
1822
1789
  }, Ct = (n, t = {}) => {
1823
1790
  const i = {
1824
- ...Yn,
1791
+ ...Wn,
1825
1792
  ...t
1826
1793
  };
1827
1794
  return _t(["svg", i, n]);
1828
1795
  };
1829
- const Xn = [
1796
+ const Yn = [
1830
1797
  [
1831
1798
  "path",
1832
1799
  {
@@ -1836,7 +1803,7 @@ const Xn = [
1836
1803
  ["path", { d: "m3.3 7 8.7 5 8.7-5" }],
1837
1804
  ["path", { d: "M12 22V12" }]
1838
1805
  ];
1839
- const Kn = [
1806
+ const Xn = [
1840
1807
  [
1841
1808
  "path",
1842
1809
  {
@@ -1846,26 +1813,26 @@ const Kn = [
1846
1813
  ["circle", { cx: "12", cy: "13", r: "3" }]
1847
1814
  ];
1848
1815
  const wt = [["path", { d: "m6 9 6 6 6-6" }]];
1849
- const Qn = [["path", { d: "m15 18-6-6 6-6" }]];
1850
- const Jn = [["path", { d: "m9 18 6-6-6-6" }]];
1851
- const ti = [["path", { d: "m18 15-6-6-6 6" }]];
1852
- const ei = [
1816
+ const Kn = [["path", { d: "m15 18-6-6 6-6" }]];
1817
+ const Qn = [["path", { d: "m9 18 6-6-6-6" }]];
1818
+ const Jn = [["path", { d: "m18 15-6-6-6 6" }]];
1819
+ const ti = [
1853
1820
  ["path", { d: "M15 3h6v6" }],
1854
1821
  ["path", { d: "m21 3-7 7" }],
1855
1822
  ["path", { d: "m3 21 7-7" }],
1856
1823
  ["path", { d: "M9 21H3v-6" }]
1857
1824
  ];
1858
- const ni = [
1825
+ const ei = [
1859
1826
  ["path", { d: "m14 10 7-7" }],
1860
1827
  ["path", { d: "M20 10h-6V4" }],
1861
1828
  ["path", { d: "m3 21 7-7" }],
1862
1829
  ["path", { d: "M4 14h6v6" }]
1863
1830
  ];
1864
- const ii = [
1831
+ const ni = [
1865
1832
  ["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }],
1866
1833
  ["path", { d: "M3 3v5h5" }]
1867
1834
  ];
1868
- const oi = [
1835
+ const ii = [
1869
1836
  ["path", { d: "M10 5H3" }],
1870
1837
  ["path", { d: "M12 19H3" }],
1871
1838
  ["path", { d: "M14 3v4" }],
@@ -1876,17 +1843,17 @@ const oi = [
1876
1843
  ["path", { d: "M8 10v4" }],
1877
1844
  ["path", { d: "M8 12H3" }]
1878
1845
  ];
1879
- const si = [
1846
+ const oi = [
1880
1847
  ["path", { d: "M18 6 6 18" }],
1881
1848
  ["path", { d: "m6 6 12 12" }]
1882
1849
  ];
1883
- const ri = [
1850
+ const si = [
1884
1851
  ["circle", { cx: "11", cy: "11", r: "8" }],
1885
1852
  ["line", { x1: "21", x2: "16.65", y1: "21", y2: "16.65" }],
1886
1853
  ["line", { x1: "11", x2: "11", y1: "8", y2: "14" }],
1887
1854
  ["line", { x1: "8", x2: "14", y1: "11", y2: "11" }]
1888
1855
  ];
1889
- const ai = [
1856
+ const ri = [
1890
1857
  ["circle", { cx: "11", cy: "11", r: "8" }],
1891
1858
  ["line", { x1: "21", x2: "16.65", y1: "21", y2: "16.65" }],
1892
1859
  ["line", { x1: "8", x2: "14", y1: "11", y2: "11" }]
@@ -1895,19 +1862,19 @@ function y(n, { size: t = 20, strokeWidth: e = 1.75 } = {}) {
1895
1862
  return Ct(n, { width: t, height: t, "stroke-width": e });
1896
1863
  }
1897
1864
  const g = {
1898
- ar: (n) => y(Xn, n),
1899
- fullscreen: (n) => y(ei, n),
1900
- exitFullscreen: (n) => y(ni, n),
1901
- screenshot: (n) => y(Kn, n),
1902
- tiltUp: (n) => y(ti, n),
1865
+ ar: (n) => y(Yn, n),
1866
+ fullscreen: (n) => y(ti, n),
1867
+ exitFullscreen: (n) => y(ei, n),
1868
+ screenshot: (n) => y(Xn, n),
1869
+ tiltUp: (n) => y(Jn, n),
1903
1870
  tiltDown: (n) => y(wt, n),
1904
- rotateLeft: (n) => y(Qn, n),
1905
- rotateRight: (n) => y(Jn, n),
1906
- zoomIn: (n) => y(ri, n),
1907
- zoomOut: (n) => y(ai, n),
1908
- reset: (n) => y(ii, n),
1909
- configurator: (n) => y(oi, n),
1910
- close: (n) => y(si, n)
1871
+ rotateLeft: (n) => y(Kn, n),
1872
+ rotateRight: (n) => y(Qn, n),
1873
+ zoomIn: (n) => y(si, n),
1874
+ zoomOut: (n) => y(ri, n),
1875
+ reset: (n) => y(ni, n),
1876
+ configurator: (n) => y(ii, n),
1877
+ close: (n) => y(oi, n)
1911
1878
  };
1912
1879
  class b {
1913
1880
  element;
@@ -1956,7 +1923,7 @@ const m = {
1956
1923
  24: "6rem"
1957
1924
  // 96px
1958
1925
  };
1959
- class li {
1926
+ class ai {
1960
1927
  element;
1961
1928
  constructor() {
1962
1929
  this.element = document.createElement("div"), Object.assign(this.element.style, {
@@ -1969,9 +1936,9 @@ class li {
1969
1936
  });
1970
1937
  }
1971
1938
  }
1972
- class ci {
1939
+ class li {
1973
1940
  constructor(t = {}) {
1974
- this.options = t, this.card = new li(), this.backdrop = this.createBackdrop(), this.backdrop.appendChild(this.card.element);
1941
+ this.options = t, this.card = new ai(), this.backdrop = this.createBackdrop(), this.backdrop.appendChild(this.card.element);
1975
1942
  }
1976
1943
  options;
1977
1944
  card;
@@ -2000,7 +1967,7 @@ class ci {
2000
1967
  }), t;
2001
1968
  }
2002
1969
  }
2003
- class ui {
1970
+ class ci {
2004
1971
  element;
2005
1972
  selectCallback = null;
2006
1973
  constructor(t, e, i) {
@@ -2022,7 +1989,7 @@ class ui {
2022
1989
  this.selectCallback = t;
2023
1990
  }
2024
1991
  }
2025
- class di {
1992
+ class ui {
2026
1993
  element;
2027
1994
  select;
2028
1995
  constructor(t, e, i, o, s) {
@@ -2064,8 +2031,8 @@ const _ = {
2064
2031
  medium: "500",
2065
2032
  semibold: "600"
2066
2033
  }
2067
- }, hi = _.fontFamily.sans.join(", ");
2068
- class mi {
2034
+ }, di = _.fontFamily.sans.join(", ");
2035
+ class hi {
2069
2036
  qrLib = null;
2070
2037
  dialog = null;
2071
2038
  async show(t) {
@@ -2076,28 +2043,28 @@ class mi {
2076
2043
  errorCorrectionLevel: "M",
2077
2044
  color: { dark: m.black, light: m.white }
2078
2045
  });
2079
- this.dialog = new ci({ onClose: () => {
2046
+ this.dialog = new li({ onClose: () => {
2080
2047
  this.dialog = null;
2081
2048
  } }), Object.assign(this.dialog.card.element.style, {
2082
2049
  display: "flex",
2083
2050
  flexDirection: "column",
2084
2051
  alignItems: "center",
2085
2052
  gap: a[3],
2086
- fontFamily: hi
2087
- }), this.dialog.card.element.appendChild(this.createText(Ee(), {
2053
+ fontFamily: di
2054
+ }), this.dialog.card.element.appendChild(this.createText(Ae(), {
2088
2055
  fontSize: _.fontSize.base,
2089
2056
  fontWeight: _.fontWeight.semibold,
2090
2057
  color: m.neutral[900]
2091
- })), this.dialog.card.element.appendChild(this.createText(Oe(), {
2058
+ })), this.dialog.card.element.appendChild(this.createText(Re(), {
2092
2059
  fontSize: _.fontSize.sm,
2093
2060
  color: m.neutral[600]
2094
- })), this.dialog.card.element.appendChild(this.createQrImage(e)), this.dialog.card.element.appendChild(this.createText(Me(), {
2061
+ })), this.dialog.card.element.appendChild(this.createQrImage(e)), this.dialog.card.element.appendChild(this.createText(Le(), {
2095
2062
  fontSize: _.fontSize.xs,
2096
2063
  color: m.neutral[500]
2097
2064
  }));
2098
2065
  const i = new b({
2099
2066
  variant: "outline",
2100
- label: $e(),
2067
+ label: Fe(),
2101
2068
  onClick: () => {
2102
2069
  this.hide();
2103
2070
  }
@@ -2120,7 +2087,7 @@ class mi {
2120
2087
  }), e;
2121
2088
  }
2122
2089
  }
2123
- const x = _.fontFamily.sans.join(", "), pi = `
2090
+ const x = _.fontFamily.sans.join(", "), mi = `
2124
2091
  --primary: oklch(5% 0 0);
2125
2092
  --primary-foreground: oklch(100% 0 0);
2126
2093
  --secondary: oklch(92% 0 0);
@@ -2133,8 +2100,8 @@ const x = _.fontFamily.sans.join(", "), pi = `
2133
2100
  --accent: oklch(92% 0 0);
2134
2101
  --accent-foreground: oklch(5% 0 0);
2135
2102
  --muted-foreground: oklch(44% 0 0);
2136
- `, fi = `
2137
- :root { ${pi} }
2103
+ `, pi = `
2104
+ :root { ${mi} }
2138
2105
 
2139
2106
  /* ── Button ──────────────────────────────────────────────── */
2140
2107
  .ui-btn {
@@ -2380,31 +2347,31 @@ const x = _.fontFamily.sans.join(", "), pi = `
2380
2347
  }
2381
2348
  `;
2382
2349
  let ot = !1;
2383
- function gi() {
2350
+ function fi() {
2384
2351
  if (ot || typeof document > "u")
2385
2352
  return;
2386
2353
  ot = !0;
2387
2354
  const n = document.createElement("style");
2388
- n.id = "vd-ui-vanilla", n.textContent = fi, document.head.appendChild(n);
2355
+ n.id = "vd-ui-vanilla", n.textContent = pi, document.head.appendChild(n);
2389
2356
  }
2390
2357
  function st(n) {
2391
2358
  const t = Math.max(0, Math.min(1, n));
2392
2359
  return t * t * (3 - 2 * t);
2393
2360
  }
2394
- function bi(n, t, e, i, o, s) {
2361
+ function gi(n, t, e, i, o, s) {
2395
2362
  const [r, l, d] = n, u = Math.cos(t), p = Math.sin(t), v = u * r + p * d, E = -p * r + u * d, S = Math.cos(e), w = Math.sin(e), R = S * l - w * E, M = w * l + S * E, Y = 0.55;
2396
2363
  return [i + v * s * Y, o - R * s * Y, M];
2397
2364
  }
2398
- function vi(n, t, e) {
2365
+ function bi(n, t, e) {
2399
2366
  n.beginPath(), n.moveTo(t[0], t[1]), n.lineTo(e[0], e[1]), n.strokeStyle = "#000", n.lineWidth = 2, n.stroke();
2400
2367
  }
2401
- function yi(n, t, e, i, o) {
2368
+ function vi(n, t, e, i, o) {
2402
2369
  const s = t(e), r = t(i), l = [
2403
2370
  s[0] + (r[0] - s[0]) * o,
2404
2371
  s[1] + (r[1] - s[1]) * o,
2405
2372
  s[2]
2406
2373
  ];
2407
- vi(n, s, l);
2374
+ bi(n, s, l);
2408
2375
  }
2409
2376
  const z = [-1, -1, 1], P = [1, -1, 1], F = [1, -1, -1], $ = [-1, -1, -1], D = [-1, 1, 1], B = [1, 1, 1], U = [1, 1, -1], V = [-1, 1, -1], rt = [
2410
2377
  [z, P],
@@ -2419,8 +2386,8 @@ const z = [-1, -1, 1], P = [1, -1, 1], F = [1, -1, -1], $ = [-1, -1, -1], D = [-
2419
2386
  [B, U],
2420
2387
  [U, V],
2421
2388
  [V, D]
2422
- ], _i = 400, at = '-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif';
2423
- function Ci() {
2389
+ ], yi = 400, at = '-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif';
2390
+ function _i() {
2424
2391
  const n = document.createElement("div");
2425
2392
  Object.assign(n.style, {
2426
2393
  position: "absolute",
@@ -2465,7 +2432,7 @@ function Ci() {
2465
2432
  fontFamily: at
2466
2433
  }), o.textContent = yt(), e.appendChild(i), e.appendChild(o), n.appendChild(t), n.appendChild(e), { overlay: n, canvas: t, pctEl: i, phaseEl: o };
2467
2434
  }
2468
- class wi {
2435
+ class Ci {
2469
2436
  overlay;
2470
2437
  canvas;
2471
2438
  ctx;
@@ -2478,9 +2445,9 @@ class wi {
2478
2445
  visible = !1;
2479
2446
  constructor(t, e = {}) {
2480
2447
  this.startTime = performance.now();
2481
- const i = Ci();
2448
+ const i = _i();
2482
2449
  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());
2483
- const o = e.showDelay ?? _i;
2450
+ const o = e.showDelay ?? yi;
2484
2451
  this.showTimerId = setTimeout(() => {
2485
2452
  this.reveal();
2486
2453
  }, o);
@@ -2488,7 +2455,7 @@ class wi {
2488
2455
  get loadingTexts() {
2489
2456
  return {
2490
2457
  downloading: yt(),
2491
- rendering: Ye()
2458
+ rendering: We()
2492
2459
  };
2493
2460
  }
2494
2461
  updateProgress(t, e) {
@@ -2541,7 +2508,7 @@ class wi {
2541
2508
  return;
2542
2509
  const t = this.canvas.width / Math.min(devicePixelRatio, 2), e = this.canvas.height / Math.min(devicePixelRatio, 2), i = (performance.now() - this.startTime) / 1e3;
2543
2510
  this.ctx.fillStyle = "#fff", this.ctx.fillRect(0, 0, t, e);
2544
- const o = t / 2, s = e * 0.44, r = Math.min(t, e) * 0.08, l = 0.785, d = 0.615, u = (w) => bi(w, l, d, o, s, r), p = 6, v = i % p / p, E = rt.length;
2511
+ const o = t / 2, s = e * 0.44, r = Math.min(t, e) * 0.08, l = 0.785, d = 0.615, u = (w) => gi(w, l, d, o, s, r), p = 6, v = i % p / p, E = rt.length;
2545
2512
  let S;
2546
2513
  v < 0.35 ? S = st(v / 0.35) * E : v < 0.55 ? S = E : v < 0.9 ? S = (1 - st((v - 0.55) / 0.35)) * E : S = 0, this.ctx.shadowBlur = 5, this.ctx.shadowColor = "rgba(30,30,30,0.08)";
2547
2514
  for (let w = 0; w < E && !(w >= S); w++) {
@@ -2549,12 +2516,12 @@ class wi {
2549
2516
  if (R === void 0)
2550
2517
  continue;
2551
2518
  const M = Math.min(1, S - w);
2552
- yi(this.ctx, u, R[0], R[1], M);
2519
+ vi(this.ctx, u, R[0], R[1], M);
2553
2520
  }
2554
2521
  this.ctx.shadowBlur = 0;
2555
2522
  }
2556
2523
  }
2557
- class ki {
2524
+ class wi {
2558
2525
  constructor(t) {
2559
2526
  this.options = t, this.element = document.createElement("div"), Object.assign(this.element.style, { display: "flex", gap: "0.375rem" }), this.onFullscreenChange = () => {
2560
2527
  this.setFullscreenIcon(document.fullscreenElement !== null);
@@ -2579,7 +2546,7 @@ class ki {
2579
2546
  this.arBtn = this.syncButton(this.arBtn, t.ar !== !1 && this.options.onAr !== void 0, () => new b({
2580
2547
  variant: "outline",
2581
2548
  size: "icon",
2582
- label: we(),
2549
+ label: Ce(),
2583
2550
  icon: g.ar(),
2584
2551
  onClick: () => {
2585
2552
  this.options.onAr?.();
@@ -2587,7 +2554,7 @@ class ki {
2587
2554
  })), this.fullscreenBtn = this.syncButton(this.fullscreenBtn, t.fullscreen !== !1 && this.options.onFullscreen !== void 0, () => new b({
2588
2555
  variant: "outline",
2589
2556
  size: "icon",
2590
- label: Ve(),
2557
+ label: Ue(),
2591
2558
  icon: g.fullscreen(),
2592
2559
  onClick: () => {
2593
2560
  this.options.onFullscreen?.();
@@ -2608,9 +2575,9 @@ class L {
2608
2575
  targetTilt: e.tilt,
2609
2576
  targetZoom: e.zoom,
2610
2577
  thetaOffset: 0
2611
- }, o = Si(t, e, i);
2578
+ }, o = ki(t, e, i);
2612
2579
  e.onChange((s) => {
2613
- i.targetRotation = s.rotation - i.thetaOffset, i.targetTilt = s.tilt, i.targetZoom = s.zoom, Ai(o, e, s);
2580
+ i.targetRotation = s.rotation - i.thetaOffset, i.targetTilt = s.tilt, i.targetZoom = s.zoom, Si(o, e, s);
2614
2581
  }), this.element.appendChild(L.buildZoom(o.zoomOut, o.zoomIn)), this.element.appendChild(L.buildDpad(o.tiltUp, o.rotateLeft, o.reset, o.rotateRight, o.tiltDown));
2615
2582
  }
2616
2583
  static buildZoom(t, e) {
@@ -2631,7 +2598,7 @@ class L {
2631
2598
  return r;
2632
2599
  }
2633
2600
  }
2634
- function Si(n, t, e) {
2601
+ function ki(n, t, e) {
2635
2602
  const i = (r) => Math.max(t.limits?.minZoom ?? 1, Math.min(t.limits?.maxZoom ?? 1 / 0, r)), o = (r) => {
2636
2603
  const l = t.limits?.minRotate, d = t.limits?.maxRotate;
2637
2604
  return l !== void 0 || d !== void 0 ? Math.max(l ?? -1 / 0, Math.min(d ?? 1 / 0, r)) : r;
@@ -2645,54 +2612,54 @@ function Si(n, t, e) {
2645
2612
  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());
2646
2613
  };
2647
2614
  return {
2648
- zoomOut: new b({ variant: "outline", size: "icon", label: _n(), icon: g.zoomOut(), onClick: () => {
2615
+ zoomOut: new b({ variant: "outline", size: "icon", label: yn(), icon: g.zoomOut(), onClick: () => {
2649
2616
  e.targetZoom = i(e.targetZoom - 10), n.zoom(e.targetZoom).set();
2650
2617
  } }),
2651
- zoomIn: new b({ variant: "outline", size: "icon", label: gn(), icon: g.zoomIn(), onClick: () => {
2618
+ zoomIn: new b({ variant: "outline", size: "icon", label: fn(), icon: g.zoomIn(), onClick: () => {
2652
2619
  e.targetZoom = i(e.targetZoom + 10), n.zoom(e.targetZoom).set();
2653
2620
  } }),
2654
- tiltUp: new b({ variant: "outline", size: "icon", label: In(), icon: g.tiltUp(), onClick: () => {
2621
+ tiltUp: new b({ variant: "outline", size: "icon", label: Nn(), icon: g.tiltUp(), onClick: () => {
2655
2622
  s(-15);
2656
2623
  } }),
2657
- rotateLeft: new b({ variant: "outline", size: "icon", label: Sn(), icon: g.rotateLeft(), onClick: () => {
2624
+ rotateLeft: new b({ variant: "outline", size: "icon", label: kn(), icon: g.rotateLeft(), onClick: () => {
2658
2625
  e.targetRotation = o(e.targetRotation - 15), n.rotate(e.targetRotation + e.thetaOffset).set();
2659
2626
  } }),
2660
- reset: new b({ variant: "outline", size: "icon", label: hn(), icon: g.reset(), onClick: () => {
2627
+ reset: new b({ variant: "outline", size: "icon", label: dn(), icon: g.reset(), onClick: () => {
2661
2628
  e.thetaOffset = 0, n.reset();
2662
2629
  } }),
2663
- rotateRight: new b({ variant: "outline", size: "icon", label: Tn(), icon: g.rotateRight(), onClick: () => {
2630
+ rotateRight: new b({ variant: "outline", size: "icon", label: xn(), icon: g.rotateRight(), onClick: () => {
2664
2631
  e.targetRotation = o(e.targetRotation + 15), n.rotate(e.targetRotation + e.thetaOffset).set();
2665
2632
  } }),
2666
- tiltDown: new b({ variant: "outline", size: "icon", label: Pn(), icon: g.tiltDown(), onClick: () => {
2633
+ tiltDown: new b({ variant: "outline", size: "icon", label: zn(), icon: g.tiltDown(), onClick: () => {
2667
2634
  s(15);
2668
2635
  } })
2669
2636
  };
2670
2637
  }
2671
- function Ai(n, t, e) {
2638
+ function Si(n, t, e) {
2672
2639
  const i = t.limits;
2673
2640
  i !== void 0 && (n.zoomOut.element.disabled = i.minZoom !== void 0 && e.zoom <= i.minZoom + T, n.zoomIn.element.disabled = i.maxZoom !== void 0 && e.zoom >= i.maxZoom - T, n.tiltUp.element.disabled = i.minTilt !== void 0 && e.tilt <= i.minTilt + T, n.tiltDown.element.disabled = i.maxTilt !== void 0 && e.tilt >= i.maxTilt - T, n.rotateLeft.element.disabled = i.minRotate !== void 0 && e.rotation <= i.minRotate + T, n.rotateRight.element.disabled = i.maxRotate !== void 0 && e.rotation >= i.maxRotate - T);
2674
2641
  }
2675
- const Ei = 5;
2676
- let xi = 0;
2642
+ const Ai = 5;
2643
+ let Ei = 0;
2677
2644
  function j(n) {
2678
2645
  const t = n.replace(/([A-Z])/g, " $1").trim();
2679
2646
  return t.charAt(0).toUpperCase() + t.slice(1).toLowerCase();
2680
2647
  }
2681
- function Ti(n, t, e, i, o) {
2648
+ function xi(n, t, e, i, o) {
2682
2649
  const s = document.createElement("div");
2683
2650
  s.className = "vd-attribute", s.dataset.name = n.name;
2684
2651
  const r = document.createElement("span");
2685
- r.className = "vd-attribute-label", r.textContent = j(n.name), r.id = `vd-attribute-label-${xi++}`, s.appendChild(r), s.setAttribute("role", "group"), s.setAttribute("aria-labelledby", r.id);
2686
- const l = n.values.find((p) => t.getValue(n.name, p)?.isSelected === !0), d = n.values.map(j), u = n.values.length <= Ei ? new ui(n.values, l, d) : new di(n.name, n.values, j(n.name), l, d);
2652
+ r.className = "vd-attribute-label", r.textContent = j(n.name), r.id = `vd-attribute-label-${Ei++}`, s.appendChild(r), s.setAttribute("role", "group"), s.setAttribute("aria-labelledby", r.id);
2653
+ const l = n.values.find((p) => t.getValue(n.name, p)?.isSelected === !0), d = n.values.map(j), u = n.values.length <= Ai ? new ci(n.values, l, d) : new ui(n.name, n.values, j(n.name), l, d);
2687
2654
  return u.onSelect((p) => {
2688
2655
  e.dispatch(O.SELECT, { attribute: n.name, value: p }, !0).defaultPrevented || i(n.name, p);
2689
2656
  }), o(n.name, (p) => {
2690
2657
  u.setSelected(p.value), e.dispatch(O.SELECTED, { attribute: n.name, value: p.value });
2691
2658
  }), s.appendChild(u.element), s;
2692
2659
  }
2693
- const Ri = 80, Oi = 2500;
2694
- class Ni {
2695
- constructor(t, e = Oi) {
2660
+ const Ti = 80, Ri = 2500;
2661
+ class Oi {
2662
+ constructor(t, e = Ri) {
2696
2663
  this.configuration = t, this.resetMs = e, this.element = document.createElement("div"), this.element.className = "vd-commerce vd-hidden";
2697
2664
  const i = document.createElement("div");
2698
2665
  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 b({ variant: "default", onClick: () => {
@@ -2724,7 +2691,7 @@ class Ni {
2724
2691
  this.priceEl.textContent = "", this.vatEl.textContent = "";
2725
2692
  return;
2726
2693
  }
2727
- this.priceEl.textContent = Ii(t.price, t.currency), this.vatEl.textContent = lt(this.configuration.vatDisplay);
2694
+ this.priceEl.textContent = Ni(t.price, t.currency), this.vatEl.textContent = lt(this.configuration.vatDisplay);
2728
2695
  }
2729
2696
  renderButton() {
2730
2697
  const t = this.configuration.submitEnabled;
@@ -2732,11 +2699,11 @@ class Ni {
2732
2699
  }
2733
2700
  async handleSubmit() {
2734
2701
  if (this.state !== "busy") {
2735
- this.setState("busy", Bn());
2702
+ this.setState("busy", Dn());
2736
2703
  try {
2737
- await this.configuration.submit(), this.setState("success", Hn());
2704
+ await this.configuration.submit(), this.setState("success", jn());
2738
2705
  } catch {
2739
- this.setState("failed", Wn());
2706
+ this.setState("failed", Zn());
2740
2707
  }
2741
2708
  this.scheduleReset();
2742
2709
  }
@@ -2754,9 +2721,9 @@ class Ni {
2754
2721
  }
2755
2722
  }
2756
2723
  function lt(n) {
2757
- return (n ?? "").slice(0, Ri);
2724
+ return (n ?? "").slice(0, Ti);
2758
2725
  }
2759
- function Ii(n, t) {
2726
+ function Ni(n, t) {
2760
2727
  try {
2761
2728
  const e = new Intl.NumberFormat(h(), { style: "currency", currency: t }), i = e.resolvedOptions().maximumFractionDigits ?? 2;
2762
2729
  return e.format(n / 10 ** i);
@@ -2777,8 +2744,8 @@ class kt {
2777
2744
  this.slot?.remove(), this.slot = null, this.panel = null;
2778
2745
  }
2779
2746
  }
2780
- const Li = 572;
2781
- class Mi {
2747
+ const Ii = 572;
2748
+ class Li {
2782
2749
  element = null;
2783
2750
  body = null;
2784
2751
  openButton = null;
@@ -2792,7 +2759,7 @@ class Mi {
2792
2759
  this.container = t, e.classList.add("vd-attributes-sidebar"), this.closeButton = new b({
2793
2760
  variant: "ghost",
2794
2761
  size: "icon-sm",
2795
- label: ln(),
2762
+ label: an(),
2796
2763
  icon: g.close({ size: 18 }),
2797
2764
  onClick: () => {
2798
2765
  this.expanded = !1, this.render();
@@ -2802,7 +2769,7 @@ class Mi {
2802
2769
  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 b({
2803
2770
  variant: "outline",
2804
2771
  size: "default",
2805
- label: on(),
2772
+ label: nn(),
2806
2773
  icon: g.configurator({ size: 18 }),
2807
2774
  onClick: () => {
2808
2775
  this.expanded = !0, this.render();
@@ -2818,7 +2785,7 @@ class Mi {
2818
2785
  observe() {
2819
2786
  typeof ResizeObserver > "u" || this.container === null || (this.observer = new ResizeObserver((t) => {
2820
2787
  const e = t[0]?.contentRect.width ?? 0;
2821
- this.setCollapsible(e > 0 && e < Li);
2788
+ this.setCollapsible(e > 0 && e < Ii);
2822
2789
  }), this.observer.observe(this.container));
2823
2790
  }
2824
2791
  setCollapsible(t) {
@@ -2831,7 +2798,7 @@ class Mi {
2831
2798
  this.element.classList.toggle("vd-hidden", !this.visible), this.element.classList.toggle("vd-sidebar-collapsed", this.visible && !this.expanded), this.openButton.element.classList.toggle("vd-hidden", !(this.visible && !this.expanded)), this.closeButton.element.style.display = this.collapsible ? "" : "none", this.container.classList.toggle("vd-layout-sidebar-right", t);
2832
2799
  }
2833
2800
  }
2834
- class zi {
2801
+ class Mi {
2835
2802
  attach(t, e) {
2836
2803
  }
2837
2804
  setVisible(t) {
@@ -2839,20 +2806,20 @@ class zi {
2839
2806
  destroy() {
2840
2807
  }
2841
2808
  }
2842
- const Pi = {
2809
+ const zi = {
2843
2810
  "inframe-bottom-left": () => new kt(),
2844
- "sidebar-right": () => new Mi(),
2845
- hidden: () => new zi()
2811
+ "sidebar-right": () => new Li(),
2812
+ hidden: () => new Mi()
2846
2813
  };
2847
- function Fi(n) {
2848
- return (Pi[n ?? ""] ?? (() => new kt()))();
2814
+ function Pi(n) {
2815
+ return (zi[n ?? ""] ?? (() => new kt()))();
2849
2816
  }
2850
2817
  const H = _.fontFamily.sans.join(", "), G = `
2851
2818
  position: absolute;
2852
2819
  display: flex;
2853
2820
  z-index: 10;
2854
2821
  transition: inset-inline-end 0.18s ease;
2855
- `, $i = `
2822
+ `, Fi = `
2856
2823
  /* Override browser's default black fullscreen backdrop */
2857
2824
  .vd-container:fullscreen {
2858
2825
  background: oklch(100% 0 0);
@@ -3043,17 +3010,17 @@ const H = _.fontFamily.sans.join(", "), G = `
3043
3010
  }
3044
3011
 
3045
3012
  `;
3046
- function Di() {
3047
- if (gi(), document.getElementById("vd-styles") !== null)
3013
+ function $i() {
3014
+ if (fi(), document.getElementById("vd-styles") !== null)
3048
3015
  return;
3049
3016
  const n = document.createElement("style");
3050
- n.id = "vd-styles", n.textContent = $i, document.head.appendChild(n);
3017
+ n.id = "vd-styles", n.textContent = Fi, document.head.appendChild(n);
3051
3018
  }
3052
- function Bi(n, t) {
3019
+ function Di(n, t) {
3053
3020
  const e = document.createElement("a");
3054
3021
  e.href = `data:image/png;base64,${n}`, e.download = t, e.click();
3055
3022
  }
3056
- class Ui {
3023
+ class Bi {
3057
3024
  options;
3058
3025
  settings = {};
3059
3026
  container = null;
@@ -3069,7 +3036,7 @@ class Ui {
3069
3036
  this.options = t;
3070
3037
  }
3071
3038
  attach(t) {
3072
- Di(), this.container = t, this.loading = new wi(t), this.slots.topRight = this.createSlot(t, "vd-slot-top-right"), this.slots.bottomRight = this.createSlot(t, "vd-slot-bottom-right");
3039
+ $i(), this.container = t, this.loading = new Ci(t), this.slots.topRight = this.createSlot(t, "vd-slot-top-right"), this.slots.bottomRight = this.createSlot(t, "vd-slot-bottom-right");
3073
3040
  }
3074
3041
  onReady() {
3075
3042
  this.loading?.hide(), this.loading = null, this.mountToolbar(), this.cameraControls !== null && (this.cameraControls.element.style.display = "flex"), this.layout?.setVisible(!0);
@@ -3078,7 +3045,7 @@ class Ui {
3078
3045
  if (this.actionBar !== null || this.slots.bottomRight === null || this.container === null)
3079
3046
  return;
3080
3047
  const t = typeof this.container.requestFullscreen == "function";
3081
- this.actionBar = new ki({
3048
+ this.actionBar = new wi({
3082
3049
  onAr: this.options.onAr,
3083
3050
  onFullscreen: t ? () => {
3084
3051
  this.toggleFullscreen();
@@ -3101,14 +3068,14 @@ class Ui {
3101
3068
  if (!(this.container === null || this.slots.topRight === null) && (this.cameraControls?.element.remove(), this.cameraControls = null, this.teardownConfigurator(), this.settings.cameraControls === !0 && (this.cameraControls = new L(this.options.cameraApi, this.options.cameraPositionApi), this.cameraControls.element.style.display = "none", this.slots.topRight.appendChild(this.cameraControls.element)), this.placeScreenshotButton(), e.length !== 0)) {
3102
3069
  this.attributes = document.createElement("div"), this.attributes.className = "vd-attributes";
3103
3070
  for (const i of e)
3104
- this.attributes.appendChild(Ti(
3071
+ this.attributes.appendChild(xi(
3105
3072
  i,
3106
3073
  t,
3107
3074
  this.options.eventBus,
3108
3075
  this.options.onSelect,
3109
3076
  this.options.onSubscribe
3110
3077
  ));
3111
- this.commerce = new Ni(this.options.configuration), this.attributes.appendChild(this.commerce.element), this.layout = Fi(this.settings.configuratorLayout), this.layout.attach(this.container, this.attributes);
3078
+ this.commerce = new Oi(this.options.configuration), this.attributes.appendChild(this.commerce.element), this.layout = Pi(this.settings.configuratorLayout), this.layout.attach(this.container, this.attributes);
3112
3079
  }
3113
3080
  }
3114
3081
  get viewerSettings() {
@@ -3133,11 +3100,11 @@ class Ui {
3133
3100
  t && this.screenshotBtn === null && (this.screenshotBtn = new b({
3134
3101
  variant: "outline",
3135
3102
  size: "icon",
3136
- label: Je(),
3103
+ label: Qe(),
3137
3104
  icon: g.screenshot(),
3138
3105
  onClick: () => {
3139
3106
  this.options.snapshotApi.take("snapshot.png").onDeveloped(({ data: e, filename: i }) => {
3140
- Bi(e, i);
3107
+ Di(e, i);
3141
3108
  });
3142
3109
  }
3143
3110
  })), !t && this.screenshotBtn !== null && (this.screenshotBtn.element.remove(), this.screenshotBtn = null);
@@ -3146,6 +3113,39 @@ class Ui {
3146
3113
  this.screenshotBtn === null || this.slots.topRight === null || (this.cameraControls !== null ? this.cameraControls.element.appendChild(this.screenshotBtn.element) : this.slots.topRight.appendChild(this.screenshotBtn.element));
3147
3114
  }
3148
3115
  }
3116
+ class Ui {
3117
+ constructor(t) {
3118
+ this.send = t;
3119
+ }
3120
+ send;
3121
+ placedCallbacks = [];
3122
+ setEnabled(t) {
3123
+ this.send({
3124
+ type: c.ANNOTATION_TOGGLE,
3125
+ enabled: t
3126
+ });
3127
+ }
3128
+ startPlacing() {
3129
+ this.send({
3130
+ type: c.ANNOTATION_PLACE_MODE,
3131
+ enabled: !0
3132
+ });
3133
+ }
3134
+ stopPlacing() {
3135
+ this.send({
3136
+ type: c.ANNOTATION_PLACE_MODE,
3137
+ enabled: !1
3138
+ });
3139
+ }
3140
+ onPlaced(t) {
3141
+ this.placedCallbacks.push(t);
3142
+ }
3143
+ /** Called by the client when an ANNOTATION_PLACED message is received. */
3144
+ handlePlaced(t) {
3145
+ for (const e of this.placedCallbacks)
3146
+ e(t);
3147
+ }
3148
+ }
3149
3149
  class Hi {
3150
3150
  attributes;
3151
3151
  readyStateTracker;
@@ -3165,29 +3165,29 @@ class Hi {
3165
3165
  readyCallbacks = [];
3166
3166
  mutationFailedCallbacks = [];
3167
3167
  constructor(t) {
3168
- this.options = t, this.initializeLogging(), this.messenger = new Qt(() => this.iframe?.contentWindow ?? null);
3168
+ this.options = t, this.initializeLogging(), this.messenger = new ee(() => this.iframe?.contentWindow ?? null);
3169
3169
  const e = (i) => {
3170
3170
  this.messenger.send(i);
3171
3171
  };
3172
- this.attributes = new ie(e, (i, o) => {
3172
+ this.attributes = new ne(e, (i, o) => {
3173
3173
  for (const s of this.mutationFailedCallbacks)
3174
3174
  s({ attribute: i, value: o });
3175
- }), this.snapshotApi = new de(e), this.annotationsApi = new Jt(e), this.cameraApi = new oe(e), this.cameraPositionApi = new se(), this.focusApi = new re(e, (i) => {
3175
+ }), this.snapshotApi = new ue(e), this.annotationsApi = new Ui(e), this.cameraApi = new ie(e), this.cameraPositionApi = new oe(), this.focusApi = new se(e, (i) => {
3176
3176
  this.dispatchFocusChange(i);
3177
- }), this.configurationApi = new ce(
3177
+ }), this.configurationApi = new le(
3178
3178
  (i) => {
3179
3179
  this.dispatchConfigurationChange(i);
3180
3180
  },
3181
3181
  (i) => {
3182
3182
  this.dispatchConfigurationSubmit(i);
3183
3183
  }
3184
- ), this.eventBus = new he(), this.qrModal = new mi(), this.readyStateTracker = new Ft(() => {
3184
+ ), this.eventBus = new de(), this.qrModal = new hi(), this.readyStateTracker = new Ft(() => {
3185
3185
  const i = this.readyCallbacks;
3186
3186
  this.readyCallbacks = [];
3187
3187
  for (const o of i)
3188
3188
  o(this);
3189
3189
  this.ui.onReady();
3190
- }), this.ui = new Ui({
3190
+ }), this.ui = new Bi({
3191
3191
  snapshotApi: this.snapshotApi,
3192
3192
  cameraApi: this.cameraApi,
3193
3193
  cameraPositionApi: this.cameraPositionApi,
@@ -3202,29 +3202,29 @@ class Hi {
3202
3202
  }
3203
3203
  registerHandlers() {
3204
3204
  this.messenger.on(c.HANDSHAKE, (t) => {
3205
- Vt(t) && (C.info("Server handshake received, flushing publisher queue"), this.messenger.markReady());
3205
+ Gt(t) && (C.info("Server handshake received, flushing publisher queue"), this.messenger.markReady());
3206
3206
  }), this.messenger.on(c.MUTATION, (t) => {
3207
- jt(t) && (this.attributes.handleMutationResult(t), this.configurationApi.handleSelectionChanged(this.attributes.getSelection()));
3207
+ qt(t) && (this.attributes.handleMutationResult(t), this.configurationApi.handleSelectionChanged(this.attributes.getSelection()));
3208
3208
  }), this.messenger.on(c.SNAPSHOT, (t) => {
3209
- Ht(t) && this.snapshotApi.handleSnapshotResult(t);
3209
+ Zt(t) && this.snapshotApi.handleSnapshotResult(t);
3210
3210
  }), this.messenger.on(c.CAMERA, (t) => {
3211
- Gt(t) && this.cameraPositionApi.handlePositionUpdate(t);
3211
+ Wt(t) && this.cameraPositionApi.handlePositionUpdate(t);
3212
3212
  }), this.messenger.on(c.LOADING_INDICATOR, (t) => {
3213
- Zt(t) && (t.error !== void 0 ? this.ui.showError(t.error) : this.ui.updateProgress(t.progress, t.phase));
3213
+ Xt(t) && (t.error !== void 0 ? this.ui.showError(t.error) : this.ui.updateProgress(t.progress, t.phase));
3214
3214
  }), this.messenger.on(c.CONFIG, (t) => {
3215
- Wt(t) && this.handleConfig(t);
3215
+ Kt(t) && this.handleConfig(t);
3216
3216
  }), this.messenger.on(c.ANNOTATION_PLACED, (t) => {
3217
- Yt(t) && this.annotationsApi.handlePlaced(t.position);
3217
+ Qt(t) && this.annotationsApi.handlePlaced(t.position);
3218
3218
  }), this.messenger.on(c.MAPPING, (t) => {
3219
- qt(t) && (this.attributes.handleMappingReceived(t), this.configurationApi.handleSelectionChanged(this.attributes.getSelection()), this.ui.renderAttributeControls(this.attributes, t.attributes), this.readyStateTracker.handleMappingReceived());
3219
+ Yt(t) && (this.attributes.handleMappingReceived(t), this.configurationApi.handleSelectionChanged(this.attributes.getSelection()), this.ui.renderAttributeControls(this.attributes, t.attributes), this.readyStateTracker.handleMappingReceived());
3220
3220
  }), this.registerFacadeStateHandlers();
3221
3221
  }
3222
3222
  /** Handlers that feed viewer-reported state into the facades (focus, pricing). */
3223
3223
  registerFacadeStateHandlers() {
3224
3224
  this.messenger.on(c.FOCUS, (t) => {
3225
- Xt(t) && this.focusApi.handleStateReceived(t);
3225
+ Jt(t) && this.focusApi.handleStateReceived(t);
3226
3226
  }), this.messenger.on(c.PRICING, (t) => {
3227
- Kt(t) && this.configurationApi.handlePricingReceived(t.pricing);
3227
+ te(t) && this.configurationApi.handlePricingReceived(t.pricing);
3228
3228
  });
3229
3229
  }
3230
3230
  /**
@@ -3339,15 +3339,15 @@ class Hi {
3339
3339
  }
3340
3340
  }
3341
3341
  export {
3342
- Jt as Annotations,
3343
- ee as Attribute,
3344
- te as AttributeValue,
3345
- oe as Camera,
3346
- ce as Configuration,
3342
+ Ui as Annotations,
3343
+ Dt as Attribute,
3344
+ $t as AttributeValue,
3345
+ ie as Camera,
3346
+ le as Configuration,
3347
3347
  A as ERROR_CODES,
3348
- re as Focus,
3349
- ue as Photo,
3350
- de as Snapshot,
3348
+ se as Focus,
3349
+ ce as Photo,
3350
+ ue as Snapshot,
3351
3351
  O as VD_EVENTS,
3352
3352
  Hi as VirtualdisplayClient,
3353
3353
  f as VirtualdisplayError,