@expofp/floorplan 3.0.1 → 3.0.3

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 (97) hide show
  1. package/dist/browser/CookieConsent-CqkxkIwX.js +7810 -0
  2. package/dist/browser/Debug-Dks0egsG.js +51 -0
  3. package/dist/browser/Demo-DBNmcPwz.js +65 -0
  4. package/dist/browser/Free-BnsFOhog.js +65 -0
  5. package/dist/browser/Gallery-D9sKC8mp.js +3257 -0
  6. package/dist/browser/GpsLoader-Dfum4xB9.js +152 -0
  7. package/dist/browser/KioskStore-DnhZo-Ov.js +212 -0
  8. package/dist/browser/Mapbox-BWK98Zf_.js +120 -0
  9. package/dist/browser/SetKioskMode-DPOCqSzq.js +49 -0
  10. package/dist/browser/ShowKiosk-CWHtQFiJ.js +25 -0
  11. package/dist/browser/ThreeComponent-COgPMNab.js +1493 -0
  12. package/dist/browser/TouchHand-Ky80pfba.js +66 -0
  13. package/dist/browser/ViewerMenuPanel-DJ6pZIMD.js +106 -0
  14. package/dist/browser/add-debug-secret-listener-CXd4jWZG.js +26 -0
  15. package/dist/browser/boolean-editor-SHR1RkFd.js +206 -0
  16. package/dist/browser/bundle.json +70 -40
  17. package/dist/browser/chunk-DFRW9JAK.js +28 -0
  18. package/dist/browser/classnames-D5RYoiaD.js +39 -0
  19. package/dist/browser/client-B-AFqibD.js +7601 -0
  20. package/dist/browser/data-BPNnd1Ub.js +27969 -0
  21. package/dist/browser/debug-overlay-Dm7tnN3s.js +3995 -0
  22. package/dist/browser/debug-ui-T7mEy9PT.js +86 -0
  23. package/dist/browser/dist-Bxi6YEB1.js +2581 -0
  24. package/dist/browser/favicon-CDOxAL2U.js +12 -0
  25. package/dist/browser/fetch-retry.umd-BBS0NAgY.js +78 -0
  26. package/dist/browser/flex-CjUXae7J.js +1045 -0
  27. package/dist/browser/floorplan.ready-Vi6d8S_t.js +1310 -0
  28. package/dist/browser/fuse-B9KABHXb.js +887 -0
  29. package/dist/browser/index.js +10628 -12440
  30. package/dist/browser/jsx-runtime-EyUcoQPo.js +30 -0
  31. package/dist/browser/lib-DCBNlykb.js +1859 -0
  32. package/dist/browser/main-DoISipn5.js +289 -0
  33. package/dist/browser/mobx-DezH6kY5.js +23 -0
  34. package/dist/browser/particles.min-CBF3r8H5.js +133 -0
  35. package/dist/browser/prop-types-bwVnWQ95.js +57 -0
  36. package/dist/browser/react-dom-DNErX4mG.js +139 -0
  37. package/dist/browser/reset-all-settings-BP45RcR6.js +17 -0
  38. package/dist/browser/settings-Dbk4UG1-.js +69 -0
  39. package/dist/browser/src-C46xGkrC.js +19 -0
  40. package/dist/browser/store-COH1sU9Z.js +36100 -0
  41. package/dist/browser/ui-CmIShfKe.js +33 -0
  42. package/dist/esm/components/Layout.js +1 -1
  43. package/dist/esm/components/Map/traffic/useBuildRoute.js +2 -2
  44. package/dist/esm/components/Map/traffic/useManageTraffic.js +1 -1
  45. package/dist/esm/components/Mapbox/utils/data.d.ts +6 -8
  46. package/dist/esm/components/Modal.d.ts +1 -1
  47. package/dist/esm/components/Overlay.d.ts +1 -2
  48. package/dist/esm/components/ScrollableRow.d.ts +1 -2
  49. package/dist/esm/components/Tours.d.ts +1 -3
  50. package/dist/esm/components/stories/CookieConsent.stories.d.ts +1 -1
  51. package/dist/esm/components/stories/MapControls.stories.d.ts +1 -1
  52. package/dist/esm/components/stories/RebookingRadioGroup.stories.d.ts +1 -1
  53. package/dist/esm/store/BoothStore.d.ts +7 -7
  54. package/dist/esm/store/CategoryStore.d.ts +2 -2
  55. package/dist/esm/store/EventStore.d.ts +2 -2
  56. package/dist/esm/store/ExhibitorStore.d.ts +5 -5
  57. package/dist/esm/store/PoiTypeStore.d.ts +2 -2
  58. package/dist/esm/store/RootStore.js +1 -1
  59. package/dist/esm/store/SearchButtonsStore.d.ts +1 -1
  60. package/dist/esm/store/SearchStore.d.ts +1 -1
  61. package/dist/esm/store/SpeakerStore.d.ts +2 -2
  62. package/dist/esm/store/ToursStore.d.ts +2 -2
  63. package/dist/esm/store/init/init-booths.d.ts +3 -3
  64. package/dist/esm/store/providers/SessionsShortcutProvider.d.ts +2 -3
  65. package/dist/esm/store/providers/SpeakerShortcutProvider.d.ts +2 -3
  66. package/dist/esm/utils/is-debug.js +1 -1
  67. package/dist/esm/utils/mobx.d.ts +2 -2
  68. package/package.json +4 -4
  69. package/dist/browser/Debug-b2YI2Uxo.js +0 -40
  70. package/dist/browser/Demo-aEKqZbJJ.js +0 -47
  71. package/dist/browser/Free-BGr4o53R.js +0 -51
  72. package/dist/browser/Gallery-C9n64fhu.js +0 -71
  73. package/dist/browser/GpsLoader-ChxBR2EI.js +0 -140
  74. package/dist/browser/KioskStore-DkCSeq5I.js +0 -225
  75. package/dist/browser/Mapbox-Cl0Wxz2h.js +0 -118
  76. package/dist/browser/SetKioskMode-D3EJeF9c.js +0 -249
  77. package/dist/browser/ShowKiosk-Bs5q-1RZ.js +0 -35
  78. package/dist/browser/ThreeComponent-CSsqNYDu.js +0 -1595
  79. package/dist/browser/ViewerMenuPanel-BMmB1p03.js +0 -77
  80. package/dist/browser/boolean-editor-DpnmndKH.js +0 -157
  81. package/dist/browser/client-CN_I7kK8.js +0 -10011
  82. package/dist/browser/data-CIAMSGsv.js +0 -22125
  83. package/dist/browser/debug-overlay-DjmA0D2r.js +0 -3675
  84. package/dist/browser/debug-ui-D1QGTN8V.js +0 -67
  85. package/dist/browser/favicon-BpTKNfwa.js +0 -13
  86. package/dist/browser/fetch-retry.umd-B8hV1FNr.js +0 -123
  87. package/dist/browser/flex-09atkOGP.js +0 -400
  88. package/dist/browser/floorplan.ready-BQetaqdP.js +0 -57653
  89. package/dist/browser/index-Bw6xZlSd.js +0 -161
  90. package/dist/browser/index-C71k7nSe.js +0 -3244
  91. package/dist/browser/index-CWLY6XdC.js +0 -92
  92. package/dist/browser/index-D9pdVw-U.js +0 -882
  93. package/dist/browser/index-DPSQIIUy.js +0 -57
  94. package/dist/browser/index-jp-Zhdyp.js +0 -54
  95. package/dist/browser/jsx-runtime-CoKhM3tL.js +0 -40
  96. package/dist/browser/main-DxaHLbma.js +0 -359
  97. package/dist/browser/particles.min-CsHbc6cO.js +0 -143
@@ -0,0 +1,1493 @@
1
+ (function() {
2
+ try {
3
+ var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
+ e.SENTRY_RELEASE = { id: "3.0.3" };
5
+ var t = new e.Error().stack;
6
+ t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "5fd4a4f5-072a-494a-8265-cd04b892441d", e._sentryDebugIdIdentifier = "sentry-dbid-5fd4a4f5-072a-494a-8265-cd04b892441d");
7
+ } catch {}
8
+ })();
9
+ import { r as e } from "./chunk-DFRW9JAK.js";
10
+ import { J as t, n } from "./index.js";
11
+ import { t as r } from "./jsx-runtime-EyUcoQPo.js";
12
+ import { t as i } from "./classnames-D5RYoiaD.js";
13
+ import { $t as a, At as o, Bn as s, Bt as c, Dt as l, Et as u, Ft as d, Gn as f, Gt as p, Ht as m, It as h, Jt as g, Kt as _, Lt as v, Mt as ee, Nt as te, Ot as ne, Pn as re, Pt as y, Qt as b, Rt as x, Tt as S, Ut as C, Vn as w, Vt as T, Wn as ie, Wt as E, Xt as ae, Yt as D, Zt as oe, a as O, an as se, cn as ce, ct as le, dn as k, en as ue, fn as de, gn as fe, hn as A, in as pe, it as me, jt as he, kt as ge, ln as _e, mn as j, nn as M, o as N, on as ve, pn as ye, qt as P, r as be, rn as xe, sn as F, t as I, tn as L, un as Se, zt as R } from "./store-COH1sU9Z.js";
14
+ import { r as z } from "./mobx-DezH6kY5.js";
15
+ import { _ as Ce, a as B, f as we, g as Te, i as Ee, n as De, t as Oe, u as ke } from "./data-BPNnd1Ub.js";
16
+ //#region ../../node_modules/.pnpm/three@0.174.0/node_modules/three/examples/jsm/controls/OrbitControls.js
17
+ var Ae = /* @__PURE__ */ e(n(), 1), je = /* @__PURE__ */ e(i(), 1), V = re(), Me = { type: "change" }, Ne = { type: "start" }, Pe = { type: "end" }, H = new pe(), Fe = new a(), Ie = Math.cos(70 * p.DEG2RAD), U = new A(), W = 2 * Math.PI, G = {
18
+ NONE: -1,
19
+ ROTATE: 0,
20
+ DOLLY: 1,
21
+ PAN: 2,
22
+ TOUCH_ROTATE: 3,
23
+ TOUCH_PAN: 4,
24
+ TOUCH_DOLLY_PAN: 5,
25
+ TOUCH_DOLLY_ROTATE: 6
26
+ }, Le = 1e-6, Re = class extends te {
27
+ constructor(e, t = null) {
28
+ super(e, t), this.state = G.NONE, this.enabled = !0, this.target = new A(), this.cursor = new A(), this.minDistance = 0, this.maxDistance = Infinity, this.minZoom = 0, this.maxZoom = Infinity, this.minTargetRadius = 0, this.maxTargetRadius = Infinity, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -Infinity, this.maxAzimuthAngle = Infinity, this.enableDamping = !1, this.dampingFactor = .05, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.keyRotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !0, this.keyPanSpeed = 7, this.zoomToCursor = !1, this.autoRotate = !1, this.autoRotateSpeed = 2, this.keys = {
29
+ LEFT: "ArrowLeft",
30
+ UP: "ArrowUp",
31
+ RIGHT: "ArrowRight",
32
+ BOTTOM: "ArrowDown"
33
+ }, this.mouseButtons = {
34
+ LEFT: C.ROTATE,
35
+ MIDDLE: C.DOLLY,
36
+ RIGHT: C.PAN
37
+ }, this.touches = {
38
+ ONE: k.ROTATE,
39
+ TWO: k.DOLLY_PAN
40
+ }, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this._domElementKeyEvents = null, this._lastPosition = new A(), this._lastQuaternion = new xe(), this._lastTargetPosition = new A(), this._quat = new xe().setFromUnitVectors(e.up, new A(0, 1, 0)), this._quatInverse = this._quat.clone().invert(), this._spherical = new Se(), this._sphericalDelta = new Se(), this._scale = 1, this._panOffset = new A(), this._rotateStart = new j(), this._rotateEnd = new j(), this._rotateDelta = new j(), this._panStart = new j(), this._panEnd = new j(), this._panDelta = new j(), this._dollyStart = new j(), this._dollyEnd = new j(), this._dollyDelta = new j(), this._dollyDirection = new A(), this._mouse = new j(), this._performCursorZoom = !1, this._pointers = [], this._pointerPositions = {}, this._controlActive = !1, this._onPointerMove = Be.bind(this), this._onPointerDown = ze.bind(this), this._onPointerUp = Ve.bind(this), this._onContextMenu = Je.bind(this), this._onMouseWheel = We.bind(this), this._onKeyDown = Ge.bind(this), this._onTouchStart = Ke.bind(this), this._onTouchMove = qe.bind(this), this._onMouseDown = He.bind(this), this._onMouseMove = Ue.bind(this), this._interceptControlDown = Ye.bind(this), this._interceptControlUp = Xe.bind(this), this.domElement !== null && this.connect(), this.update();
41
+ }
42
+ connect() {
43
+ this.domElement.addEventListener("pointerdown", this._onPointerDown), this.domElement.addEventListener("pointercancel", this._onPointerUp), this.domElement.addEventListener("contextmenu", this._onContextMenu), this.domElement.addEventListener("wheel", this._onMouseWheel, { passive: !1 }), this.domElement.getRootNode().addEventListener("keydown", this._interceptControlDown, {
44
+ passive: !0,
45
+ capture: !0
46
+ }), this.domElement.style.touchAction = "none";
47
+ }
48
+ disconnect() {
49
+ this.domElement.removeEventListener("pointerdown", this._onPointerDown), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.domElement.removeEventListener("pointercancel", this._onPointerUp), this.domElement.removeEventListener("wheel", this._onMouseWheel), this.domElement.removeEventListener("contextmenu", this._onContextMenu), this.stopListenToKeyEvents(), this.domElement.getRootNode().removeEventListener("keydown", this._interceptControlDown, { capture: !0 }), this.domElement.style.touchAction = "auto";
50
+ }
51
+ dispose() {
52
+ this.disconnect();
53
+ }
54
+ getPolarAngle() {
55
+ return this._spherical.phi;
56
+ }
57
+ getAzimuthalAngle() {
58
+ return this._spherical.theta;
59
+ }
60
+ getDistance() {
61
+ return this.object.position.distanceTo(this.target);
62
+ }
63
+ listenToKeyEvents(e) {
64
+ e.addEventListener("keydown", this._onKeyDown), this._domElementKeyEvents = e;
65
+ }
66
+ stopListenToKeyEvents() {
67
+ this._domElementKeyEvents !== null && (this._domElementKeyEvents.removeEventListener("keydown", this._onKeyDown), this._domElementKeyEvents = null);
68
+ }
69
+ saveState() {
70
+ this.target0.copy(this.target), this.position0.copy(this.object.position), this.zoom0 = this.object.zoom;
71
+ }
72
+ reset() {
73
+ this.target.copy(this.target0), this.object.position.copy(this.position0), this.object.zoom = this.zoom0, this.object.updateProjectionMatrix(), this.dispatchEvent(Me), this.update(), this.state = G.NONE;
74
+ }
75
+ update(e = null) {
76
+ let t = this.object.position;
77
+ U.copy(t).sub(this.target), U.applyQuaternion(this._quat), this._spherical.setFromVector3(U), this.autoRotate && this.state === G.NONE && this._rotateLeft(this._getAutoRotationAngle(e)), this.enableDamping ? (this._spherical.theta += this._sphericalDelta.theta * this.dampingFactor, this._spherical.phi += this._sphericalDelta.phi * this.dampingFactor) : (this._spherical.theta += this._sphericalDelta.theta, this._spherical.phi += this._sphericalDelta.phi);
78
+ let n = this.minAzimuthAngle, r = this.maxAzimuthAngle;
79
+ isFinite(n) && isFinite(r) && (n < -Math.PI ? n += W : n > Math.PI && (n -= W), r < -Math.PI ? r += W : r > Math.PI && (r -= W), n <= r ? this._spherical.theta = Math.max(n, Math.min(r, this._spherical.theta)) : this._spherical.theta = this._spherical.theta > (n + r) / 2 ? Math.max(n, this._spherical.theta) : Math.min(r, this._spherical.theta)), this._spherical.phi = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, this._spherical.phi)), this._spherical.makeSafe(), this.enableDamping === !0 ? this.target.addScaledVector(this._panOffset, this.dampingFactor) : this.target.add(this._panOffset), this.target.sub(this.cursor), this.target.clampLength(this.minTargetRadius, this.maxTargetRadius), this.target.add(this.cursor);
80
+ let i = !1;
81
+ if (this.zoomToCursor && this._performCursorZoom || this.object.isOrthographicCamera) this._spherical.radius = this._clampDistance(this._spherical.radius);
82
+ else {
83
+ let e = this._spherical.radius;
84
+ this._spherical.radius = this._clampDistance(this._spherical.radius * this._scale), i = e != this._spherical.radius;
85
+ }
86
+ if (U.setFromSpherical(this._spherical), U.applyQuaternion(this._quatInverse), t.copy(this.target).add(U), this.object.lookAt(this.target), this.enableDamping === !0 ? (this._sphericalDelta.theta *= 1 - this.dampingFactor, this._sphericalDelta.phi *= 1 - this.dampingFactor, this._panOffset.multiplyScalar(1 - this.dampingFactor)) : (this._sphericalDelta.set(0, 0, 0), this._panOffset.set(0, 0, 0)), this.zoomToCursor && this._performCursorZoom) {
87
+ let e = null;
88
+ if (this.object.isPerspectiveCamera) {
89
+ let t = U.length();
90
+ e = this._clampDistance(t * this._scale);
91
+ let n = t - e;
92
+ this.object.position.addScaledVector(this._dollyDirection, n), this.object.updateMatrixWorld(), i = !!n;
93
+ } else if (this.object.isOrthographicCamera) {
94
+ let t = new A(this._mouse.x, this._mouse.y, 0);
95
+ t.unproject(this.object);
96
+ let n = this.object.zoom;
97
+ this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)), this.object.updateProjectionMatrix(), i = n !== this.object.zoom;
98
+ let r = new A(this._mouse.x, this._mouse.y, 0);
99
+ r.unproject(this.object), this.object.position.sub(r).add(t), this.object.updateMatrixWorld(), e = U.length();
100
+ } else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."), this.zoomToCursor = !1;
101
+ e !== null && (this.screenSpacePanning ? this.target.set(0, 0, -1).transformDirection(this.object.matrix).multiplyScalar(e).add(this.object.position) : (H.origin.copy(this.object.position), H.direction.set(0, 0, -1).transformDirection(this.object.matrix), Math.abs(this.object.up.dot(H.direction)) < Ie ? this.object.lookAt(this.target) : (Fe.setFromNormalAndCoplanarPoint(this.object.up, this.target), H.intersectPlane(Fe, this.target))));
102
+ } else if (this.object.isOrthographicCamera) {
103
+ let e = this.object.zoom;
104
+ this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)), e !== this.object.zoom && (this.object.updateProjectionMatrix(), i = !0);
105
+ }
106
+ return this._scale = 1, this._performCursorZoom = !1, i || this._lastPosition.distanceToSquared(this.object.position) > Le || 8 * (1 - this._lastQuaternion.dot(this.object.quaternion)) > Le || this._lastTargetPosition.distanceToSquared(this.target) > Le ? (this.dispatchEvent(Me), this._lastPosition.copy(this.object.position), this._lastQuaternion.copy(this.object.quaternion), this._lastTargetPosition.copy(this.target), !0) : !1;
107
+ }
108
+ _getAutoRotationAngle(e) {
109
+ return e === null ? W / 60 / 60 * this.autoRotateSpeed : W / 60 * this.autoRotateSpeed * e;
110
+ }
111
+ _getZoomScale(e) {
112
+ let t = Math.abs(e * .01);
113
+ return .95 ** (this.zoomSpeed * t);
114
+ }
115
+ _rotateLeft(e) {
116
+ this._sphericalDelta.theta -= e;
117
+ }
118
+ _rotateUp(e) {
119
+ this._sphericalDelta.phi -= e;
120
+ }
121
+ _panLeft(e, t) {
122
+ U.setFromMatrixColumn(t, 0), U.multiplyScalar(-e), this._panOffset.add(U);
123
+ }
124
+ _panUp(e, t) {
125
+ this.screenSpacePanning === !0 ? U.setFromMatrixColumn(t, 1) : (U.setFromMatrixColumn(t, 0), U.crossVectors(this.object.up, U)), U.multiplyScalar(e), this._panOffset.add(U);
126
+ }
127
+ _pan(e, t) {
128
+ let n = this.domElement;
129
+ if (this.object.isPerspectiveCamera) {
130
+ let r = this.object.position;
131
+ U.copy(r).sub(this.target);
132
+ let i = U.length();
133
+ i *= Math.tan(this.object.fov / 2 * Math.PI / 180), this._panLeft(2 * e * i / n.clientHeight, this.object.matrix), this._panUp(2 * t * i / n.clientHeight, this.object.matrix);
134
+ } else this.object.isOrthographicCamera ? (this._panLeft(e * (this.object.right - this.object.left) / this.object.zoom / n.clientWidth, this.object.matrix), this._panUp(t * (this.object.top - this.object.bottom) / this.object.zoom / n.clientHeight, this.object.matrix)) : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."), this.enablePan = !1);
135
+ }
136
+ _dollyOut(e) {
137
+ this.object.isPerspectiveCamera || this.object.isOrthographicCamera ? this._scale /= e : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."), this.enableZoom = !1);
138
+ }
139
+ _dollyIn(e) {
140
+ this.object.isPerspectiveCamera || this.object.isOrthographicCamera ? this._scale *= e : (console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."), this.enableZoom = !1);
141
+ }
142
+ _updateZoomParameters(e, t) {
143
+ if (!this.zoomToCursor) return;
144
+ this._performCursorZoom = !0;
145
+ let n = this.domElement.getBoundingClientRect(), r = e - n.left, i = t - n.top, a = n.width, o = n.height;
146
+ this._mouse.x = r / a * 2 - 1, this._mouse.y = -(i / o) * 2 + 1, this._dollyDirection.set(this._mouse.x, this._mouse.y, 1).unproject(this.object).sub(this.object.position).normalize();
147
+ }
148
+ _clampDistance(e) {
149
+ return Math.max(this.minDistance, Math.min(this.maxDistance, e));
150
+ }
151
+ _handleMouseDownRotate(e) {
152
+ this._rotateStart.set(e.clientX, e.clientY);
153
+ }
154
+ _handleMouseDownDolly(e) {
155
+ this._updateZoomParameters(e.clientX, e.clientX), this._dollyStart.set(e.clientX, e.clientY);
156
+ }
157
+ _handleMouseDownPan(e) {
158
+ this._panStart.set(e.clientX, e.clientY);
159
+ }
160
+ _handleMouseMoveRotate(e) {
161
+ this._rotateEnd.set(e.clientX, e.clientY), this._rotateDelta.subVectors(this._rotateEnd, this._rotateStart).multiplyScalar(this.rotateSpeed);
162
+ let t = this.domElement;
163
+ this._rotateLeft(W * this._rotateDelta.x / t.clientHeight), this._rotateUp(W * this._rotateDelta.y / t.clientHeight), this._rotateStart.copy(this._rotateEnd), this.update();
164
+ }
165
+ _handleMouseMoveDolly(e) {
166
+ this._dollyEnd.set(e.clientX, e.clientY), this._dollyDelta.subVectors(this._dollyEnd, this._dollyStart), this._dollyDelta.y > 0 ? this._dollyOut(this._getZoomScale(this._dollyDelta.y)) : this._dollyDelta.y < 0 && this._dollyIn(this._getZoomScale(this._dollyDelta.y)), this._dollyStart.copy(this._dollyEnd), this.update();
167
+ }
168
+ _handleMouseMovePan(e) {
169
+ this._panEnd.set(e.clientX, e.clientY), this._panDelta.subVectors(this._panEnd, this._panStart).multiplyScalar(this.panSpeed), this._pan(this._panDelta.x, this._panDelta.y), this._panStart.copy(this._panEnd), this.update();
170
+ }
171
+ _handleMouseWheel(e) {
172
+ this._updateZoomParameters(e.clientX, e.clientY), e.deltaY < 0 ? this._dollyIn(this._getZoomScale(e.deltaY)) : e.deltaY > 0 && this._dollyOut(this._getZoomScale(e.deltaY)), this.update();
173
+ }
174
+ _handleKeyDown(e) {
175
+ let t = !1;
176
+ switch (e.code) {
177
+ case this.keys.UP:
178
+ e.ctrlKey || e.metaKey || e.shiftKey ? this.enableRotate && this._rotateUp(W * this.keyRotateSpeed / this.domElement.clientHeight) : this.enablePan && this._pan(0, this.keyPanSpeed), t = !0;
179
+ break;
180
+ case this.keys.BOTTOM:
181
+ e.ctrlKey || e.metaKey || e.shiftKey ? this.enableRotate && this._rotateUp(-W * this.keyRotateSpeed / this.domElement.clientHeight) : this.enablePan && this._pan(0, -this.keyPanSpeed), t = !0;
182
+ break;
183
+ case this.keys.LEFT:
184
+ e.ctrlKey || e.metaKey || e.shiftKey ? this.enableRotate && this._rotateLeft(W * this.keyRotateSpeed / this.domElement.clientHeight) : this.enablePan && this._pan(this.keyPanSpeed, 0), t = !0;
185
+ break;
186
+ case this.keys.RIGHT:
187
+ e.ctrlKey || e.metaKey || e.shiftKey ? this.enableRotate && this._rotateLeft(-W * this.keyRotateSpeed / this.domElement.clientHeight) : this.enablePan && this._pan(-this.keyPanSpeed, 0), t = !0;
188
+ break;
189
+ }
190
+ t && (e.preventDefault(), this.update());
191
+ }
192
+ _handleTouchStartRotate(e) {
193
+ if (this._pointers.length === 1) this._rotateStart.set(e.pageX, e.pageY);
194
+ else {
195
+ let t = this._getSecondPointerPosition(e), n = .5 * (e.pageX + t.x), r = .5 * (e.pageY + t.y);
196
+ this._rotateStart.set(n, r);
197
+ }
198
+ }
199
+ _handleTouchStartPan(e) {
200
+ if (this._pointers.length === 1) this._panStart.set(e.pageX, e.pageY);
201
+ else {
202
+ let t = this._getSecondPointerPosition(e), n = .5 * (e.pageX + t.x), r = .5 * (e.pageY + t.y);
203
+ this._panStart.set(n, r);
204
+ }
205
+ }
206
+ _handleTouchStartDolly(e) {
207
+ let t = this._getSecondPointerPosition(e), n = e.pageX - t.x, r = e.pageY - t.y, i = Math.sqrt(n * n + r * r);
208
+ this._dollyStart.set(0, i);
209
+ }
210
+ _handleTouchStartDollyPan(e) {
211
+ this.enableZoom && this._handleTouchStartDolly(e), this.enablePan && this._handleTouchStartPan(e);
212
+ }
213
+ _handleTouchStartDollyRotate(e) {
214
+ this.enableZoom && this._handleTouchStartDolly(e), this.enableRotate && this._handleTouchStartRotate(e);
215
+ }
216
+ _handleTouchMoveRotate(e) {
217
+ if (this._pointers.length == 1) this._rotateEnd.set(e.pageX, e.pageY);
218
+ else {
219
+ let t = this._getSecondPointerPosition(e), n = .5 * (e.pageX + t.x), r = .5 * (e.pageY + t.y);
220
+ this._rotateEnd.set(n, r);
221
+ }
222
+ this._rotateDelta.subVectors(this._rotateEnd, this._rotateStart).multiplyScalar(this.rotateSpeed);
223
+ let t = this.domElement;
224
+ this._rotateLeft(W * this._rotateDelta.x / t.clientHeight), this._rotateUp(W * this._rotateDelta.y / t.clientHeight), this._rotateStart.copy(this._rotateEnd);
225
+ }
226
+ _handleTouchMovePan(e) {
227
+ if (this._pointers.length === 1) this._panEnd.set(e.pageX, e.pageY);
228
+ else {
229
+ let t = this._getSecondPointerPosition(e), n = .5 * (e.pageX + t.x), r = .5 * (e.pageY + t.y);
230
+ this._panEnd.set(n, r);
231
+ }
232
+ this._panDelta.subVectors(this._panEnd, this._panStart).multiplyScalar(this.panSpeed), this._pan(this._panDelta.x, this._panDelta.y), this._panStart.copy(this._panEnd);
233
+ }
234
+ _handleTouchMoveDolly(e) {
235
+ let t = this._getSecondPointerPosition(e), n = e.pageX - t.x, r = e.pageY - t.y, i = Math.sqrt(n * n + r * r);
236
+ this._dollyEnd.set(0, i), this._dollyDelta.set(0, (this._dollyEnd.y / this._dollyStart.y) ** +this.zoomSpeed), this._dollyOut(this._dollyDelta.y), this._dollyStart.copy(this._dollyEnd);
237
+ let a = (e.pageX + t.x) * .5, o = (e.pageY + t.y) * .5;
238
+ this._updateZoomParameters(a, o);
239
+ }
240
+ _handleTouchMoveDollyPan(e) {
241
+ this.enableZoom && this._handleTouchMoveDolly(e), this.enablePan && this._handleTouchMovePan(e);
242
+ }
243
+ _handleTouchMoveDollyRotate(e) {
244
+ this.enableZoom && this._handleTouchMoveDolly(e), this.enableRotate && this._handleTouchMoveRotate(e);
245
+ }
246
+ _addPointer(e) {
247
+ this._pointers.push(e.pointerId);
248
+ }
249
+ _removePointer(e) {
250
+ delete this._pointerPositions[e.pointerId];
251
+ for (let t = 0; t < this._pointers.length; t++) if (this._pointers[t] == e.pointerId) {
252
+ this._pointers.splice(t, 1);
253
+ return;
254
+ }
255
+ }
256
+ _isTrackingPointer(e) {
257
+ for (let t = 0; t < this._pointers.length; t++) if (this._pointers[t] == e.pointerId) return !0;
258
+ return !1;
259
+ }
260
+ _trackPointer(e) {
261
+ let t = this._pointerPositions[e.pointerId];
262
+ t === void 0 && (t = new j(), this._pointerPositions[e.pointerId] = t), t.set(e.pageX, e.pageY);
263
+ }
264
+ _getSecondPointerPosition(e) {
265
+ let t = e.pointerId === this._pointers[0] ? this._pointers[1] : this._pointers[0];
266
+ return this._pointerPositions[t];
267
+ }
268
+ _customWheelEvent(e) {
269
+ let t = e.deltaMode, n = {
270
+ clientX: e.clientX,
271
+ clientY: e.clientY,
272
+ deltaY: e.deltaY
273
+ };
274
+ switch (t) {
275
+ case 1:
276
+ n.deltaY *= 16;
277
+ break;
278
+ case 2:
279
+ n.deltaY *= 100;
280
+ break;
281
+ }
282
+ return e.ctrlKey && !this._controlActive && (n.deltaY *= 10), n;
283
+ }
284
+ };
285
+ function ze(e) {
286
+ this.enabled !== !1 && (this._pointers.length === 0 && (this.domElement.setPointerCapture(e.pointerId), this.domElement.addEventListener("pointermove", this._onPointerMove), this.domElement.addEventListener("pointerup", this._onPointerUp)), !this._isTrackingPointer(e) && (this._addPointer(e), e.pointerType === "touch" ? this._onTouchStart(e) : this._onMouseDown(e)));
287
+ }
288
+ function Be(e) {
289
+ this.enabled !== !1 && (e.pointerType === "touch" ? this._onTouchMove(e) : this._onMouseMove(e));
290
+ }
291
+ function Ve(e) {
292
+ switch (this._removePointer(e), this._pointers.length) {
293
+ case 0:
294
+ this.domElement.releasePointerCapture(e.pointerId), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.dispatchEvent(Pe), this.state = G.NONE;
295
+ break;
296
+ case 1:
297
+ let t = this._pointers[0], n = this._pointerPositions[t];
298
+ this._onTouchStart({
299
+ pointerId: t,
300
+ pageX: n.x,
301
+ pageY: n.y
302
+ });
303
+ break;
304
+ }
305
+ }
306
+ function He(e) {
307
+ let t;
308
+ switch (e.button) {
309
+ case 0:
310
+ t = this.mouseButtons.LEFT;
311
+ break;
312
+ case 1:
313
+ t = this.mouseButtons.MIDDLE;
314
+ break;
315
+ case 2:
316
+ t = this.mouseButtons.RIGHT;
317
+ break;
318
+ default: t = -1;
319
+ }
320
+ switch (t) {
321
+ case C.DOLLY:
322
+ if (this.enableZoom === !1) return;
323
+ this._handleMouseDownDolly(e), this.state = G.DOLLY;
324
+ break;
325
+ case C.ROTATE:
326
+ if (e.ctrlKey || e.metaKey || e.shiftKey) {
327
+ if (this.enablePan === !1) return;
328
+ this._handleMouseDownPan(e), this.state = G.PAN;
329
+ } else {
330
+ if (this.enableRotate === !1) return;
331
+ this._handleMouseDownRotate(e), this.state = G.ROTATE;
332
+ }
333
+ break;
334
+ case C.PAN:
335
+ if (e.ctrlKey || e.metaKey || e.shiftKey) {
336
+ if (this.enableRotate === !1) return;
337
+ this._handleMouseDownRotate(e), this.state = G.ROTATE;
338
+ } else {
339
+ if (this.enablePan === !1) return;
340
+ this._handleMouseDownPan(e), this.state = G.PAN;
341
+ }
342
+ break;
343
+ default: this.state = G.NONE;
344
+ }
345
+ this.state !== G.NONE && this.dispatchEvent(Ne);
346
+ }
347
+ function Ue(e) {
348
+ switch (this.state) {
349
+ case G.ROTATE:
350
+ if (this.enableRotate === !1) return;
351
+ this._handleMouseMoveRotate(e);
352
+ break;
353
+ case G.DOLLY:
354
+ if (this.enableZoom === !1) return;
355
+ this._handleMouseMoveDolly(e);
356
+ break;
357
+ case G.PAN:
358
+ if (this.enablePan === !1) return;
359
+ this._handleMouseMovePan(e);
360
+ break;
361
+ }
362
+ }
363
+ function We(e) {
364
+ this.enabled === !1 || this.enableZoom === !1 || this.state !== G.NONE || (e.preventDefault(), this.dispatchEvent(Ne), this._handleMouseWheel(this._customWheelEvent(e)), this.dispatchEvent(Pe));
365
+ }
366
+ function Ge(e) {
367
+ this.enabled !== !1 && this._handleKeyDown(e);
368
+ }
369
+ function Ke(e) {
370
+ switch (this._trackPointer(e), this._pointers.length) {
371
+ case 1:
372
+ switch (this.touches.ONE) {
373
+ case k.ROTATE:
374
+ if (this.enableRotate === !1) return;
375
+ this._handleTouchStartRotate(e), this.state = G.TOUCH_ROTATE;
376
+ break;
377
+ case k.PAN:
378
+ if (this.enablePan === !1) return;
379
+ this._handleTouchStartPan(e), this.state = G.TOUCH_PAN;
380
+ break;
381
+ default: this.state = G.NONE;
382
+ }
383
+ break;
384
+ case 2:
385
+ switch (this.touches.TWO) {
386
+ case k.DOLLY_PAN:
387
+ if (this.enableZoom === !1 && this.enablePan === !1) return;
388
+ this._handleTouchStartDollyPan(e), this.state = G.TOUCH_DOLLY_PAN;
389
+ break;
390
+ case k.DOLLY_ROTATE:
391
+ if (this.enableZoom === !1 && this.enableRotate === !1) return;
392
+ this._handleTouchStartDollyRotate(e), this.state = G.TOUCH_DOLLY_ROTATE;
393
+ break;
394
+ default: this.state = G.NONE;
395
+ }
396
+ break;
397
+ default: this.state = G.NONE;
398
+ }
399
+ this.state !== G.NONE && this.dispatchEvent(Ne);
400
+ }
401
+ function qe(e) {
402
+ switch (this._trackPointer(e), this.state) {
403
+ case G.TOUCH_ROTATE:
404
+ if (this.enableRotate === !1) return;
405
+ this._handleTouchMoveRotate(e), this.update();
406
+ break;
407
+ case G.TOUCH_PAN:
408
+ if (this.enablePan === !1) return;
409
+ this._handleTouchMovePan(e), this.update();
410
+ break;
411
+ case G.TOUCH_DOLLY_PAN:
412
+ if (this.enableZoom === !1 && this.enablePan === !1) return;
413
+ this._handleTouchMoveDollyPan(e), this.update();
414
+ break;
415
+ case G.TOUCH_DOLLY_ROTATE:
416
+ if (this.enableZoom === !1 && this.enableRotate === !1) return;
417
+ this._handleTouchMoveDollyRotate(e), this.update();
418
+ break;
419
+ default: this.state = G.NONE;
420
+ }
421
+ }
422
+ function Je(e) {
423
+ this.enabled !== !1 && e.preventDefault();
424
+ }
425
+ function Ye(e) {
426
+ e.key === "Control" && (this._controlActive = !0, this.domElement.getRootNode().addEventListener("keyup", this._interceptControlUp, {
427
+ passive: !0,
428
+ capture: !0
429
+ }));
430
+ }
431
+ function Xe(e) {
432
+ e.key === "Control" && (this._controlActive = !1, this.domElement.getRootNode().removeEventListener("keyup", this._interceptControlUp, {
433
+ passive: !0,
434
+ capture: !0
435
+ }));
436
+ }
437
+ //#endregion
438
+ //#region ../../node_modules/.pnpm/three@0.174.0/node_modules/three/examples/jsm/loaders/MTLLoader.js
439
+ var Ze = class extends T {
440
+ constructor(e) {
441
+ super(e);
442
+ }
443
+ load(e, t, n, r) {
444
+ let i = this, a = this.path === "" ? m.extractUrlBase(e) : this.path, o = new d(this.manager);
445
+ o.setPath(this.path), o.setRequestHeader(this.requestHeader), o.setWithCredentials(this.withCredentials), o.load(e, function(n) {
446
+ try {
447
+ t(i.parse(n, a));
448
+ } catch (t) {
449
+ r ? r(t) : console.error(t), i.manager.itemError(e);
450
+ }
451
+ }, n, r);
452
+ }
453
+ setMaterialOptions(e) {
454
+ return this.materialOptions = e, this;
455
+ }
456
+ parse(e, t) {
457
+ let n = e.split("\n"), r = {}, i = /\s+/, a = {};
458
+ for (let e = 0; e < n.length; e++) {
459
+ let t = n[e];
460
+ if (t = t.trim(), t.length === 0 || t.charAt(0) === "#") continue;
461
+ let o = t.indexOf(" "), s = o >= 0 ? t.substring(0, o) : t;
462
+ s = s.toLowerCase();
463
+ let c = o >= 0 ? t.substring(o + 1) : "";
464
+ if (c = c.trim(), s === "newmtl") r = { name: c }, a[c] = r;
465
+ else if (s === "ka" || s === "kd" || s === "ks" || s === "ke") {
466
+ let e = c.split(i, 3);
467
+ r[s] = [
468
+ parseFloat(e[0]),
469
+ parseFloat(e[1]),
470
+ parseFloat(e[2])
471
+ ];
472
+ } else r[s] = c;
473
+ }
474
+ let o = new Qe(this.resourcePath || t, this.materialOptions);
475
+ return o.setCrossOrigin(this.crossOrigin), o.setManager(this.manager), o.setMaterials(a), o;
476
+ }
477
+ }, Qe = class {
478
+ constructor(e = "", t = {}) {
479
+ this.baseUrl = e, this.options = t, this.materialsInfo = {}, this.materials = {}, this.materialsArray = [], this.nameLookup = {}, this.crossOrigin = "anonymous", this.side = this.options.side === void 0 ? 0 : this.options.side, this.wrap = this.options.wrap === void 0 ? ve : this.options.wrap;
480
+ }
481
+ setCrossOrigin(e) {
482
+ return this.crossOrigin = e, this;
483
+ }
484
+ setManager(e) {
485
+ this.manager = e;
486
+ }
487
+ setMaterials(e) {
488
+ this.materialsInfo = this.convert(e), this.materials = {}, this.materialsArray = [], this.nameLookup = {};
489
+ }
490
+ convert(e) {
491
+ if (!this.options) return e;
492
+ let t = {};
493
+ for (let n in e) {
494
+ let r = e[n], i = {};
495
+ t[n] = i;
496
+ for (let e in r) {
497
+ let t = !0, n = r[e], a = e.toLowerCase();
498
+ switch (a) {
499
+ case "kd":
500
+ case "ka":
501
+ case "ks":
502
+ this.options && this.options.normalizeRGB && (n = [
503
+ n[0] / 255,
504
+ n[1] / 255,
505
+ n[2] / 255
506
+ ]), this.options && this.options.ignoreZeroRGBs && n[0] === 0 && n[1] === 0 && n[2] === 0 && (t = !1);
507
+ break;
508
+ default: break;
509
+ }
510
+ t && (i[a] = n);
511
+ }
512
+ }
513
+ return t;
514
+ }
515
+ preload() {
516
+ for (let e in this.materialsInfo) this.create(e);
517
+ }
518
+ getIndex(e) {
519
+ return this.nameLookup[e];
520
+ }
521
+ getAsArray() {
522
+ let e = 0;
523
+ for (let t in this.materialsInfo) this.materialsArray[e] = this.create(t), this.nameLookup[t] = e, e++;
524
+ return this.materialsArray;
525
+ }
526
+ create(e) {
527
+ return this.materials[e] === void 0 && this.createMaterial_(e), this.materials[e];
528
+ }
529
+ createMaterial_(e) {
530
+ let t = this, n = this.materialsInfo[e], r = {
531
+ name: e,
532
+ side: this.side
533
+ };
534
+ function i(e, t) {
535
+ return typeof t != "string" || t === "" ? "" : /^https?:\/\//i.test(t) ? t : e + t;
536
+ }
537
+ function a(e, n) {
538
+ if (r[e]) return;
539
+ let a = t.getTextureParams(n, r), o = t.loadTexture(i(t.baseUrl, a.url));
540
+ o.repeat.copy(a.scale), o.offset.copy(a.offset), o.wrapS = t.wrap, o.wrapT = t.wrap, (e === "map" || e === "emissiveMap") && (o.colorSpace = F), r[e] = o;
541
+ }
542
+ for (let e in n) {
543
+ let t = n[e], i;
544
+ if (t !== "") switch (e.toLowerCase()) {
545
+ case "kd":
546
+ r.color = he.toWorkingColorSpace(new o().fromArray(t), F);
547
+ break;
548
+ case "ks":
549
+ r.specular = he.toWorkingColorSpace(new o().fromArray(t), F);
550
+ break;
551
+ case "ke":
552
+ r.emissive = he.toWorkingColorSpace(new o().fromArray(t), F);
553
+ break;
554
+ case "map_kd":
555
+ a("map", t);
556
+ break;
557
+ case "map_ks":
558
+ a("specularMap", t);
559
+ break;
560
+ case "map_ke":
561
+ a("emissiveMap", t);
562
+ break;
563
+ case "norm":
564
+ a("normalMap", t);
565
+ break;
566
+ case "map_bump":
567
+ case "bump":
568
+ a("bumpMap", t);
569
+ break;
570
+ case "disp":
571
+ a("displacementMap", t);
572
+ break;
573
+ case "map_d":
574
+ a("alphaMap", t), r.transparent = !0;
575
+ break;
576
+ case "ns":
577
+ r.shininess = parseFloat(t);
578
+ break;
579
+ case "d":
580
+ i = parseFloat(t), i < 1 && (r.opacity = i, r.transparent = !0);
581
+ break;
582
+ case "tr":
583
+ i = parseFloat(t), this.options && this.options.invertTrProperty && (i = 1 - i), i > 0 && (r.opacity = 1 - i, r.transparent = !0);
584
+ break;
585
+ default: break;
586
+ }
587
+ }
588
+ return this.materials[e] = new D(r), this.materials[e];
589
+ }
590
+ getTextureParams(e, t) {
591
+ let n = {
592
+ scale: new j(1, 1),
593
+ offset: new j(0, 0)
594
+ }, r = e.split(/\s+/), i;
595
+ return i = r.indexOf("-bm"), i >= 0 && (t.bumpScale = parseFloat(r[i + 1]), r.splice(i, 2)), i = r.indexOf("-mm"), i >= 0 && (t.displacementBias = parseFloat(r[i + 1]), t.displacementScale = parseFloat(r[i + 2]), r.splice(i, 3)), i = r.indexOf("-s"), i >= 0 && (n.scale.set(parseFloat(r[i + 1]), parseFloat(r[i + 2])), r.splice(i, 4)), i = r.indexOf("-o"), i >= 0 && (n.offset.set(parseFloat(r[i + 1]), parseFloat(r[i + 2])), r.splice(i, 4)), n.url = r.join(" ").trim(), n;
596
+ }
597
+ loadTexture(e, t, n, r, i) {
598
+ let a = this.manager === void 0 ? y : this.manager, o = a.getHandler(e);
599
+ o === null && (o = new ye(a)), o.setCrossOrigin && o.setCrossOrigin(this.crossOrigin);
600
+ let s = o.load(e, n, r, i);
601
+ return t !== void 0 && (s.mapping = t), s;
602
+ }
603
+ }, $e = /^[og]\s*(.+)?/, et = /^mtllib /, tt = /^usemtl /, nt = /^usemap /, rt = /\s+/, it = new A(), at = new A(), ot = new A(), st = new A(), K = new A(), q = new o();
604
+ function ct() {
605
+ let e = {
606
+ objects: [],
607
+ object: {},
608
+ vertices: [],
609
+ normals: [],
610
+ colors: [],
611
+ uvs: [],
612
+ materials: {},
613
+ materialLibraries: [],
614
+ startObject: function(e, t) {
615
+ if (this.object && this.object.fromDeclaration === !1) {
616
+ this.object.name = e, this.object.fromDeclaration = t !== !1;
617
+ return;
618
+ }
619
+ let n = this.object && typeof this.object.currentMaterial == "function" ? this.object.currentMaterial() : void 0;
620
+ if (this.object && typeof this.object._finalize == "function" && this.object._finalize(!0), this.object = {
621
+ name: e || "",
622
+ fromDeclaration: t !== !1,
623
+ geometry: {
624
+ vertices: [],
625
+ normals: [],
626
+ colors: [],
627
+ uvs: [],
628
+ hasUVIndices: !1
629
+ },
630
+ materials: [],
631
+ smooth: !0,
632
+ startMaterial: function(e, t) {
633
+ let n = this._finalize(!1);
634
+ n && (n.inherited || n.groupCount <= 0) && this.materials.splice(n.index, 1);
635
+ let r = {
636
+ index: this.materials.length,
637
+ name: e || "",
638
+ mtllib: Array.isArray(t) && t.length > 0 ? t[t.length - 1] : "",
639
+ smooth: n === void 0 ? this.smooth : n.smooth,
640
+ groupStart: n === void 0 ? 0 : n.groupEnd,
641
+ groupEnd: -1,
642
+ groupCount: -1,
643
+ inherited: !1,
644
+ clone: function(e) {
645
+ let t = {
646
+ index: typeof e == "number" ? e : this.index,
647
+ name: this.name,
648
+ mtllib: this.mtllib,
649
+ smooth: this.smooth,
650
+ groupStart: 0,
651
+ groupEnd: -1,
652
+ groupCount: -1,
653
+ inherited: !1
654
+ };
655
+ return t.clone = this.clone.bind(t), t;
656
+ }
657
+ };
658
+ return this.materials.push(r), r;
659
+ },
660
+ currentMaterial: function() {
661
+ if (this.materials.length > 0) return this.materials[this.materials.length - 1];
662
+ },
663
+ _finalize: function(e) {
664
+ let t = this.currentMaterial();
665
+ if (t && t.groupEnd === -1 && (t.groupEnd = this.geometry.vertices.length / 3, t.groupCount = t.groupEnd - t.groupStart, t.inherited = !1), e && this.materials.length > 1) for (let e = this.materials.length - 1; e >= 0; e--) this.materials[e].groupCount <= 0 && this.materials.splice(e, 1);
666
+ return e && this.materials.length === 0 && this.materials.push({
667
+ name: "",
668
+ smooth: this.smooth
669
+ }), t;
670
+ }
671
+ }, n && n.name && typeof n.clone == "function") {
672
+ let e = n.clone(0);
673
+ e.inherited = !0, this.object.materials.push(e);
674
+ }
675
+ this.objects.push(this.object);
676
+ },
677
+ finalize: function() {
678
+ this.object && typeof this.object._finalize == "function" && this.object._finalize(!0);
679
+ },
680
+ parseVertexIndex: function(e, t) {
681
+ let n = parseInt(e, 10);
682
+ return (n >= 0 ? n - 1 : n + t / 3) * 3;
683
+ },
684
+ parseNormalIndex: function(e, t) {
685
+ let n = parseInt(e, 10);
686
+ return (n >= 0 ? n - 1 : n + t / 3) * 3;
687
+ },
688
+ parseUVIndex: function(e, t) {
689
+ let n = parseInt(e, 10);
690
+ return (n >= 0 ? n - 1 : n + t / 2) * 2;
691
+ },
692
+ addVertex: function(e, t, n) {
693
+ let r = this.vertices, i = this.object.geometry.vertices;
694
+ i.push(r[e + 0], r[e + 1], r[e + 2]), i.push(r[t + 0], r[t + 1], r[t + 2]), i.push(r[n + 0], r[n + 1], r[n + 2]);
695
+ },
696
+ addVertexPoint: function(e) {
697
+ let t = this.vertices;
698
+ this.object.geometry.vertices.push(t[e + 0], t[e + 1], t[e + 2]);
699
+ },
700
+ addVertexLine: function(e) {
701
+ let t = this.vertices;
702
+ this.object.geometry.vertices.push(t[e + 0], t[e + 1], t[e + 2]);
703
+ },
704
+ addNormal: function(e, t, n) {
705
+ let r = this.normals, i = this.object.geometry.normals;
706
+ i.push(r[e + 0], r[e + 1], r[e + 2]), i.push(r[t + 0], r[t + 1], r[t + 2]), i.push(r[n + 0], r[n + 1], r[n + 2]);
707
+ },
708
+ addFaceNormal: function(e, t, n) {
709
+ let r = this.vertices, i = this.object.geometry.normals;
710
+ it.fromArray(r, e), at.fromArray(r, t), ot.fromArray(r, n), K.subVectors(ot, at), st.subVectors(it, at), K.cross(st), K.normalize(), i.push(K.x, K.y, K.z), i.push(K.x, K.y, K.z), i.push(K.x, K.y, K.z);
711
+ },
712
+ addColor: function(e, t, n) {
713
+ let r = this.colors, i = this.object.geometry.colors;
714
+ r[e] !== void 0 && i.push(r[e + 0], r[e + 1], r[e + 2]), r[t] !== void 0 && i.push(r[t + 0], r[t + 1], r[t + 2]), r[n] !== void 0 && i.push(r[n + 0], r[n + 1], r[n + 2]);
715
+ },
716
+ addUV: function(e, t, n) {
717
+ let r = this.uvs, i = this.object.geometry.uvs;
718
+ i.push(r[e + 0], r[e + 1]), i.push(r[t + 0], r[t + 1]), i.push(r[n + 0], r[n + 1]);
719
+ },
720
+ addDefaultUV: function() {
721
+ let e = this.object.geometry.uvs;
722
+ e.push(0, 0), e.push(0, 0), e.push(0, 0);
723
+ },
724
+ addUVLine: function(e) {
725
+ let t = this.uvs;
726
+ this.object.geometry.uvs.push(t[e + 0], t[e + 1]);
727
+ },
728
+ addFace: function(e, t, n, r, i, a, o, s, c) {
729
+ let l = this.vertices.length, u = this.parseVertexIndex(e, l), d = this.parseVertexIndex(t, l), f = this.parseVertexIndex(n, l);
730
+ if (this.addVertex(u, d, f), this.addColor(u, d, f), o !== void 0 && o !== "") {
731
+ let e = this.normals.length;
732
+ u = this.parseNormalIndex(o, e), d = this.parseNormalIndex(s, e), f = this.parseNormalIndex(c, e), this.addNormal(u, d, f);
733
+ } else this.addFaceNormal(u, d, f);
734
+ if (r !== void 0 && r !== "") {
735
+ let e = this.uvs.length;
736
+ u = this.parseUVIndex(r, e), d = this.parseUVIndex(i, e), f = this.parseUVIndex(a, e), this.addUV(u, d, f), this.object.geometry.hasUVIndices = !0;
737
+ } else this.addDefaultUV();
738
+ },
739
+ addPointGeometry: function(e) {
740
+ this.object.geometry.type = "Points";
741
+ let t = this.vertices.length;
742
+ for (let n = 0, r = e.length; n < r; n++) {
743
+ let r = this.parseVertexIndex(e[n], t);
744
+ this.addVertexPoint(r), this.addColor(r);
745
+ }
746
+ },
747
+ addLineGeometry: function(e, t) {
748
+ this.object.geometry.type = "Line";
749
+ let n = this.vertices.length, r = this.uvs.length;
750
+ for (let t = 0, r = e.length; t < r; t++) this.addVertexLine(this.parseVertexIndex(e[t], n));
751
+ for (let e = 0, n = t.length; e < n; e++) this.addUVLine(this.parseUVIndex(t[e], r));
752
+ }
753
+ };
754
+ return e.startObject("", !1), e;
755
+ }
756
+ var lt = class extends T {
757
+ constructor(e) {
758
+ super(e), this.materials = null;
759
+ }
760
+ load(e, t, n, r) {
761
+ let i = this, a = new d(this.manager);
762
+ a.setPath(this.path), a.setRequestHeader(this.requestHeader), a.setWithCredentials(this.withCredentials), a.load(e, function(n) {
763
+ try {
764
+ t(i.parse(n));
765
+ } catch (t) {
766
+ r ? r(t) : console.error(t), i.manager.itemError(e);
767
+ }
768
+ }, n, r);
769
+ }
770
+ setMaterials(e) {
771
+ return this.materials = e, this;
772
+ }
773
+ parse(e) {
774
+ let t = new ct();
775
+ e.indexOf("\r\n") !== -1 && (e = e.replace(/\r\n/g, "\n")), e.indexOf("\\\n") !== -1 && (e = e.replace(/\\\n/g, ""));
776
+ let n = e.split("\n"), r = [];
777
+ for (let e = 0, i = n.length; e < i; e++) {
778
+ let i = n[e].trimStart();
779
+ if (i.length === 0) continue;
780
+ let a = i.charAt(0);
781
+ if (a !== "#") if (a === "v") {
782
+ let e = i.split(rt);
783
+ switch (e[0]) {
784
+ case "v":
785
+ t.vertices.push(parseFloat(e[1]), parseFloat(e[2]), parseFloat(e[3])), e.length >= 7 ? (q.setRGB(parseFloat(e[4]), parseFloat(e[5]), parseFloat(e[6]), F), t.colors.push(q.r, q.g, q.b)) : t.colors.push(void 0, void 0, void 0);
786
+ break;
787
+ case "vn":
788
+ t.normals.push(parseFloat(e[1]), parseFloat(e[2]), parseFloat(e[3]));
789
+ break;
790
+ case "vt":
791
+ t.uvs.push(parseFloat(e[1]), parseFloat(e[2]));
792
+ break;
793
+ }
794
+ } else if (a === "f") {
795
+ let e = i.slice(1).trim().split(rt), n = [];
796
+ for (let t = 0, r = e.length; t < r; t++) {
797
+ let r = e[t];
798
+ if (r.length > 0) {
799
+ let e = r.split("/");
800
+ n.push(e);
801
+ }
802
+ }
803
+ let r = n[0];
804
+ for (let e = 1, i = n.length - 1; e < i; e++) {
805
+ let i = n[e], a = n[e + 1];
806
+ t.addFace(r[0], i[0], a[0], r[1], i[1], a[1], r[2], i[2], a[2]);
807
+ }
808
+ } else if (a === "l") {
809
+ let e = i.substring(1).trim().split(" "), n = [], r = [];
810
+ if (i.indexOf("/") === -1) n = e;
811
+ else for (let t = 0, i = e.length; t < i; t++) {
812
+ let i = e[t].split("/");
813
+ i[0] !== "" && n.push(i[0]), i[1] !== "" && r.push(i[1]);
814
+ }
815
+ t.addLineGeometry(n, r);
816
+ } else if (a === "p") {
817
+ let e = i.slice(1).trim().split(" ");
818
+ t.addPointGeometry(e);
819
+ } else if ((r = $e.exec(i)) !== null) {
820
+ let e = (" " + r[0].slice(1).trim()).slice(1);
821
+ t.startObject(e);
822
+ } else if (tt.test(i)) t.object.startMaterial(i.substring(7).trim(), t.materialLibraries);
823
+ else if (et.test(i)) t.materialLibraries.push(i.substring(7).trim());
824
+ else if (nt.test(i)) console.warn("THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.");
825
+ else if (a === "s") {
826
+ if (r = i.split(" "), r.length > 1) {
827
+ let e = r[1].trim().toLowerCase();
828
+ t.object.smooth = e !== "0" && e !== "off";
829
+ } else t.object.smooth = !0;
830
+ let e = t.object.currentMaterial();
831
+ e && (e.smooth = t.object.smooth);
832
+ } else {
833
+ if (i === "\0") continue;
834
+ console.warn("THREE.OBJLoader: Unexpected line: \"" + i + "\"");
835
+ }
836
+ }
837
+ t.finalize();
838
+ let i = new v();
839
+ if (i.materialLibraries = [].concat(t.materialLibraries), !(t.objects.length === 1 && t.objects[0].geometry.vertices.length === 0)) for (let e = 0, n = t.objects.length; e < n; e++) {
840
+ let n = t.objects[e], r = n.geometry, a = n.materials, o = r.type === "Line", s = r.type === "Points", u = !1;
841
+ if (r.vertices.length === 0) continue;
842
+ let d = new l();
843
+ d.setAttribute("position", new h(r.vertices, 3)), r.normals.length > 0 && d.setAttribute("normal", new h(r.normals, 3)), r.colors.length > 0 && (u = !0, d.setAttribute("color", new h(r.colors, 3))), r.hasUVIndices === !0 && d.setAttribute("uv", new h(r.uvs, 2));
844
+ let f = [];
845
+ for (let e = 0, n = a.length; e < n; e++) {
846
+ let n = a[e], r = n.name + "_" + n.smooth + "_" + u, i = t.materials[r];
847
+ if (this.materials !== null) {
848
+ if (i = this.materials.create(n.name), o && i && !(i instanceof R)) {
849
+ let e = new R();
850
+ E.prototype.copy.call(e, i), e.color.copy(i.color), i = e;
851
+ } else if (s && i && !(i instanceof M)) {
852
+ let e = new M({
853
+ size: 10,
854
+ sizeAttenuation: !1
855
+ });
856
+ E.prototype.copy.call(e, i), e.color.copy(i.color), e.map = i.map, i = e;
857
+ }
858
+ }
859
+ i === void 0 && (i = o ? new R() : s ? new M({
860
+ size: 1,
861
+ sizeAttenuation: !1
862
+ }) : new D(), i.name = n.name, i.flatShading = !n.smooth, i.vertexColors = u, t.materials[r] = i), f.push(i);
863
+ }
864
+ let p;
865
+ if (f.length > 1) {
866
+ for (let e = 0, t = a.length; e < t; e++) {
867
+ let t = a[e];
868
+ d.addGroup(t.groupStart, t.groupCount, e);
869
+ }
870
+ p = o ? new c(d, f) : s ? new L(d, f) : new P(d, f);
871
+ } else p = o ? new c(d, f[0]) : s ? new L(d, f[0]) : new P(d, f[0]);
872
+ p.name = n.name, i.add(p);
873
+ }
874
+ else if (t.vertices.length > 0) {
875
+ let e = new M({
876
+ size: 1,
877
+ sizeAttenuation: !1
878
+ }), n = new l();
879
+ n.setAttribute("position", new h(t.vertices, 3)), t.colors.length > 0 && t.colors[0] !== void 0 && (n.setAttribute("color", new h(t.colors, 3)), e.vertexColors = !0);
880
+ let r = new L(n, e);
881
+ i.add(r);
882
+ }
883
+ return i;
884
+ }
885
+ }, J = class {
886
+ constructor(e, t, n, r) {
887
+ this.x = void 0, this.y = void 0, this.width = void 0, this.height = void 0, this.finalX = void 0, this.finalY = void 0, this.x = e, this.y = t, this.width = n, this.height = r, this.finalX = e + n, this.finalY = t + r;
888
+ }
889
+ set(e, t, n, r, i, a) {
890
+ return this.x = e, this.y = t, this.finalX = n, this.finalY = r, this.width = i, this.height = a, this;
891
+ }
892
+ fits(e) {
893
+ var t = e.image.width, n = e.image.height;
894
+ return t <= this.width && n <= this.height;
895
+ }
896
+ fitsPerfectly(e) {
897
+ var t = e.image.width, n = e.image.height;
898
+ return t == this.width && n == this.height;
899
+ }
900
+ overlaps(e) {
901
+ return this.x < e.x + e.width && this.x + this.width > e.x && this.y < e.y + e.height && this.y + this.height > e.y;
902
+ }
903
+ }, ut = class {
904
+ constructor(e, t, n, r) {
905
+ this.startU = e, this.endU = t, this.startV = n, this.endV = r;
906
+ }
907
+ }, Y = class {
908
+ constructor(e, t, n, r) {
909
+ this.children = e, this.rectangle = t, this.textureName = n, this.upperNode = r;
910
+ }
911
+ }, dt = class {
912
+ constructor(e) {
913
+ if (this.MAX_TEXTURE_SIZE = void 0, this.dataURLs = void 0, this.textureCount = void 0, this.maxHeight = void 0, this.maxWidth = void 0, this.canvas = void 0, this.textureCache = void 0, this.node = void 0, this.textureOffsets = void 0, this.allNodes = void 0, this.context = void 0, this.ranges = void 0, this.mergedTexture = void 0, !(!e || !e.size) && (this.MAX_TEXTURE_SIZE = 4096, e)) {
914
+ this.dataURLs = /* @__PURE__ */ new Map();
915
+ for (var t of e.keys()) {
916
+ var n = e.get(t);
917
+ if (n instanceof ee) throw Error("CompressedTextures are not supported.");
918
+ if (n.image.toDataURL === void 0) {
919
+ var r = document.createElement("canvas");
920
+ r.width = n.image.naturalWidth, r.height = n.image.naturalHeight, r.getContext("2d").drawImage(n.image, 0, 0), this.dataURLs.set(t, r.toDataURL());
921
+ } else this.dataURLs.set(t, n.image.toDataURL());
922
+ }
923
+ this.canvas = document.createElement("canvas"), this.textureCount = 0, this.maxWidth = 0, this.maxHeight = 0;
924
+ var i = "";
925
+ for (t of e.keys()) {
926
+ this.textureCount++;
927
+ var a = e.get(t);
928
+ a.userData.area = a.image.width * a.image.height, a.image.width > this.maxWidth && (this.maxWidth = a.image.width), a.image.height > this.maxHeight && (this.maxHeight = a.image.height), i += t + ",";
929
+ }
930
+ i = i.substring(0, i.length - 1), this.textureCache = [], this.node = new Y(), this.node.rectangle = new J(0, 0, this.maxWidth * this.textureCount, this.maxHeight * this.textureCount), this.textureOffsets = /* @__PURE__ */ new Map(), this.allNodes = [], this.insert(this.node, this.findNextTexture(e), e), this.ranges = /* @__PURE__ */ new Map();
931
+ var o = this.calculateImageSize(e);
932
+ this.canvas.width = o.width, this.canvas.height = o.height;
933
+ var s = this.canvas.getContext("2d");
934
+ this.context = s;
935
+ for (t of this.textureOffsets.keys()) {
936
+ for (var a = e.get(t), c = this.textureOffsets.get(t).x, l = this.textureOffsets.get(t).y, u = a.image.width, d = a.image.height, f = l; f < l + d; f += d) for (var p = c; p < c + u; p += u) s.drawImage(a.image, p, f, u, d);
937
+ var m = new ut();
938
+ m.startU = c / o.width, m.endU = (c + u) / o.width, m.startV = 1 - l / o.height, m.endV = 1 - (l + d) / o.height, this.ranges.set(t, m);
939
+ }
940
+ this.makeCanvasPowerOfTwo(), this.mergedTexture = new ne(this.canvas), this.mergedTexture.wrapS = ge, this.mergedTexture.wrapT = ge, this.mergedTexture.minFilter = oe, this.mergedTexture.magFilter = oe, this.mergedTexture.needsUpdate = !0;
941
+ }
942
+ }
943
+ isTextureAlreadyInserted(e, t) {
944
+ var n = t.get(e), r = this.dataURLs.get(e);
945
+ for (var i of t.keys()) if (i != e) {
946
+ var a = t.get(i);
947
+ if (r == this.dataURLs.get(i) && a.offset.x == n.offset.x && a.offset.y == n.offset.y && a.repeat.x == n.repeat.x && a.repeat.y == n.repeat.y && a.flipY == n.flipY && a.wrapS == n.wrapS && a.wrapT == n.wrapT && this.textureOffsets.get(i)) return this.textureOffsets.get(i);
948
+ }
949
+ return null;
950
+ }
951
+ insert(e, t, n) {
952
+ var r = n.get(t), i = this.isTextureAlreadyInserted(t, n);
953
+ if (i) {
954
+ this.textureOffsets.set(t, i);
955
+ var a = this.findNextTexture(n);
956
+ a != null && this.insert(e, a, n);
957
+ return;
958
+ }
959
+ var o = r.image.width, s = r.image.height;
960
+ if (e.upperNode) {
961
+ for (var c = this.maxWidth * this.textureCount + this.maxHeight * this.textureCount, l, u = !1, d = 0; d < this.allNodes.length; d++) {
962
+ var f = this.allNodes[d];
963
+ if (!f.textureName && f.rectangle.fits(r)) {
964
+ this.textureOffsets.set(t, {
965
+ x: f.rectangle.x,
966
+ y: f.rectangle.y
967
+ });
968
+ var p = this.calculateImageSize(n), m = p.width + p.height;
969
+ if (m < c && p.width <= this.MAX_TEXTURE_SIZE && p.height <= this.MAX_TEXTURE_SIZE) {
970
+ var h = !1;
971
+ for (var g of this.textureOffsets.keys()) if (g != t) {
972
+ var _ = f.rectangle, { x: v, y: ee } = this.textureOffsets.get(g), te = n.get(g).image, ne = new J(_.x, _.y, o, s), re = new J(v, ee, te.width, te.height);
973
+ ne.overlaps(re) && (h = !0);
974
+ }
975
+ h || (c = m, l = this.allNodes[d], u = !0);
976
+ }
977
+ this.textureOffsets.delete(t);
978
+ }
979
+ }
980
+ if (u) {
981
+ if (this.textureOffsets.set(t, {
982
+ x: l.rectangle.x,
983
+ y: l.rectangle.y
984
+ }), l.textureName = t, !l.children) {
985
+ var y = new Y(), b = new Y();
986
+ y.upperNode = l, b.upperNode = l, l.children = [y, b];
987
+ var x = l.rectangle.x, S = l.rectangle.y, C = this.maxWidth * this.textureCount, w = this.maxHeight * this.textureCount;
988
+ y.rectangle = new J(x + o, S, C - (x + o), w - S), b.rectangle = new J(x, S + s, C - x, w - (S + s)), this.allNodes.push(y), this.allNodes.push(b);
989
+ }
990
+ var a = this.findNextTexture(n);
991
+ a != null && this.insert(e, a, n);
992
+ } else console.info(o, s, t);
993
+ } else {
994
+ var T = e.rectangle.width, ie = e.rectangle.height;
995
+ e.textureName = t;
996
+ var y = new Y(), b = new Y();
997
+ y.upperNode = e, b.upperNode = e, e.children = [y, b], y.rectangle = new J(o, 0, T - o, s), b.rectangle = new J(0, s, T, ie - s), this.textureOffsets.set(t, {
998
+ x: e.rectangle.x,
999
+ y: e.rectangle.y
1000
+ });
1001
+ var E = e.children[0];
1002
+ this.allNodes = [
1003
+ e,
1004
+ y,
1005
+ b
1006
+ ];
1007
+ var a = this.findNextTexture(n);
1008
+ a != null && this.insert(E, a, n);
1009
+ }
1010
+ }
1011
+ makeCanvasPowerOfTwo(e) {
1012
+ var t = !1;
1013
+ e || (e = this.canvas, t = !0);
1014
+ var n = e.width, r = e.height, i = 2 ** Math.round(Math.log(n) / Math.log(2)), a = 2 ** Math.round(Math.log(r) / Math.log(2)), o = document.createElement("canvas");
1015
+ o.width = i, o.height = a, o.getContext("2d").drawImage(e, 0, 0, i, a), t && (this.canvas = o);
1016
+ }
1017
+ calculateImageSize(e) {
1018
+ var t = 0, n = 0;
1019
+ for (var r of this.textureOffsets.keys()) {
1020
+ var i = e.get(r), a = i.image.width, o = i.image.height, { x: s, y: c } = this.textureOffsets.get(r);
1021
+ s + a > t && (t = s + a), c + o > n && (n = c + o);
1022
+ }
1023
+ return {
1024
+ width: t,
1025
+ height: n
1026
+ };
1027
+ }
1028
+ findNextTexture(e) {
1029
+ var t = -1, n = "";
1030
+ for (var r of e.keys()) {
1031
+ var i = e.get(r);
1032
+ this.textureCache.indexOf(r) == -1 && i.userData.area > t && (t = i.userData.area, n = r);
1033
+ }
1034
+ return t == -1 ? null : (this.textureCache.push(n), n);
1035
+ }
1036
+ rescale(e, t) {
1037
+ var n = document.createElement("canvas");
1038
+ return n.width = e.width * t, n.height = e.height * t, n.getContext("2d").drawImage(e, 0, 0, e.width, e.height, 0, 0, n.width, n.height), n;
1039
+ }
1040
+ };
1041
+ function ft(e, t) {
1042
+ let n = e.geometry.attributes.uv.array;
1043
+ for (let e = 0; e < n.length; e += 2) n[e] = n[e] * (t.endU - t.startU) + t.startU, n[e + 1] = n[e + 1] * (t.startV - t.endV) + t.endV;
1044
+ e.geometry.attributes.uv.needsUpdate = !0;
1045
+ }
1046
+ //#endregion
1047
+ //#region src/components/Threejs/common/BoothMesh.ts
1048
+ new D({
1049
+ color: 16711680,
1050
+ side: 2,
1051
+ name: "selected"
1052
+ });
1053
+ var pt = new ae({
1054
+ metalness: 0,
1055
+ roughness: 1,
1056
+ clearcoat: .5,
1057
+ transparent: !0,
1058
+ opacity: .5,
1059
+ side: 2,
1060
+ depthWrite: !0,
1061
+ depthTest: !0
1062
+ }), mt = new D({
1063
+ color: 16734003,
1064
+ side: 2,
1065
+ name: "hovered"
1066
+ }), ht = class extends v {
1067
+ constructor(e, t, n, r, i, a) {
1068
+ super(), this.efpBooth = e, this.threeBooth = t, this.boothMesh = n, this.name = r, this.threeLayer = i, this.z = a, this.material = void 0, this.name = r, n.name = r, this.material = n.material, this.children.push(n), this.layers.set(i);
1069
+ }
1070
+ setText() {
1071
+ let e = new S();
1072
+ if (e.text = De(this.efpBooth), !e.text) return;
1073
+ e.color = this.efpBooth.labelColor || s.boothLabelColor, e.anchorX = "center", e.anchorY = "middle", e.textAlign = "center";
1074
+ let t = e.text.split(" "), n = Math.max(...t.map((e) => e.length)), { rect: r } = this.threeBooth, i = Math.max(r.width, r.height), a = Math.min(r.width, r.height);
1075
+ e.fontSize = a, e.fontSize * e.text.length > i && (e.fontSize *= 1.1 * i / (e.fontSize * e.text.length)), e.fontSize / a < .15 && (e.maxWidth = .1, e.fontSize *= t.length, e.fontSize * t.length > a && (e.fontSize *= .9 * a / (e.fontSize * t.length)), e.fontSize * n > i && (e.fontSize *= i / (e.fontSize * n)));
1076
+ let o = e;
1077
+ var c = (0, V.lineAngle)(this.threeBooth.rect.p0, this.threeBooth.rect.p1) || 0;
1078
+ return 1.5 * r.width < r.height && (c += 90), o.rotateZ(c * Math.PI / 180), o.position.x = r.center.x, o.position.y = r.center.y, o.position.z = this.z + .01, o.scale.y = -1, o.name = this.name, o.layers.set(this.threeLayer), e;
1079
+ }
1080
+ setLogo(e, t, n) {
1081
+ let r = this.threeBooth.rect, i = r.width / r.height, a = 0, o = 0, s = 0;
1082
+ if (i > t ? (o = r.height * .9, a = o * t) : (a = r.width * .9, o = a / t), t >= 2 && !this.efpBooth.rotate && r.height >= r.width * 2) {
1083
+ let e = r.width * .9, n = e * t;
1084
+ for (; n > r.height - .02;) e -= .01, n = e * t;
1085
+ o = e, a = n, s = -90;
1086
+ } else s = -this.efpBooth.rotate * 180 / Math.PI;
1087
+ let c = e.ranges.get(this.efpBooth.slug + "_logo");
1088
+ if (!c) return null;
1089
+ var l = new P(new ue(a, o), n);
1090
+ return l.layers.set(this.threeLayer), ft(l, c), l.rotateZ((s || 0) * Math.PI / 180), l.position.x = r.center.x, l.position.y = r.center.y, l.position.z = this.z + .01 * this.z, l.scale.y = -1, l.material.map = e.mergedTexture, l.name = this.efpBooth.name, l;
1091
+ }
1092
+ dimmed(e) {
1093
+ this.boothMesh.material = e ? pt : this.material, this.boothMesh.userData.dimmed = e;
1094
+ }
1095
+ hovered(e) {
1096
+ e ? this.boothMesh.material = mt : this.boothMesh.userData.dimmed ? this.boothMesh.material = pt : (this.boothMesh.userData.selected, this.boothMesh.material = this.material);
1097
+ }
1098
+ };
1099
+ //#endregion
1100
+ //#region src/components/Threejs/common/dataLoader.ts
1101
+ async function gt(e) {
1102
+ return new Promise(async (n, r) => {
1103
+ let i = `https://${e}.expofp.com/data/threejs`;
1104
+ n(await (await fetch(t(`${i}/model.json`))).json());
1105
+ });
1106
+ }
1107
+ //#endregion
1108
+ //#region src/components/Threejs/common/modelLoader.ts
1109
+ async function _t(e, t) {
1110
+ return new Promise(async (n, r) => {
1111
+ var i = await vt(t);
1112
+ i.getAsArray().forEach((e) => {
1113
+ e.name.indexOf(".webp") > -1 && (e.alphaTest = .6, e.transparent = !0), e.name === "0xB1C6CE" && (e.alphaTest = .1, e.transparent = !0, e.opacity = .3, e.side = 2, e.depthWrite = !1, e.depthTest = !1);
1114
+ });
1115
+ let a = new lt();
1116
+ a.setMaterials(i), a.load(e, async (e) => {
1117
+ e.children.forEach((e) => {
1118
+ e.name === "building" ? e.renderOrder = .1 : e.renderOrder = 1;
1119
+ }), n(e);
1120
+ }, void 0, (e) => r(e));
1121
+ });
1122
+ }
1123
+ async function vt(e) {
1124
+ return new Promise((t, n) => {
1125
+ let r = new Ze();
1126
+ r.setMaterialOptions({ side: 2 }), r.load(e, (e) => {
1127
+ t(e);
1128
+ }, void 0, (e) => {
1129
+ n(e);
1130
+ });
1131
+ });
1132
+ }
1133
+ //#endregion
1134
+ //#region src/components/Threejs/common/Scene.ts
1135
+ var yt = class extends ce {
1136
+ constructor() {
1137
+ super(), this.camera = void 0, this.raycaster = void 0, this.objLayers = /* @__PURE__ */ new Map(), this.layerCounter = 1, this.onClickCallbacks = [];
1138
+ }
1139
+ addLayer(e) {
1140
+ return this.objLayers.has(e) || (this.objLayers.set(e, this.layerCounter), this.camera.layers.enable(this.layerCounter), this.layerCounter++), this.layerCounter - 1;
1141
+ }
1142
+ getlayer(e) {
1143
+ return this.objLayers.get(e);
1144
+ }
1145
+ };
1146
+ //#endregion
1147
+ //#region src/components/Threejs/common/sceneLoader.ts
1148
+ async function bt(e, t, n, r, i, a) {
1149
+ let o = new se(), s = new yt();
1150
+ s.raycaster = o, s.camera = r, r.near = .1, r.far = 1e4, r.aspect = n.clientWidth / n.clientHeight, r.updateProjectionMatrix();
1151
+ let c = new x(16777215, 10, Math.PI);
1152
+ c.castShadow = !0, c.position.set(0, 0, 100), s.add(c);
1153
+ let l = new u({
1154
+ canvas: e || void 0,
1155
+ context: t || void 0,
1156
+ antialias: !0,
1157
+ precision: "highp",
1158
+ premultipliedAlpha: !0
1159
+ });
1160
+ l.outputColorSpace = F, !e && !t && (l.setSize(n.clientWidth, n.clientHeight), n.appendChild(l.domElement)), l.autoClear = !1, n.addEventListener("resize", () => {
1161
+ r.aspect = n.clientWidth / n.clientHeight, r.updateProjectionMatrix(), l.setSize(n.clientWidth, n.clientHeight), d();
1162
+ }, !1);
1163
+ function d() {
1164
+ l.resetState(), a(), !e && !t && l.render(s, r);
1165
+ }
1166
+ function f() {
1167
+ requestAnimationFrame(f), d();
1168
+ }
1169
+ f(), o.layers.enableAll();
1170
+ let p = !1;
1171
+ n.addEventListener("mousedown", () => {
1172
+ p = !0;
1173
+ }), n.addEventListener("mousemove", () => {
1174
+ p = !1;
1175
+ }), n.addEventListener("mouseup", (e) => {
1176
+ p && m(e.clientX - n.parentElement.offsetLeft, e.clientY - n.parentElement.offsetTop), p = !1;
1177
+ });
1178
+ function m(e, t) {
1179
+ i(e, t, o);
1180
+ let n = o.intersectObjects(s.children).filter((e) => e.object.material.visible).sort((e, t) => e.distance - t.distance);
1181
+ s.onClickCallbacks.forEach((e) => e(n));
1182
+ }
1183
+ return s.scale.x = -1, {
1184
+ scene: s,
1185
+ renderer: l
1186
+ };
1187
+ }
1188
+ //#endregion
1189
+ //#region src/components/Threejs/index.ts
1190
+ function xt(e, t) {
1191
+ return new Promise(async (n, r) => {
1192
+ let i = new b(50, e.clientWidth / e.clientHeight, .1, 1e3);
1193
+ var { x: a, y: s } = t.viewbox.center;
1194
+ i.position.x = a + t.area.width * .2, i.position.y = s + t.area.height, i.position.z = t.objLayers[t.objLayers.length - 1].z * Math.max(t.area.height, t.area.width) * .15 || Math.min(t.area.height, t.area.width), i.up.set(0, 0, 1);
1195
+ let c, l = await bt(null, null, e, i, (t, n, r) => {
1196
+ let a = new j();
1197
+ a.x = t / e.clientWidth * 2 - 1, a.y = -(n / e.clientHeight) * 2 + 1, r.setFromCamera(a, i);
1198
+ }, () => {
1199
+ c == null || c.update();
1200
+ });
1201
+ c = new Re(i, l.renderer.domElement), c.enableRotate = !0, c.enablePan = !0, c.enableZoom = !0, c.enableDamping = !0, c.zoomSpeed = .7, c.rotateSpeed = 1.5, c.panSpeed = .7, c.target.set(a, s, 0), c.mouseButtons = {
1202
+ LEFT: C.PAN,
1203
+ RIGHT: C.ROTATE,
1204
+ MIDDLE: C.DOLLY
1205
+ }, c.touches.ONE = k.PAN, c.touches.TWO = k.DOLLY_ROTATE, l.scene.background = new o(12895428), n(l.scene);
1206
+ });
1207
+ }
1208
+ //#endregion
1209
+ //#region src/components/Threejs/mapbox/configureWebGLForMapbox.ts
1210
+ var X = /* @__PURE__ */ e(Ce(), 1);
1211
+ function St() {
1212
+ if (X.default.Map.prototype._setupPainter.toString().indexOf("webgl2") > -1) {
1213
+ let e = X.default.Map.prototype._setupPainter;
1214
+ X.default.Map.prototype._setupPainter = function() {
1215
+ let t = this._canvas.getContext;
1216
+ this._canvas.getContext = function(e, n) {
1217
+ return t.apply(this, ["webgl2", n]) || t.apply(this, ["webgl", n]) || t.apply(this, ["experimental-webgl", n]);
1218
+ }, e.apply(this), this._canvas.getContext = t;
1219
+ };
1220
+ }
1221
+ }
1222
+ //#endregion
1223
+ //#region src/components/Threejs/mapbox/init-mapbox.ts
1224
+ function Ct(e, t) {
1225
+ return new Promise((n, r) => {
1226
+ St(), X.default.accessToken = "pk.eyJ1Ijoicm9kaW9ubmlrb2xhZXYiLCJhIjoiY2wwanE5aXB4MDM2NTNibGExd3k4bHhsaiJ9.wdpy8dJ1qktQXGtZYDNH3w";
1227
+ let i = new X.default.Map({
1228
+ container: e,
1229
+ style: "mapbox://styles/mapbox/" + t.replace("v10", "v11"),
1230
+ antialias: !0,
1231
+ pitch: 30,
1232
+ maxPitch: 70,
1233
+ minZoom: 14
1234
+ });
1235
+ i.on("load", () => n(i));
1236
+ });
1237
+ }
1238
+ //#endregion
1239
+ //#region src/components/Threejs/mapbox/index_mapbox.ts
1240
+ async function wt(e, t) {
1241
+ return new Promise(async (n, r) => {
1242
+ var { geoConfig: i } = t;
1243
+ let a = await Ct(e, i.style);
1244
+ ke(a);
1245
+ let o, s, c, l;
1246
+ a.setBearing(i.bearing - 30), a.setCenter(i.center), a.setZoom(16);
1247
+ let u = [
1248
+ 0,
1249
+ 0,
1250
+ (180 - i.bearing) * Math.PI / 180
1251
+ ], d = X.default.MercatorCoordinate.fromLngLat(i.center, 1), f = {
1252
+ translateX: d.x,
1253
+ translateY: d.y,
1254
+ translateZ: d.z,
1255
+ rotateX: u[0],
1256
+ rotateY: u[1],
1257
+ rotateZ: u[2],
1258
+ scale: 10 * d.meterInMercatorCoordinateUnits()
1259
+ };
1260
+ a.addLayer({
1261
+ id: "3d-expofp",
1262
+ type: "custom",
1263
+ renderingMode: "3d",
1264
+ onAdd: async function(t, r) {
1265
+ o = new b();
1266
+ var i = await bt(t.getCanvas(), r, e, o, (n, r, i) => {
1267
+ let a = t.getFreeCameraOptions(), s = new fe(a.position.x, a.position.y, a.position.z, 1), c = new fe(-1e3, -1e3, 1, 1);
1268
+ c.x = n / e.clientWidth * 2 - 1, c.y = -(r / e.clientHeight) * 2 + 1, s.applyMatrix4(l.invert());
1269
+ let u = c.clone().applyMatrix4(o.projectionMatrix.clone().invert());
1270
+ return u.divideScalar(u.w), i.set(s, u.sub(s).normalize()), i;
1271
+ }, () => {});
1272
+ s = i.scene, c = i.renderer, n(s);
1273
+ },
1274
+ render: function(e, t) {
1275
+ if (!c) return;
1276
+ let n = new _().makeRotationAxis(new A(1, 0, 0), f.rotateX), r = new _().makeRotationAxis(new A(0, 1, 0), f.rotateY), i = new _().makeRotationAxis(new A(0, 0, 1), f.rotateZ), u = new _().fromArray(t);
1277
+ l = new _().makeTranslation(f.translateX, f.translateY, f.translateZ).scale(new A(f.scale, -f.scale, f.scale)).multiply(n).multiply(r).multiply(i), o.projectionMatrix = u.multiply(l);
1278
+ let d = a.getFreeCameraOptions(), p = new fe(d.position.x, d.position.y, d.position.z, 1).applyMatrix4(l.clone().invert());
1279
+ o.userData.position = p, c.render(s, o), a.triggerRepaint();
1280
+ }
1281
+ });
1282
+ });
1283
+ }
1284
+ //#endregion
1285
+ //#region src/components/Threejs/common/SpriteMesh.ts
1286
+ var Z = class extends P {
1287
+ constructor(e, t) {
1288
+ let n = new ue(1, 1), r = new g({
1289
+ transparent: !0,
1290
+ side: 2,
1291
+ alphaTest: .8,
1292
+ toneMapped: !0,
1293
+ precision: "highp"
1294
+ });
1295
+ var i = 0;
1296
+ new ye().load(e, (e) => {
1297
+ r.map = e;
1298
+ var i = t / e.image.height;
1299
+ n.scale(e.image.width * i, e.image.height * i, 1), n.translate(0, e.image.height * i / 2, 0), n.rotateX(Math.PI / 2), r.needsUpdate = !0;
1300
+ }), super(n, r), this.onBeforeRender = (e, t, n, r, a, o) => {
1301
+ let s = (0, V.round)(((0, V.lineAngle)({
1302
+ x: 0,
1303
+ y: 0
1304
+ }, n.position.x && n.position.y && n.position.z ? n.position : n.userData.position) - 90) * Math.PI / 180, 2);
1305
+ this.rotateZ(-1 * (s - i)), i = s;
1306
+ };
1307
+ }
1308
+ };
1309
+ //#endregion
1310
+ //#region src/components/Threejs/utils/canvasFromText.ts
1311
+ function Tt(e) {
1312
+ let t = document.createElement("canvas"), n = t.getContext("2d");
1313
+ return n.font = "30px Arial", n.fillText(e, 0, 0), t;
1314
+ }
1315
+ //#endregion
1316
+ //#region src/components/Threejs/assets/from.png
1317
+ var Et = "data:image/png;base64,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", Dt = "data:image/png;base64,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", Ot = "data:image/png;base64,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", Q = [], kt = new D({ color: 3190763 }), At = new D({ color: 16711680 }), $ = 0, jt = [], Mt = (e) => s.EXPO == "glf24" ? .1 : 1 * (e.area.width + e.area.height) / 1200, Nt = class {
1318
+ constructor(e, t, n) {
1319
+ this.expo = void 0, this.isMapbox = void 0, this.scene = void 0, this.data = void 0, this.container = void 0, this.isInit = !1, this.expo = e, this.isMapbox = t, this.container = n, setInterval(() => {
1320
+ if (!Q.length) {
1321
+ $ = 0;
1322
+ return;
1323
+ }
1324
+ Q[$].material = At, $ > 0 && (Q[$ - 1].material = kt), $ < Q.length - 1 ? $++ : (Q[$ - 1].material = kt, $ = 0);
1325
+ }, 50);
1326
+ }
1327
+ async init() {
1328
+ return new Promise(async (e, n) => {
1329
+ this.data = await gt(this.expo);
1330
+ let r = `https://${this.expo}.expofp.com/data/threejs`, i = await (this.isMapbox ? wt(this.container, this.data) : xt(this.container, this.data)), a = await _t(t(`${r}/model.obj`), t(`${r}/model.mtl`));
1331
+ this.isInit = !0, this.scene = i, i.onClickCallbacks.push(this.onClickCallback.bind(this)), i.onBeforeRender = this.onBeforeRender.bind(this), await this.initBooths(i, a), e();
1332
+ });
1333
+ }
1334
+ changeLayerVisibility(e, t) {
1335
+ if (!this.isInit) return;
1336
+ let n = this.scene.getlayer(e);
1337
+ n != null && (t ? (this.scene.camera.layers.enable(n), this.scene.raycaster.layers.enable(n)) : (this.scene.camera.layers.disable(n), this.scene.raycaster.layers.disable(n)));
1338
+ }
1339
+ hoverBooths(e) {
1340
+ jt.forEach((t) => t.hovered(e.length && !!e.find((e) => e.name === t.name)));
1341
+ }
1342
+ selectBooths(e) {
1343
+ jt.forEach((t) => t.dimmed(e.length && !e.find((e) => e.name === t.name)));
1344
+ }
1345
+ setMarker(e, t, n, r, i = !1, a = 1) {
1346
+ let o = `{sprite_${e}}`, s = this.scene.children.find((e) => e.name === o);
1347
+ if (t != null && n != null) {
1348
+ let c = i ? {
1349
+ x: t,
1350
+ y: n
1351
+ } : this.convertPoint(t, n, 0), l = this.data.objLayers.find((e) => {
1352
+ var t;
1353
+ return e.name === ((t = O.layerStore.findLayer(r)) == null ? void 0 : t.name);
1354
+ }) || this.data.objLayers[0];
1355
+ s || (e === "from" ? s = new Z(Et, l.height * a * 2) : e === "to" ? s = new Z(Dt, l.height * a * 2) : e === "yah" ? s = new Z(Ot, l.height * a * 2) : e === "cp" && (s = new Z(Ot, l.height * a)), s.name = o, this.scene.add(s)), s.position.set(c.x, c.y, l.z + (e === "from" || e === "to" ? l.height : 0));
1356
+ } else s && this.scene.remove(s);
1357
+ }
1358
+ interpolateColors(e, t, n) {
1359
+ for (var r = 1 / (n - 1), i = [], a = new o(e), s = new o(t), c = 0; c < n; c++) i.push(a.clone().lerp(s, r * c).getHex());
1360
+ return i;
1361
+ }
1362
+ updateRouteLines(e) {
1363
+ if (!this.isInit) return;
1364
+ var t = e.routeLines.filter((e) => {
1365
+ var t, n;
1366
+ let r = (t = (n = O.layerStore.layers.find((t) => t.name === e.p0.layer)) == null ? void 0 : n.visible) == null ? !0 : t;
1367
+ return !e.virtual && r;
1368
+ });
1369
+ if (Q.forEach((e) => this.scene.remove(e)), Q.splice(0, Q.length), !t.length) {
1370
+ this.setMarker("from", null, null, null), this.setMarker("to", null, null, null);
1371
+ return;
1372
+ }
1373
+ let n = this.linesToPoints(t), { z: r } = this.data.objLayers.find((e) => e.name === (be.mode === me.Default ? "Default" : t[0].p0.layer)), i = Mt(this.data);
1374
+ [].concat(n).reverse().forEach((e, t) => {
1375
+ let n = new P(new _e(i), kt);
1376
+ n.position.set(e.x, e.y, r + .02), Q.push(n), this.scene.add(n);
1377
+ }), this.setMarker("to", t[0].p0.x, t[0].p0.y, t[0].p0.layer), this.setMarker("from", t[t.length - 1].p1.x, t[t.length - 1].p1.y, t[t.length - 1].p1.layer);
1378
+ }
1379
+ onBeforeRender(e, t, n, r, i, a) {
1380
+ n.userData.position || n.position;
1381
+ }
1382
+ onClickCallback(e) {
1383
+ var t;
1384
+ let n = e.filter((e) => e.object.name !== "building")[0], r = n == null || (t = n.object) == null ? void 0 : t.name, i = I.booths.find((e) => e.name === r);
1385
+ i ? O.clickBooth(i) : N.details = null;
1386
+ }
1387
+ async initBooths(e, t) {
1388
+ let n = (await le(I.booths)).filter((e) => !!e);
1389
+ var r = /* @__PURE__ */ new Map();
1390
+ n.forEach((e) => r.set(e.name + "_logo", new de(e.htmlImage))), O.boothStore.booths.forEach((e) => {
1391
+ r.set(e.slug, new de(Tt(e.name)));
1392
+ });
1393
+ var i = new dt(r), a = new g();
1394
+ a.side = 2, a.transparent = !0, t.children.forEach((r, o) => {
1395
+ var [s, c] = r.name.split(/ (.*)/s);
1396
+ let l = e.addLayer(s);
1397
+ r.layers.set(l), r.name = c;
1398
+ let u = O.boothStore.booths.find((e) => c && c[0] === "b" && e.name === (c == null ? void 0 : c.substring(1)));
1399
+ if (u) {
1400
+ var d;
1401
+ r.material = new D({
1402
+ color: Oe(u),
1403
+ side: 2,
1404
+ name: r.name
1405
+ });
1406
+ let s = this.data.objLayers.find((e) => {
1407
+ var t;
1408
+ return e.name === (((t = u.layer) == null ? void 0 : t.name) || "Default");
1409
+ }), f = this.data.booths.find((e) => e.name === u.name);
1410
+ f.zScale = f.zScale || 1;
1411
+ let p = s.z + f.zScale * s.height + (s.z + f.zScale * s.height) * .001, m = new ht(u, f, r, c.substring(1), l, p), h = m.setText();
1412
+ if (h && e.add(h), !(u == null || (d = u.exhibitors) == null) && d.find((e) => !!e.logo && e.logoInBooth)) {
1413
+ let t = n.find((e) => e.booth.name === c.substring(1)), r = m.setLogo(i, t.htmlImage.width / t.htmlImage.height, a);
1414
+ r && e.add(r);
1415
+ }
1416
+ t.children[o] = m, jt.push(m);
1417
+ }
1418
+ }), e.add(t);
1419
+ }
1420
+ convertPoint(e, t, n) {
1421
+ var r = this.data.matrix;
1422
+ return e += r[0], t += r[1], e *= r[2], t *= r[3], e += r[4], t += r[5], new A(e, t, n);
1423
+ }
1424
+ linesToPoints(e) {
1425
+ let t = [], n = [];
1426
+ for (let t = 0; t < e.length; t++) {
1427
+ var r, i;
1428
+ let a = e[t], o = (r = (i = O.layerStore.layers.find((e) => e.name === a.p0.layer)) == null ? void 0 : i.visible) == null ? !0 : r;
1429
+ !a.virtual && o && n.push(a), (a.virtual || !o || t === e.length - 1) && n.length && (n = []);
1430
+ }
1431
+ return t.map((e) => this.convertPoint(e.x, e.y, e.z));
1432
+ }
1433
+ }, Pt = r();
1434
+ function Ft({ isMapbox: e, expo: t }) {
1435
+ let n = (0, Ae.useRef)(null), r = null;
1436
+ (0, Ae.useEffect)(() => {
1437
+ r = new Nt(t, e, n.current), r.init().then(() => {
1438
+ O.layerStore.layers.forEach((e) => r.changeLayerVisibility(e.name, e.visible)), r.selectBooths([...N.selectedBooths]), r.updateRouteLines(O.routeStore), we(!0);
1439
+ });
1440
+ }, []);
1441
+ let i = ie(() => ({
1442
+ get initselected() {
1443
+ return ![...N.selectedBooths].filter((e) => e.rect);
1444
+ },
1445
+ get actualCurrentPosition() {
1446
+ let e = O.routeStore.currentPosition;
1447
+ return !(e != null && e.z) || O.layerStore.visible.indexOf(O.layerStore.findLayer(e.z)) > -1 ? e : null;
1448
+ },
1449
+ get style() {
1450
+ return { left: 0 };
1451
+ }
1452
+ }));
1453
+ return z(() => N.zoomBy, () => {
1454
+ if (!N.zoomBy || !O.mapboxStore.showMapbox) return;
1455
+ let e = N.zoomBy;
1456
+ N.zoomBy = null, Te(e > 1);
1457
+ }), z(() => [
1458
+ O.layerStore.loaded,
1459
+ O.layerStore.visible,
1460
+ N.selectedRoute
1461
+ ], () => {
1462
+ O.layerStore.layers.length === O.layerStore.layers.filter((e) => e.loaded).length && O.layerStore.layers.forEach((e) => r.changeLayerVisibility(e.name, e.visible));
1463
+ }), z(() => N.hoveredBooths, () => {
1464
+ r.hoverBooths([...N.hoveredBooths]);
1465
+ }), z(() => [N.selectedBooths, N.listBooths], () => {
1466
+ var e = [];
1467
+ N.selectedBooths.size ? e = [...N.selectedBooths] : N.listBooths.size && (N.activeListIndex === 0 || N.list.type === "bookmarks" || N.list.type === "category") && (e = [...N.listBooths]), r.selectBooths(e);
1468
+ }), z(() => O.mapboxStore.showMapbox, () => {
1469
+ we(O.mapboxStore.showMapbox);
1470
+ }), z(() => N.moveToBooths, () => {
1471
+ if (!N.moveToBooths || !O.mapboxStore.showMapbox) return;
1472
+ let e = N.moveToBooths.filter((e) => e.rect).map((e) => e.rect), t = w.fromMultiple(e);
1473
+ e.length && B(t), N.moveToBooths = null;
1474
+ }), z(() => N.moveToRect, () => {
1475
+ !N.moveToRect || !O.mapboxStore.showMapbox || (B(N.moveToRect, 15), N.moveToRect = null);
1476
+ }), z(() => N.moveToLocation, () => {
1477
+ !N.moveToLocation || !O.mapboxStore.showMapbox || Ee();
1478
+ }), z(() => N.centerMap, () => {
1479
+ !N.centerMap || !O.mapboxStore.showMapbox || (B(w.fromMultiple(I.booths.map((e) => e.rect)), 15), N.centerMap = !1);
1480
+ }), z(() => O.routeStore.routeLines, () => r.updateRouteLines(O.routeStore)), z(() => i.actualCurrentPosition, () => {
1481
+ var e, t, n;
1482
+ return r.setMarker("cp", (e = i.actualCurrentPosition) == null ? void 0 : e.x, (t = i.actualCurrentPosition) == null ? void 0 : t.y, (n = i.actualCurrentPosition) == null ? void 0 : n.z);
1483
+ }), f(() => /* @__PURE__ */ (0, Pt.jsx)("div", {
1484
+ style: i.style,
1485
+ className: (0, je.default)("map-container", { hidden: !O.mapboxStore.showMapbox }),
1486
+ children: /* @__PURE__ */ (0, Pt.jsx)("div", {
1487
+ ref: n,
1488
+ className: (0, je.default)("map-wrapper", "mapboxgl-map")
1489
+ })
1490
+ }));
1491
+ }
1492
+ //#endregion
1493
+ export { Ft as default };