@qispace/vue3-player 0.0.16 → 0.1.2

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 (154) hide show
  1. package/dist/vue-components/config/vite.config.d.ts +2 -0
  2. package/dist/vue-components/config/vite.config.dev.d.ts +2 -0
  3. package/dist/vue-components/config/vite.config.web-components.d.ts +2 -0
  4. package/dist/vue-components/src/components/apartmentChooser/VApartmentChooser.vue.d.ts +129 -0
  5. package/dist/vue-components/src/components/apartmentChooser/VApartmentChooserNavigation.vue.d.ts +46 -0
  6. package/dist/vue-components/src/components/apartmentChooser/VApartmentChooserRaster.vue.d.ts +77 -0
  7. package/dist/vue-components/src/components/apartmentChooser/VApartmentChooserRotator.vue.d.ts +43 -0
  8. package/dist/vue-components/src/components/apartmentChooser/VApartmentChooserSvg.vue.d.ts +77 -0
  9. package/dist/vue-components/src/components/apartmentChooser/index.d.ts +5 -0
  10. package/dist/vue-components/src/components/apartmentChooser/types.d.ts +13 -0
  11. package/dist/vue-components/src/components/buildingPicker/VBuildingChooser.vue.d.ts +93 -0
  12. package/dist/vue-components/src/components/buildingPicker/VBuildingChooserRaster.vue.d.ts +97 -0
  13. package/dist/vue-components/src/components/buildingPicker/VBuildingChooserRasterOverlay.vue.d.ts +46 -0
  14. package/dist/vue-components/src/components/buildingPicker/VBuildingChooserSceneImageStack.vue.d.ts +27 -0
  15. package/dist/vue-components/src/components/buildingPicker/VBuildingChooserSunSimControl.vue.d.ts +37 -0
  16. package/dist/vue-components/src/components/buildingPicker/VBuildingChooserSvg.vue.d.ts +102 -0
  17. package/dist/vue-components/src/components/buildingPicker/index.d.ts +6 -0
  18. package/dist/vue-components/src/components/buildingPicker/types.d.ts +11 -0
  19. package/dist/{components → vue-components/src/components}/index.d.ts +1 -1
  20. package/dist/vue-components/src/components/shared/VFloatingCard.vue.d.ts +30 -0
  21. package/dist/vue-components/src/components/shared/VHoverProbe.vue.d.ts +4 -0
  22. package/dist/vue-components/src/components/shared/VNorthDirection.vue.d.ts +15 -0
  23. package/dist/vue-components/src/components/shared/VZoomBox.vue.d.ts +60 -0
  24. package/dist/vue-components/src/components/shared/index.d.ts +4 -0
  25. package/dist/vue-components/src/components/virtualTour/VCompass.vue.d.ts +15 -0
  26. package/dist/vue-components/src/components/virtualTour/VDisclaimer.vue.d.ts +2 -0
  27. package/dist/vue-components/src/components/virtualTour/VFloorLevel.vue.d.ts +38 -0
  28. package/dist/vue-components/src/components/virtualTour/VFullScreenButton.vue.d.ts +19 -0
  29. package/dist/vue-components/src/components/virtualTour/VInteriorSelector.vue.d.ts +21 -0
  30. package/dist/vue-components/src/components/virtualTour/VPlayer.vue.d.ts +74 -0
  31. package/dist/vue-components/src/components/virtualTour/VSettingsUI.vue.d.ts +23 -0
  32. package/dist/vue-components/src/components/virtualTour/VSingleImage.vue.d.ts +31 -0
  33. package/dist/vue-components/src/components/virtualTour/VSocialShare.vue.d.ts +2 -0
  34. package/dist/vue-components/src/components/virtualTour/VTimeOfDay.vue.d.ts +34 -0
  35. package/dist/vue-components/src/components/virtualTour/VTutorial.vue.d.ts +19 -0
  36. package/dist/vue-components/src/components/virtualTour/VViewModeToggle.vue.d.ts +19 -0
  37. package/dist/vue-components/src/components/virtualTour/VVirtualTour.vue.d.ts +156 -0
  38. package/dist/vue-components/src/components/virtualTour/VWaypointCarousel.vue.d.ts +25 -0
  39. package/dist/vue-components/src/components/virtualTour/index.d.ts +1 -0
  40. package/dist/vue-components/src/components/virtualTour/minimap/VMiniMap.vue.d.ts +35 -0
  41. package/dist/vue-components/src/components/virtualTour/minimap/VMiniMapMap.vue.d.ts +25 -0
  42. package/dist/vue-components/src/components/virtualTour/minimap/VMinimapCompass.vue.d.ts +19 -0
  43. package/dist/vue-components/src/components/virtualTour/minimap/VMoveable.vue.d.ts +18 -0
  44. package/dist/vue-components/src/components/virtualTour/minimap/VRotationMarker.vue.d.ts +15 -0
  45. package/dist/vue-components/src/components/virtualTour/minimap/VSunSimulationSlider.vue.d.ts +23 -0
  46. package/dist/vue-components/src/components/virtualTour/minimap/index.d.ts +1 -0
  47. package/dist/vue-components/src/lib/apartmentChooser/BuildingViewerModel.d.ts +18 -0
  48. package/dist/vue-components/src/lib/apartmentChooser/RotationStep.d.ts +10 -0
  49. package/dist/vue-components/src/lib/apartmentChooser/SceneRotator.d.ts +10 -0
  50. package/dist/vue-components/src/lib/apartmentChooser/index.d.ts +3 -0
  51. package/dist/vue-components/src/lib/buildingPicker/BuildingMap.d.ts +7 -0
  52. package/dist/vue-components/src/lib/buildingPicker/BuildingPickerResourceProvider.d.ts +27 -0
  53. package/dist/vue-components/src/lib/buildingPicker/CanvasRaster.d.ts +8 -0
  54. package/dist/vue-components/src/lib/buildingPicker/DayOfYearSelector.d.ts +12 -0
  55. package/dist/vue-components/src/lib/buildingPicker/SampleRaster.d.ts +5 -0
  56. package/dist/vue-components/src/lib/buildingPicker/index.d.ts +5 -0
  57. package/dist/vue-components/src/lib/shared/BatchLoadTracker.d.ts +17 -0
  58. package/dist/vue-components/src/lib/shared/I18N.d.ts +7 -0
  59. package/dist/vue-components/src/lib/shared/ResourceLoader.d.ts +5 -0
  60. package/dist/vue-components/src/lib/shared/index.d.ts +3 -0
  61. package/dist/vue-components/src/lib/virtualTour/CameraSnapshot.d.ts +5 -0
  62. package/dist/vue-components/src/lib/virtualTour/FullscreenModel.d.ts +13 -0
  63. package/dist/vue-components/src/vue-components.d.ts +2 -0
  64. package/dist/vue-components/src/vue-components.esm.d.ts +4 -0
  65. package/dist/vue-components/src/web-components.d.ts +11 -0
  66. package/dist/vue-components/style.css +1 -0
  67. package/dist/vue-components/vue3-player.js +4744 -0
  68. package/dist/vue-components/vue3-player.umd.cjs +1 -0
  69. package/package.json +27 -14
  70. package/dist/components/apartmentChooser/QiApartmentChooser.vue.d.ts +0 -2
  71. package/dist/components/apartmentChooser/QiApartmentChooserNavigation.vue.d.ts +0 -51
  72. package/dist/components/apartmentChooser/QiApartmentChooserRaster.vue.d.ts +0 -2
  73. package/dist/components/apartmentChooser/QiApartmentChooserRotator.vue.d.ts +0 -65
  74. package/dist/components/apartmentChooser/QiApartmentChooserSvg.vue.d.ts +0 -2
  75. package/dist/components/buildingPicker/QiBuildingChooser.vue.d.ts +0 -121
  76. package/dist/components/buildingPicker/QiBuildingChooserRaster.vue.d.ts +0 -2
  77. package/dist/components/buildingPicker/QiBuildingChooserRasterOverlay.vue.d.ts +0 -53
  78. package/dist/components/buildingPicker/QiBuildingChooserSceneImageStack.vue.d.ts +0 -32
  79. package/dist/components/buildingPicker/QiBuildingChooserSunSimControl.vue.d.ts +0 -42
  80. package/dist/components/buildingPicker/QiBuildingChooserSvg.vue.d.ts +0 -2
  81. package/dist/components/shared/QiFloatingCard.vue.d.ts +0 -18
  82. package/dist/components/shared/QiHoverProbe.vue.d.ts +0 -4
  83. package/dist/components/shared/QiNorthDirection.vue.d.ts +0 -21
  84. package/dist/components/shared/QiZoomBox.vue.d.ts +0 -83
  85. package/dist/components/virtualTourV2/Compass.vue.d.ts +0 -22
  86. package/dist/components/virtualTourV2/Disclaimer.vue.d.ts +0 -4
  87. package/dist/components/virtualTourV2/FloorLevel.vue.d.ts +0 -27
  88. package/dist/components/virtualTourV2/FullScreenButton.vue.d.ts +0 -14
  89. package/dist/components/virtualTourV2/InteriorSelector.vue.d.ts +0 -24
  90. package/dist/components/virtualTourV2/Player.vue.d.ts +0 -82
  91. package/dist/components/virtualTourV2/SettingsUI.vue.d.ts +0 -105
  92. package/dist/components/virtualTourV2/SingleImage.vue.d.ts +0 -26
  93. package/dist/components/virtualTourV2/SocialShare.vue.d.ts +0 -10
  94. package/dist/components/virtualTourV2/TimeOfDay.vue.d.ts +0 -27
  95. package/dist/components/virtualTourV2/Tutorial.vue.d.ts +0 -23
  96. package/dist/components/virtualTourV2/ViewModeToggle.vue.d.ts +0 -16
  97. package/dist/components/virtualTourV2/VirtualTourV2.vue.d.ts +0 -322
  98. package/dist/components/virtualTourV2/WaypointCarousel.vue.d.ts +0 -31
  99. package/dist/components/virtualTourV2/index.d.ts +0 -1
  100. package/dist/components/virtualTourV2/minimapv2/MiniMapMap.vue.d.ts +0 -82
  101. package/dist/components/virtualTourV2/minimapv2/MiniMapV2.vue.d.ts +0 -78
  102. package/dist/components/virtualTourV2/minimapv2/MinimapCompass.vue.d.ts +0 -30
  103. package/dist/components/virtualTourV2/minimapv2/Moveable.vue.d.ts +0 -8
  104. package/dist/components/virtualTourV2/minimapv2/RotationMarkerV2.vue.d.ts +0 -12
  105. package/dist/components/virtualTourV2/minimapv2/SunsimulationSlider.vue.d.ts +0 -48
  106. package/dist/components/virtualTourV2/minimapv2/index.d.ts +0 -1
  107. package/dist/style.css +0 -1
  108. package/dist/vue3-player.js +0 -5414
  109. package/dist/vue3-player.umd.cjs +0 -1
  110. package/src/components/apartmentChooser/QiApartmentChooser.vue +0 -319
  111. package/src/components/apartmentChooser/QiApartmentChooserNavigation.vue +0 -88
  112. package/src/components/apartmentChooser/QiApartmentChooserRaster.vue +0 -408
  113. package/src/components/apartmentChooser/QiApartmentChooserRotator.vue +0 -202
  114. package/src/components/apartmentChooser/QiApartmentChooserSvg.vue +0 -257
  115. package/src/components/apartmentChooser/index.js +0 -5
  116. package/src/components/buildingPicker/QiBuildingChooser.vue +0 -61
  117. package/src/components/buildingPicker/QiBuildingChooserRaster.vue +0 -312
  118. package/src/components/buildingPicker/QiBuildingChooserRasterOverlay.vue +0 -96
  119. package/src/components/buildingPicker/QiBuildingChooserSceneImageStack.vue +0 -89
  120. package/src/components/buildingPicker/QiBuildingChooserSunSimControl.vue +0 -257
  121. package/src/components/buildingPicker/QiBuildingChooserSvg.vue +0 -414
  122. package/src/components/buildingPicker/index.js +0 -6
  123. package/src/components/index.ts +0 -4
  124. package/src/components/shared/QiFloatingCard.vue +0 -76
  125. package/src/components/shared/QiHoverProbe.vue +0 -22
  126. package/src/components/shared/QiNorthDirection.vue +0 -27
  127. package/src/components/shared/QiZoomBox.vue +0 -322
  128. package/src/components/shared/index.js +0 -4
  129. package/src/components/virtualTourV2/Compass.vue +0 -37
  130. package/src/components/virtualTourV2/Disclaimer.vue +0 -41
  131. package/src/components/virtualTourV2/FloorLevel.vue +0 -73
  132. package/src/components/virtualTourV2/FullScreenButton.vue +0 -23
  133. package/src/components/virtualTourV2/InteriorSelector.vue +0 -90
  134. package/src/components/virtualTourV2/ManualSlideShow.vue +0 -198
  135. package/src/components/virtualTourV2/ManualSlideShowPlayer.vue +0 -159
  136. package/src/components/virtualTourV2/Player.vue +0 -300
  137. package/src/components/virtualTourV2/ScrollHelper.vue +0 -74
  138. package/src/components/virtualTourV2/SettingsUI.vue +0 -355
  139. package/src/components/virtualTourV2/SingleImage.vue +0 -36
  140. package/src/components/virtualTourV2/SocialShare.vue +0 -163
  141. package/src/components/virtualTourV2/TimeOfDay.vue +0 -50
  142. package/src/components/virtualTourV2/Tutorial.vue +0 -690
  143. package/src/components/virtualTourV2/ViewModeToggle.vue +0 -24
  144. package/src/components/virtualTourV2/VirtualTourV2.vue +0 -875
  145. package/src/components/virtualTourV2/WaypointCarousel.vue +0 -162
  146. package/src/components/virtualTourV2/index.ts +0 -20
  147. package/src/components/virtualTourV2/minimapv2/MiniMapMap.vue +0 -262
  148. package/src/components/virtualTourV2/minimapv2/MiniMapV2.vue +0 -110
  149. package/src/components/virtualTourV2/minimapv2/MinimapCompass.vue +0 -39
  150. package/src/components/virtualTourV2/minimapv2/Moveable.vue +0 -208
  151. package/src/components/virtualTourV2/minimapv2/RotationMarkerV2.vue +0 -79
  152. package/src/components/virtualTourV2/minimapv2/SunsimulationSlider.vue +0 -203
  153. package/src/components/virtualTourV2/minimapv2/index.ts +0 -1
  154. /package/dist/{lib → vue-components/src/lib}/index.d.ts +0 -0
@@ -0,0 +1,4744 @@
1
+ var Dt = Object.defineProperty;
2
+ var Rt = (u, t, e) => t in u ? Dt(u, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : u[t] = e;
3
+ var J = (u, t, e) => (Rt(u, typeof t != "symbol" ? t + "" : t, e), e);
4
+ import { defineComponent as Q, ref as r, computed as V, openBlock as h, createElementBlock as F, watch as Z, onMounted as ce, onBeforeUnmount as Oe, withDirectives as de, createElementVNode as o, normalizeStyle as re, vShow as me, createVNode as y, Fragment as Ce, renderList as _e, createCommentVNode as H, inject as pe, resolveComponent as T, withCtx as M, toDisplayString as z, unref as oe, createTextVNode as se, normalizeClass as ye, createBlock as N, renderSlot as ie, provide as De, watchEffect as qe, resolveDynamicComponent as mt, normalizeProps as pt, guardReactiveProps as ht, mergeProps as be, nextTick as Tt, createSlots as Ot, Transition as ze, pushScopeId as ot, popScopeId as nt, vModelText as $t, createStaticVNode as ft, onBeforeUpdate as Ht } from "vue";
5
+ import gt from "axios";
6
+ import * as jt from "@qispace/player-core";
7
+ import * as xe from "three";
8
+ class $e {
9
+ async loadJson(t) {
10
+ return (await gt.get(t)).data;
11
+ }
12
+ async loadImage(t) {
13
+ return new Promise((e, l) => {
14
+ const a = new Image();
15
+ a.crossOrigin = "anonymous", a.onload = () => {
16
+ e(a);
17
+ }, a.onerror = l, a.src = t;
18
+ });
19
+ }
20
+ async loadImageData(t) {
21
+ const e = await this.loadImage(t), l = document.createElement("canvas");
22
+ try {
23
+ const a = l.getContext("2d");
24
+ return l.width = e.width, l.height = e.height, a.drawImage(e, 0, 0), l.toDataURL("image/png");
25
+ } finally {
26
+ l.remove();
27
+ }
28
+ }
29
+ }
30
+ const Pt = /* @__PURE__ */ Q({
31
+ __name: "VHoverProbe",
32
+ setup(u, { expose: t }) {
33
+ const e = r(), l = V(() => window.getComputedStyle(e.value).display === "none");
34
+ return t({
35
+ isHoverEnabled: l
36
+ }), (a, n) => (h(), F("div", {
37
+ ref_key: "hoverCheck",
38
+ ref: e,
39
+ class: "hover-check"
40
+ }, null, 512));
41
+ }
42
+ }), te = (u, t) => {
43
+ const e = u.__vccOpts || u;
44
+ for (const [l, a] of t)
45
+ e[l] = a;
46
+ return e;
47
+ }, He = /* @__PURE__ */ te(Pt, [["__scopeId", "data-v-eb9b348d"]]), Nt = /* @__PURE__ */ Q({
48
+ __name: "VApartmentChooserRaster",
49
+ props: {
50
+ cdnFileResolver: {},
51
+ viewModel: {},
52
+ selectedUnitId: {},
53
+ unitCallback: { type: Function, default: (u) => u },
54
+ canGoToUnitCallback: { type: Function, default: () => !0 },
55
+ sceneData: { default: () => [] },
56
+ colorCallback: { type: Function, default: () => ({ r: 108, g: 0, b: 108, a: 144, s: 2 }) },
57
+ drawObserver: {}
58
+ },
59
+ emits: ["selectUnit", "goToUnit", "hoverOver", "hoverOut", "pos"],
60
+ setup(u, { emit: t }) {
61
+ const e = u, l = t, a = r({ x: 0, y: 0, width: 0, height: 0 }), n = r(null), s = r(0), i = r(0), k = r(null), p = r(null), v = r(null), m = r(null), I = r(-1), _ = r(!1), L = r(null), C = r(null), E = r({}), D = r("auto"), g = r(null), A = r(void 0), R = r(new $e()), c = r({}), f = r(), b = r(), B = r(), U = V(() => f.value.isHoverEnabled), $ = V(() => e.cdnFileResolver(`/scenedata${e.viewModel.currentScene}.png`)), q = V(() => $.value in E.value ? E.value[$.value] : null), ee = V(() => {
62
+ if (I.value < 0)
63
+ return !1;
64
+ const j = e.sceneData.find(
65
+ (P) => P.index === I.value
66
+ );
67
+ return j ? e.unitCallback ? e.unitCallback(j.apartmentId) : j.apartmentId : !1;
68
+ }), w = V(() => ({
69
+ width: s.value + "px",
70
+ height: i.value + "px",
71
+ cursor: D.value
72
+ })), x = V(() => `hover-${_.value ? "over" : "out"}-${ee.value ? typeof ee.value == "object" && "unitId" in ee.value ? ee.value.unitId : ee.value : ""}`);
73
+ Z(
74
+ $,
75
+ () => {
76
+ E.value[$.value] || R.value.loadImageData($.value).then((j) => {
77
+ E.value = {
78
+ ...E.value,
79
+ [$.value]: j
80
+ };
81
+ });
82
+ },
83
+ { immediate: !0 }
84
+ ), Z(q, () => {
85
+ q.value && W();
86
+ }), Z(
87
+ () => e.viewModel.currentScene,
88
+ () => {
89
+ Ve();
90
+ },
91
+ { immediate: !0 }
92
+ ), Z(
93
+ [
94
+ () => e.viewModel.isRotating,
95
+ () => e.drawObserver,
96
+ () => e.selectedUnitId
97
+ ],
98
+ () => {
99
+ Ve();
100
+ }
101
+ ), Z(ee, () => {
102
+ Ve(), ee.value ? D.value = "pointer" : D.value = "auto";
103
+ }), Z(x, () => {
104
+ _.value ? l("hoverOver", {
105
+ hoverApartment: ee.value,
106
+ closeHandler: () => Ge()
107
+ }) : l("hoverOut", {
108
+ hoverApartment: ee.value,
109
+ closeHandler: () => Ge()
110
+ });
111
+ }), Z(a, () => {
112
+ l("pos", a.value);
113
+ }), ce(() => {
114
+ A.value = () => {
115
+ clearTimeout(g.value), Me(), g.value = setTimeout(() => {
116
+ Me();
117
+ }, 50);
118
+ }, window.addEventListener("resize", A.value), Me();
119
+ }), Oe(() => {
120
+ window.removeEventListener("resize", A.value);
121
+ for (const j in E.value)
122
+ URL.revokeObjectURL(E.value[j]);
123
+ });
124
+ function W() {
125
+ n.value = b, k.value = n.value.getContext("2d", { willReadFrequently: !0 }), p.value = new Image(), p.value.onload = () => {
126
+ Pe(), n.value.addEventListener("mousemove", Ne(S, 50));
127
+ }, p.value.src = q.value;
128
+ }
129
+ function S(j) {
130
+ const P = K(j.offsetX, j.offsetY);
131
+ _.value = P >= 0, I.value = P, a.value = {
132
+ x: j.offsetX,
133
+ y: j.offsetY,
134
+ width: s.value,
135
+ height: i.value
136
+ };
137
+ }
138
+ function Y(j) {
139
+ const P = K(j.offsetX, j.offsetY);
140
+ P < 0 || U && fe(P);
141
+ }
142
+ function X() {
143
+ if (p.value && p.value.width) {
144
+ n.value.width = p.value.width, n.value.height = p.value.height, k.value.drawImage(
145
+ p.value,
146
+ 0,
147
+ 0,
148
+ p.value.width,
149
+ p.value.height
150
+ ), m.value = k.value.getImageData(
151
+ 0,
152
+ 0,
153
+ n.value.width,
154
+ n.value.height
155
+ ), v.value = k.value.getImageData(
156
+ 0,
157
+ 0,
158
+ n.value.width,
159
+ n.value.height
160
+ );
161
+ const j = m.value.data;
162
+ c.value = {};
163
+ for (let P = 0; P < j.length; P += 4)
164
+ c.value[j[P]] = [];
165
+ for (let P = 3; P < j.length; P += 4)
166
+ j[P] === 255 && j[P - 3] in c.value && c.value[j[P - 3]].push(P - 3);
167
+ }
168
+ }
169
+ function K(j, P) {
170
+ L.value = j, C.value = P;
171
+ const le = n.value.offsetWidth / n.value.width, Se = n.value.offsetHeight / n.value.height, Ee = (j / le).toFixed(), Fe = (P / Se).toFixed(), we = Number(Fe) * (n.value.width * 4) + Number(Ee) * 4, ke = m.value.data[we];
172
+ return m.value.data[we + 3] > 0 ? ke : -1;
173
+ }
174
+ function ne() {
175
+ he().forEach((P) => {
176
+ if (P.index >= 0) {
177
+ const le = ue(P.index), Se = ve(P.index);
178
+ let Ee = "idle";
179
+ !ee.value && e.selectedUnitId && Se === e.selectedUnitId ? Ee = "selected" : ee.value && I.value === P.index && (Ee = "hover");
180
+ const Fe = e.unitCallback ? e.unitCallback(Se) : Se;
181
+ if (Fe) {
182
+ const we = e.colorCallback(Fe, Ee);
183
+ if (we)
184
+ for (let ke = 0; ke < le.length; ke++)
185
+ v.value.data[le[ke]] = we.r, v.value.data[le[ke] + 1] = we.g, v.value.data[le[ke] + 2] = we.b, v.value.data[le[ke] + 3] = we.a;
186
+ }
187
+ }
188
+ });
189
+ }
190
+ function ue(j) {
191
+ return m.value ? c.value[j] : !1;
192
+ }
193
+ function ve(j) {
194
+ const P = e.sceneData.find((le) => le.index === j);
195
+ return P && P.apartmentId;
196
+ }
197
+ function he() {
198
+ if (m.value) {
199
+ const j = Object.keys(c.value).map(
200
+ (le) => parseInt(le)
201
+ );
202
+ return e.sceneData.filter(
203
+ (le) => j.includes(le.index)
204
+ );
205
+ } else
206
+ return [];
207
+ }
208
+ function fe(j) {
209
+ const P = ve(j);
210
+ ge(P);
211
+ }
212
+ function ge(j) {
213
+ const P = e.unitCallback ? e.unitCallback(j) : j;
214
+ l("selectUnit", P), P && this.canGoToUnitCallback(P) && l("goToUnit", P);
215
+ }
216
+ function Ie(j = 0) {
217
+ if (!v.value)
218
+ return;
219
+ const P = v.value.data;
220
+ for (let le = 3; le < P.length; le += 4)
221
+ P[le] = j;
222
+ }
223
+ function Me() {
224
+ if (!B.value)
225
+ return !1;
226
+ s.value = B.value.offsetWidth, i.value = B.value.offsetHeight;
227
+ }
228
+ function Pe() {
229
+ X(), Ve();
230
+ }
231
+ function Ve() {
232
+ Ie(), ne(), k.value && v.value && k.value.putImageData(v.value, 0, 0);
233
+ }
234
+ function Ge() {
235
+ _.value = !1;
236
+ }
237
+ const Ae = r(!1);
238
+ function Ne(j, P) {
239
+ return Ae.value = !0, function(...le) {
240
+ Ae.value && (Ae.value = !1, j.apply(this, le), setTimeout(() => Ae.value = !0, P));
241
+ };
242
+ }
243
+ return (j, P) => (h(), F("div", {
244
+ ref_key: "$el",
245
+ ref: B,
246
+ id: "canvas"
247
+ }, [
248
+ de(o("canvas", {
249
+ id: "canvas-mask",
250
+ ref_key: "canvasMask",
251
+ ref: b,
252
+ style: re(w.value),
253
+ onClick: Y
254
+ }, null, 4), [
255
+ [me, !j.viewModel.isRotating]
256
+ ]),
257
+ y(He, {
258
+ ref_key: "hoverProbe",
259
+ ref: f
260
+ }, null, 512)
261
+ ], 512));
262
+ }
263
+ }), wt = /* @__PURE__ */ te(Nt, [["__scopeId", "data-v-dbb7046f"]]), Yt = ["viewBox"], Wt = ["innerHTML", "onMouseenter", "onMouseleave", "onClick"], Gt = /* @__PURE__ */ Q({
264
+ __name: "VApartmentChooserSvg",
265
+ props: {
266
+ cdnFileResolver: {},
267
+ viewModel: {},
268
+ selectedUnitId: {},
269
+ unitCallback: { type: Function, default: (u) => u },
270
+ canGoToUnitCallback: { type: Function, default: () => !0 },
271
+ sceneData: { default: () => [] },
272
+ colorCallback: { type: Function, default: () => ({ r: 108, g: 0, b: 108, a: 144, s: 2 }) },
273
+ drawObserver: {}
274
+ },
275
+ emits: ["selectUnit", "goToUnit", "hoverOver", "hoverOut", "pos"],
276
+ setup(u, { emit: t }) {
277
+ const e = u, l = t, a = r({ x: 0, y: 0, width: 0, height: 0 }), n = r(-1), s = r({}), i = r(null), k = r(new $e()), p = r(), v = r(), m = V(() => v.value.isHoverEnabled);
278
+ Z(
279
+ () => e.viewModel.currentScene,
280
+ () => {
281
+ e.viewModel.currentScene in s.value && (i.value = s.value[e.viewModel.currentScene]);
282
+ },
283
+ { immediate: !0 }
284
+ ), Z(
285
+ s,
286
+ () => {
287
+ e.viewModel.currentScene in s.value && (i.value = s.value[e.viewModel.currentScene]);
288
+ },
289
+ { immediate: !0 }
290
+ ), Z(a, () => {
291
+ l("pos", a.value);
292
+ }), Z(n, (c, f) => {
293
+ if (c >= 0) {
294
+ const b = L(c);
295
+ l("hoverOver", {
296
+ hoverApartment: b,
297
+ closeHandler: () => {
298
+ n.value = -1;
299
+ }
300
+ });
301
+ } else {
302
+ const b = L(f);
303
+ l("hoverOut", {
304
+ hoverApartment: b,
305
+ closeHandler: () => {
306
+ n.value = -1;
307
+ }
308
+ });
309
+ }
310
+ }), ce(() => {
311
+ for (let c = 1; c <= 4; c++) {
312
+ const f = e.cdnFileResolver(`/scenedata${c}.svg`), b = {};
313
+ k.value.loadJson(f).then((B) => {
314
+ b.markup = B;
315
+ const $ = new DOMParser().parseFromString(B, "image/svg+xml").getElementsByTagName("svg")[0];
316
+ b.viewBox = $.getAttribute("viewBox"), b.svgObjects = Array.from(
317
+ $.querySelectorAll("*[data-index]")
318
+ ).map((q) => ({
319
+ index: parseInt(q.getAttribute("data-index")),
320
+ svg: q.innerHTML
321
+ })), s.value = { ...s.value, [c]: b };
322
+ });
323
+ }
324
+ p.value.addEventListener("mousemove", R(I, 50));
325
+ });
326
+ function I(c) {
327
+ a.value = {
328
+ x: c.offsetX,
329
+ y: c.offsetY,
330
+ width: p.value.offsetWidth,
331
+ height: p.value.offsetHeight
332
+ };
333
+ }
334
+ function _(c) {
335
+ var f;
336
+ return (f = e.sceneData.find((b) => b.index === parseInt(c))) == null ? void 0 : f.apartmentId;
337
+ }
338
+ function L(c) {
339
+ const f = _(c);
340
+ return e.unitCallback ? e.unitCallback(f) : f;
341
+ }
342
+ function C(c) {
343
+ m.value && (n.value = c);
344
+ }
345
+ function E(c) {
346
+ m.value && (n.value = -1);
347
+ }
348
+ function D(c) {
349
+ const f = L(c);
350
+ l("selectUnit", f), m.value && f && e.canGoToUnitCallback(f) ? l("goToUnit", f) : n.value = c;
351
+ }
352
+ function g(c) {
353
+ const f = _(c), b = L(c);
354
+ let B = "idle";
355
+ n.value < 0 && e.selectedUnitId && f === e.selectedUnitId ? B = "selected" : n.value >= 0 && n.value === c && (B = "hover");
356
+ const U = e.colorCallback(b, B);
357
+ if (U) {
358
+ const { r: $, g: q, b: ee, a: w, s: x } = U;
359
+ return {
360
+ strokeWidth: x !== void 0 ? x : 2,
361
+ stroke: `rgb(${$}, ${q}, ${ee})`,
362
+ strokeOpacity: 1,
363
+ fill: `rgb(${$}, ${q}, ${ee})`,
364
+ fillOpacity: w / 255,
365
+ cursor: `${e.canGoToUnitCallback(b) ? "cursor" : "default"} !important`
366
+ };
367
+ } else
368
+ return {
369
+ strokeWidth: 0,
370
+ stroke: "white",
371
+ strokeOpacity: 0,
372
+ fill: "white",
373
+ fillOpacity: 0,
374
+ cursor: "default !important"
375
+ };
376
+ }
377
+ const A = r(!1);
378
+ function R(c, f) {
379
+ return A.value = !0, function(...b) {
380
+ A.value && (A.value = !1, c.apply(this, b), setTimeout(() => A.value = !0, f));
381
+ };
382
+ }
383
+ return (c, f) => (h(), F("div", {
384
+ id: "container",
385
+ ref_key: "container",
386
+ ref: p
387
+ }, [
388
+ de(o("div", {
389
+ class: "svg-container",
390
+ style: re({
391
+ opacity: !i.value || !i.value.svgObjects ? 0 : 1
392
+ })
393
+ }, [
394
+ i.value && i.value.svgObjects ? (h(), F("svg", {
395
+ key: 0,
396
+ viewBox: i.value.viewBox
397
+ }, [
398
+ (h(!0), F(Ce, null, _e(i.value.svgObjects, ({ index: b, svg: B }) => (h(), F("g", {
399
+ key: b,
400
+ innerHTML: B,
401
+ style: re(g(b)),
402
+ onMouseenter: (U) => C(b),
403
+ onMouseleave: (U) => E(),
404
+ onClick: (U) => D(b)
405
+ }, null, 44, Wt))), 128))
406
+ ], 8, Yt)) : H("", !0)
407
+ ], 4), [
408
+ [me, !c.viewModel.isRotating]
409
+ ]),
410
+ y(He, {
411
+ ref_key: "hoverProbe",
412
+ ref: v
413
+ }, null, 512)
414
+ ], 512));
415
+ }
416
+ }), kt = /* @__PURE__ */ te(Gt, [["__scopeId", "data-v-3e771deb"]]), Qt = {
417
+ key: 0,
418
+ class: "d-none d-md-flex"
419
+ }, zt = /* @__PURE__ */ Q({
420
+ __name: "VApartmentChooserNavigation",
421
+ props: {
422
+ canGoToUnitCallback: { type: Function, default: () => !0 },
423
+ selectedUnit: {},
424
+ prevUnit: {},
425
+ nextUnit: {},
426
+ viewModel: {}
427
+ },
428
+ emits: ["prevUnit", "nextUnit", "goToUnit"],
429
+ setup(u, { emit: t }) {
430
+ const e = u, l = t, a = pe("i18n");
431
+ ce(() => {
432
+ window.addEventListener("keydown", n);
433
+ }), Oe(() => {
434
+ window.removeEventListener("keydown", n);
435
+ });
436
+ function n(s) {
437
+ s.keyCode === 37 ? e.prevUnit && l("prevUnit") : s.keyCode === 39 && e.nextUnit && l("nextUnit");
438
+ }
439
+ return (s, i) => {
440
+ const k = T("v-btn");
441
+ return h(), F("div", null, [
442
+ y(k, {
443
+ elevation: "1",
444
+ icon: "mdi-rotate-right",
445
+ class: "black darken-1",
446
+ onClick: i[0] || (i[0] = (p) => s.viewModel.rotateClockwise())
447
+ }),
448
+ y(k, {
449
+ elevation: "1",
450
+ plain: "",
451
+ icon: "mdi-chevron-left",
452
+ class: "mr-sm-4 ml-sm-8 mr-3 ml-3 black darken-1",
453
+ disabled: !s.prevUnit,
454
+ onClick: i[1] || (i[1] = (p) => l("prevUnit"))
455
+ }, null, 8, ["disabled"]),
456
+ y(k, {
457
+ color: "success darken-2",
458
+ elevation: "1",
459
+ rounded: "",
460
+ plain: "",
461
+ disabled: !s.selectedUnit || !s.canGoToUnitCallback(s.selectedUnit),
462
+ onClick: i[2] || (i[2] = (p) => l("goToUnit", s.selectedUnit))
463
+ }, {
464
+ default: M(() => [
465
+ s.selectedUnit && s.canGoToUnitCallback(s.selectedUnit) ? (h(), F("span", Qt, z(oe(a).getLabel("see-apartment")) + "  ", 1)) : H("", !0),
466
+ o("span", null, z(s.selectedUnit && "title" in s.selectedUnit ? s.selectedUnit.title : "-"), 1)
467
+ ]),
468
+ _: 1
469
+ }, 8, ["disabled"]),
470
+ y(k, {
471
+ elevation: "1",
472
+ plain: "",
473
+ icon: "mdi-chevron-right",
474
+ class: "mr-sm-8 ml-sm-4 mr-3 ml-3 black darken-1",
475
+ disabled: !s.nextUnit,
476
+ onClick: i[3] || (i[3] = (p) => l("nextUnit"))
477
+ }, null, 8, ["disabled"]),
478
+ y(k, {
479
+ elevation: "1",
480
+ plain: "",
481
+ icon: "mdi-rotate-left",
482
+ class: "black darken-1",
483
+ onClick: i[4] || (i[4] = (p) => s.viewModel.rotateCounterClockwise())
484
+ })
485
+ ]);
486
+ };
487
+ }
488
+ }), bt = /* @__PURE__ */ te(zt, [["__scopeId", "data-v-02d5a12e"]]);
489
+ class tt {
490
+ constructor(t) {
491
+ J(this, "_numParts");
492
+ J(this, "_loadedCount");
493
+ J(this, "_isError");
494
+ J(this, "_finishedAction");
495
+ J(this, "_errorAction");
496
+ J(this, "_loadProgressAction");
497
+ this._numParts = t, this._loadedCount = 0, this._isError = !1, this._finishedAction = () => {
498
+ }, this._errorAction = () => {
499
+ }, this._loadProgressAction = () => {
500
+ };
501
+ }
502
+ onLoadFinished(t) {
503
+ return this._finishedAction = t, this;
504
+ }
505
+ onLoadError(t) {
506
+ return this._errorAction = t, this;
507
+ }
508
+ onLoadProgress(t) {
509
+ return this._loadProgressAction = t, this;
510
+ }
511
+ partLoaded() {
512
+ this.isFinished || (this._loadedCount++, this._loadProgressAction(this.percentLoaded), this.isFinished && this._finishedAction());
513
+ }
514
+ errorDetected() {
515
+ this._isError || (this._isError = !0, this._errorAction());
516
+ }
517
+ get isFinished() {
518
+ return this._loadedCount >= this._numParts;
519
+ }
520
+ get isError() {
521
+ return this._isError;
522
+ }
523
+ get percentLoaded() {
524
+ return Math.round(this._loadedCount * 100 / this._numParts);
525
+ }
526
+ }
527
+ class at {
528
+ constructor(t, e, l, a) {
529
+ J(this, "_rotator");
530
+ J(this, "_direction");
531
+ J(this, "_frameIndex");
532
+ J(this, "_sceneCount");
533
+ this._rotator = t, this._direction = e, this._frameIndex = l, this._sceneCount = a;
534
+ }
535
+ get atEnd() {
536
+ return this._sceneCount === 0;
537
+ }
538
+ get frameIndex() {
539
+ return this._frameIndex;
540
+ }
541
+ nextFrame() {
542
+ const t = this._rotator.clampFrameIndex(
543
+ this._frameIndex + this._direction
544
+ ), e = this._rotator.isCardinalFrame(t) ? this._sceneCount - 1 : this._sceneCount;
545
+ return new at(
546
+ this._rotator,
547
+ this._direction,
548
+ t,
549
+ e
550
+ );
551
+ }
552
+ }
553
+ class qt {
554
+ constructor(t, e) {
555
+ J(this, "_cardinalFrames");
556
+ J(this, "_totalFrameCount");
557
+ this._cardinalFrames = t, this._totalFrameCount = e;
558
+ }
559
+ start(t, e, l) {
560
+ const a = this.startFrameIndexForScene(e);
561
+ return new at(this, t, a, l);
562
+ }
563
+ isCardinalFrame(t) {
564
+ return this._cardinalFrames.includes(t);
565
+ }
566
+ clampFrameIndex(t) {
567
+ return (this._totalFrameCount + t) % this._totalFrameCount;
568
+ }
569
+ startFrameIndexForScene(t) {
570
+ return this._cardinalFrames[t];
571
+ }
572
+ }
573
+ const Zt = {
574
+ key: 0,
575
+ class: "fill-parent d-flex justify-center align-center blue-grey lighten-5"
576
+ }, Xt = {
577
+ key: 1,
578
+ class: "frame-container"
579
+ }, Kt = {
580
+ key: 0,
581
+ class: "frame-image"
582
+ }, Jt = ["srcset", "type"], eo = ["src"], to = {
583
+ key: 2,
584
+ id: "image-stack",
585
+ class: "frame-container"
586
+ }, oo = ["alt"], no = ["srcset"], ao = ["src"], ct = 64, Ye = 4, lo = 120, io = /* @__PURE__ */ Q({
587
+ __name: "VApartmentChooserRotator",
588
+ props: {
589
+ viewModel: {},
590
+ build: { default: "" },
591
+ cdnFileResolver: {},
592
+ cardinalFrames: {}
593
+ },
594
+ emits: ["loaded", "error", "progress"],
595
+ setup(u, { emit: t }) {
596
+ const e = u, l = t, a = _(), n = r(
597
+ new tt(a.length).onLoadFinished(() => l("loaded")).onLoadProgress((D) => l("progress", D)).onLoadError(() => l("error"))
598
+ ), s = r(
599
+ new qt(e.cardinalFrames, ct)
600
+ ), i = r(a), k = r(!1), p = V(() => i.value.find((D) => D.show));
601
+ Z(
602
+ () => e.viewModel.currentScene,
603
+ (D, g) => {
604
+ const A = E(g, D), R = C(g, D);
605
+ v(g, A, R);
606
+ }
607
+ ), ce(() => {
608
+ I();
609
+ });
610
+ function v(D, g, A) {
611
+ e.viewModel.isRotating || (e.viewModel.isRotating = !0, m(
612
+ s.value.start(
613
+ g,
614
+ D % Ye,
615
+ A
616
+ )
617
+ ));
618
+ }
619
+ function m(D) {
620
+ setTimeout(() => {
621
+ i.value[D.frameIndex].show = !1;
622
+ const g = D.nextFrame();
623
+ i.value[g.frameIndex].show = !0, g.atEnd ? I() : window.requestAnimationFrame(() => m(g));
624
+ }, 1e3 / lo);
625
+ }
626
+ function I() {
627
+ const D = s.value.startFrameIndexForScene(
628
+ e.viewModel.currentScene % Ye
629
+ );
630
+ D in i.value && (i.value[D].show = !0), e.viewModel.isRotating = !1;
631
+ }
632
+ function _() {
633
+ const D = [];
634
+ for (let g = 0; g < ct; g++) {
635
+ const { sourceSet: A, defaultPath: R } = L(g);
636
+ D.push({
637
+ index: g,
638
+ sourceSet: A,
639
+ defaultPath: R,
640
+ show: !1
641
+ });
642
+ }
643
+ return D;
644
+ }
645
+ function L(D) {
646
+ const g = ("0000" + (D + 1)).slice(-4), A = e.build ? `?v=${e.build}` : "", R = [
647
+ `${e.cdnFileResolver(`/480/${g}.jpg${A}`)} 480w`,
648
+ `${e.cdnFileResolver(`/960/${g}.jpg${A}`)} 960w`,
649
+ `${e.cdnFileResolver(`/1280/${g}.jpg${A}`)} 1280w`
650
+ ].join(","), c = e.cdnFileResolver(
651
+ `/480/${g}.jpg${A}`
652
+ );
653
+ return { sourceSet: R, defaultPath: c };
654
+ }
655
+ function C(D, g) {
656
+ const A = Ye / 2, R = Math.abs(D - g);
657
+ return R > A ? Ye - R : R;
658
+ }
659
+ function E(D, g) {
660
+ if (D === g)
661
+ return 0;
662
+ const R = Math.abs(D - g) < Ye / 2;
663
+ return R && D < g || !R && D > g ? 1 : -1;
664
+ }
665
+ return (D, g) => {
666
+ const A = T("v-icon");
667
+ return h(), F("div", null, [
668
+ n.value.isError ? (h(), F("div", Zt, [
669
+ y(A, { "x-large": "" }, {
670
+ default: M(() => [
671
+ se("mdi-alert-circle-outline")
672
+ ]),
673
+ _: 1
674
+ })
675
+ ])) : k.value ? (h(), F("div", to, [
676
+ (h(!0), F(Ce, null, _e(i.value, (R) => (h(), F("picture", {
677
+ key: R.index,
678
+ alt: R.index,
679
+ class: ye({ "frame-image": !0, show: R.show })
680
+ }, [
681
+ o("source", {
682
+ srcset: R.sourceSet,
683
+ type: "image/jpeg"
684
+ }, null, 8, no),
685
+ o("img", {
686
+ src: R.defaultPath,
687
+ alt: "Building image",
688
+ onLoad: g[2] || (g[2] = (c) => n.value.partLoaded()),
689
+ onError: g[3] || (g[3] = (c) => n.value.errorDetected())
690
+ }, null, 40, ao)
691
+ ], 10, oo))), 128))
692
+ ])) : (h(), F("div", Xt, [
693
+ p.value ? (h(), F("picture", Kt, [
694
+ o("source", {
695
+ srcset: p.value.sourceSet,
696
+ type: p.value.type
697
+ }, null, 8, Jt),
698
+ o("img", {
699
+ src: p.value.defaultPath,
700
+ onLoad: g[0] || (g[0] = (R) => k.value = !0),
701
+ onError: g[1] || (g[1] = (R) => n.value.errorDetected())
702
+ }, null, 40, eo)
703
+ ])) : H("", !0)
704
+ ]))
705
+ ]);
706
+ };
707
+ }
708
+ }), yt = /* @__PURE__ */ te(io, [["__scopeId", "data-v-8e71d825"]]), so = /* @__PURE__ */ Q({
709
+ __name: "VFloatingCard",
710
+ props: {
711
+ pos: {},
712
+ isHoverable: { type: Boolean }
713
+ },
714
+ emits: ["outside"],
715
+ setup(u, { emit: t }) {
716
+ const e = u, l = t, a = V(() => {
717
+ const n = e.pos.x <= e.pos.width / 2 ? "left" : "right";
718
+ return `${e.pos.y <= e.pos.height / 2 ? "top" : "bottom"}-${n}`;
719
+ });
720
+ return (n, s) => {
721
+ const i = T("v-dialog"), k = T("v-fade-transition");
722
+ return h(), N(k, {
723
+ origin: a.value.replace("-", " ") + " " + n.pos.x + " " + n.pos.y
724
+ }, {
725
+ default: M(() => [
726
+ n.isHoverable ? (h(), F("div", {
727
+ key: 0,
728
+ class: ye(["floating-card", a.value]),
729
+ style: re({ left: `${n.pos.x}px`, top: `${n.pos.y}px`, pointerEvents: "none" })
730
+ }, [
731
+ ie(n.$slots, "default", { isHoverable: n.isHoverable }, void 0, !0)
732
+ ], 6)) : (h(), N(i, {
733
+ key: 1,
734
+ value: !0,
735
+ width: "auto",
736
+ "onClick:outside": s[0] || (s[0] = (p) => l("outside", p))
737
+ }, {
738
+ default: M(() => [
739
+ ie(n.$slots, "default", { isHoverable: n.isHoverable }, void 0, !0)
740
+ ]),
741
+ _: 3
742
+ }))
743
+ ]),
744
+ _: 3
745
+ }, 8, ["origin"]);
746
+ };
747
+ }
748
+ }), Ze = /* @__PURE__ */ te(so, [["__scopeId", "data-v-0695e74f"]]), ro = /* @__PURE__ */ Q({
749
+ __name: "VZoomBox",
750
+ props: {
751
+ desktop: { type: Boolean, default: !0 },
752
+ mobile: { type: Boolean, default: !0 },
753
+ maxScale: { default: 10 },
754
+ consumeMouseClickWhenMoved: { type: Boolean, default: !0 },
755
+ consumeMouseUpWhenMoved: { type: Boolean, default: !0 }
756
+ },
757
+ emits: ["update"],
758
+ setup(u, { emit: t }) {
759
+ const e = u, l = t, a = r(100), n = r(0), s = r(0), i = r(!1), k = r(!1), p = r(void 0), v = r(!1), m = r(), I = V(() => `translateX(${n.value}px) translateY(${s.value}px) scale(${_.value})`), _ = V(() => a.value / 100), L = V(() => e.maxScale * 100);
760
+ Z([_, n, s], () => {
761
+ W();
762
+ }), Z(
763
+ () => e.desktop,
764
+ () => {
765
+ e.desktop ? C() : D();
766
+ }
767
+ ), Z(
768
+ () => e.mobile,
769
+ () => {
770
+ e.mobile ? E() : g();
771
+ }
772
+ ), ce(() => {
773
+ e.desktop && C(), e.mobile && E();
774
+ }), Oe(() => {
775
+ e.desktop && D(), e.mobile && g();
776
+ });
777
+ function C() {
778
+ m.value.addEventListener("wheel", A, {
779
+ capture: !0
780
+ }), m.value.addEventListener("mousedown", R, {
781
+ capture: !0
782
+ }), m.value.addEventListener("mousemove", c, {
783
+ capture: !0
784
+ }), window.addEventListener("mouseup", f, {
785
+ capture: !0
786
+ }), window.addEventListener("click", b, {
787
+ capture: !0
788
+ });
789
+ }
790
+ function E() {
791
+ m.value.addEventListener("touchstart", B, {
792
+ capture: !0
793
+ }), m.value.addEventListener("touchmove", U, {
794
+ capture: !0
795
+ }), window.addEventListener("touchend", $, {
796
+ capture: !0
797
+ }), window.addEventListener("touchcancel", $, {
798
+ capture: !0
799
+ });
800
+ }
801
+ function D() {
802
+ m.value.removeEventListener("wheel", A, {
803
+ capture: !0
804
+ }), m.value.removeEventListener("mousedown", R, {
805
+ capture: !0
806
+ }), m.value.removeEventListener("mousemove", c, {
807
+ capture: !0
808
+ }), window.removeEventListener("mouseup", f, {
809
+ capture: !0
810
+ }), window.removeEventListener("click", b, {
811
+ capture: !0
812
+ });
813
+ }
814
+ function g() {
815
+ m.value.removeEventListener("touchstart", B, {
816
+ capture: !0
817
+ }), m.value.removeEventListener("touchmove", U, {
818
+ capture: !0
819
+ }), window.removeEventListener("touchend", $, {
820
+ capture: !0
821
+ }), window.removeEventListener("touchcancel", $, {
822
+ capture: !0
823
+ });
824
+ }
825
+ function A(S) {
826
+ const { x: Y, y: X } = q(S);
827
+ x(-S.deltaY / 10, Y, X), S.preventDefault();
828
+ }
829
+ function R(S) {
830
+ i.value = !0, v.value = !1, p.value = S;
831
+ }
832
+ function c(S) {
833
+ if (i.value) {
834
+ const { x: Y, y: X } = q(S), { x: K, y: ne } = q(p.value), ue = {
835
+ x: Y - K,
836
+ y: X - ne
837
+ };
838
+ ee(ue.x), w(ue.y), v.value = !0, p.value = S;
839
+ }
840
+ }
841
+ function f(S) {
842
+ i.value && v.value && e.consumeMouseUpWhenMoved && (S.preventDefault(), S.stopImmediatePropagation());
843
+ }
844
+ function b(S) {
845
+ i.value && (v.value && e.consumeMouseClickWhenMoved && (S.preventDefault(), S.stopImmediatePropagation()), i.value = !1);
846
+ }
847
+ function B(S) {
848
+ i.value = S.touches.length === 1, k.value = S.touches.length === 2, p.value = S;
849
+ }
850
+ function U(S) {
851
+ if (i.value) {
852
+ const { x: Y, y: X } = q(S.touches[0]), { x: K, y: ne } = q(p.value.touches[0]), ue = {
853
+ x: Y - K,
854
+ y: X - ne
855
+ };
856
+ ee(ue.x), w(ue.y);
857
+ } else if (k.value && S.touches.length === 2) {
858
+ const { x: Y, y: X } = q(S.touches[0]), { x: K, y: ne } = q(p.value.touches[0]), { x: ue, y: ve } = q(S.touches[1]), { x: he, y: fe } = q(p.value.touches[1]), ge = Math.hypot(K - he, ne - fe), Ie = Math.hypot(Y - ue, X - ve), Me = (ue + Y) / 2, Pe = (ve + X) / 2;
859
+ x(Ie - ge, Me, Pe);
860
+ }
861
+ p.value = S;
862
+ }
863
+ function $() {
864
+ i.value = !1, k.value = !1;
865
+ }
866
+ function q(S) {
867
+ const { left: Y, top: X } = m.value.getBoundingClientRect();
868
+ return {
869
+ x: S.clientX - Y,
870
+ y: S.clientY - X
871
+ };
872
+ }
873
+ function ee(S) {
874
+ const Y = m.value.clientWidth, X = Y * _.value;
875
+ n.value = Math.max(
876
+ Math.min(0, n.value + S),
877
+ -(X - Y)
878
+ );
879
+ }
880
+ function w(S) {
881
+ const Y = m.value.clientHeight, X = Y * _.value;
882
+ s.value = Math.max(
883
+ Math.min(0, s.value + S),
884
+ -(X - Y)
885
+ );
886
+ }
887
+ function x(S, Y, X) {
888
+ const K = m.value.clientWidth, ne = m.value.clientHeight, ue = K * _.value, ve = ne * _.value;
889
+ a.value = Math.min(Math.max(100, a.value + S), L.value);
890
+ const he = K * _.value, fe = ne * _.value, ge = he - ue, Ie = fe - ve;
891
+ n.value -= Y / K * ge, s.value -= X / ne * Ie, ee(0), w(0);
892
+ }
893
+ function W() {
894
+ l("update", {
895
+ scale: _.value,
896
+ x: n.value,
897
+ y: s.value,
898
+ resolve: (S, Y) => {
899
+ const X = m.value.clientWidth, K = m.value.clientHeight, ne = n.value / -_.value, ue = s.value / -_.value, ve = ne + X / _.value, he = ue + K / _.value, fe = S / X * (ve - ne) + ne, ge = Y / K * (he - ue) + ue;
900
+ return { x: fe, y: ge };
901
+ }
902
+ });
903
+ }
904
+ return (S, Y) => (h(), F("div", {
905
+ ref_key: "box",
906
+ ref: m,
907
+ class: "zoom-box-container"
908
+ }, [
909
+ o("div", {
910
+ style: re({ "transform-origin": "top left", transform: I.value }),
911
+ class: "zoom-box"
912
+ }, [
913
+ ie(S.$slots, "default", {}, void 0, !0)
914
+ ], 4)
915
+ ], 512));
916
+ }
917
+ }), Xe = /* @__PURE__ */ te(ro, [["__scopeId", "data-v-52f62ef2"]]), lt = 4;
918
+ function _t(u) {
919
+ return u < lt ? u + 1 : 1;
920
+ }
921
+ function uo(u) {
922
+ return u > 1 ? u - 1 : lt;
923
+ }
924
+ class co {
925
+ constructor(t) {
926
+ J(this, "_state");
927
+ J(this, "_navigator");
928
+ J(this, "_sceneModel");
929
+ this._state = {
930
+ isRotating: !1,
931
+ currentScene: t
932
+ };
933
+ }
934
+ get isRotating() {
935
+ return this._state.isRotating;
936
+ }
937
+ set isRotating(t) {
938
+ this._state.isRotating = t;
939
+ }
940
+ get navigator() {
941
+ return this._navigator;
942
+ }
943
+ get sceneModel() {
944
+ return this._sceneModel;
945
+ }
946
+ unlessRotatingDo(t) {
947
+ this.isRotating || t();
948
+ }
949
+ get currentScene() {
950
+ return this._state.currentScene;
951
+ }
952
+ set currentScene(t) {
953
+ this._state.currentScene = t;
954
+ }
955
+ rotateCounterClockwise() {
956
+ this.unlessRotatingDo(() => {
957
+ this.currentScene = _t(this.currentScene);
958
+ });
959
+ }
960
+ rotateClockwise() {
961
+ this.unlessRotatingDo(() => {
962
+ this.currentScene = uo(this.currentScene);
963
+ });
964
+ }
965
+ }
966
+ const vo = {
967
+ // virtual tour default labels
968
+ interior: "Interiør",
969
+ "see-a-selection-of-the-options-in-the-project": "Se et utvalg av tilvalgsmulighetene i prosjektet.",
970
+ "floor-plan": "Planløsning",
971
+ "all-illustrations-are-indicative-deviations-may-occur": {
972
+ nb: "Alle illustrasjoner er veiledende. Avvik kan forekomme.",
973
+ en: "All illustrations are indicative. Discrepancies may exist."
974
+ },
975
+ "read-more-here": "Les mer her",
976
+ "i-understand": { nb: "Jeg forstår", en: "I understand" },
977
+ share: "Share",
978
+ "share-to-facebook": "Share to Facebook",
979
+ "share-to-linkedin": "Share to Linkedin",
980
+ "share-to-twitter": "Share to Twitter",
981
+ "share-via-email": "Share via Email",
982
+ "copy-link": "Copy link",
983
+ "virtual-view": "Virtuell Visning",
984
+ "slide-show": "Slide Show",
985
+ // building chooser default labels
986
+ room: "Room",
987
+ floor: "Floor",
988
+ "see-apartments": "See apartments",
989
+ // apartment chooser default labels
990
+ "see-apartment": "See apartment",
991
+ "click-and-drag-to-look-around": {
992
+ en: "Click and drag to look around",
993
+ nb: "Klikk og dra for å se deg rundt"
994
+ },
995
+ "click-on-the-cricles-to-move-around": {
996
+ en: "Click on the circles to move around",
997
+ nb: "Klikk på sirkelene for å gå rundt"
998
+ },
999
+ "use-the-mouse-wheel-to-zoom": {
1000
+ en: "Use the mouse wheel to zoom",
1001
+ nb: "Bruk mushjulet for å zoome"
1002
+ },
1003
+ "you-can-also-use-the-arrow-keys-to-move-around": {
1004
+ en: "You can also use the arrow keys to move around",
1005
+ nb: "Du kan også bruke pilene på tastaturet for å gå rundt"
1006
+ },
1007
+ "tap-and-drag-to-look-around": {
1008
+ en: "Tap and drag to look around",
1009
+ nb: "Trykk og dra for å se deg rundt"
1010
+ },
1011
+ "tap-on-the-circles-to-move-around": {
1012
+ en: "Tap on the circles to move around",
1013
+ nb: "Trykk på sirkelene for å gå rundt"
1014
+ },
1015
+ "use-two-fingers-to-zoom": {
1016
+ en: "Use two fingers to zoom",
1017
+ nb: "Bruk to fingre for å zoome"
1018
+ },
1019
+ "dont-show-again": { en: "Don't Show Again", nb: "Ikke vis igjen" }
1020
+ };
1021
+ class Le {
1022
+ constructor(t = null, e = null) {
1023
+ J(this, "_labels");
1024
+ J(this, "_language");
1025
+ this._labels = { ...vo, ...t || {} }, this._language = e || "en";
1026
+ }
1027
+ getLabel(t) {
1028
+ return t in this._labels ? this.get(this._labels[t]) : t;
1029
+ }
1030
+ get(t) {
1031
+ if (typeof t == "string")
1032
+ return t;
1033
+ if (this._language in t && t[this._language])
1034
+ return t[this._language];
1035
+ for (const e in t)
1036
+ if (t[e])
1037
+ return t[e];
1038
+ return "";
1039
+ }
1040
+ }
1041
+ const mo = { key: 0 }, po = { class: "interactive-viewer" }, ho = { class: "fill-parent" }, fo = { key: 0 }, go = {
1042
+ key: 1,
1043
+ class: "navigation"
1044
+ }, wo = { key: 2 }, ko = 4, bo = /* @__PURE__ */ Q({
1045
+ __name: "VApartmentChooser",
1046
+ props: {
1047
+ i18n: {},
1048
+ showCards: { type: Boolean, default: !0 },
1049
+ build: { default: "" },
1050
+ buildingSceneDataResolver: {},
1051
+ buildingScenesByApartmentResolver: {},
1052
+ cdnFileResolver: {},
1053
+ colorCallback: { type: Function, default: () => ({ r: 108, g: 0, b: 108, a: 144, s: 2 }) },
1054
+ unitCallback: { type: Function, default: (u) => u },
1055
+ canGoToUnitCallback: { type: Function, default: () => !0 },
1056
+ selectedUnitId: {},
1057
+ nextUnit: {},
1058
+ prevUnit: {},
1059
+ drawObserver: { default: null },
1060
+ interactiveDesktop: { type: Boolean, default: !0 },
1061
+ interactiveMobile: { type: Boolean, default: !0 },
1062
+ useSvg: { type: Boolean, default: !1 }
1063
+ },
1064
+ emits: ["selectUnit", "goToUnit", "navUnit", "hoverOverUnit", "hoverOutUnit", "initialized"],
1065
+ setup(u, { emit: t }) {
1066
+ const e = [0, 16, 32, 48], l = u, a = t;
1067
+ De(
1068
+ "i18n",
1069
+ l.i18n ? new Le(l.i18n.labels, l.i18n.language) : new Le()
1070
+ );
1071
+ const n = r({ isReady: !1, isError: !1, progress: void 0 }), s = r(null), i = r(null), k = r(null), p = r(void 0), v = r(new $e()), m = r({ x: 0, y: 0, width: 0, height: 0 }), I = r(void 0), _ = r(void 0), L = r(null), C = V(() => L.value.isHoverEnabled), E = V(() => l.unitCallback ? l.unitCallback(l.selectedUnitId) : l.selectedUnitId), D = V(() => l.useSvg ? kt : wt);
1072
+ qe(() => {
1073
+ if (l.selectedUnitId && p.value) {
1074
+ const c = s.value[l.selectedUnitId];
1075
+ c && (p.value.currentScene = c);
1076
+ }
1077
+ }), ce(async () => {
1078
+ let c = null;
1079
+ try {
1080
+ c = await v.value.loadJson(
1081
+ l.cdnFileResolver("/apartmentChooser.json")
1082
+ );
1083
+ } catch {
1084
+ console.info("apartmentChooser.json not found");
1085
+ }
1086
+ const f = c && c.startScene !== void 0 ? c.startScene : ko;
1087
+ k.value = c && c.scenes !== void 0 ? c.scenes : e, i.value = c && c.sceneData !== void 0 ? c.sceneData.map((U) => ({
1088
+ apartmentId: U.apartmentID,
1089
+ index: U.index
1090
+ })) : l.buildingSceneDataResolver ? await l.buildingSceneDataResolver() : [], s.value = c && c.sceneData !== void 0 ? c.sceneData.map((U) => {
1091
+ const $ = U.bestScene === 0 ? 4 : U.bestScene;
1092
+ return { unitId: U.apartmentID, scene: $ };
1093
+ }).reduce((U, $) => ({ ...U, [$.unitId]: $.scene }), {}) : l.buildingScenesByApartmentResolver ? await l.buildingScenesByApartmentResolver() : [];
1094
+ const b = (U, $ = "unitId") => {
1095
+ let q = f, ee = [];
1096
+ for (let w = 0; w < lt; w++)
1097
+ ee.push(q), q = _t(q);
1098
+ return U.sort((w, x) => {
1099
+ const W = ee.findIndex(
1100
+ (Y) => Y === s.value[w[$]]
1101
+ ), S = ee.findIndex(
1102
+ (Y) => Y === s.value[x[$]]
1103
+ );
1104
+ return W < S ? -1 : W > S ? 1 : 0;
1105
+ }), U;
1106
+ }, B = (U) => {
1107
+ p.value = new co(U);
1108
+ };
1109
+ a("initialized", {
1110
+ scene: f,
1111
+ scenes: k.value,
1112
+ sceneData: i.value,
1113
+ scenesByApartment: s.value,
1114
+ unitsSceneSort: b,
1115
+ initialize: B
1116
+ });
1117
+ });
1118
+ function g(c) {
1119
+ m.value = c;
1120
+ }
1121
+ function A(c) {
1122
+ _.value = c.hoverApartment, I.value = c.closeHandler, a("hoverOverUnit", c.hoverApartment);
1123
+ }
1124
+ function R(c) {
1125
+ _.value = null, I.value = c.closeHandler, a("hoverOutUnit", c.hoverApartment);
1126
+ }
1127
+ return (c, f) => {
1128
+ const b = T("v-progress-linear");
1129
+ return p.value ? (h(), F("div", mo, [
1130
+ o("div", po, [
1131
+ o("div", ho, [
1132
+ y(Xe, {
1133
+ desktop: n.value.isReady && c.interactiveDesktop,
1134
+ mobile: n.value.isReady && c.interactiveMobile
1135
+ }, {
1136
+ default: M(() => [
1137
+ y(yt, {
1138
+ "cdn-file-resolver": c.cdnFileResolver,
1139
+ "view-model": p.value,
1140
+ "cardinal-frames": k.value,
1141
+ build: c.build,
1142
+ onProgress: f[0] || (f[0] = (B) => n.value.progress = B),
1143
+ onLoaded: f[1] || (f[1] = (B) => n.value.isReady = !0),
1144
+ onError: f[2] || (f[2] = (B) => n.value.isError = !0)
1145
+ }, null, 8, ["cdn-file-resolver", "view-model", "cardinal-frames", "build"]),
1146
+ n.value.isReady ? (h(), F("div", fo, [
1147
+ (h(), N(mt(D.value), {
1148
+ "cdn-file-resolver": c.cdnFileResolver,
1149
+ "view-model": p.value,
1150
+ "selected-unit-id": c.selectedUnitId,
1151
+ "scene-data": i.value,
1152
+ "color-callback": c.colorCallback,
1153
+ "unit-callback": c.unitCallback,
1154
+ "can-go-to-unit-callback": c.canGoToUnitCallback,
1155
+ "draw-observer": c.drawObserver,
1156
+ onSelectUnit: f[3] || (f[3] = (B) => a("selectUnit", B)),
1157
+ onGoToUnit: f[4] || (f[4] = (B) => a("goToUnit", B)),
1158
+ onHoverOver: A,
1159
+ onHoverOut: R,
1160
+ onPos: g
1161
+ }, {
1162
+ default: M((B) => [
1163
+ ie(c.$slots, "default", pt(ht(B)), void 0, !0)
1164
+ ]),
1165
+ _: 3
1166
+ }, 40, ["cdn-file-resolver", "view-model", "selected-unit-id", "scene-data", "color-callback", "unit-callback", "can-go-to-unit-callback", "draw-observer"]))
1167
+ ])) : H("", !0)
1168
+ ]),
1169
+ _: 3
1170
+ }, 8, ["desktop", "mobile"]),
1171
+ _.value && c.showCards ? (h(), N(Ze, {
1172
+ key: 0,
1173
+ "is-hoverable": C.value,
1174
+ pos: m.value,
1175
+ onOutside: I.value
1176
+ }, {
1177
+ default: M(() => [
1178
+ ie(c.$slots, "default", {
1179
+ unit: _.value,
1180
+ canGoToUnit: c.canGoToUnitCallback(_.value),
1181
+ goToUnit: () => c.canGoToUnitCallback(_.value) && a("goToUnit", _.value),
1182
+ pos: m.value,
1183
+ isHoverable: C.value,
1184
+ close: I.value
1185
+ }, void 0, !0)
1186
+ ]),
1187
+ _: 3
1188
+ }, 8, ["is-hoverable", "pos", "onOutside"])) : H("", !0),
1189
+ n.value.isReady ? (h(), F("div", go, [
1190
+ y(bt, {
1191
+ "can-go-to-unit-callback": c.canGoToUnitCallback,
1192
+ "selected-unit": E.value,
1193
+ "prev-unit": c.prevUnit,
1194
+ "next-unit": c.nextUnit,
1195
+ "view-model": p.value,
1196
+ onGoToUnit: f[5] || (f[5] = (B) => a("goToUnit", B)),
1197
+ onPrevUnit: f[6] || (f[6] = (B) => a("navUnit", c.prevUnit)),
1198
+ onNextUnit: f[7] || (f[7] = (B) => a("navUnit", c.nextUnit))
1199
+ }, null, 8, ["can-go-to-unit-callback", "selected-unit", "prev-unit", "next-unit", "view-model"])
1200
+ ])) : n.value.isError ? H("", !0) : (h(), F("div", wo, [
1201
+ y(b, {
1202
+ indeterminate: !n.value.progress,
1203
+ value: n.value.progress
1204
+ }, null, 8, ["indeterminate", "value"])
1205
+ ]))
1206
+ ])
1207
+ ]),
1208
+ y(He, {
1209
+ ref_key: "hoverProbe",
1210
+ ref: L
1211
+ }, null, 512)
1212
+ ])) : H("", !0);
1213
+ };
1214
+ }
1215
+ }), yo = /* @__PURE__ */ te(bo, [["__scopeId", "data-v-52c91082"]]), _o = "data:image/png;base64,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", Ke = /* @__PURE__ */ Q({
1216
+ __name: "VNorthDirection",
1217
+ props: {
1218
+ longitude: {}
1219
+ },
1220
+ setup(u) {
1221
+ const t = u, e = V(() => ({
1222
+ transform: `rotate(${90 - (t.longitude || 0)}deg)`,
1223
+ transition: " transform 0.5s ease-in"
1224
+ }));
1225
+ return (l, a) => {
1226
+ const n = T("v-img");
1227
+ return h(), N(n, {
1228
+ src: oe(_o),
1229
+ style: re(e.value)
1230
+ }, null, 8, ["src", "style"]);
1231
+ };
1232
+ }
1233
+ }), Co = { class: "sunsim-bar-wrapper" }, Ao = { class: "sunsim-date d-flex align-center pl-5 pr-5" }, Lo = {
1234
+ key: 1,
1235
+ class: "text-center text-body-1"
1236
+ }, Io = { class: "sunsim-wrapper d-flex align-center px-3" }, Mo = { class: "sunsim-time-label text-body-1 font-weight-normal ml-2" }, So = /* @__PURE__ */ Q({
1237
+ __name: "VBuildingChooserSunSimControl",
1238
+ props: {
1239
+ modelValue: {},
1240
+ dateSelector: {},
1241
+ isLoading: { type: Boolean, default: !1 }
1242
+ },
1243
+ emits: ["update:modelValue"],
1244
+ setup(u, { emit: t }) {
1245
+ const e = u, l = t, a = r(e.modelValue), n = r(null);
1246
+ function s(v) {
1247
+ return v.toLocaleString("en-no", {
1248
+ month: "short",
1249
+ day: "numeric"
1250
+ });
1251
+ }
1252
+ const i = V(() => {
1253
+ const v = Math.floor(a.value / 2).toString().padStart(2, "0"), m = a.value % 2 === 0 ? "00" : "30";
1254
+ return `${v}:${m}`;
1255
+ }), k = V(() => e.dateSelector.dates.map(s)), p = V({
1256
+ get() {
1257
+ return s(e.dateSelector.selectedDate);
1258
+ },
1259
+ set(v) {
1260
+ e.dateSelector.selectIndex(k.value.indexOf(v));
1261
+ }
1262
+ });
1263
+ return Z(a, (v) => {
1264
+ l("update:modelValue", v);
1265
+ }), Z(n, (v) => {
1266
+ e.dateSelector.selectIndex(k.value.indexOf(v));
1267
+ }), Z(
1268
+ () => e.modelValue,
1269
+ (v) => {
1270
+ a.value = Math.floor(v);
1271
+ }
1272
+ ), qe(() => {
1273
+ n.value = s(e.dateSelector.selectedDate);
1274
+ }), (v, m) => {
1275
+ const I = T("v-icon"), _ = T("v-select"), L = T("v-progress-linear"), C = T("v-slider");
1276
+ return h(), F("div", Co, [
1277
+ o("div", Ao, [
1278
+ y(I, {
1279
+ color: "black",
1280
+ class: "mr-2",
1281
+ icon: "mdi-calendar-blank-outline"
1282
+ }),
1283
+ v.dateSelector.hasMultipleDates ? (h(), N(_, {
1284
+ key: 0,
1285
+ modelValue: n.value,
1286
+ "onUpdate:modelValue": m[0] || (m[0] = (E) => n.value = E),
1287
+ items: k.value,
1288
+ density: "compact",
1289
+ variant: "underlined",
1290
+ "hide-details": "",
1291
+ class: "day-selector"
1292
+ }, null, 8, ["modelValue", "items"])) : (h(), F("span", Lo, z(p.value), 1))
1293
+ ]),
1294
+ o("div", Io, [
1295
+ o("span", Mo, z(i.value), 1),
1296
+ y(I, {
1297
+ medium: "",
1298
+ class: "ml-2 mr-2 icon"
1299
+ }, {
1300
+ default: M(() => [
1301
+ se("mdi-white-balance-sunny")
1302
+ ]),
1303
+ _: 1
1304
+ }),
1305
+ v.isLoading ? (h(), N(L, {
1306
+ key: 0,
1307
+ indeterminate: "",
1308
+ rounded: "",
1309
+ height: "6",
1310
+ color: "grey lighten-1",
1311
+ class: "mr-2"
1312
+ })) : (h(), N(C, {
1313
+ key: 1,
1314
+ modelValue: a.value,
1315
+ "onUpdate:modelValue": m[1] || (m[1] = (E) => a.value = E),
1316
+ min: 0,
1317
+ max: 47,
1318
+ step: 1,
1319
+ "thumb-label": !1,
1320
+ "hide-details": !0,
1321
+ "thumb-color": "white",
1322
+ "thumb-size": "25",
1323
+ "track-size": "7",
1324
+ "track-fill-color": "transparent",
1325
+ class: "sunsim-slider mr-1"
1326
+ }, null, 8, ["modelValue"]))
1327
+ ])
1328
+ ]);
1329
+ };
1330
+ }
1331
+ }), it = /* @__PURE__ */ te(So, [["__scopeId", "data-v-0d8001a3"]]), Eo = { key: 0 }, Fo = ["src"], xo = /* @__PURE__ */ Q({
1332
+ __name: "VBuildingChooserSceneImageStack",
1333
+ props: {
1334
+ imageUrls: {},
1335
+ activeIndex: {}
1336
+ },
1337
+ emits: ["resize", "ready", "preloaded", "reset"],
1338
+ setup(u, { emit: t }) {
1339
+ const e = u, l = t, a = r("init"), n = r(new tt(0)), s = r();
1340
+ Z(
1341
+ () => e.imageUrls,
1342
+ (p) => {
1343
+ l("reset"), k(p);
1344
+ }
1345
+ ), ce(() => {
1346
+ k(e.imageUrls), new ResizeObserver((p) => {
1347
+ window.requestAnimationFrame(() => {
1348
+ const v = p[0].contentRect.width, m = p[0].contentRect.height;
1349
+ l("resize", { width: v, height: m });
1350
+ });
1351
+ }).observe(s.value);
1352
+ });
1353
+ function i() {
1354
+ a.value = "preloaded", l("preloaded");
1355
+ }
1356
+ function k(p) {
1357
+ a.value = "init", s.value.src = p[0], n.value = new tt(p.length).onLoadFinished(
1358
+ () => {
1359
+ a.value = "loaded", l("ready");
1360
+ }
1361
+ );
1362
+ }
1363
+ return (p, v) => (h(), F("div", null, [
1364
+ o("img", {
1365
+ ref_key: "baseImage",
1366
+ ref: s,
1367
+ class: "image-instance zero",
1368
+ style: { opacity: 1, borderRadius: 50 },
1369
+ onLoad: i
1370
+ }, null, 544),
1371
+ a.value === "preloaded" || a.value === "loaded" ? de((h(), F("div", Eo, [
1372
+ (h(!0), F(Ce, null, _e(p.imageUrls, (m, I) => (h(), F("img", {
1373
+ key: I,
1374
+ class: ye({ "image-instance": !0, active: I === p.activeIndex }),
1375
+ src: m,
1376
+ onLoad: v[0] || (v[0] = (_) => n.value.partLoaded())
1377
+ }, null, 42, Fo))), 128)),
1378
+ se(" Here ")
1379
+ ], 512)), [
1380
+ [me, a.value === "loaded"]
1381
+ ]) : H("", !0)
1382
+ ]));
1383
+ }
1384
+ }), st = /* @__PURE__ */ te(xo, [["__scopeId", "data-v-1dc6128e"]]), Bo = "buildingChooser.json", Vo = 180;
1385
+ class Ct {
1386
+ constructor(t) {
1387
+ J(this, "_cdnFileResolver");
1388
+ J(this, "_resourceLoader");
1389
+ this._cdnFileResolver = t, this._resourceLoader = new $e();
1390
+ }
1391
+ constructFileUrl(t) {
1392
+ return this._cdnFileResolver ? this._cdnFileResolver(`/${t}`) : null;
1393
+ }
1394
+ loadConfigFile() {
1395
+ const t = this.constructFileUrl(Bo);
1396
+ return t ? this._resourceLoader.loadJson(t) : null;
1397
+ }
1398
+ loadBuildingMapImage(t) {
1399
+ const e = this.constructFileUrl(t.lookupFilename);
1400
+ return e ? this._resourceLoader.loadImage(e) : null;
1401
+ }
1402
+ getViewLongitude(t) {
1403
+ return t.cameraRotation && t.cameraRotation.y + 270;
1404
+ }
1405
+ getBuildingData(t) {
1406
+ const e = t ? t.buildings : [], l = e.map((n) => n.id), a = e.map((n) => ({
1407
+ id: n.id,
1408
+ url: this.constructFileUrl(n.overlayFilename)
1409
+ }));
1410
+ return { buildingIds: l, buildingOverlays: a };
1411
+ }
1412
+ getBackgroundImageData(t) {
1413
+ return "days" in t ? this.processMultipleDays(t.days) : [this.processTimeSamples(
1414
+ Vo,
1415
+ t.timeSamples
1416
+ )];
1417
+ }
1418
+ processMultipleDays(t) {
1419
+ return t.map(
1420
+ (e) => this.processTimeSamples(e.dayOfYear, e.timeSamples)
1421
+ );
1422
+ }
1423
+ processTimeSamples(t, e) {
1424
+ return {
1425
+ urls: e.map(
1426
+ (a) => this.constructFileUrl(a.filename)
1427
+ ),
1428
+ referenceDate: this.makeReferenceDate(t)
1429
+ };
1430
+ }
1431
+ makeReferenceDate(t) {
1432
+ const e = /* @__PURE__ */ new Date(0);
1433
+ return e.setUTCDate(t), e;
1434
+ }
1435
+ async loadBuildingChooser() {
1436
+ try {
1437
+ const t = await this.loadConfigFile();
1438
+ if (t) {
1439
+ const e = await this.loadBuildingMapImage(t);
1440
+ if (e) {
1441
+ const l = this.getViewLongitude(t), { buildingIds: a, buildingOverlays: n } = this.getBuildingData(t), s = this.getBackgroundImageData(t);
1442
+ return {
1443
+ mapImage: e,
1444
+ viewLongitude: l,
1445
+ buildingIds: a,
1446
+ buildingOverlays: n,
1447
+ backgrounds: s
1448
+ };
1449
+ }
1450
+ }
1451
+ return null;
1452
+ } catch {
1453
+ return null;
1454
+ }
1455
+ }
1456
+ }
1457
+ class Re {
1458
+ constructor(t) {
1459
+ J(this, "_buildingIds");
1460
+ this._buildingIds = t;
1461
+ }
1462
+ static empty() {
1463
+ return new Re([]);
1464
+ }
1465
+ getBuildingId(t, e, l) {
1466
+ const a = this._getBuildingIndex(t, e, l);
1467
+ if (a !== void 0)
1468
+ return this._buildingIds[a];
1469
+ }
1470
+ _getBuildingIndex(t, e, l) {
1471
+ const [a, n, s, i] = t.getPixel(e, l);
1472
+ if (i === 255 && a === n && n === s)
1473
+ return a;
1474
+ }
1475
+ }
1476
+ class Te {
1477
+ constructor(t) {
1478
+ J(this, "_mapImage");
1479
+ J(this, "_context");
1480
+ this._mapImage = t, this._context = null;
1481
+ }
1482
+ static empty() {
1483
+ return new Te(null);
1484
+ }
1485
+ update(t) {
1486
+ this._mapImage && (this._context = t.getContext("2d", { willReadFrequently: !0 }), this._context.drawImage(this._mapImage, 0, 0, t.width, t.height));
1487
+ }
1488
+ getPixel(t, e) {
1489
+ try {
1490
+ return this._context ? this._context.getImageData(t, e, 1, 1).data : [0, 0, 0, 0];
1491
+ } catch {
1492
+ return [0, 0, 0, 0];
1493
+ }
1494
+ }
1495
+ }
1496
+ const Uo = /* @__PURE__ */ new Date(0);
1497
+ class Je {
1498
+ constructor(t) {
1499
+ J(this, "_imagesByDay");
1500
+ J(this, "_state");
1501
+ this._imagesByDay = t, this._state = { selectedIndex: 0 };
1502
+ }
1503
+ static empty() {
1504
+ return new Je([{ referenceDate: Uo, urls: [] }]);
1505
+ }
1506
+ selectIndex(t) {
1507
+ t < this._imagesByDay.length && (this._state.selectedIndex = t);
1508
+ }
1509
+ get dates() {
1510
+ return this._imagesByDay.map((t) => t.referenceDate);
1511
+ }
1512
+ get hasMultipleDates() {
1513
+ return this._imagesByDay.length > 1;
1514
+ }
1515
+ get selectedIndex() {
1516
+ return this._state.selectedIndex;
1517
+ }
1518
+ get selectedDate() {
1519
+ return this._imagesByDay[this.selectedIndex].referenceDate;
1520
+ }
1521
+ get imageUrls() {
1522
+ return this._imagesByDay[this.selectedIndex].urls;
1523
+ }
1524
+ }
1525
+ const Do = {
1526
+ key: 0,
1527
+ style: { height: "50vh" },
1528
+ class: "d-flex justify-center align-center blue-grey lighten-5"
1529
+ }, Ro = { class: "image-instances" }, To = { key: 0 }, Oo = { class: "svg-container" }, $o = ["viewBox"], Ho = ["innerHTML", "data-building-id", "onMouseover", "onMouseout", "onMousemove", "onClick"], jo = ["innerHTML"], Po = /* @__PURE__ */ Q({
1530
+ __name: "VBuildingChooserSvg",
1531
+ props: {
1532
+ showCards: { type: Boolean, default: !0 },
1533
+ colorCallback: { type: Function, default: () => ({ r: 108, g: 0, b: 108, a: 144, s: 2 }) },
1534
+ buildingCallback: { type: Function, default: (u) => u },
1535
+ canGoToBuildingCallback: { type: Function, default: () => !0 },
1536
+ buildingChooserTimeOfDay: {},
1537
+ cdnFileResolver: {},
1538
+ i18n: {},
1539
+ interactiveDesktop: { type: Boolean, default: !0 },
1540
+ interactiveMobile: { type: Boolean, default: !0 },
1541
+ customOverlayContent: {}
1542
+ },
1543
+ emits: ["goToBuilding", "hoverOverBuilding", "hoverOutBuilding"],
1544
+ setup(u, { emit: t }) {
1545
+ const e = u, l = t;
1546
+ De(
1547
+ "i18n",
1548
+ e.i18n ? new Le(e.i18n.labels, e.i18n.language) : new Le()
1549
+ );
1550
+ const a = r({ preloaded: !1, ready: !1 }), n = r({ width: 0, height: 0 }), s = r({ x: 0, y: 0, width: 0, height: 0 }), i = r(), k = r(
1551
+ (/* @__PURE__ */ new Date()).getHours() * 2 + ((/* @__PURE__ */ new Date()).getMinutes() < 30 ? 0 : 1)
1552
+ ), p = r(!1), v = r(new $e()), m = r(), I = r("0 0 0 0"), _ = r({}), L = r(), C = r(Re.empty()), E = r(Te.empty()), D = r(), g = V(() => {
1553
+ var w;
1554
+ return (w = D.value) == null ? void 0 : w.isHoverEnabled;
1555
+ }), A = V(() => f(i.value));
1556
+ Z(i, (w, x) => {
1557
+ w ? l("hoverOverBuilding", f(w)) : l("hoverOutBuilding", f(x));
1558
+ }), qe(() => {
1559
+ if (e.buildingChooserTimeOfDay) {
1560
+ const [w, x, W] = /^(\d\d):(\d\d)$/.exec(
1561
+ e.buildingChooserTimeOfDay
1562
+ ), S = parseInt(W);
1563
+ k.value = parseInt(x) * 2 + (S < 15 ? 0 : S > 45 ? 2 : 1);
1564
+ }
1565
+ }), ce(async () => {
1566
+ const x = await new Ct(
1567
+ e.cdnFileResolver
1568
+ ).loadBuildingChooser();
1569
+ if (x) {
1570
+ E.value = new Te(x.mapImage), C.value = new Re(x.buildingIds), _.value = new Je(x.backgrounds), L.value = {
1571
+ buildingOverlays: x.buildingOverlays,
1572
+ sceneLongitude: x.viewLongitude
1573
+ };
1574
+ const W = [];
1575
+ for (let { id: S, url: Y } of x.buildingOverlays)
1576
+ v.value.loadJson(Y.replace(".png", ".svg")).then((X) => {
1577
+ const ne = new DOMParser().parseFromString(X, "image/svg+xml").getElementsByTagName("svg")[0];
1578
+ I.value = ne.getAttribute("viewBox"), W.push({
1579
+ id: S,
1580
+ svg: ne.innerHTML
1581
+ });
1582
+ });
1583
+ m.value = W;
1584
+ } else
1585
+ p.value = !0;
1586
+ });
1587
+ function R({ width: w, height: x }) {
1588
+ n.value.width = w, n.value.height = x;
1589
+ }
1590
+ function c() {
1591
+ a.value = { preloaded: !1, ready: !1 };
1592
+ }
1593
+ function f(w) {
1594
+ return e.buildingCallback ? e.buildingCallback(w) : w;
1595
+ }
1596
+ function b(w) {
1597
+ const x = f(w), W = e.colorCallback(
1598
+ x,
1599
+ w === i.value ? "hover" : "idle"
1600
+ ), S = [];
1601
+ return w === i.value ? S.push("hover") : S.push("idle"), W && e.canGoToBuildingCallback(x) ? S.push("clickable") : S.push("restricted"), S.join(" ");
1602
+ }
1603
+ function B(w) {
1604
+ const x = f(w), W = e.colorCallback(
1605
+ x,
1606
+ w === i.value ? "hover" : "idle"
1607
+ );
1608
+ if (W) {
1609
+ const { r: S, g: Y, b: X, a: K, s: ne } = W;
1610
+ return {
1611
+ strokeWidth: ne !== void 0 ? ne : 2,
1612
+ stroke: `rgb(${S}, ${Y}, ${X})`,
1613
+ strokeOpacity: 1,
1614
+ fill: `rgb(${S}, ${Y}, ${X})`,
1615
+ fillOpacity: K / 255,
1616
+ cursor: `${e.canGoToBuildingCallback(x) ? "cursor" : "default"} !important`
1617
+ };
1618
+ } else
1619
+ return {
1620
+ strokeWidth: 0,
1621
+ stroke: "white",
1622
+ strokeOpacity: 0,
1623
+ fill: "white",
1624
+ fillOpacity: 0,
1625
+ cursor: "default !important"
1626
+ };
1627
+ }
1628
+ function U(w, x) {
1629
+ g.value && (s.value = {
1630
+ x: w.layerX,
1631
+ y: w.layerY,
1632
+ width: n.value.width,
1633
+ height: n.value.height
1634
+ }, i.value = x, l("hoverOverBuilding", f(x)));
1635
+ }
1636
+ function $(w, x) {
1637
+ g.value && (s.value = {
1638
+ x: w.layerX,
1639
+ y: w.layerY,
1640
+ width: n.value.width,
1641
+ height: n.value.height
1642
+ }, i.value = void 0, l("hoverOutBuilding", f(x)));
1643
+ }
1644
+ function q(w, x) {
1645
+ g.value && (s.value = {
1646
+ x: w.layerX,
1647
+ y: w.layerY,
1648
+ width: n.value.width,
1649
+ height: n.value.height
1650
+ });
1651
+ }
1652
+ function ee(w) {
1653
+ i.value = w, g.value && A.value && e.canGoToBuildingCallback(A.value) && l("goToBuilding", A.value);
1654
+ }
1655
+ return (w, x) => {
1656
+ const W = T("v-icon");
1657
+ return p.value ? (h(), F("div", Do, [
1658
+ y(W, { "x-large": "" }, {
1659
+ default: M(() => [
1660
+ se("mdi-alert-circle-outline")
1661
+ ]),
1662
+ _: 1
1663
+ })
1664
+ ])) : L.value ? (h(), F("div", {
1665
+ key: 1,
1666
+ style: re(`height: ${n.value.height}px; position: relative`),
1667
+ class: "image-container"
1668
+ }, [
1669
+ y(Xe, {
1670
+ desktop: w.interactiveDesktop,
1671
+ mobile: w.interactiveMobile
1672
+ }, {
1673
+ default: M(() => [
1674
+ o("div", Ro, [
1675
+ y(st, {
1676
+ "image-urls": _.value.imageUrls,
1677
+ "active-index": k.value,
1678
+ onResize: R,
1679
+ onPreloaded: x[0] || (x[0] = (S) => a.value.preloaded = !0),
1680
+ onReady: x[1] || (x[1] = (S) => a.value.ready = !0),
1681
+ onReset: c
1682
+ }, null, 8, ["image-urls", "active-index"]),
1683
+ m.value ? de((h(), F("div", To, [
1684
+ o("div", Oo, [
1685
+ (h(), F("svg", { viewBox: I.value }, [
1686
+ (h(!0), F(Ce, null, _e(m.value, ({ id: S, svg: Y }, X) => (h(), F("g", {
1687
+ key: X,
1688
+ innerHTML: Y,
1689
+ "data-building-id": S,
1690
+ class: ye(b(S)),
1691
+ style: re(B(S)),
1692
+ onMouseover: (K) => U(K, S),
1693
+ onMouseout: (K) => $(K, S),
1694
+ onMousemove: (K) => q(K),
1695
+ onClick: (K) => ee(S)
1696
+ }, null, 46, Ho))), 128))
1697
+ ], 8, $o))
1698
+ ])
1699
+ ], 512)), [
1700
+ [me, a.value.preloaded]
1701
+ ]) : H("", !0),
1702
+ de(o("div", {
1703
+ class: "custom-overlay-layer",
1704
+ innerHTML: w.customOverlayContent
1705
+ }, null, 8, jo), [
1706
+ [me, a.value.preloaded]
1707
+ ])
1708
+ ])
1709
+ ]),
1710
+ _: 1
1711
+ }, 8, ["desktop", "mobile"]),
1712
+ de(o("div", null, [
1713
+ L.value.sceneLongitude ? (h(), N(Ke, {
1714
+ key: 0,
1715
+ class: "north-indicator",
1716
+ longitude: L.value.sceneLongitude
1717
+ }, null, 8, ["longitude"])) : H("", !0),
1718
+ y(it, {
1719
+ modelValue: k.value,
1720
+ "onUpdate:modelValue": x[2] || (x[2] = (S) => k.value = S),
1721
+ "date-selector": _.value,
1722
+ "is-loading": !a.value.ready
1723
+ }, null, 8, ["modelValue", "date-selector", "is-loading"])
1724
+ ], 512), [
1725
+ [me, a.value.preloaded]
1726
+ ]),
1727
+ w.showCards && A.value ? (h(), N(Ze, {
1728
+ key: 0,
1729
+ "is-hoverable": g.value,
1730
+ pos: s.value,
1731
+ onOutside: x[3] || (x[3] = () => i.value = void 0)
1732
+ }, {
1733
+ default: M(() => [
1734
+ ie(w.$slots, "default", {
1735
+ building: A.value,
1736
+ canGoToBuilding: w.canGoToBuildingCallback(A.value),
1737
+ goToBuilding: () => w.canGoToBuildingCallback(A.value) && l("goToBuilding", A.value),
1738
+ pos: s.value,
1739
+ isHoverable: g.value,
1740
+ close: () => i.value = void 0
1741
+ }, void 0, !0)
1742
+ ]),
1743
+ _: 3
1744
+ }, 8, ["is-hoverable", "pos"])) : H("", !0),
1745
+ y(He, {
1746
+ ref_key: "hoverProbe",
1747
+ ref: D
1748
+ }, null, 512)
1749
+ ], 4)) : H("", !0);
1750
+ };
1751
+ }
1752
+ }), At = /* @__PURE__ */ te(Po, [["__scopeId", "data-v-6103fad2"]]), No = /* @__PURE__ */ Q({
1753
+ __name: "VBuildingChooserRasterOverlay",
1754
+ props: {
1755
+ imageUrl: {},
1756
+ dimensions: {},
1757
+ color: { default: () => ({ r: 108, g: 0, b: 108, a: 144, s: 2 }) }
1758
+ },
1759
+ setup(u) {
1760
+ const t = u, e = r(!1), l = r(void 0), a = r(new $e()), n = r(void 0), s = r(void 0), i = r([]), k = r();
1761
+ Z(
1762
+ () => t.color,
1763
+ (I, _) => {
1764
+ (I.r !== _.r || I.g !== _.g || I.b !== _.b || I.a !== _.a) && v();
1765
+ }
1766
+ ), ce(async () => {
1767
+ l.value = await a.value.loadImage(t.imageUrl), p();
1768
+ });
1769
+ function p() {
1770
+ if (!l.value || !k.value)
1771
+ return;
1772
+ const { width: I, height: _ } = t.dimensions;
1773
+ if (!(I === 0 || _ === 0)) {
1774
+ n.value = k.value.getContext("2d", {
1775
+ willReadFrequently: !0
1776
+ }), n.value.drawImage(l.value, 0, 0, I, _), s.value = n.value.getImageData(0, 0, I, _);
1777
+ for (let L = 3; L < s.value.data.length; L += 4)
1778
+ s.value.data[L] !== 0 && i.value.push(L);
1779
+ v(), e.value = !0;
1780
+ }
1781
+ }
1782
+ function v() {
1783
+ n.value && s.value && (m(), n.value.putImageData(s.value, 0, 0));
1784
+ }
1785
+ function m() {
1786
+ if (t.color)
1787
+ for (let I = 0; I < i.value.length; I++)
1788
+ s.value.data[i.value[I] - 3] = t.color.r, s.value.data[i.value[I] - 2] = t.color.g, s.value.data[i.value[I] - 1] = t.color.b, s.value.data[i.value[I]] = t.color.a;
1789
+ }
1790
+ return (I, _) => (h(), F("canvas", be({
1791
+ ref_key: "canvas",
1792
+ ref: k,
1793
+ class: "overlay"
1794
+ }, I.dimensions), null, 16));
1795
+ }
1796
+ }), Lt = /* @__PURE__ */ te(No, [["__scopeId", "data-v-b6fc0f96"]]), Yo = {
1797
+ key: 0,
1798
+ style: { height: "50vh" },
1799
+ class: "d-flex justify-center align-center blue-grey lighten-5"
1800
+ }, Wo = { class: "image-instances" }, Go = ["innerHTML"], Qo = /* @__PURE__ */ Q({
1801
+ __name: "VBuildingChooserRaster",
1802
+ props: {
1803
+ showCards: { type: Boolean, default: !0 },
1804
+ colorCallback: { type: Function, default: () => ({ r: 108, g: 0, b: 108, a: 144, s: 2 }) },
1805
+ buildingCallback: { type: Function, default: (u) => u },
1806
+ canGoToBuildingCallback: { type: Function, default: () => !0 },
1807
+ buildingChooserTimeOfDay: {},
1808
+ cdnFileResolver: {},
1809
+ i18n: {},
1810
+ interactiveDesktop: { type: Boolean, default: !0 },
1811
+ interactiveMobile: { type: Boolean, default: !0 },
1812
+ customOverlayContent: {}
1813
+ },
1814
+ emits: ["goToBuilding", "hoverOverBuilding", "hoverOutBuilding"],
1815
+ setup(u, { emit: t }) {
1816
+ const e = u, l = t;
1817
+ De(
1818
+ "i18n",
1819
+ e.i18n ? new Le(e.i18n.labels, e.i18n.language) : new Le()
1820
+ );
1821
+ const a = r({}), n = r({ preloaded: !1, ready: !1 }), s = r({ width: 0, height: 0 }), i = r({ x: 0, y: 0, width: 0, height: 0 }), k = r(void 0), p = r(Re.empty()), v = r(Te.empty()), m = r(void 0), I = r(
1822
+ (/* @__PURE__ */ new Date()).getHours() * 2 + ((/* @__PURE__ */ new Date()).getMinutes() < 30 ? 0 : 1)
1823
+ ), _ = r((w, x) => ({ x: w, y: x })), L = r(!1), C = r(), E = r(), D = r(), g = V(() => {
1824
+ var w;
1825
+ return (w = C.value) == null ? void 0 : w.isHoverEnabled;
1826
+ }), A = V(
1827
+ () => f(m.value)
1828
+ );
1829
+ qe(() => {
1830
+ if (e.buildingChooserTimeOfDay) {
1831
+ const [w, x, W] = /^(\d\d):(\d\d)$/.exec(
1832
+ e.buildingChooserTimeOfDay
1833
+ ), S = parseInt(W);
1834
+ I.value = parseInt(x) * 2 + (S < 15 ? 0 : S > 45 ? 2 : 1);
1835
+ }
1836
+ }), Z(m, (w, x) => {
1837
+ w ? l("hoverOverBuilding", f(w)) : l("hoverOutBuilding", f(x));
1838
+ }), ce(async () => {
1839
+ const x = await new Ct(
1840
+ e.cdnFileResolver
1841
+ ).loadBuildingChooser();
1842
+ x ? (v.value = new Te(x.mapImage), p.value = new Re(x.buildingIds), a.value = new Je(x.backgrounds), k.value = {
1843
+ buildingOverlays: x.buildingOverlays,
1844
+ sceneLongitude: x.viewLongitude
1845
+ }, B()) : L.value = !0;
1846
+ });
1847
+ function R({ width: w, height: x }) {
1848
+ s.value.width = w, s.value.height = x, Tt(B);
1849
+ }
1850
+ function c() {
1851
+ n.value = { preloaded: !1, ready: !1 };
1852
+ }
1853
+ function f(w) {
1854
+ return e.buildingCallback ? e.buildingCallback(w) : w;
1855
+ }
1856
+ function b(w) {
1857
+ const { x, y: W } = _.value(w.layerX, w.layerY);
1858
+ return p.value.getBuildingId(v.value, x, W);
1859
+ }
1860
+ function B() {
1861
+ if (E.value && (v.value.update(E.value), D.value))
1862
+ for (const w of D.value)
1863
+ w.setupDraw();
1864
+ }
1865
+ function U(w) {
1866
+ g.value && (m.value = b(w), m.value !== void 0 && (i.value = {
1867
+ x: w.layerX,
1868
+ y: w.layerY,
1869
+ width: s.value.width,
1870
+ height: s.value.height
1871
+ }));
1872
+ }
1873
+ function $(w) {
1874
+ m.value = b(w), g.value && A.value && l("goToBuilding", A.value);
1875
+ }
1876
+ function q(w) {
1877
+ return e.colorCallback(
1878
+ f(w),
1879
+ w === m.value ? "hover" : "idle"
1880
+ );
1881
+ }
1882
+ function ee({ resolve: w }) {
1883
+ _.value = w;
1884
+ }
1885
+ return (w, x) => {
1886
+ const W = T("v-icon");
1887
+ return L.value ? (h(), F("div", Yo, [
1888
+ y(W, { "x-large": "" }, {
1889
+ default: M(() => [
1890
+ se("mdi-alert-circle-outline")
1891
+ ]),
1892
+ _: 1
1893
+ })
1894
+ ])) : k.value ? (h(), F("div", {
1895
+ key: 1,
1896
+ style: re(`cursor: ${m.value ? "pointer" : "auto"};height: ${s.value.height}px; position: relative`),
1897
+ class: "image-container"
1898
+ }, [
1899
+ y(Xe, {
1900
+ desktop: w.interactiveDesktop,
1901
+ mobile: w.interactiveMobile,
1902
+ onUpdate: ee
1903
+ }, {
1904
+ default: M(() => [
1905
+ o("div", Wo, [
1906
+ y(st, {
1907
+ "image-urls": a.value.imageUrls,
1908
+ "active-index": I.value,
1909
+ onResize: R,
1910
+ onPreloaded: x[0] || (x[0] = (S) => n.value.preloaded = !0),
1911
+ onReady: x[1] || (x[1] = (S) => n.value.ready = !0),
1912
+ onReset: c
1913
+ }, null, 8, ["image-urls", "active-index"]),
1914
+ de(o("div", null, [
1915
+ (h(!0), F(Ce, null, _e(k.value.buildingOverlays, (S) => (h(), N(Lt, {
1916
+ ref_for: !0,
1917
+ ref_key: "overlays",
1918
+ ref: D,
1919
+ key: S.id,
1920
+ "image-url": S.url,
1921
+ dimensions: s.value,
1922
+ color: q(S.id)
1923
+ }, null, 8, ["image-url", "dimensions", "color"]))), 128))
1924
+ ], 512), [
1925
+ [me, n.value.preloaded]
1926
+ ])
1927
+ ]),
1928
+ o("canvas", be(s.value, {
1929
+ ref_key: "canvas",
1930
+ ref: E,
1931
+ class: { hover: !!m.value },
1932
+ onClick: $,
1933
+ onMousemove: U
1934
+ }), null, 16),
1935
+ de(o("div", {
1936
+ class: "custom-overlay-layer",
1937
+ innerHTML: w.customOverlayContent
1938
+ }, null, 8, Go), [
1939
+ [me, n.value.preloaded]
1940
+ ])
1941
+ ]),
1942
+ _: 1
1943
+ }, 8, ["desktop", "mobile"]),
1944
+ de(o("div", null, [
1945
+ k.value.sceneLongitude ? (h(), N(Ke, {
1946
+ key: 0,
1947
+ class: "north-indicator",
1948
+ longitude: k.value.sceneLongitude
1949
+ }, null, 8, ["longitude"])) : H("", !0),
1950
+ y(it, {
1951
+ modelValue: I.value,
1952
+ "onUpdate:modelValue": x[2] || (x[2] = (S) => I.value = S),
1953
+ "date-selector": a.value,
1954
+ "is-loading": !n.value.ready
1955
+ }, null, 8, ["modelValue", "date-selector", "is-loading"])
1956
+ ], 512), [
1957
+ [me, n.value.preloaded]
1958
+ ]),
1959
+ w.showCards && A.value ? (h(), N(Ze, {
1960
+ key: 0,
1961
+ "is-hoverable": g.value,
1962
+ pos: i.value,
1963
+ onOutside: x[3] || (x[3] = () => m.value = void 0)
1964
+ }, {
1965
+ default: M(() => [
1966
+ ie(w.$slots, "default", {
1967
+ building: A.value,
1968
+ canGoToBuilding: w.canGoToBuildingCallback(A.value),
1969
+ goToBuilding: () => w.canGoToBuildingCallback(A.value) && l("goToBuilding", A.value),
1970
+ pos: i.value,
1971
+ isHoverable: g.value,
1972
+ close: () => m.value = void 0
1973
+ }, void 0, !0)
1974
+ ]),
1975
+ _: 3
1976
+ }, 8, ["is-hoverable", "pos"])) : H("", !0),
1977
+ y(He, {
1978
+ ref_key: "hoverProbe",
1979
+ ref: C
1980
+ }, null, 512)
1981
+ ], 4)) : H("", !0);
1982
+ };
1983
+ }
1984
+ }), It = /* @__PURE__ */ te(Qo, [["__scopeId", "data-v-96bbdc16"]]), zo = /* @__PURE__ */ Q({
1985
+ __name: "VBuildingChooser",
1986
+ props: {
1987
+ showCards: { type: Boolean, default: !0 },
1988
+ colorCallback: { type: Function, default: () => ({ r: 108, g: 0, b: 108, a: 144, s: 2 }) },
1989
+ buildingCallback: { type: Function, default: (u) => u },
1990
+ cdnFileResolver: {},
1991
+ i18n: {},
1992
+ interactiveDesktop: { type: Boolean, default: !0 },
1993
+ interactiveMobile: { type: Boolean, default: !0 },
1994
+ useSvg: { type: Boolean, default: !1 },
1995
+ buildingChooserTimeOfDay: {},
1996
+ canGoToBuildingCallback: { type: Function, default: () => !0 },
1997
+ customOverlayContent: {}
1998
+ },
1999
+ emits: ["goToBuilding", "hoverOverBuilding", "hoverOutBuilding"],
2000
+ setup(u, { emit: t }) {
2001
+ const e = u, l = t, a = V(
2002
+ () => e.useSvg ? At : It
2003
+ );
2004
+ return (n, s) => (h(), N(mt(a.value), {
2005
+ "show-cards": n.showCards,
2006
+ "color-callback": n.colorCallback,
2007
+ "building-callback": n.buildingCallback,
2008
+ "cdn-file-resolver": n.cdnFileResolver,
2009
+ i18n: n.i18n,
2010
+ "interactive-desktop": n.interactiveDesktop,
2011
+ "interactive-mobile": n.interactiveMobile,
2012
+ "building-chooser-time-of-day": n.buildingChooserTimeOfDay,
2013
+ "can-go-to-building-callback": n.canGoToBuildingCallback,
2014
+ "custom-overlay-content": n.customOverlayContent,
2015
+ onGoToBuilding: s[0] || (s[0] = (i) => l("goToBuilding", i)),
2016
+ onHoverOverBuilding: s[1] || (s[1] = (i) => l("hoverOverBuilding", i)),
2017
+ onHoverOutBuilding: s[2] || (s[2] = (i) => l("hoverOutBuilding", i))
2018
+ }, Ot({ _: 2 }, [
2019
+ _e(Object.keys(n.$slots), (i) => ({
2020
+ name: i,
2021
+ fn: M((k) => [
2022
+ ie(n.$slots, i, pt(ht(k)))
2023
+ ])
2024
+ }))
2025
+ ]), 1064, ["show-cards", "color-callback", "building-callback", "cdn-file-resolver", "i18n", "interactive-desktop", "interactive-mobile", "building-chooser-time-of-day", "can-go-to-building-callback", "custom-overlay-content"]));
2026
+ }
2027
+ });
2028
+ var je = {};
2029
+ Object.defineProperty(je, "__esModule", {
2030
+ value: !0
2031
+ });
2032
+ var qo = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(u) {
2033
+ return typeof u;
2034
+ } : function(u) {
2035
+ return u && typeof Symbol == "function" && u.constructor === Symbol && u !== Symbol.prototype ? "symbol" : typeof u;
2036
+ }, Zo = typeof window < "u" && typeof window.document < "u", Xo = typeof process < "u" && process.versions != null && process.versions.node != null, Ko = (typeof self > "u" ? "undefined" : qo(self)) === "object" && self.constructor && self.constructor.name === "DedicatedWorkerGlobalScope", Jo = typeof window < "u" && window.name === "nodejs" || typeof navigator < "u" && (navigator.userAgent.includes("Node.js") || navigator.userAgent.includes("jsdom")), en = typeof Deno < "u" && typeof Deno.version < "u" && typeof Deno.version.deno < "u", tn = je.isBrowser = Zo;
2037
+ je.isWebWorker = Ko;
2038
+ je.isNode = Xo;
2039
+ je.isJsDom = Jo;
2040
+ je.isDeno = en;
2041
+ const on = { id: "player-wrapper" }, nn = { id: "player-sizer" }, an = {
2042
+ class: "player-control",
2043
+ id: "controls-top-left"
2044
+ }, ln = {
2045
+ class: "player-control",
2046
+ id: "controls-top-center"
2047
+ }, sn = {
2048
+ class: "player-control",
2049
+ id: "controls-top-right"
2050
+ }, rn = {
2051
+ class: "player-control",
2052
+ id: "controls-center-left"
2053
+ }, un = {
2054
+ class: "player-control",
2055
+ id: "controls-center-center"
2056
+ }, cn = {
2057
+ class: "player-control",
2058
+ id: "controls-center-right"
2059
+ }, dn = {
2060
+ class: "player-control",
2061
+ id: "controls-bottom-left"
2062
+ }, vn = {
2063
+ class: "player-control",
2064
+ id: "controls-bottom-center"
2065
+ }, mn = {
2066
+ class: "player-control",
2067
+ id: "controls-bottom-right"
2068
+ }, pn = { id: "main-canvas" }, hn = /* @__PURE__ */ Q({
2069
+ __name: "VPlayer",
2070
+ props: {
2071
+ fileLoader: {},
2072
+ rootUrl: {},
2073
+ currentCameraId: {},
2074
+ showStaticImage: { type: Boolean },
2075
+ isFullScreen: { type: Boolean },
2076
+ mouseSensitivity: { default: 1 },
2077
+ isInIframe: { type: Boolean, default: !1 }
2078
+ },
2079
+ emits: ["newCameraCallback", "newRotationCallback", "newFloorCallback", "newFovCallback", "playerApiCallback", "newSizeCallback"],
2080
+ setup(u, { emit: t }) {
2081
+ const e = jt.PlayerV2, l = u, a = t, n = r(void 0), s = r(void 0), i = r(0), k = r(0);
2082
+ Z(
2083
+ () => l.rootUrl,
2084
+ async (v) => {
2085
+ n.value && (await n.value.loadInterior(v, s.value, !1), p());
2086
+ }
2087
+ ), Z(
2088
+ () => l.fileLoader,
2089
+ async () => {
2090
+ n.value && (await n.value.loadInterior(l.rootUrl, void 0, !1), p());
2091
+ },
2092
+ { deep: !0 }
2093
+ ), Z(
2094
+ () => l.currentCameraId,
2095
+ (v) => {
2096
+ n.value && (s.value = v, n.value.goToCamera(v, !0));
2097
+ }
2098
+ ), Z(n, (v) => {
2099
+ a("playerApiCallback", v);
2100
+ const m = n.value.getCurrentCamera();
2101
+ m && (s.value = m.id);
2102
+ }), ce(async () => {
2103
+ window.addEventListener("resize", p), p();
2104
+ const _ = {
2105
+ initialized: () => {
2106
+ n.value = e.Main.getPlayerAPI();
2107
+ const C = n.value.getCurrentCamera();
2108
+ C && (s.value = C.id), a("newCameraCallback", s.value);
2109
+ },
2110
+ newCamera: (C) => {
2111
+ a("newCameraCallback", C.id), a("newFloorCallback", C.floorLevel), n.value && n.value.resetMarkerBehaviour(0), s.value = C.id;
2112
+ },
2113
+ newFOV: (C) => {
2114
+ a("newFovCallback", C), k.value = C;
2115
+ },
2116
+ newRotation: (C) => {
2117
+ const E = C + 0;
2118
+ a("newRotationCallback", E), i.value = E;
2119
+ }
2120
+ };
2121
+ if (!tn)
2122
+ return;
2123
+ const L = await new e.Main(
2124
+ l.rootUrl,
2125
+ "qpc",
2126
+ _,
2127
+ void 0,
2128
+ l.currentCameraId,
2129
+ l.fileLoader
2130
+ );
2131
+ L && (L.handleWindowResize(), window.addEventListener(
2132
+ "resize",
2133
+ L.handleWindowResize.bind(L)
2134
+ ), L.animate(), n.value = e.Main.getPlayerAPI(), n.value && n.value.setLookSensitivity(l.mouseSensitivity));
2135
+ }), Oe(() => {
2136
+ n.value && n.value.destroy();
2137
+ });
2138
+ function p() {
2139
+ let v = 1.7777777777777777, m = document.querySelector("#player-sizer");
2140
+ if (!m)
2141
+ return;
2142
+ let I = m.offsetWidth, _ = I * (1 / v);
2143
+ (window.innerWidth <= 600 || I <= 600) && (_ = window.innerHeight * 0.75, l.isInIframe && (_ = screen.height * 0.65), I = _ * (1 / v)), m.style.height = _ + "px", m.style.width = I + "px", a("newSizeCallback", I, _);
2144
+ }
2145
+ return (v, m) => (h(), F("div", on, [
2146
+ o("div", nn, [
2147
+ ie(v.$slots, "slideshow-image", {}, void 0, !0),
2148
+ o("div", an, [
2149
+ ie(v.$slots, "top-left", {}, void 0, !0)
2150
+ ]),
2151
+ o("div", ln, [
2152
+ ie(v.$slots, "top-center", {}, void 0, !0)
2153
+ ]),
2154
+ o("div", sn, [
2155
+ ie(v.$slots, "top-right", {}, void 0, !0)
2156
+ ]),
2157
+ o("div", rn, [
2158
+ ie(v.$slots, "center-left", {}, void 0, !0)
2159
+ ]),
2160
+ o("div", un, [
2161
+ ie(v.$slots, "center-center", {}, void 0, !0)
2162
+ ]),
2163
+ o("div", cn, [
2164
+ ie(v.$slots, "center-right", {}, void 0, !0)
2165
+ ]),
2166
+ o("div", dn, [
2167
+ ie(v.$slots, "bottom-left", {}, void 0, !0)
2168
+ ]),
2169
+ o("div", vn, [
2170
+ ie(v.$slots, "bottom-center", {}, void 0, !0)
2171
+ ]),
2172
+ o("div", mn, [
2173
+ ie(v.$slots, "bottom-right", {}, void 0, !0)
2174
+ ]),
2175
+ o("div", pn, [
2176
+ o("canvas", {
2177
+ id: "qpc",
2178
+ style: re(v.showStaticImage ? "visibility:hidden" : "visibility:visible")
2179
+ }, null, 4)
2180
+ ])
2181
+ ])
2182
+ ]));
2183
+ }
2184
+ }), fn = /* @__PURE__ */ te(hn, [["__scopeId", "data-v-2374a426"]]), gn = { class: "waypoint-carousel" }, wn = 37, kn = 39, bn = /* @__PURE__ */ Q({
2185
+ __name: "VWaypointCarousel",
2186
+ props: {
2187
+ thumbnails: {},
2188
+ active: {}
2189
+ },
2190
+ emits: ["previous", "next", "goto"],
2191
+ setup(u, { emit: t }) {
2192
+ const e = u, l = t, a = r(0), n = V({
2193
+ get() {
2194
+ return e.active;
2195
+ },
2196
+ set(p) {
2197
+ a.value = p;
2198
+ }
2199
+ }), s = V(() => /Android|webOS|iPhone|iPad|BlackBerry|Windows Phone|Opera Mini|IEMobile|Mobile/i.test(
2200
+ window.navigator.userAgent
2201
+ ));
2202
+ ce(() => {
2203
+ window.addEventListener("keydown", i);
2204
+ }), Oe(() => {
2205
+ window.removeEventListener("keydown", i);
2206
+ });
2207
+ function i(p) {
2208
+ switch (p.keyCode) {
2209
+ case p.keyCode === wn:
2210
+ l("previous");
2211
+ break;
2212
+ case p.keyCode === kn:
2213
+ l("next");
2214
+ break;
2215
+ default:
2216
+ return;
2217
+ }
2218
+ }
2219
+ function k(p, v) {
2220
+ v(), l("goto", p);
2221
+ }
2222
+ return (p, v) => {
2223
+ const m = T("v-icon"), I = T("v-btn"), _ = T("v-hover"), L = T("v-img"), C = T("v-card"), E = T("v-slide-group-item"), D = T("v-slide-group");
2224
+ return h(), F("div", gn, [
2225
+ y(D, {
2226
+ modelValue: n.value,
2227
+ "onUpdate:modelValue": v[2] || (v[2] = (g) => n.value = g),
2228
+ "active-class": "active-apt",
2229
+ "selected-class": "active-apt",
2230
+ "show-arrows": "",
2231
+ "center-active": "",
2232
+ mandatory: ""
2233
+ }, {
2234
+ prev: M(() => [
2235
+ y(_, null, {
2236
+ default: M(({ isHovering: g }) => [
2237
+ y(I, {
2238
+ elevation: "0",
2239
+ class: ye(["carousel-button", { mobile: s.value }]),
2240
+ onClick: v[0] || (v[0] = (A) => l("previous"))
2241
+ }, {
2242
+ default: M(() => [
2243
+ y(m, {
2244
+ color: g ? "#999" : "#d2d2d2",
2245
+ "x-large": ""
2246
+ }, {
2247
+ default: M(() => [
2248
+ se(" mdi-chevron-left ")
2249
+ ]),
2250
+ _: 2
2251
+ }, 1032, ["color"])
2252
+ ]),
2253
+ _: 2
2254
+ }, 1032, ["class"])
2255
+ ]),
2256
+ _: 1
2257
+ })
2258
+ ]),
2259
+ next: M(() => [
2260
+ y(_, null, {
2261
+ default: M(({ isHovering: g }) => [
2262
+ y(I, {
2263
+ elevation: "0",
2264
+ class: ye(["carousel-button", { mobile: s.value }]),
2265
+ onClick: v[1] || (v[1] = (A) => l("next"))
2266
+ }, {
2267
+ default: M(() => [
2268
+ y(m, {
2269
+ color: g ? "#999" : "#d2d2d2",
2270
+ "x-large": ""
2271
+ }, {
2272
+ default: M(() => [
2273
+ se(" mdi-chevron-right ")
2274
+ ]),
2275
+ _: 2
2276
+ }, 1032, ["color"])
2277
+ ]),
2278
+ _: 2
2279
+ }, 1032, ["class"])
2280
+ ]),
2281
+ _: 1
2282
+ })
2283
+ ]),
2284
+ default: M(() => [
2285
+ (h(!0), F(Ce, null, _e(p.thumbnails, (g) => (h(), N(E, {
2286
+ key: g.id
2287
+ }, {
2288
+ default: M(({ toggle: A, selectedClass: R }) => [
2289
+ y(C, {
2290
+ class: ye(["ma-2", R]),
2291
+ align: "center",
2292
+ justify: "center",
2293
+ height: s.value ? 50 : 100,
2294
+ width: s.value ? 80 : 160,
2295
+ elevation: "0",
2296
+ style: { overflow: "hidden" },
2297
+ onClick: (c) => k(g.id, A)
2298
+ }, {
2299
+ default: M(() => [
2300
+ y(L, {
2301
+ "max-height": "100",
2302
+ "max-width": "160",
2303
+ src: g.thumbnailUrl
2304
+ }, null, 8, ["src"])
2305
+ ]),
2306
+ _: 2
2307
+ }, 1032, ["class", "height", "width", "onClick"])
2308
+ ]),
2309
+ _: 2
2310
+ }, 1024))), 128))
2311
+ ]),
2312
+ _: 1
2313
+ }, 8, ["modelValue"])
2314
+ ]);
2315
+ };
2316
+ }
2317
+ }), dt = /* @__PURE__ */ te(bn, [["__scopeId", "data-v-f8f5088a"]]), yn = {
2318
+ style: { width: "24px", height: "24px" },
2319
+ viewBox: "0 0 18 16",
2320
+ xmlns: "http://www.w3.org/2000/svg"
2321
+ }, _n = ["stroke"], Cn = ["stroke"], An = { class: "floor-level-label" }, Ln = /* @__PURE__ */ Q({
2322
+ __name: "VFloorLevel",
2323
+ props: {
2324
+ level: { default: 0 },
2325
+ floorLevels: { default: () => [] }
2326
+ },
2327
+ emits: ["level"],
2328
+ setup(u, { emit: t }) {
2329
+ const e = u, l = t, a = pe("i18n"), n = V(() => {
2330
+ const v = e.floorLevels;
2331
+ return v.sort(), v;
2332
+ }), s = V(() => n.value.indexOf(e.level) + 1 <= n.value.length / 2 ? "Lower" : "Upper"), i = V(() => s.value === "Lower"), k = V(() => s.value === "Upper");
2333
+ function p() {
2334
+ const v = e.level + 1;
2335
+ v >= n.value.length ? l("level", n.value[0]) : l("level", n.value[v]);
2336
+ }
2337
+ return (v, m) => {
2338
+ const I = T("v-btn"), _ = T("v-tooltip");
2339
+ return h(), N(_, {
2340
+ right: "",
2341
+ attach: ""
2342
+ }, {
2343
+ activator: M(({ props: L }) => [
2344
+ y(I, be({
2345
+ style: { cursor: "pointer" },
2346
+ density: "comfortable",
2347
+ elevation: "1",
2348
+ icon: ""
2349
+ }, L, { onClick: p }), {
2350
+ default: M(() => [
2351
+ (h(), F("svg", yn, [
2352
+ o("path", {
2353
+ d: "M8.98034 10.3472L1.54055 5.8855L8.98034 1.42384L16.4201 5.8855L8.98034 10.3472Z",
2354
+ fill: "white",
2355
+ stroke: k.value ? "black" : "#999999",
2356
+ "stroke-width": "1.5",
2357
+ "stroke-linejoin": "round"
2358
+ }, null, 8, _n),
2359
+ o("path", {
2360
+ d: "M8.98034 14.7993L1.54055 10.3376L8.98034 5.87599L16.4201 10.3376L8.98034 14.7993Z",
2361
+ fill: "white",
2362
+ stroke: i.value ? "black" : "#999999",
2363
+ "stroke-width": "1.5",
2364
+ "stroke-linejoin": "round"
2365
+ }, null, 8, Cn)
2366
+ ]))
2367
+ ]),
2368
+ _: 2
2369
+ }, 1040)
2370
+ ]),
2371
+ default: M(() => [
2372
+ o("span", An, z(oe(a).getLabel(s.value)) + " " + z(oe(a).getLabel("floor")), 1)
2373
+ ]),
2374
+ _: 1
2375
+ });
2376
+ };
2377
+ }
2378
+ }), In = /* @__PURE__ */ te(Ln, [["__scopeId", "data-v-82187b23"]]), Mn = {
2379
+ id: "share-btns-wrapper",
2380
+ class: "text-center"
2381
+ }, Sn = /* @__PURE__ */ Q({
2382
+ __name: "VSocialShare",
2383
+ setup(u) {
2384
+ const t = pe("i18n"), e = r(!1), l = r(location.href);
2385
+ function a() {
2386
+ return window.open(
2387
+ "https://www.facebook.com/sharer/sharer.php?u=" + encodeURIComponent(location.href),
2388
+ "facebook-share-dialog",
2389
+ "width=626,height=436"
2390
+ ), !1;
2391
+ }
2392
+ function n() {
2393
+ return window.open(
2394
+ "https://twitter.com/intent/tweet?text=" + encodeURIComponent(location.href),
2395
+ "twitter-share-dialog",
2396
+ "width=626,height=436"
2397
+ ), !1;
2398
+ }
2399
+ function s() {
2400
+ return window.open(
2401
+ "https://www.linkedin.com/sharing/share-offsite/?url=" + encodeURIComponent(location.href),
2402
+ "linkedin-share-dialog",
2403
+ "width=626,height=736"
2404
+ ), !1;
2405
+ }
2406
+ function i() {
2407
+ navigator.clipboard.writeText(location.href);
2408
+ }
2409
+ return (k, p) => {
2410
+ const v = T("v-btn"), m = T("v-tooltip"), I = T("v-toolbar-title"), _ = T("v-spacer"), L = T("v-toolbar"), C = T("v-card-text"), E = T("v-card"), D = T("v-dialog");
2411
+ return h(), F("div", null, [
2412
+ y(m, {
2413
+ elevation: "2",
2414
+ top: "",
2415
+ attach: ""
2416
+ }, {
2417
+ activator: M(({ props: g }) => [
2418
+ y(v, be({
2419
+ density: "comfortable",
2420
+ elevation: "1",
2421
+ icon: "mdi-share-variant",
2422
+ onClick: p[0] || (p[0] = (A) => e.value = !e.value)
2423
+ }, g), null, 16)
2424
+ ]),
2425
+ default: M(() => [
2426
+ o("span", null, z(oe(t).getLabel("share")), 1)
2427
+ ]),
2428
+ _: 1
2429
+ }),
2430
+ y(D, {
2431
+ id: "share-box",
2432
+ width: "400",
2433
+ modelValue: e.value,
2434
+ "onUpdate:modelValue": p[2] || (p[2] = (g) => e.value = g)
2435
+ }, {
2436
+ default: M(() => [
2437
+ y(E, null, {
2438
+ default: M(() => [
2439
+ y(L, { elevation: "0" }, {
2440
+ default: M(() => [
2441
+ y(v, {
2442
+ size: "x-small",
2443
+ icon: "mdi-close",
2444
+ onClick: p[1] || (p[1] = (g) => e.value = !1)
2445
+ }),
2446
+ y(I, null, {
2447
+ default: M(() => [
2448
+ se(z(oe(t).getLabel("share")), 1)
2449
+ ]),
2450
+ _: 1
2451
+ }),
2452
+ y(_)
2453
+ ]),
2454
+ _: 1
2455
+ }),
2456
+ y(C, { class: "mt-5" }, {
2457
+ default: M(() => [
2458
+ o("p", Mn, [
2459
+ y(m, { location: "top" }, {
2460
+ activator: M(({ props: g }) => [
2461
+ y(v, be({
2462
+ depressed: "",
2463
+ fab: "",
2464
+ light: "",
2465
+ icon: "mdi-facebook"
2466
+ }, g, { onClick: a }), null, 16)
2467
+ ]),
2468
+ default: M(() => [
2469
+ o("span", null, z(oe(t).getLabel("share-to-facebook")), 1)
2470
+ ]),
2471
+ _: 1
2472
+ }),
2473
+ y(m, { location: "top" }, {
2474
+ activator: M(({ props: g }) => [
2475
+ y(v, be({
2476
+ depressed: "",
2477
+ fab: "",
2478
+ light: "",
2479
+ icon: "mdi-linkedin"
2480
+ }, g, { onClick: s }), null, 16)
2481
+ ]),
2482
+ default: M(() => [
2483
+ o("span", null, z(oe(t).getLabel("share-to-linkedin")), 1)
2484
+ ]),
2485
+ _: 1
2486
+ }),
2487
+ y(m, { location: "top" }, {
2488
+ activator: M(({ props: g }) => [
2489
+ y(v, be({
2490
+ depressed: "",
2491
+ fab: "",
2492
+ light: "",
2493
+ icon: "mdi-twitter"
2494
+ }, g, { onClick: n }), null, 16)
2495
+ ]),
2496
+ default: M(() => [
2497
+ o("span", null, z(oe(t).getLabel("share-to-twitter")), 1)
2498
+ ]),
2499
+ _: 1
2500
+ }),
2501
+ y(m, { location: "top" }, {
2502
+ activator: M(({ props: g }) => [
2503
+ y(v, be({
2504
+ depressed: "",
2505
+ fab: "",
2506
+ light: "",
2507
+ icon: "mdi-email",
2508
+ link: "",
2509
+ href: `mailto:?body=${l.value}`
2510
+ }, g), null, 16, ["href"])
2511
+ ]),
2512
+ default: M(() => [
2513
+ o("span", null, z(oe(t).getLabel("share-via-email")), 1)
2514
+ ]),
2515
+ _: 1
2516
+ }),
2517
+ y(m, { location: "top" }, {
2518
+ activator: M(({ props: g }) => [
2519
+ y(v, be({
2520
+ depressed: "",
2521
+ fab: "",
2522
+ light: "",
2523
+ icon: "mdi-content-copy",
2524
+ onClick: i
2525
+ }, g), null, 16)
2526
+ ]),
2527
+ default: M(() => [
2528
+ o("span", null, z(oe(t).getLabel("copy-link")), 1)
2529
+ ]),
2530
+ _: 1
2531
+ }),
2532
+ y(_)
2533
+ ])
2534
+ ]),
2535
+ _: 1
2536
+ })
2537
+ ]),
2538
+ _: 1
2539
+ })
2540
+ ]),
2541
+ _: 1
2542
+ }, 8, ["modelValue"])
2543
+ ]);
2544
+ };
2545
+ }
2546
+ }), En = /* @__PURE__ */ te(Sn, [["__scopeId", "data-v-66122fea"]]), Fn = /* @__PURE__ */ Q({
2547
+ __name: "VInteriorSelector",
2548
+ props: {
2549
+ availableArchetypes: {},
2550
+ selectedIndex: {}
2551
+ },
2552
+ emits: ["selectInterior"],
2553
+ setup(u, { emit: t }) {
2554
+ const e = t, l = pe("i18n"), a = pe("localMode"), n = pe("fileLoader");
2555
+ function s(i) {
2556
+ let k = i;
2557
+ return a && (k = `${n.getURL(i)}`), k;
2558
+ }
2559
+ return (i, k) => {
2560
+ const p = T("v-btn"), v = T("v-img"), m = T("v-list-item-title"), I = T("v-list-item"), _ = T("v-list"), L = T("v-menu");
2561
+ return h(), F("div", null, [
2562
+ y(L, {
2563
+ transition: "slide-x-reverse-transition",
2564
+ location: "top end",
2565
+ origin: "end bottom",
2566
+ elevation: "0"
2567
+ }, {
2568
+ activator: M(({ props: C }) => [
2569
+ y(p, be({
2570
+ "prepend-icon": "mdi-palette-outline",
2571
+ rounded: ""
2572
+ }, C), {
2573
+ default: M(() => [
2574
+ se(z(oe(l).getLabel("interior")), 1)
2575
+ ]),
2576
+ _: 2
2577
+ }, 1040)
2578
+ ]),
2579
+ default: M(() => [
2580
+ y(_, { class: "interior-selector-list" }, {
2581
+ default: M(() => [
2582
+ (h(!0), F(Ce, null, _e(i.availableArchetypes, (C, E) => (h(), N(I, {
2583
+ density: "compact",
2584
+ key: `at-menuitem-${E}`,
2585
+ onClick: (D) => e("selectInterior", C.archetypeID),
2586
+ active: E === i.selectedIndex,
2587
+ class: "interior-selector-list-item"
2588
+ }, {
2589
+ prepend: M(() => [
2590
+ y(v, {
2591
+ width: "100",
2592
+ "max-width": "100",
2593
+ height: "66",
2594
+ src: s(C.url)
2595
+ }, null, 8, ["src"])
2596
+ ]),
2597
+ default: M(() => [
2598
+ y(m, { class: "text-caption py-2 px-4" }, {
2599
+ default: M(() => [
2600
+ se(z(oe(l).get(C.title)), 1)
2601
+ ]),
2602
+ _: 2
2603
+ }, 1024)
2604
+ ]),
2605
+ _: 2
2606
+ }, 1032, ["onClick", "active"]))), 128))
2607
+ ]),
2608
+ _: 1
2609
+ })
2610
+ ]),
2611
+ _: 1
2612
+ })
2613
+ ]);
2614
+ };
2615
+ }
2616
+ }), xn = /* @__PURE__ */ te(Fn, [["__scopeId", "data-v-cc96ef5c"]]), Bn = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGwAAABsCAYAAACPZlfNAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAxQSURBVHgB7Z1JbBTHGsc/x5Z58B6EJzZBWDogYUAowSg3kDKOxDVOjiiH55hTTvAOmFPkiXIyHALikAsQc4g4Yl9BigcJbhF2hMQmAcMiEKsdYUFwIJP6d1dNatrdPbV09/TM9E+qTHs8xNP972+p6qqviHKaig5qYiqVisNeRHuftaUhH51h7XfWyjju6OiYoialKQRjwkCIHax9zFqBHztkB0Qr89cLeGVCzlDGyaxgTKQCeeJ8yl/ToESegONMvBJlkEwJxkXqZ22Awt1bWpTJE/BYM7vQ2IG7Y20/axOV7DLJ2v8oAzTMwipeXDrA2n5qvDWpUmbtNGujzOrK1A5UPIsqsjZdiYHXY2OVZx995LbZkZF5v58ZHKz+/g/22Zi4U/HOIfUb7T1KEXaCsKg7rA1TAlb1x88/05+//kop4JB3Dqm7ylQEYye1g7UJdvgDJez+Zr/9liovX1JKOKyNcotzKAUSFwyug71MUkqp+V8PH9KrH3+klHFYu8PPNVESEwx3HLeqYUoZuMa5iQlqAMNJW1sigrEv/AWlaFWCrp4e6li82D1O2TXKOKxN8GsQO7ELxt3CWWpAqg6xFn3zjfc9mFgQrUE4rJ1NwkXGKhj7gkepAS5Q5l9ffUVdn3ziHsMtvrtxgxoIXOQPFCOxCFbx+lYIGvspBl4y63j37h2Zsvj776uu0cQtvnnzhp49e0YxcYBdm7Nx9dmsBeNfBGIVyIK3b9/SQ5bhTU1N0c2bN+nx48dkyntr1tC/h4bIFNwwd+/epStXrsQlHOLZRByiWQkmibWDLMBFuXbtGj169KhqWS9evCAbFnz+OXX39ZEJ4m/Pzc3FKRyukbVothb2E1mI9erVK7rBYgwuCi4OWMxc2aZNm2j79u1ky3+Ya+xk1qbL5s2byXEcWrBggfuzEO7q1auuu7QA1+osWWA8+MsTDOOYBZf34MGD6s+4OGvXrqWlS/VuwLdM8LlffnGPOz/4wLWssN93f/aZm/rr8Pz5c9fyZaFWr15NawxuBImjbPD4/2SAkWA8XTXKBnHi5XKZZmdn3Z+7urpo5cqVbuvs7KSsAtEQYwWLFi2ijRs3Vq3QgO+YaEXSRFsw3iE0MmsE81u3blXjFNwfXE93dzc1A3CNSIiEteF7w31DPEO+ZKKN6fwDLcH4kAuSDIc08bvAVatWuS6wGfFbG84D52MA5pD06jxb0xUMj0Yc0gQnh5MEcIEbNmzQjlVZY2ZmxnXtwltYxLUSE0w5nVXOEnncckgTWSz4+61btza9WADnsG3btmoM81udBgV2bZXzASUL467wDmniFwvpcrPEK1X8cc3C0npVJvuoWpj2swrErFYXC+CccG6ypRmO0iiNOdYVjFnXAGm6QnSIRYLRymIJ/KLh3F/qj2EW+BSKSCJdIh9GwXMthxSBa4CLgKtAgoGY1cpiyeCcMRqCRAR9Spy7Zj8NWeOHUTOQ61kYFHdIA/SzxDATssF2EQvgXNGvBBANw1mawEAiR49CBeOJhtaMICQZr1+/do8ReFshG9QF54xRGwC3aBDPDkQNEEdZ2ABpukI5yUC21K6sW7fOHcUBiGeI6RpEWlmUYFrWBVcoQABud+AaxdioPMKjSKiVBQqmmxniWZHsCtspboWBayC7Rs3naRAr0GDCLEzrsUnuCoPB+KLcP9Oc9hA462qeYJilSxoPJXHniKwwF6sWuEQxwI1rpJmAoF9W8L8ZZGHG1rVs2TLKqQVZo0hAnjx5Qpr0+98IEqxAiuTWpYaIZXCJmiMgA/43agTjJuiQIkuWLHGzIdxBuXWFAyuDB0JCpvmwc6nfLXb5PtBPGiATglC5WPWxmFSENd4l8YPfJVpNV8tJhIL8Q3Xwl3fUpikni/xXDAjLFpZbV3apaiML9inlZJWPxUFuYc1BQRzIWaIT9unr16+7M2B7enpo+fLllJM6VWPqCnrTDzrIp06dco/x6GDLli3U29vrvuakgiMOXMH4+KES9+/fd9v58+fdTiCsbufOnbn1JQzTaAPLFO928B8KFDEzChY2OTnpukasNgl7IJdbX6IUmGAXhGAD5C0dUuLevXtug3givvk5cuRIW4+A4LroAO9Ux0MNMMFOixj2Pmmwfv16t+3evdu1vkuXLrkuUvNReMuCa3L48GGtf7Nv3756grlPoLvkH1SAKJcvX3bjGF791oW4hpi2cOFCyomVGsEiwR0DC4KZQyg/sDY5+cj5h71791ZH6M+cOePe8P39/VVrGhsbCwwpYSgJBqEgmIxILiBSPlofjnx9IA4Ew7UTN/bFixe1BDNe4wyrQ+Lx9OlTykkPJQvDHTE4OOim9hAJdwQEEwlH3h9LDyXBIAAyQjQgp/SiXwYx0QD6Y4cOHbJZSpoTghBsRucfibR+z549rliIb+Pj49XfIzHBPMVcsFpwzVasWGF6XVyNtDvOEEhYVljWCNq94ywSiXrXANcTNze6QXWErOk4l6M+iVgFCwob1QCi/4UYhuyx3a1L9WbFdVK8VmX8R0kwCIXkwo9IT+U0NScxsBWJJxjKDjC3WPdf5FbUOMT6Z3kSTmhJB7hE8QAzpyFgX5heHMhpPRR0gj6tMJKckyxlcSCPdJQoJ6tUy0HIgv1GOVmlJA7yiaTNwfyJpPyNEuVkjZJcBsI/Wl+inKxRU87IL9gF0kAUVkZN3JxoMJSH7pFBCdqaeoo1gvFtBJUHgjEGhhWYWNSHcnQ5wUAoVGBFoRVRiVWRMmZKyW8EPcAcJUWwkE+UNjBYDto2WCwrLvnfCBJsnDSQSxvkVjYfy2XFx/xvzBOMu8USKSKXNsCjFpsdHVoRC+uaCqqfGDanQ7lwMFyiuHMMShu0NEjILKzraNCbYYJhY05l/4Y7Ry5tYFmMvyWQa2/hqYamdSHZOB30i0DBeEctUOEwRAERw7JzLQdqRgpQKl2T0bBfRE1zQ8BTtjLcRZh8A5CAhE0daAdkV2hQe6tMnocLJFQwEytDxii7xnbMGqenp2tcoUHsitwjut5EUi0rA3LZOdR1b6d4hnMV4QBZoYErLFNAKi8TKRi3su9IA7G9BUA8k0uEtzKi1rHo1uAaGJQhLEbV+wWqdeu1N3SDSxRxzF91utWQC1MDxHIxoKABMsMP631IdW699tZJ+MKi4L6/GH8r4RcL52wgFlDazkNJMN7jLpIm8i4JrShakFiGVe2Kqhvm6G6WY7TXpbwvCRISJCbNXnEb2SASDBGzLMRScoUCk+2osOJB+2rLMQ3EsMtdw8B5yE8nDGMWKLPWl9h2VMBmwzfMI799+3bNhmnNlIwE7S6IXfpE39OAZDd8E/Dtk4pkAPw9SqbLC9izbm14sg6LQotxd0HELa0uE7DZtBS78RwgQ/z7beHEIZzphFXcAOfOnXPXqImbQaxr27VrF5mCWIW68yKxABYuUJDupqUC0yREEGRtJsLhIeHIyEjoyhr8v4rFotZaAAyr4VGR/EgfVgWxLCskjDGxviRDbAWLZePtoK13cXFUd5g4efJkdXUNrElU4ZFX3WDxIVb0q4BJRbJFiXr8Max3Q/eor95oRhRKS2bDwB9moqHDZyWaqBssC6dzcUTVGQiFAiUCiAfrw4wluEpVwfC38T1i3rLYWixgJRiQRMMKzi/IAlk4k8wLa68hkOxOIZLYZkQVTHvA37fI/vyUyMsIrR9fWLlEP7aJiClYHSqvsRb1QxBvsK64weBxydcUE7EKBmxSfhtQZcZf/AXA2oaGhhq1XMoodY8idsEA71zD2hxKkbAygcgOIVqK1gbX97Vup1iFRAQDNruqx4XsKnWyREtK5IlVpgQwLl1UD3xhPqhZpIQ5ceIEHTx4kI4fP17zPmKZQDfxMAQusC8psUBiggm4D4dwZUoIFCtBZgl3iD4ZXCJKA+JYkPD67BJ5G2fHGq+CSMwlBsELuCApcShGEKuGh4dDRzrQH5P7ZzGCWAWrOkYpkapggI+OYI+yAYpROIiGUQ00JB9INJAZQiybscQQxIyyY3H0rXRIXTCBtO3wADUwMdGkYUJlCrhK1iYr2WWCtf2ViP2V06JhFhZExaufD3dZoMZbHSxolLzRda2VqUmSKcFkmHjYvAcdcIhYoHQoiZYlkWQyK5gMd0XY4adAnoAO2W/uUyZvBL3EX39rhrjUFIKFwV0oau475E0MCosxM7yVyZullC+vyUmHvwGblCVYM8UGOgAAAABJRU5ErkJggg==", Vn = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGwAAABsCAYAAACPZlfNAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMdSURBVHgB7dxBTttQEMbxsU32idouujM7FhjlBqQnaG5AbkBvUPUEpTegN8gR6AlAgQU70lWlQkUUscR+fVZrRKlL7CTQN6P/T0IJwYkUDfNhvzdEBAAAAAAAAAAAAAAAAAAAAAD+i+t+v3+5vT0Qg2IxqHBuP47jXTHIZMHEuYETeScGmSvYZb9fFiv1d7sWY9FcwWLn9u7ux/FbMcZeJPo4vLsrMhJjTBXsXhxWzMWiqYLdj8NKlCR7YoipgjnnhjUPDv11WVeMMFOwqywb+Zu6wnQlz81ck5kp2GNnhLmha7JIDCgjLy+K60cOmSVxvNk7OZmJciY6LM/z4YJDukVRmDj5sBGJcbywGLUnJAqpj0Qfh6mPw4smx/pY7GmPRfUd5uNw0PRYC7GoPxIbxGHFQiyqjsQ2cVjRHouqO8xHXOvVeP+cfVFMeySOpCV3bzVfI7WRuEwcVlxRvHl1dnYkCqntsFWiTfO8h+ZIXPqMT/PGpsqC1WxUtpVq3dhUWbC6jcrWr6F03kNnJK7hTE9rLKor2BrisKJy3kNdwdYRh3evpTAW9UXiGi98y1jUNu+hqmBXWTZcUxxWure3t31RRFXBoieIMG1jcGqWphrMbSxL1byHmg5rMLexrPIXQc3Jh5qCPekZnXMjUUJFJK6yMt+Ulo1NFR3WZm5jWVrmPXREYou5jWVpmfcIPhKfIw4rGmIx+A57jjisaIjF4AsWRVG7nWXnjhK/fJWUEefcuN1Tw4/FoCOxaRz6N3Hi22M8v7n5tDmd/hFp37a20qTTGcRR9F4aLGslSZL2jo+/SqA2JGALxthmviMO/RsY905Pv/zroNfn51N/c1h+XWfZbl7ug0VR2Um1i75Fno/8zQcJVNAd9mNn5+KvxV4feT4mx/P5/PPDbmrje5aN/N+DPV+8wYMfTV9OJpsSqGALVn78kI/D49/fzqKiOKiLvFWVkbnR6exHv7ouLR8LeQwu2IL57vroIy9NRA4ei7x1qiLTF2/6YjIJNhbxwEWamvkndgAAAAAAAAAAAAAAAAAAAAAAAAAAAABYxU+ILzGcMmFd0QAAAABJRU5ErkJggg==", Un = /* @__PURE__ */ Q({
2617
+ __name: "VCompass",
2618
+ props: {
2619
+ rotation: {}
2620
+ },
2621
+ setup(u) {
2622
+ const t = u, e = r(Vn), l = r({
2623
+ backgroundImage: `url(${Bn})`,
2624
+ backgroundSize: "contain"
2625
+ }), a = V(() => ({
2626
+ transform: `rotate(${-t.rotation + 180}deg)`
2627
+ }));
2628
+ return (n, s) => {
2629
+ const i = T("v-img");
2630
+ return h(), F("div", {
2631
+ style: re(l.value)
2632
+ }, [
2633
+ y(i, {
2634
+ class: "compass-needle",
2635
+ src: e.value,
2636
+ style: re(a.value)
2637
+ }, null, 8, ["src", "style"])
2638
+ ], 4);
2639
+ };
2640
+ }
2641
+ }), Dn = { class: "static-image-wrapper" }, Rn = /* @__PURE__ */ Q({
2642
+ __name: "VSingleImage",
2643
+ props: {
2644
+ image: {},
2645
+ aspectRatio: { default: "wide" }
2646
+ },
2647
+ setup(u) {
2648
+ const t = u, e = V(() => ({ "background-image": `url("${encodeURI(t.image)}")` }));
2649
+ return (l, a) => (h(), F("div", Dn, [
2650
+ o("div", {
2651
+ class: ye(["img-div", [l.aspectRatio]]),
2652
+ style: re(e.value)
2653
+ }, null, 6)
2654
+ ]));
2655
+ }
2656
+ }), Tn = /* @__PURE__ */ te(Rn, [["__scopeId", "data-v-3e99d275"]]), On = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAMAAADyHTlpAAAAllBMVEUAAAD/rwD/rwD/qgP/qwL/qAL/qwP/qwH/rAL/rAL/qwL/qQD/qwL/qwD/qQD/qwL/pQD/qgH/nwD/pwD/qQL/rAL/qwD/qwT/rAP/qwL/rAL/rAD/rAL/qgD/qwL/qQP/rAP/rAH/qgH/qwL/qwD/qgL/rwD/qgD/qwH/qgD/qgL/rAD/qgD/qgD/qwH/rAP/qgX/qwA+O5E+AAAAMnRSTlMAECBg/3C/v5Dff4+PT1/PMN8QII9vf0CfgO9vnzDvUF+vr3BA3zA/z2+fX59g71AwcDsf6p0AAAFGSURBVHicvdRtT8MgEABgaM9hu1aHXV/cpm6zWt829f//OYEK9qC3NDF6HxYCTw5GuWPsd8GjqTIGOJtIZwDi/ymnKPflOSTub6cAcwdnkHk5AQY2v3Dzl2phga1EFkl5hScLbZc+LbUs/FltK5OpLpsmrS0NpbLLSu3Er1dgIsn0cdabEdlHlICL5IZSRq5gELcn7DCnsfQL24AX5PeNfAlAHSEOaYrFXaNiqwa7kO7V9L1dt9u25kX58cBY7dbZYz/MKdr2o06nrZ6klNX4AYRdf8aHzkL6QtxAG9KculjhS0nJMO0rSVmF5ZyWnn2jFC+36vcgLTzq+3lPRx6XrjjTqQ7iqJxY6+KLydp0ZWhrVHWE0JoqHq1NSHBxF0h+1Mh6LUMM5LC/Kht8h+5nG9zeTtbt37Ti3XT6+d29pkTXTZVEfAEKARRF2iiwhQAAAB10RVh0U29mdHdhcmUAQGx1bmFwYWludC9wbmctY29kZWP1QxkeAAAAAElFTkSuQmCC", $n = { class: "d-flex flex-column align-center justify-center clock-face" }, Hn = { class: "clock-icon" }, jn = { class: "clock-value grey--text text--darken-3" }, Pn = /* @__PURE__ */ Q({
2657
+ __name: "VTimeOfDay",
2658
+ props: {
2659
+ hours: { default: 0 },
2660
+ minutes: { default: 0 }
2661
+ },
2662
+ setup(u) {
2663
+ const t = u, e = V(() => [l(t.hours), ":", l(t.minutes)].join(""));
2664
+ function l(a) {
2665
+ return ("0" + a).slice(-2);
2666
+ }
2667
+ return (a, n) => {
2668
+ const s = T("v-img");
2669
+ return h(), F("div", $n, [
2670
+ o("div", Hn, [
2671
+ y(s, {
2672
+ src: oe(On),
2673
+ "aspect-ratio": "1"
2674
+ }, null, 8, ["src"])
2675
+ ]),
2676
+ o("div", jn, z(e.value), 1)
2677
+ ]);
2678
+ };
2679
+ }
2680
+ }), Nn = /* @__PURE__ */ te(Pn, [["__scopeId", "data-v-9a5f102b"]]), Yn = {
2681
+ id: "btn-fullscreen",
2682
+ class: "btn-placeholder mr-2"
2683
+ }, Wn = /* @__PURE__ */ Q({
2684
+ __name: "VFullScreenButton",
2685
+ props: {
2686
+ isFullScreen: { type: Boolean }
2687
+ },
2688
+ emits: ["toggleFullscreen"],
2689
+ setup(u, { emit: t }) {
2690
+ const e = t;
2691
+ return (l, a) => {
2692
+ const n = T("v-btn");
2693
+ return h(), F("div", Yn, [
2694
+ y(n, {
2695
+ density: "comfortable",
2696
+ elevation: "3",
2697
+ icon: l.isFullScreen ? "mdi-fullscreen-exit" : "mdi-fullscreen",
2698
+ onClick: a[0] || (a[0] = (s) => e("toggleFullscreen"))
2699
+ }, null, 8, ["icon"])
2700
+ ]);
2701
+ };
2702
+ }
2703
+ }), Gn = /* @__PURE__ */ Q({
2704
+ __name: "VViewModeToggle",
2705
+ props: {
2706
+ showStaticImage: { type: Boolean }
2707
+ },
2708
+ emits: ["toggle"],
2709
+ setup(u, { emit: t }) {
2710
+ const e = u, l = t, a = pe("i18n"), n = V(() => {
2711
+ let s = "virtual-tour";
2712
+ return e.showStaticImage || (s = "slide-show"), s;
2713
+ });
2714
+ return (s, i) => {
2715
+ const k = T("v-btn");
2716
+ return h(), N(k, {
2717
+ color: "darken-2",
2718
+ elevation: "1",
2719
+ rounded: "",
2720
+ plain: "",
2721
+ onClick: i[0] || (i[0] = (p) => l("toggle"))
2722
+ }, {
2723
+ default: M(() => [
2724
+ se(z(oe(a).getLabel(n.value)), 1)
2725
+ ]),
2726
+ _: 1
2727
+ });
2728
+ };
2729
+ }
2730
+ }), Qn = {
2731
+ key: 0,
2732
+ class: "text-white disclaimer caption"
2733
+ }, zn = /* @__PURE__ */ Q({
2734
+ __name: "VDisclaimer",
2735
+ setup(u) {
2736
+ const t = pe("i18n"), e = r(!0);
2737
+ return (l, a) => (h(), N(ze, { name: "fade-transition" }, {
2738
+ default: M(() => [
2739
+ e.value ? (h(), F("div", Qn, [
2740
+ se(z(oe(t).getLabel("all-illustrations-are-indicative-deviations-may-occur")) + " ", 1),
2741
+ o("span", {
2742
+ onClick: a[0] || (a[0] = (n) => e.value = !1),
2743
+ class: "link-text text-decoration-underline"
2744
+ }, z(oe(t).getLabel("i-understand")), 1)
2745
+ ])) : H("", !0)
2746
+ ]),
2747
+ _: 1
2748
+ }));
2749
+ }
2750
+ }), qn = /* @__PURE__ */ te(zn, [["__scopeId", "data-v-28008b18"]]), Be = (u) => (ot("data-v-53c0bb27"), u = u(), nt(), u), Zn = {
2751
+ key: 0,
2752
+ class: "tutorial"
2753
+ }, Xn = {
2754
+ key: 0,
2755
+ class: "desktop-content"
2756
+ }, Kn = { class: "d-inline-flex" }, Jn = { class: "box col" }, ea = /* @__PURE__ */ Be(() => /* @__PURE__ */ o("div", { class: "tutorial-icon d-flex align-items-center justify-center" }, [
2757
+ /* @__PURE__ */ o("svg", {
2758
+ width: "100",
2759
+ height: "65",
2760
+ viewBox: "0 0 100 65",
2761
+ fill: "none",
2762
+ xmlns: "http://www.w3.org/2000/svg"
2763
+ }, [
2764
+ /* @__PURE__ */ o("path", {
2765
+ d: "M72 30H86.9736M86.9736 30L81 36M86.9736 30L81 24",
2766
+ stroke: "#FF3E3E",
2767
+ "stroke-width": "1.5",
2768
+ "stroke-linecap": "round",
2769
+ "stroke-linejoin": "round"
2770
+ }),
2771
+ /* @__PURE__ */ o("path", {
2772
+ d: "M27.9736 30H13M13 30L18.9736 36M13 30L18.9736 24",
2773
+ stroke: "#FF3E3E",
2774
+ "stroke-width": "1.5",
2775
+ "stroke-linecap": "round",
2776
+ "stroke-linejoin": "round"
2777
+ }),
2778
+ /* @__PURE__ */ o("path", {
2779
+ d: "M36 30H64V40C64 47.732 57.732 54 50 54V54C42.268 54 36 47.732 36 40V30Z",
2780
+ fill: "white",
2781
+ stroke: "black",
2782
+ "stroke-width": "1.5"
2783
+ }),
2784
+ /* @__PURE__ */ o("path", {
2785
+ d: "M36 25C36 17.268 42.268 11 50 11V11V30H36V25Z",
2786
+ fill: "#FF3E3E",
2787
+ stroke: "black",
2788
+ "stroke-width": "1.5"
2789
+ }),
2790
+ /* @__PURE__ */ o("path", {
2791
+ d: "M64 25C64 17.268 57.732 11 50 11V11V30H64V25Z",
2792
+ fill: "white",
2793
+ stroke: "black",
2794
+ "stroke-width": "1.5"
2795
+ }),
2796
+ /* @__PURE__ */ o("path", {
2797
+ d: "M53.25 23V30C53.25 31.7949 51.7949 33.25 50 33.25C48.2051 33.25 46.75 31.7949 46.75 30V23C46.75 21.2051 48.2051 19.75 50 19.75C51.7949 19.75 53.25 21.2051 53.25 23Z",
2798
+ fill: "white",
2799
+ stroke: "black",
2800
+ "stroke-width": "1.5"
2801
+ })
2802
+ ])
2803
+ ], -1)), ta = { class: "text mt-3" }, oa = { class: "box col" }, na = /* @__PURE__ */ Be(() => /* @__PURE__ */ o("div", { class: "tutorial-icon d-flex align-items-center justify-center" }, [
2804
+ /* @__PURE__ */ o("svg", {
2805
+ width: "100",
2806
+ height: "65",
2807
+ viewBox: "0 0 100 65",
2808
+ fill: "none",
2809
+ xmlns: "http://www.w3.org/2000/svg"
2810
+ }, [
2811
+ /* @__PURE__ */ o("path", {
2812
+ d: "M79.9936 27.0175C79.9881 19.276 66.3321 13.0323 49.492 13.0719C32.652 13.1116 19.0049 19.4194 19.0105 27.1609C19.016 34.9025 32.6721 41.1461 49.5121 41.1065C66.3521 41.0669 79.9992 34.759 79.9936 27.0175Z",
2813
+ fill: "white",
2814
+ stroke: "#B3B3B3",
2815
+ "stroke-width": "1.5"
2816
+ }),
2817
+ /* @__PURE__ */ o("path", {
2818
+ d: "M61.8032 45.179L56.543 50.3218V28.0361L72.543 43.4647H65.0909L67.9402 50.3218L64.6526 52.0361L61.8032 45.179Z",
2819
+ fill: "white",
2820
+ stroke: "black",
2821
+ "stroke-width": "1.5",
2822
+ "stroke-linejoin": "round"
2823
+ }),
2824
+ /* @__PURE__ */ o("path", {
2825
+ d: "M50.502 28.0361L46.502 28.0361",
2826
+ stroke: "#FF3E3E",
2827
+ "stroke-width": "1.5",
2828
+ "stroke-linecap": "round"
2829
+ }),
2830
+ /* @__PURE__ */ o("path", {
2831
+ d: "M50.502 28.0361L46.502 28.0361",
2832
+ stroke: "#FF3E3E",
2833
+ "stroke-width": "1.5",
2834
+ "stroke-linecap": "round"
2835
+ }),
2836
+ /* @__PURE__ */ o("path", {
2837
+ d: "M50.502 28.0361L46.502 28.0361",
2838
+ stroke: "#FF3E3E",
2839
+ "stroke-width": "1.5",
2840
+ "stroke-linecap": "round"
2841
+ }),
2842
+ /* @__PURE__ */ o("path", {
2843
+ d: "M66.502 28.0361L62.502 28.0361",
2844
+ stroke: "#FF3E3E",
2845
+ "stroke-width": "1.5",
2846
+ "stroke-linecap": "round"
2847
+ }),
2848
+ /* @__PURE__ */ o("path", {
2849
+ d: "M66.502 28.0361L62.502 28.0361",
2850
+ stroke: "#FF3E3E",
2851
+ "stroke-width": "1.5",
2852
+ "stroke-linecap": "round"
2853
+ }),
2854
+ /* @__PURE__ */ o("path", {
2855
+ d: "M66.502 28.0361L62.502 28.0361",
2856
+ stroke: "#FF3E3E",
2857
+ "stroke-width": "1.5",
2858
+ "stroke-linecap": "round"
2859
+ }),
2860
+ /* @__PURE__ */ o("path", {
2861
+ d: "M52.1582 24.0361L49.1582 21.0361",
2862
+ stroke: "#FF3E3E",
2863
+ "stroke-width": "1.5",
2864
+ "stroke-linecap": "round"
2865
+ }),
2866
+ /* @__PURE__ */ o("path", {
2867
+ d: "M52.1582 24.0361L49.1582 21.0361",
2868
+ stroke: "#FF3E3E",
2869
+ "stroke-width": "1.5",
2870
+ "stroke-linecap": "round"
2871
+ }),
2872
+ /* @__PURE__ */ o("path", {
2873
+ d: "M52.1582 24.0361L49.1582 21.0361",
2874
+ stroke: "#FF3E3E",
2875
+ "stroke-width": "1.5",
2876
+ "stroke-linecap": "round"
2877
+ }),
2878
+ /* @__PURE__ */ o("path", {
2879
+ d: "M60.502 24.0361L63.502 21.0361",
2880
+ stroke: "#FF3E3E",
2881
+ "stroke-width": "1.5",
2882
+ "stroke-linecap": "round"
2883
+ }),
2884
+ /* @__PURE__ */ o("path", {
2885
+ d: "M60.502 24.0361L63.502 21.0361",
2886
+ stroke: "#FF3E3E",
2887
+ "stroke-width": "1.5",
2888
+ "stroke-linecap": "round"
2889
+ }),
2890
+ /* @__PURE__ */ o("path", {
2891
+ d: "M60.502 24.0361L63.502 21.0361",
2892
+ stroke: "#FF3E3E",
2893
+ "stroke-width": "1.5",
2894
+ "stroke-linecap": "round"
2895
+ }),
2896
+ /* @__PURE__ */ o("path", {
2897
+ d: "M56.502 22.0361L56.502 18.0361",
2898
+ stroke: "#FF3E3E",
2899
+ "stroke-width": "1.5",
2900
+ "stroke-linecap": "round"
2901
+ }),
2902
+ /* @__PURE__ */ o("path", {
2903
+ d: "M56.502 22.0361L56.502 18.0361",
2904
+ stroke: "#FF3E3E",
2905
+ "stroke-width": "1.5",
2906
+ "stroke-linecap": "round"
2907
+ }),
2908
+ /* @__PURE__ */ o("path", {
2909
+ d: "M56.502 22.0361L56.502 18.0361",
2910
+ stroke: "#FF3E3E",
2911
+ "stroke-width": "1.5",
2912
+ "stroke-linecap": "round"
2913
+ }),
2914
+ /* @__PURE__ */ o("path", {
2915
+ d: "M52.1582 32.0361L49.1582 35.0361",
2916
+ stroke: "#FF3E3E",
2917
+ "stroke-width": "1.5",
2918
+ "stroke-linecap": "round"
2919
+ }),
2920
+ /* @__PURE__ */ o("path", {
2921
+ d: "M52.1582 32.0361L49.1582 35.0361",
2922
+ stroke: "#FF3E3E",
2923
+ "stroke-width": "1.5",
2924
+ "stroke-linecap": "round"
2925
+ }),
2926
+ /* @__PURE__ */ o("path", {
2927
+ d: "M52.1582 32.0361L49.1582 35.0361",
2928
+ stroke: "#FF3E3E",
2929
+ "stroke-width": "1.5",
2930
+ "stroke-linecap": "round"
2931
+ })
2932
+ ])
2933
+ ], -1)), aa = { class: "text mt-3" }, la = { class: "box col" }, ia = /* @__PURE__ */ Be(() => /* @__PURE__ */ o("div", { class: "tutorial-icon d-flex align-items-center justify-center" }, [
2934
+ /* @__PURE__ */ o("svg", {
2935
+ width: "100",
2936
+ height: "65",
2937
+ viewBox: "0 0 100 65",
2938
+ fill: "none",
2939
+ xmlns: "http://www.w3.org/2000/svg"
2940
+ }, [
2941
+ /* @__PURE__ */ o("path", {
2942
+ d: "M36 33H64V43C64 50.732 57.732 57 50 57V57C42.268 57 36 50.732 36 43V33Z",
2943
+ fill: "white",
2944
+ stroke: "black",
2945
+ "stroke-width": "1.5"
2946
+ }),
2947
+ /* @__PURE__ */ o("path", {
2948
+ d: "M36 28C36 20.268 42.268 14 50 14V14V33H36V28Z",
2949
+ fill: "white",
2950
+ stroke: "black",
2951
+ "stroke-width": "1.5"
2952
+ }),
2953
+ /* @__PURE__ */ o("path", {
2954
+ d: "M64 28C64 20.268 57.732 14 50 14V14V33H64V28Z",
2955
+ fill: "white",
2956
+ stroke: "black",
2957
+ "stroke-width": "1.5"
2958
+ }),
2959
+ /* @__PURE__ */ o("path", {
2960
+ d: "M53.25 26V33C53.25 34.7949 51.7949 36.25 50 36.25C48.2051 36.25 46.75 34.7949 46.75 33V26C46.75 24.2051 48.2051 22.75 50 22.75C51.7949 22.75 53.25 24.2051 53.25 26Z",
2961
+ fill: "#FF3E3E",
2962
+ stroke: "black",
2963
+ "stroke-width": "1.5"
2964
+ }),
2965
+ /* @__PURE__ */ o("path", {
2966
+ "fill-rule": "evenodd",
2967
+ "clip-rule": "evenodd",
2968
+ d: "M74.5352 20.7593L80.3458 26.5699C80.9316 27.1557 80.9316 28.1055 80.3458 28.6913C79.76 29.277 78.8103 29.277 78.2245 28.6913L72.4138 22.8806L74.5352 20.7593Z",
2969
+ fill: "black",
2970
+ stroke: "black",
2971
+ "stroke-width": "1.5",
2972
+ "stroke-linecap": "round"
2973
+ }),
2974
+ /* @__PURE__ */ o("circle", {
2975
+ cx: "66.5",
2976
+ cy: "15.5",
2977
+ r: "9.75",
2978
+ fill: "white",
2979
+ stroke: "black",
2980
+ "stroke-width": "1.5"
2981
+ }),
2982
+ /* @__PURE__ */ o("rect", {
2983
+ x: "66",
2984
+ y: "11",
2985
+ width: "1",
2986
+ height: "9",
2987
+ fill: "black",
2988
+ stroke: "black",
2989
+ "stroke-width": "0.75",
2990
+ "stroke-linejoin": "round"
2991
+ }),
2992
+ /* @__PURE__ */ o("rect", {
2993
+ x: "71",
2994
+ y: "15",
2995
+ width: "1",
2996
+ height: "9",
2997
+ transform: "rotate(90 71 15)",
2998
+ fill: "black",
2999
+ stroke: "black",
3000
+ "stroke-width": "0.75",
3001
+ "stroke-linejoin": "round"
3002
+ })
3003
+ ])
3004
+ ], -1)), sa = { class: "text mt-3" }, ra = { class: "d-inline-flex space-around" }, ua = { class: "box col" }, ca = /* @__PURE__ */ Be(() => /* @__PURE__ */ o("div", { class: "tutorial-icon d-flex align-items-center justify-center" }, [
3005
+ /* @__PURE__ */ o("svg", {
3006
+ width: "100",
3007
+ height: "65",
3008
+ viewBox: "0 0 100 65",
3009
+ fill: "none",
3010
+ xmlns: "http://www.w3.org/2000/svg"
3011
+ }, [
3012
+ /* @__PURE__ */ o("rect", {
3013
+ x: "65.0967",
3014
+ y: "34.3228",
3015
+ width: "20.9032",
3016
+ height: "20.9032",
3017
+ rx: "2",
3018
+ fill: "white",
3019
+ stroke: "black",
3020
+ "stroke-width": "1.5"
3021
+ }),
3022
+ /* @__PURE__ */ o("rect", {
3023
+ x: "39.5488",
3024
+ y: "29.6777",
3025
+ width: "20.9032",
3026
+ height: "20.9032",
3027
+ rx: "2",
3028
+ transform: "rotate(-90 39.5488 29.6777)",
3029
+ fill: "white",
3030
+ stroke: "black",
3031
+ "stroke-width": "1.5"
3032
+ }),
3033
+ /* @__PURE__ */ o("rect", {
3034
+ x: "60.4512",
3035
+ y: "34.3228",
3036
+ width: "20.9032",
3037
+ height: "20.9032",
3038
+ rx: "2",
3039
+ transform: "rotate(90 60.4512 34.3228)",
3040
+ fill: "white",
3041
+ stroke: "black",
3042
+ "stroke-width": "1.5"
3043
+ }),
3044
+ /* @__PURE__ */ o("rect", {
3045
+ x: "34.9033",
3046
+ y: "55.2261",
3047
+ width: "20.9032",
3048
+ height: "20.9032",
3049
+ rx: "2",
3050
+ transform: "rotate(-180 34.9033 55.2261)",
3051
+ fill: "white",
3052
+ stroke: "black",
3053
+ "stroke-width": "1.5"
3054
+ }),
3055
+ /* @__PURE__ */ o("path", {
3056
+ d: "M77.7025 44.3796C77.9599 44.5798 77.9599 44.9688 77.7025 45.169L74.6621 47.5338C74.3337 47.7892 73.8551 47.5552 73.8551 47.1391L73.8551 42.4095C73.8551 41.9935 74.3337 41.7594 74.6621 42.0149L77.7025 44.3796Z",
3057
+ fill: "#FF3E3E"
3058
+ }),
3059
+ /* @__PURE__ */ o("path", {
3060
+ d: "M49.6047 17.0724C49.8049 16.815 50.1939 16.815 50.3941 17.0724L52.7589 20.1128C53.0143 20.4412 52.7803 20.9198 52.3642 20.9198L47.6346 20.9198C47.2185 20.9198 46.9845 20.4412 47.2399 20.1128L49.6047 17.0724Z",
3061
+ fill: "#FF3E3E"
3062
+ }),
3063
+ /* @__PURE__ */ o("path", {
3064
+ d: "M50.3953 46.9281C50.1951 47.1855 49.8061 47.1855 49.6059 46.9281L47.2411 43.8877C46.9857 43.5592 47.2197 43.0807 47.6358 43.0807L52.3654 43.0807C52.7815 43.0807 53.0155 43.5592 52.7601 43.8877L50.3953 46.9281Z",
3065
+ fill: "#FF3E3E"
3066
+ }),
3067
+ /* @__PURE__ */ o("path", {
3068
+ d: "M22.2975 45.1692C22.0401 44.969 22.0401 44.58 22.2975 44.3798L25.3379 42.0151C25.6663 41.7596 26.1449 41.9937 26.1449 42.4097L26.1449 47.1393C26.1449 47.5554 25.6663 47.7894 25.3379 47.534L22.2975 45.1692Z",
3069
+ fill: "#FF3E3E"
3070
+ })
3071
+ ])
3072
+ ], -1)), da = { class: "text mt-3" }, va = {
3073
+ key: 1,
3074
+ class: "d-flex flex-column tablet-mobile-content"
3075
+ }, ma = { class: "box horizontal mt-3" }, pa = /* @__PURE__ */ Be(() => /* @__PURE__ */ o("div", { class: "tutorial-icon d-flex align-items-center justify-center" }, [
3076
+ /* @__PURE__ */ o("svg", {
3077
+ width: "101",
3078
+ height: "65",
3079
+ viewBox: "0 0 101 65",
3080
+ fill: "none",
3081
+ xmlns: "http://www.w3.org/2000/svg"
3082
+ }, [
3083
+ /* @__PURE__ */ o("path", {
3084
+ d: "M68 28H87.9736M87.9736 28L82 34M87.9736 28L82 22",
3085
+ stroke: "#FF3E3E",
3086
+ "stroke-width": "1.5",
3087
+ "stroke-linecap": "round",
3088
+ "stroke-linejoin": "round"
3089
+ }),
3090
+ /* @__PURE__ */ o("path", {
3091
+ d: "M33.9727 28H13.999M13.999 28L19.9727 34M13.999 28L19.9727 22",
3092
+ stroke: "#FF3E3E",
3093
+ "stroke-width": "1.5",
3094
+ "stroke-linecap": "round",
3095
+ "stroke-linejoin": "round"
3096
+ }),
3097
+ /* @__PURE__ */ o("path", {
3098
+ d: "M57.3126 51.1276L62.5533 49.7234C65.3195 48.9822 67.2473 46.4813 67.2601 43.6176C67.2626 43.0532 67.1898 42.4909 67.0438 41.9457L64.9992 34.3153C64.7491 33.3818 63.7895 32.8278 62.8559 33.0779C61.9223 33.328 61.3683 34.2876 61.6185 35.2212L61.0361 33.0479C60.7502 31.9809 59.6536 31.3478 58.5866 31.6337C57.5197 31.9195 56.8865 33.0162 57.1724 34.0831L56.7195 32.3928C56.3979 31.1925 55.1641 30.4802 53.9638 30.8018C52.7635 31.1234 52.0512 32.3572 52.3728 33.5575L50.6258 27.0375C50.3399 25.9705 49.2432 25.3374 48.1763 25.6233C47.1094 25.9091 46.4762 27.0058 46.7621 28.0727L50.3855 41.5957C49.2796 40.7276 47.5926 39.524 46.3279 38.6369C45.3814 37.9729 44.0801 38.2068 43.4137 39.1516C42.8107 40.0066 42.9238 41.1741 43.6798 41.8975L51.8691 49.7332C53.3154 51.1171 55.3791 51.6457 57.3126 51.1276Z",
3099
+ fill: "white"
3100
+ }),
3101
+ /* @__PURE__ */ o("path", {
3102
+ d: "M53.7316 38.6286L52.6963 34.7649M52.6963 34.7649L50.6258 27.0375C50.3399 25.9705 49.2432 25.3374 48.1763 25.6233V25.6233C47.1094 25.9091 46.4762 27.0058 46.7621 28.0727L50.3855 41.5957C49.2796 40.7276 47.5926 39.524 46.3279 38.6369C45.3814 37.9729 44.0801 38.2068 43.4137 39.1516V39.1516C42.8107 40.0066 42.9238 41.1741 43.6798 41.8975L51.8691 49.7332C53.3154 51.1171 55.3791 51.6457 57.3126 51.1276L62.5533 49.7234C65.3195 48.9822 67.2473 46.4813 67.2601 43.6176V43.6176C67.2626 43.0532 67.1898 42.4909 67.0438 41.9457L64.9992 34.3153C64.7491 33.3818 63.7895 32.8278 62.8559 33.0779V33.0779V33.0779C61.9223 33.328 61.3683 34.2876 61.6185 35.2212L61.942 36.4286M52.6963 34.7649L52.3728 33.5575C52.0512 32.3572 52.7635 31.1234 53.9638 30.8018V30.8018C55.1641 30.4802 56.3979 31.1925 56.7195 32.3928L57.3018 34.5661M58.2077 37.9469L57.3018 34.5661M57.3018 34.5661L57.1724 34.0831C56.8865 33.0162 57.5197 31.9195 58.5866 31.6337V31.6337C59.6536 31.3478 60.7502 31.9809 61.0361 33.0479L61.942 36.4286M62.3302 37.8775L61.942 36.4286",
3103
+ stroke: "black",
3104
+ "stroke-width": "1.5",
3105
+ "stroke-linecap": "round",
3106
+ "stroke-linejoin": "round"
3107
+ })
3108
+ ])
3109
+ ], -1)), ha = { class: "text ml-2" }, fa = { class: "box horizontal mt-3" }, ga = /* @__PURE__ */ Be(() => /* @__PURE__ */ o("div", { class: "tutorial-icon d-flex align-items-center justify-center" }, [
3110
+ /* @__PURE__ */ o("svg", {
3111
+ width: "99",
3112
+ height: "65",
3113
+ viewBox: "0 0 99 65",
3114
+ fill: "none",
3115
+ xmlns: "http://www.w3.org/2000/svg"
3116
+ }, [
3117
+ /* @__PURE__ */ o("path", {
3118
+ d: "M79.9927 29.9814C79.9871 22.2398 66.3311 15.9962 49.491 16.0358C32.651 16.0754 19.0039 22.3833 19.0095 30.1248C19.015 37.8663 32.6711 44.11 49.5111 44.0704C66.3512 44.0308 79.9982 37.7229 79.9927 29.9814Z",
3119
+ fill: "white",
3120
+ stroke: "#B3B3B3",
3121
+ "stroke-width": "1.5"
3122
+ }),
3123
+ /* @__PURE__ */ o("path", {
3124
+ d: "M50.5 31L46.5 31",
3125
+ stroke: "#FF3E3E",
3126
+ "stroke-width": "1.5",
3127
+ "stroke-linecap": "round"
3128
+ }),
3129
+ /* @__PURE__ */ o("path", {
3130
+ d: "M50.5 31L46.5 31",
3131
+ stroke: "#FF3E3E",
3132
+ "stroke-width": "1.5",
3133
+ "stroke-linecap": "round"
3134
+ }),
3135
+ /* @__PURE__ */ o("path", {
3136
+ d: "M50.5 31L46.5 31",
3137
+ stroke: "#FF3E3E",
3138
+ "stroke-width": "1.5",
3139
+ "stroke-linecap": "round"
3140
+ }),
3141
+ /* @__PURE__ */ o("path", {
3142
+ d: "M66.5 31L62.5 31",
3143
+ stroke: "#FF3E3E",
3144
+ "stroke-width": "1.5",
3145
+ "stroke-linecap": "round"
3146
+ }),
3147
+ /* @__PURE__ */ o("path", {
3148
+ d: "M66.5 31L62.5 31",
3149
+ stroke: "#FF3E3E",
3150
+ "stroke-width": "1.5",
3151
+ "stroke-linecap": "round"
3152
+ }),
3153
+ /* @__PURE__ */ o("path", {
3154
+ d: "M66.5 31L62.5 31",
3155
+ stroke: "#FF3E3E",
3156
+ "stroke-width": "1.5",
3157
+ "stroke-linecap": "round"
3158
+ }),
3159
+ /* @__PURE__ */ o("path", {
3160
+ d: "M52.1562 27L49.1562 24",
3161
+ stroke: "#FF3E3E",
3162
+ "stroke-width": "1.5",
3163
+ "stroke-linecap": "round"
3164
+ }),
3165
+ /* @__PURE__ */ o("path", {
3166
+ d: "M52.1562 27L49.1562 24",
3167
+ stroke: "#FF3E3E",
3168
+ "stroke-width": "1.5",
3169
+ "stroke-linecap": "round"
3170
+ }),
3171
+ /* @__PURE__ */ o("path", {
3172
+ d: "M52.1562 27L49.1562 24",
3173
+ stroke: "#FF3E3E",
3174
+ "stroke-width": "1.5",
3175
+ "stroke-linecap": "round"
3176
+ }),
3177
+ /* @__PURE__ */ o("path", {
3178
+ d: "M60.5 27L63.5 24",
3179
+ stroke: "#FF3E3E",
3180
+ "stroke-width": "1.5",
3181
+ "stroke-linecap": "round"
3182
+ }),
3183
+ /* @__PURE__ */ o("path", {
3184
+ d: "M60.5 27L63.5 24",
3185
+ stroke: "#FF3E3E",
3186
+ "stroke-width": "1.5",
3187
+ "stroke-linecap": "round"
3188
+ }),
3189
+ /* @__PURE__ */ o("path", {
3190
+ d: "M60.5 27L63.5 24",
3191
+ stroke: "#FF3E3E",
3192
+ "stroke-width": "1.5",
3193
+ "stroke-linecap": "round"
3194
+ }),
3195
+ /* @__PURE__ */ o("path", {
3196
+ d: "M56.5 25L56.5 21",
3197
+ stroke: "#FF3E3E",
3198
+ "stroke-width": "1.5",
3199
+ "stroke-linecap": "round"
3200
+ }),
3201
+ /* @__PURE__ */ o("path", {
3202
+ d: "M56.5 25L56.5 21",
3203
+ stroke: "#FF3E3E",
3204
+ "stroke-width": "1.5",
3205
+ "stroke-linecap": "round"
3206
+ }),
3207
+ /* @__PURE__ */ o("path", {
3208
+ d: "M56.5 25L56.5 21",
3209
+ stroke: "#FF3E3E",
3210
+ "stroke-width": "1.5",
3211
+ "stroke-linecap": "round"
3212
+ }),
3213
+ /* @__PURE__ */ o("path", {
3214
+ d: "M52.1562 35L49.1562 38",
3215
+ stroke: "#FF3E3E",
3216
+ "stroke-width": "1.5",
3217
+ "stroke-linecap": "round"
3218
+ }),
3219
+ /* @__PURE__ */ o("path", {
3220
+ d: "M52.1562 35L49.1562 38",
3221
+ stroke: "#FF3E3E",
3222
+ "stroke-width": "1.5",
3223
+ "stroke-linecap": "round"
3224
+ }),
3225
+ /* @__PURE__ */ o("path", {
3226
+ d: "M52.1562 35L49.1562 38",
3227
+ stroke: "#FF3E3E",
3228
+ "stroke-width": "1.5",
3229
+ "stroke-linecap": "round"
3230
+ }),
3231
+ /* @__PURE__ */ o("path", {
3232
+ d: "M64.8126 54.1276L70.0533 52.7234C72.8195 51.9822 74.7473 49.4813 74.7601 46.6176C74.7626 46.0532 74.6898 45.4909 74.5438 44.9457L72.4992 37.3153C72.2491 36.3818 71.2895 35.8278 70.3559 36.0779C69.4223 36.328 68.8683 37.2876 69.1185 38.2212L68.5361 36.0479C68.2502 34.9809 67.1536 34.3478 66.0866 34.6337C65.0197 34.9195 64.3865 36.0162 64.6724 37.0831L64.2195 35.3928C63.8979 34.1925 62.6641 33.4802 61.4638 33.8018C60.2635 34.1234 59.5512 35.3572 59.8728 36.5575L58.1258 30.0375C57.8399 28.9705 56.7432 28.3374 55.6763 28.6233C54.6094 28.9091 53.9762 30.0058 54.2621 31.0727L57.8855 44.5957C56.7796 43.7276 55.0926 42.524 53.8279 41.6369C52.8814 40.9729 51.5801 41.2068 50.9137 42.1516C50.3107 43.0066 50.4238 44.1741 51.1798 44.8975L59.3691 52.7332C60.8154 54.1171 62.8791 54.6457 64.8126 54.1276Z",
3233
+ fill: "white"
3234
+ }),
3235
+ /* @__PURE__ */ o("path", {
3236
+ d: "M61.2316 41.6286L60.1963 37.7649M60.1963 37.7649L58.1258 30.0375C57.8399 28.9705 56.7432 28.3374 55.6763 28.6233V28.6233C54.6094 28.9091 53.9762 30.0058 54.2621 31.0727L57.8855 44.5957C56.7796 43.7276 55.0926 42.524 53.8279 41.6369C52.8814 40.9729 51.5801 41.2068 50.9137 42.1516V42.1516C50.3107 43.0066 50.4238 44.1741 51.1798 44.8975L59.3691 52.7332C60.8154 54.1171 62.8791 54.6457 64.8126 54.1276L70.0533 52.7234C72.8195 51.9822 74.7473 49.4813 74.7601 46.6176V46.6176C74.7626 46.0532 74.6898 45.4909 74.5438 44.9457L72.4992 37.3153C72.2491 36.3818 71.2895 35.8278 70.3559 36.0779V36.0779V36.0779C69.4223 36.328 68.8683 37.2876 69.1185 38.2212L69.442 39.4286M60.1963 37.7649L59.8728 36.5575C59.5512 35.3572 60.2635 34.1234 61.4638 33.8018V33.8018C62.6641 33.4802 63.8979 34.1925 64.2195 35.3928L64.8018 37.5661M65.7077 40.9469L64.8018 37.5661M64.8018 37.5661L64.6724 37.0831C64.3865 36.0162 65.0197 34.9195 66.0866 34.6337V34.6337C67.1536 34.3478 68.2502 34.9809 68.5361 36.0479L69.442 39.4286M69.8302 40.8775L69.442 39.4286",
3237
+ stroke: "black",
3238
+ "stroke-width": "1.5",
3239
+ "stroke-linecap": "round",
3240
+ "stroke-linejoin": "round"
3241
+ })
3242
+ ])
3243
+ ], -1)), wa = { class: "text ml-2" }, ka = { class: "box horizontal mt-3" }, ba = /* @__PURE__ */ Be(() => /* @__PURE__ */ o("div", { class: "tutorial-icon d-flex align-items-center justify-center" }, [
3244
+ /* @__PURE__ */ o("svg", {
3245
+ width: "99",
3246
+ height: "65",
3247
+ viewBox: "0 0 99 65",
3248
+ fill: "none",
3249
+ xmlns: "http://www.w3.org/2000/svg"
3250
+ }, [
3251
+ /* @__PURE__ */ o("path", {
3252
+ d: "M31 24.9736L31 10M31 10L25 15.9736M31 10L37 15.9736",
3253
+ stroke: "#FF3E3E",
3254
+ "stroke-width": "1.5",
3255
+ "stroke-linecap": "round",
3256
+ "stroke-linejoin": "round"
3257
+ }),
3258
+ /* @__PURE__ */ o("path", {
3259
+ d: "M31 40L31 54.9736M31 54.9736L25 49M31 54.9736L37 49",
3260
+ stroke: "#FF3E3E",
3261
+ "stroke-width": "1.5",
3262
+ "stroke-linecap": "round",
3263
+ "stroke-linejoin": "round"
3264
+ }),
3265
+ /* @__PURE__ */ o("path", {
3266
+ d: "M58.6512 44.3852L61.8162 42.5579C64.2963 41.126 65.5112 38.2114 64.7823 35.442C64.6387 34.8961 64.4229 34.3719 64.1407 33.883L60.1909 27.0418C59.7076 26.2048 58.6374 25.918 57.8003 26.4013C56.9633 26.8845 56.6765 27.9548 57.1598 28.7918L56.0348 26.8433C55.4825 25.8867 54.2593 25.5589 53.3027 26.1112C52.3462 26.6635 52.0184 27.8867 52.5707 28.8433L51.6957 27.3277C51.0744 26.2516 49.6983 25.8828 48.6221 26.5042C47.546 27.1255 47.1773 28.5016 47.7986 29.5777L44.4236 23.7321C43.8713 22.7755 42.6481 22.4477 41.6915 23C40.7349 23.5523 40.4072 24.7755 40.9595 25.7321L48.4595 38.7224L41.0923 40.5062C40.3398 40.6884 39.7721 41.3073 39.6555 42.0728C39.4961 43.1196 40.2199 44.096 41.268 44.2476L49.7609 45.4766L51.251 45.7252C53.7985 46.1503 56.4146 45.6766 58.6512 44.3852Z",
3267
+ fill: "white"
3268
+ }),
3269
+ /* @__PURE__ */ o("path", {
3270
+ d: "M50.4236 34.1244L48.4236 30.6603M48.4236 30.6603L44.4236 23.7321C43.8713 22.7755 42.6481 22.4477 41.6915 23V23C40.7349 23.5523 40.4072 24.7755 40.9595 25.7321L48.4595 38.7224L41.0923 40.5062C40.3398 40.6884 39.7721 41.3073 39.6555 42.0728V42.0728C39.4961 43.1196 40.2199 44.096 41.268 44.2476L49.7609 45.4766L51.251 45.7252C53.7985 46.1503 56.4146 45.6766 58.6512 44.3852L61.8162 42.5579C64.2963 41.126 65.5112 38.2114 64.7823 35.442V35.442C64.6387 34.8961 64.4229 34.3719 64.1407 33.883L60.1909 27.0418C59.7076 26.2048 58.6374 25.918 57.8003 26.4013V26.4013V26.4013C56.9633 26.8845 56.6765 27.9548 57.1598 28.7918L57.7848 29.8744M48.4236 30.6603L47.7986 29.5777C47.1773 28.5016 47.546 27.1255 48.6221 26.5042V26.5042C49.6983 25.8828 51.0744 26.2516 51.6957 27.3277L52.8207 29.2763M54.5707 32.3074L52.8207 29.2763M52.8207 29.2763L52.5707 28.8433C52.0184 27.8867 52.3462 26.6635 53.3027 26.1112V26.1112C54.2593 25.5589 55.4825 25.8867 56.0348 26.8433L57.7848 29.8744M58.5348 31.1734L57.7848 29.8744",
3271
+ stroke: "black",
3272
+ "stroke-width": "1.5",
3273
+ "stroke-linecap": "round",
3274
+ "stroke-linejoin": "round"
3275
+ })
3276
+ ])
3277
+ ], -1)), ya = { class: "text ml-2" }, _a = { class: "d-flex justify-space-between mt-3 mx-3 mb-0 tutorial-buttons" }, Ca = /* @__PURE__ */ Q({
3278
+ __name: "VTutorial",
3279
+ props: {
3280
+ project: {}
3281
+ },
3282
+ emits: ["closeTutorial"],
3283
+ setup(u, { emit: t }) {
3284
+ const e = u, l = t, a = pe("i18n"), n = r(!0), s = r(!1), i = V(() => [
3285
+ /Android/i,
3286
+ /webOS/i,
3287
+ /iPhone/i,
3288
+ /iPad/i,
3289
+ /iPod/i,
3290
+ /BlackBerry/i,
3291
+ /Windows Phone/i
3292
+ ].some((I) => navigator.userAgent.match(I))), k = V(() => {
3293
+ const m = localStorage.getItem(
3294
+ `${e.project}-dont-show-tutorial`
3295
+ );
3296
+ return m && l("closeTutorial"), m;
3297
+ });
3298
+ function p() {
3299
+ s.value && v(), n.value = !1, l("closeTutorial");
3300
+ }
3301
+ function v() {
3302
+ localStorage.setItem(`${e.project}-dont-show-tutorial`, "true");
3303
+ }
3304
+ return (m, I) => {
3305
+ const _ = T("v-checkbox"), L = T("v-btn");
3306
+ return h(), N(ze, { name: "fade-transition" }, {
3307
+ default: M(() => [
3308
+ n.value && !k.value ? (h(), F("div", Zn, [
3309
+ i.value ? H("", !0) : (h(), F("div", Xn, [
3310
+ o("div", Kn, [
3311
+ o("div", Jn, [
3312
+ ea,
3313
+ o("div", ta, z(oe(a).getLabel("click-and-drag-to-look-around")), 1)
3314
+ ]),
3315
+ o("div", oa, [
3316
+ na,
3317
+ o("div", aa, z(oe(a).getLabel("click-on-the-circles-to-move-around")), 1)
3318
+ ]),
3319
+ o("div", la, [
3320
+ ia,
3321
+ o("div", sa, z(oe(a).getLabel("use-the-mouse-wheel-to-zoom")), 1)
3322
+ ])
3323
+ ]),
3324
+ o("div", ra, [
3325
+ o("div", ua, [
3326
+ ca,
3327
+ o("div", da, z(oe(a).getLabel("you-can-also-use-the-arrow-keys-to-move-around")), 1)
3328
+ ])
3329
+ ])
3330
+ ])),
3331
+ i.value ? (h(), F("div", va, [
3332
+ o("div", ma, [
3333
+ pa,
3334
+ o("div", ha, z(oe(a).getLabel("tap-and-drag-to-look-around")), 1)
3335
+ ]),
3336
+ o("div", fa, [
3337
+ ga,
3338
+ o("div", wa, z(oe(a).getLabel("tap-on-the-circles-to-move-around")), 1)
3339
+ ]),
3340
+ o("div", ka, [
3341
+ ba,
3342
+ o("div", ya, z(oe(a).getLabel("use-two-fingers-to-zoom")), 1)
3343
+ ])
3344
+ ])) : H("", !0),
3345
+ o("div", _a, [
3346
+ y(_, {
3347
+ modelValue: s.value,
3348
+ "onUpdate:modelValue": I[0] || (I[0] = (C) => s.value = C),
3349
+ label: oe(a).getLabel("dont-show-again")
3350
+ }, null, 8, ["modelValue", "label"]),
3351
+ y(L, {
3352
+ small: "",
3353
+ outlined: "",
3354
+ class: "mt-5",
3355
+ onClick: I[1] || (I[1] = (C) => p())
3356
+ }, {
3357
+ default: M(() => [
3358
+ se("Ok")
3359
+ ]),
3360
+ _: 1
3361
+ })
3362
+ ])
3363
+ ])) : H("", !0)
3364
+ ]),
3365
+ _: 1
3366
+ });
3367
+ };
3368
+ }
3369
+ }), Aa = /* @__PURE__ */ te(Ca, [["__scopeId", "data-v-53c0bb27"]]), La = (u) => (ot("data-v-a28b3f8d"), u = u(), nt(), u), Ia = { class: "player-settings-ui" }, Ma = { id: "settings-ui-form" }, Sa = { class: "form-inputs" }, Ea = { class: "setting-label" }, Fa = { class: "setting-label" }, xa = ["max", "min", "step"], Ba = { class: "setting-label" }, Va = { class: "flex-grow-1 flex-shrink-0" }, Ua = ["onUpdate:modelValue"], Da = {
3370
+ key: 3,
3371
+ "d-block": "",
3372
+ class: "mt-3"
3373
+ }, Ra = { class: "d-flex justify-space-between" }, Ta = { class: "setting-label" }, Oa = {
3374
+ class: "mt-5 d-block",
3375
+ style: { width: "300px" }
3376
+ }, $a = /* @__PURE__ */ La(() => /* @__PURE__ */ o("div", { class: "setting-label" }, "Enter Lut URL:", -1)), Ha = {
3377
+ class: "d-block",
3378
+ style: { width: "300px" }
3379
+ }, ja = { class: "form-buttons" }, Pa = /* @__PURE__ */ Q({
3380
+ __name: "VSettingsUI",
3381
+ props: {
3382
+ projectSlug: {},
3383
+ initialSettings: {}
3384
+ },
3385
+ emits: ["updateSettings", "saveSettings"],
3386
+ setup(u, { emit: t }) {
3387
+ const e = u, l = t, a = r(_(e.initialSettings));
3388
+ Z(
3389
+ a,
3390
+ () => {
3391
+ s();
3392
+ },
3393
+ { deep: !0 }
3394
+ );
3395
+ const n = V(() => {
3396
+ let L = {};
3397
+ for (const [C, E] of Object.entries(a.value))
3398
+ C === "whitePoint" ? L[C] = v(E.value) : L[C] = E.value;
3399
+ return L;
3400
+ });
3401
+ function s() {
3402
+ l("updateSettings", n.value);
3403
+ }
3404
+ function i() {
3405
+ const L = document.createElement("a");
3406
+ L.href = URL.createObjectURL(
3407
+ new Blob([JSON.stringify(n.value, null, 2)])
3408
+ );
3409
+ const C = `player-settings-${e.projectSlug}-${Date.now()}.json`;
3410
+ L.download = C, L.style.display = "none", document.body.appendChild(L), L.click(), document.body.removeChild(L);
3411
+ }
3412
+ function k() {
3413
+ l("saveSettings", n.value);
3414
+ }
3415
+ function p() {
3416
+ a.value = _(), l("updateSettings", n.value);
3417
+ }
3418
+ function v(L) {
3419
+ const C = parseInt(L.substr(1, 2), 16) / 255, E = parseInt(L.substr(3, 2), 16) / 255, D = parseInt(L.substr(5, 2), 16) / 255;
3420
+ return [C, E, D];
3421
+ }
3422
+ function m(L) {
3423
+ var C = L.toString(16);
3424
+ return C.length == 1 ? "0" + C : C;
3425
+ }
3426
+ function I([L, C, E]) {
3427
+ return "#" + m(parseInt((L * 255).toString())) + m(parseInt((C * 255).toString())) + m(parseInt((E * 255).toString()));
3428
+ }
3429
+ function _(L = {}) {
3430
+ const C = [
3431
+ "Cool 5",
3432
+ "Cool 10",
3433
+ "Cool 15",
3434
+ "Cool 20",
3435
+ "Cool 25",
3436
+ "Warm 20",
3437
+ "Warm 25",
3438
+ "Warm 10",
3439
+ "Warm 15",
3440
+ "Warm 5",
3441
+ "bw"
3442
+ ];
3443
+ let E = {
3444
+ temperature: 6500,
3445
+ targetLuminance: 1,
3446
+ exposureFovScale: 0.6,
3447
+ UNREAL_BLOOM_ENABLED: !0,
3448
+ sharpenFilter_amount: 0.6,
3449
+ UNREAL_BLOOM_STRENGTH: 0.3,
3450
+ TRANSITION_MOVEMENT_SCALE: 1.3,
3451
+ whitePoint: [1, 1, 1],
3452
+ lut: "",
3453
+ ...L
3454
+ };
3455
+ return {
3456
+ exposureFovScale: {
3457
+ label: "Exposure Fov Scale",
3458
+ type: "slider",
3459
+ min: 0,
3460
+ max: 1,
3461
+ step: 0.01,
3462
+ value: E.exposureFovScale
3463
+ },
3464
+ targetLuminance: {
3465
+ label: "Target Luminance",
3466
+ type: "slider",
3467
+ min: 0,
3468
+ max: 15,
3469
+ step: 0.1,
3470
+ value: E.targetLuminance
3471
+ },
3472
+ sharpenFilter_amount: {
3473
+ label: "Sharpen Filter Amount",
3474
+ type: "slider",
3475
+ min: 0,
3476
+ max: 100,
3477
+ step: 0.1,
3478
+ value: E.sharpenFilter_amount
3479
+ },
3480
+ UNREAL_BLOOM_ENABLED: {
3481
+ label: "Enable Bloom?",
3482
+ type: "boolean",
3483
+ value: E.UNREAL_BLOOM_ENABLED
3484
+ },
3485
+ UNREAL_BLOOM_STRENGTH: {
3486
+ label: "Bloom Strength",
3487
+ type: "slider",
3488
+ min: 0,
3489
+ max: 1,
3490
+ step: 0.01,
3491
+ value: E.UNREAL_BLOOM_STRENGTH
3492
+ },
3493
+ TRANSITION_MOVEMENT_SCALE: {
3494
+ label: "Transition Movement Speed",
3495
+ type: "slider",
3496
+ min: 0.2,
3497
+ max: 25,
3498
+ step: 0.1,
3499
+ value: E.TRANSITION_MOVEMENT_SCALE
3500
+ },
3501
+ temperature: {
3502
+ label: "Temperature / White Balance",
3503
+ type: "slider",
3504
+ min: 1e3,
3505
+ max: 12e3,
3506
+ step: 1,
3507
+ value: E.temperature
3508
+ },
3509
+ whitePoint: {
3510
+ label: "White Point",
3511
+ type: "color",
3512
+ min: null,
3513
+ max: null,
3514
+ step: null,
3515
+ value: I(E.whitePoint)
3516
+ },
3517
+ lut: {
3518
+ label: "Lut",
3519
+ type: "lut",
3520
+ items: C.map((D) => ({
3521
+ text: D,
3522
+ value: `https://cdn.visuado.com/luts/${D}.png`
3523
+ })),
3524
+ value: E.lut
3525
+ }
3526
+ };
3527
+ }
3528
+ return (L, C) => {
3529
+ const E = T("v-text-field"), D = T("v-slider"), g = T("v-checkbox"), A = T("v-btn"), R = T("v-select"), c = T("v-icon");
3530
+ return h(), F("div", Ia, [
3531
+ o("form", Ma, [
3532
+ o("div", Sa, [
3533
+ (h(!0), F(Ce, null, _e(a.value, (f, b, B) => (h(), F("div", {
3534
+ key: B,
3535
+ "d-block": ""
3536
+ }, [
3537
+ f.type === "slider" ? (h(), N(D, {
3538
+ key: 0,
3539
+ modelValue: a.value[b].value,
3540
+ "onUpdate:modelValue": (U) => a.value[b].value = U,
3541
+ onChange: s,
3542
+ max: f.max,
3543
+ min: f.min,
3544
+ step: f.step
3545
+ }, {
3546
+ prepend: M(() => [
3547
+ o("div", Ea, z(f.label), 1)
3548
+ ]),
3549
+ append: M(() => [
3550
+ o("div", null, [
3551
+ y(E, {
3552
+ modelValue: a.value[b].value,
3553
+ "onUpdate:modelValue": (U) => a.value[b].value = U,
3554
+ "hide-details": "",
3555
+ dense: "",
3556
+ outlined: "",
3557
+ type: "number",
3558
+ max: f.max,
3559
+ min: f.min,
3560
+ step: f.step,
3561
+ style: { width: "90px" },
3562
+ onChange: s
3563
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "max", "min", "step"])
3564
+ ])
3565
+ ]),
3566
+ _: 2
3567
+ }, 1032, ["modelValue", "onUpdate:modelValue", "max", "min", "step"])) : H("", !0),
3568
+ f.type === "boolean" ? (h(), N(g, {
3569
+ key: 1,
3570
+ modelValue: a.value[b].value,
3571
+ "onUpdate:modelValue": (U) => a.value[b].value = U,
3572
+ onChange: s
3573
+ }, {
3574
+ prepend: M(() => [
3575
+ o("div", Fa, z(f.label), 1)
3576
+ ]),
3577
+ append: M(() => [
3578
+ o("div", null, z(f.value), 1)
3579
+ ]),
3580
+ _: 2
3581
+ }, 1032, ["modelValue", "onUpdate:modelValue"])) : H("", !0),
3582
+ f.type === "color" ? (h(), F("div", {
3583
+ key: 2,
3584
+ class: "d-flex",
3585
+ max: f.max,
3586
+ min: f.min,
3587
+ step: f.step
3588
+ }, [
3589
+ o("div", Ba, z(f.label), 1),
3590
+ o("div", Va, [
3591
+ de(o("input", {
3592
+ "onUpdate:modelValue": (U) => a.value[b].value = U,
3593
+ type: "color",
3594
+ onChange: s
3595
+ }, null, 40, Ua), [
3596
+ [$t, a.value[b].value]
3597
+ ])
3598
+ ]),
3599
+ o("div", null, [
3600
+ y(E, {
3601
+ modelValue: a.value[b].value,
3602
+ "onUpdate:modelValue": (U) => a.value[b].value = U,
3603
+ "hide-details": "",
3604
+ dense: "",
3605
+ outlined: "",
3606
+ readonly: "",
3607
+ type: "text",
3608
+ style: { width: "90px" },
3609
+ onChange: s
3610
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
3611
+ ])
3612
+ ], 8, xa)) : H("", !0),
3613
+ f.type === "lut" ? (h(), F("div", Da, [
3614
+ o("div", Ra, [
3615
+ o("div", Ta, z(f.label), 1),
3616
+ o("div", null, [
3617
+ y(A, {
3618
+ class: "ml-2",
3619
+ "x-small": "",
3620
+ onClick: (U) => a.value[b].value = null
3621
+ }, {
3622
+ default: M(() => [
3623
+ se(" Clear Lut ")
3624
+ ]),
3625
+ _: 2
3626
+ }, 1032, ["onClick"])
3627
+ ])
3628
+ ]),
3629
+ o("div", null, [
3630
+ o("div", Oa, [
3631
+ o("div", null, [
3632
+ y(R, {
3633
+ modelValue: a.value[b].value,
3634
+ "onUpdate:modelValue": (U) => a.value[b].value = U,
3635
+ items: f.items,
3636
+ "item-title": "title",
3637
+ "item-value": "value",
3638
+ dense: "",
3639
+ label: "Select Lut",
3640
+ onChange: s
3641
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "items"])
3642
+ ])
3643
+ ]),
3644
+ o("div", null, [
3645
+ $a,
3646
+ o("div", Ha, [
3647
+ o("div", null, [
3648
+ y(E, {
3649
+ modelValue: a.value[b].value,
3650
+ "onUpdate:modelValue": (U) => a.value[b].value = U,
3651
+ "hide-details": "",
3652
+ dense: "",
3653
+ type: "url",
3654
+ onChange: s
3655
+ }, null, 8, ["modelValue", "onUpdate:modelValue"])
3656
+ ])
3657
+ ])
3658
+ ])
3659
+ ])
3660
+ ])) : H("", !0)
3661
+ ]))), 128))
3662
+ ]),
3663
+ o("div", ja, [
3664
+ y(A, {
3665
+ onClick: C[0] || (C[0] = (f) => p())
3666
+ }, {
3667
+ default: M(() => [
3668
+ se("Reset")
3669
+ ]),
3670
+ _: 1
3671
+ }),
3672
+ y(A, {
3673
+ class: "ml-2",
3674
+ onClick: C[1] || (C[1] = (f) => i())
3675
+ }, {
3676
+ default: M(() => [
3677
+ se(" Download Json "),
3678
+ y(c, { color: "black darken-1" }, {
3679
+ default: M(() => [
3680
+ se("mdi-download")
3681
+ ]),
3682
+ _: 1
3683
+ })
3684
+ ]),
3685
+ _: 1
3686
+ }),
3687
+ y(A, {
3688
+ class: "ml-2",
3689
+ onClick: C[2] || (C[2] = (f) => k())
3690
+ }, {
3691
+ default: M(() => [
3692
+ se(" Save Settings "),
3693
+ y(c, { color: "black darken-1" }, {
3694
+ default: M(() => [
3695
+ se("mdi-save")
3696
+ ]),
3697
+ _: 1
3698
+ })
3699
+ ]),
3700
+ _: 1
3701
+ })
3702
+ ])
3703
+ ])
3704
+ ]);
3705
+ };
3706
+ }
3707
+ }), Na = /* @__PURE__ */ te(Pa, [["__scopeId", "data-v-a28b3f8d"]]), Ya = {
3708
+ class: "rotation-marker-svg",
3709
+ viewBox: "0 0 40 40",
3710
+ xmlns: "http://www.w3.org/2000/svg"
3711
+ }, Wa = /* @__PURE__ */ ft('<defs><radialGradient id="Gradient" cx="0" cy="0" r="0.9" fx="0" fy="0"><stop offset="0%" class="stop1"></stop><stop offset="60%" class="stop2"></stop><stop offset="90%" class="stop3"></stop></radialGradient><linearGradient id="LineGradient" gradientTransform="rotate(90)"><stop offset="0%" class="stop1"></stop><stop offset="75%" class="stop2"></stop><stop offset="100%" class="stop3"></stop></linearGradient></defs>', 1), Ga = ["transform"], Qa = /* @__PURE__ */ ft('<rect id="field-of-view-gradient" x="20" y="20" width="38" height="38" transform="rotate(0)" transform-origin="20 20" fill="url(#Gradient)"></rect><rect class="field-of-view-border" x="20" y="20" width="1" height="25" fill="url(#LineGradient)" transform="rotate(0)" transform-origin="20 20"></rect><rect class="field-of-view-border" x="19" y="19" width="1" height="25" fill="url(#LineGradient)" transform="rotate(-90)" transform-origin="20 20"></rect><circle cx="20" cy="20" r="5" fill="white"></circle><circle cx="20" cy="20" r="3" fill="red"></circle>', 5), za = [
3712
+ Qa
3713
+ ], qa = /* @__PURE__ */ Q({
3714
+ __name: "VRotationMarker",
3715
+ props: {
3716
+ rotation: {}
3717
+ },
3718
+ setup(u) {
3719
+ return (t, e) => (h(), F("svg", Ya, [
3720
+ Wa,
3721
+ o("g", {
3722
+ "transform-origin": "20 20",
3723
+ transform: `rotate(${45 + t.rotation})`
3724
+ }, za, 8, Ga)
3725
+ ]));
3726
+ }
3727
+ }), Za = { class: "minimap-wrapper d-flex align-stretch justify-space-between" }, Xa = { class: "minimap-container" }, Ka = /* @__PURE__ */ Q({
3728
+ __name: "VMiniMapMap",
3729
+ props: {
3730
+ backgroundImage: {},
3731
+ allCameras: {},
3732
+ minimapCamera: {},
3733
+ currentCamera: {},
3734
+ rotation: {},
3735
+ transformAngle: {}
3736
+ },
3737
+ setup(u) {
3738
+ const t = u, e = r(512), l = r(384), a = r(new xe.Vector3()), n = r(new xe.Object3D()), s = r({}), i = r(1), k = r(), p = V(() => t.allCameras), v = V(() => t.allCameras.find((b) => b.id === t.currentCamera)), m = V(() => t.rotation), I = V(() => new xe.Vector3(
3739
+ t.minimapCamera.position.x,
3740
+ t.minimapCamera.position.y,
3741
+ t.minimapCamera.position.z
3742
+ )), _ = V(() => parseFloat(v.value.floor_vertical_position)), L = V(() => p.value.map((b) => {
3743
+ const B = b.uposition.split(","), U = new xe.Vector3(
3744
+ B[0] - I.value.x,
3745
+ 0,
3746
+ B[2] - I.value.z
3747
+ );
3748
+ return {
3749
+ ...b,
3750
+ ...R(a.value, U)
3751
+ };
3752
+ })), C = V(() => `background-image: url(${t.backgroundImage});`), E = V(() => {
3753
+ let b = i.value > 1 ? 1 : i.value;
3754
+ return b < 0.8 && (b = 0.4), `scale: ${b > 1 ? 1 : b}; transform: rotate(${t.transformAngle}deg);`;
3755
+ });
3756
+ ce(() => {
3757
+ c(), g(), f();
3758
+ const b = document.getElementById("moveableDiv");
3759
+ b && (k.value = new ResizeObserver(f).observe(b));
3760
+ }), Ht(() => {
3761
+ c(), g();
3762
+ }), Oe(() => {
3763
+ k.value && k.value.unobserve(document.getElementById("moveableDiv"));
3764
+ });
3765
+ function D(b) {
3766
+ return xe.MathUtils.degToRad(b);
3767
+ }
3768
+ function g() {
3769
+ n.value.rotation.x = 180, n.value.rotation.y = t.minimapCamera.rotation.y * -1, s.value = {
3770
+ transform: `rotateZ(${n.value.rotation.y}deg) rotateX(${n.value.rotation.x}deg)`
3771
+ };
3772
+ }
3773
+ function A(b) {
3774
+ return {
3775
+ top: `${Math.abs(b.top)}%`,
3776
+ left: `${Math.abs(b.left)}%`
3777
+ };
3778
+ }
3779
+ function R(b, B) {
3780
+ var U = new xe.Vector3();
3781
+ const $ = U.subVectors(b, B);
3782
+ return {
3783
+ relativePosition: $,
3784
+ left: $.x / e.value * 100,
3785
+ top: $.z / l.value * 100
3786
+ };
3787
+ }
3788
+ function c() {
3789
+ const b = t.minimapCamera.position.y - _.value;
3790
+ l.value = 2 * (b * Math.tan(D(t.minimapCamera.fovY / 2))), e.value = 512 / 384 * l.value;
3791
+ const B = l.value / 2, U = e.value / 2, $ = new xe.Vector3(U * -1, 0, B * -1);
3792
+ a.value = $;
3793
+ }
3794
+ function f() {
3795
+ const b = document.getElementById("moveableDiv");
3796
+ if (!b)
3797
+ return;
3798
+ const B = b.offsetHeight / 384 * 0.8, U = b.offsetWidth / 512 * 0.8;
3799
+ b.offsetHeight > b.offsetWidth ? i.value = U * 0.5 : i.value = B * 0.9;
3800
+ }
3801
+ return (b, B) => (h(), F("div", Za, [
3802
+ o("div", Xa, [
3803
+ o("div", {
3804
+ class: "web-minimap",
3805
+ style: re(E.value)
3806
+ }, [
3807
+ o("div", {
3808
+ class: "minimap-background-image",
3809
+ style: re(C.value)
3810
+ }, null, 4),
3811
+ o("div", {
3812
+ class: "center-pivot",
3813
+ style: re(s.value)
3814
+ }, [
3815
+ (h(!0), F(Ce, null, _e(L.value, (U) => (h(), F("div", {
3816
+ key: U.id
3817
+ }, [
3818
+ v.value.floorLevel === U.floorLevel ? (h(), F("div", {
3819
+ key: 0,
3820
+ class: "single-camera-marker",
3821
+ style: re(A(U))
3822
+ }, null, 4)) : H("", !0),
3823
+ v.value.id === U.id ? (h(), N(qa, {
3824
+ key: 1,
3825
+ class: "rotation-marker-component",
3826
+ rotation: m.value,
3827
+ style: re({ ...A(U) })
3828
+ }, null, 8, ["rotation", "style"])) : H("", !0)
3829
+ ]))), 128))
3830
+ ], 4)
3831
+ ], 4)
3832
+ ])
3833
+ ]));
3834
+ }
3835
+ }), Ja = /* @__PURE__ */ te(Ka, [["__scopeId", "data-v-503cace2"]]), el = (u) => (ot("data-v-06db6e63"), u = u(), nt(), u), tl = /* @__PURE__ */ el(() => /* @__PURE__ */ o("div", { id: "filler-div" }, null, -1)), ol = {
3836
+ class: "moveable-body",
3837
+ id: "moveableDivHeader"
3838
+ }, nl = { class: "moveable-footer" }, al = /* @__PURE__ */ Q({
3839
+ __name: "VMoveable",
3840
+ emits: ["close", "transform"],
3841
+ setup(u, { emit: t }) {
3842
+ const e = t, l = r("big");
3843
+ ce(() => {
3844
+ a(document.getElementById("moveableDiv"));
3845
+ });
3846
+ function a(s) {
3847
+ const i = document.getElementById(s.id + "Header");
3848
+ if (!i)
3849
+ return;
3850
+ let k = 0, p = 0, v = 0, m = 0;
3851
+ i.addEventListener("touchstart", I, { passive: !1 }), i.addEventListener("touchend", L, { passive: !1 }), i.addEventListener("mousedown", I, { passive: !1 }), i.addEventListener("mouseup", L, { passive: !1 });
3852
+ function I(C) {
3853
+ C = C || window.event, C.preventDefault();
3854
+ let E = C;
3855
+ C.type === "touchstart" && (E = C.touches[0]), v = E.clientX, m = E.clientY, document.addEventListener("mouseup", L, { passive: !1 }), document.addEventListener("touchend", L, { passive: !1 }), document.addEventListener("mousemove", _, { passive: !1 }), document.addEventListener("touchmove", _, { passive: !1 });
3856
+ }
3857
+ function _(C) {
3858
+ C = C || window.event, C.preventDefault();
3859
+ let E = C;
3860
+ C.type === "touchmove" && (E = C.touches[0]), k = v - E.clientX, p = m - E.clientY, v = E.clientX, m = E.clientY, s.style.top = s.offsetTop - p + "px", s.style.left = s.offsetLeft - k + "px";
3861
+ }
3862
+ function L() {
3863
+ document.removeEventListener("mouseup", L, !1), document.removeEventListener("mousemove", _, !1), document.removeEventListener("touchend", L, !1), document.removeEventListener("touchmove", _, !1);
3864
+ }
3865
+ }
3866
+ function n() {
3867
+ l.value === "big" ? l.value = "small" : l.value = "big";
3868
+ }
3869
+ return (s, i) => {
3870
+ const k = T("v-btn");
3871
+ return h(), F("div", {
3872
+ id: "moveableDiv",
3873
+ class: ye(["big d-flex justify-space-between flex-column align-center sizer", l.value])
3874
+ }, [
3875
+ y(k, {
3876
+ class: "close-icon",
3877
+ icon: "mdi-window-close",
3878
+ size: "x-small",
3879
+ onClick: i[0] || (i[0] = (p) => e("close"))
3880
+ }),
3881
+ y(k, {
3882
+ class: "resize-icon",
3883
+ icon: "mdi-image-size-select-small",
3884
+ size: "x-small",
3885
+ onClick: n,
3886
+ title: "Resize"
3887
+ }),
3888
+ y(k, {
3889
+ class: "rotate-icon",
3890
+ size: "x-small",
3891
+ icon: "mdi mdi-rotate-right",
3892
+ onClick: i[1] || (i[1] = (p) => e("transform")),
3893
+ title: "Rotate"
3894
+ }),
3895
+ tl,
3896
+ o("div", ol, [
3897
+ ie(s.$slots, "body", { class: "slot" }, void 0, !0)
3898
+ ]),
3899
+ o("div", nl, [
3900
+ ie(s.$slots, "footer", {}, void 0, !0)
3901
+ ])
3902
+ ], 2);
3903
+ };
3904
+ }
3905
+ }), ll = /* @__PURE__ */ te(al, [["__scopeId", "data-v-06db6e63"]]), il = /* @__PURE__ */ Q({
3906
+ __name: "VMinimapCompass",
3907
+ props: {
3908
+ scale: {},
3909
+ minimapCamera: {},
3910
+ transformAngle: {}
3911
+ },
3912
+ setup(u) {
3913
+ const t = u, e = V(() => t.minimapCamera.rotation ? t.minimapCamera.rotation.y + t.transformAngle - 90 : 0);
3914
+ return (l, a) => (h(), F("div", {
3915
+ class: "minimap-compass",
3916
+ style: re({ scale: l.scale })
3917
+ }, [
3918
+ y(Ke, {
3919
+ class: "north-indicator",
3920
+ longitude: e.value
3921
+ }, null, 8, ["longitude"])
3922
+ ], 4));
3923
+ }
3924
+ }), sl = /* @__PURE__ */ te(il, [["__scopeId", "data-v-cdeea259"]]), rl = { class: "ss-wrapper" }, ul = { class: "slider" }, cl = { class: "minimap-sun-slider" }, dl = {
3925
+ key: 0,
3926
+ class: "time-label"
3927
+ }, vl = /* @__PURE__ */ Q({
3928
+ __name: "VSunSimulationSlider",
3929
+ props: {
3930
+ minimapJSON: {},
3931
+ level: {},
3932
+ root: {}
3933
+ },
3934
+ emits: ["setBackgroundImage"],
3935
+ setup(u, { emit: t }) {
3936
+ const e = u, l = t, a = r((/* @__PURE__ */ new Date()).getHours()), n = r(!0), s = r(!0), i = r(""), k = r(/* @__PURE__ */ new Map()), p = pe("localMode"), v = pe("fileLoader"), m = V(() => e.minimapJSON[e.level]), I = V(() => `${Math.floor(a.value).toString().padStart(2, "0")}:00`), _ = V(() => {
3937
+ if (m.value.sunsimFilesTimeStamps[a.value]) {
3938
+ const A = m.value.sunsimFilesTimeStamps[a.value].split(" ");
3939
+ return `${A[0]} ${A[1]}`;
3940
+ }
3941
+ return "";
3942
+ });
3943
+ ce(async () => {
3944
+ i.value = await E(
3945
+ m.value.sunsimFiles[a.value]
3946
+ ), s.value = !1;
3947
+ const A = await C(e.minimapJSON);
3948
+ k.value = A, n.value = !1, l("setBackgroundImage", L(e.level, a.value));
3949
+ }), Z(a, () => {
3950
+ const A = L(e.level, a.value);
3951
+ l("setBackgroundImage", A);
3952
+ }), Z(
3953
+ () => e.level,
3954
+ () => {
3955
+ l("setBackgroundImage", L(e.level, a.value));
3956
+ },
3957
+ { immediate: !0 }
3958
+ );
3959
+ function L(A, R) {
3960
+ return k.value.get(`sunsim${A}_${R}`) ? k.value.get(`sunsim${A}_${R}`) : "";
3961
+ }
3962
+ async function C(A) {
3963
+ let R = /* @__PURE__ */ new Map();
3964
+ for (let c = 0; c < A.length; c++) {
3965
+ const f = A[c].sunsimFiles;
3966
+ for (let b = 0; b < f.length; b++) {
3967
+ const B = f[b];
3968
+ try {
3969
+ const U = B, $ = B.split("."), q = await E(e.root + U);
3970
+ R.set($[0], q);
3971
+ } catch {
3972
+ continue;
3973
+ }
3974
+ }
3975
+ }
3976
+ return R;
3977
+ }
3978
+ async function E(A) {
3979
+ let R = A;
3980
+ p && (R = `${v.getURL(A)}`);
3981
+ const f = await (await fetch(R)).blob(), b = await g(f);
3982
+ return D(b);
3983
+ }
3984
+ function D(A) {
3985
+ return "data:image/jpeg;base64," + A;
3986
+ }
3987
+ async function g(A) {
3988
+ return new Promise((R, c) => {
3989
+ const f = new FileReader();
3990
+ f.onload = () => {
3991
+ const b = f.result.split(",")[1];
3992
+ R(b);
3993
+ }, f.onerror = c, f.readAsDataURL(A);
3994
+ });
3995
+ }
3996
+ return (A, R) => {
3997
+ const c = T("v-progress-linear"), f = T("v-icon"), b = T("v-slider");
3998
+ return h(), F("div", rl, [
3999
+ o("div", ul, [
4000
+ o("div", cl, [
4001
+ n.value ? (h(), N(c, {
4002
+ key: 0,
4003
+ indeterminate: "",
4004
+ rounded: "",
4005
+ height: "6",
4006
+ color: "grey lighten-1",
4007
+ class: "mr-2"
4008
+ })) : (h(), N(b, {
4009
+ key: 1,
4010
+ modelValue: a.value,
4011
+ "onUpdate:modelValue": R[0] || (R[0] = (B) => a.value = B),
4012
+ min: 0,
4013
+ max: 23,
4014
+ step: 1,
4015
+ color: "#373737",
4016
+ "track-color": "#373737",
4017
+ "thumb-color": "#373737",
4018
+ "hide-details": !0
4019
+ }, {
4020
+ prepend: M(() => [
4021
+ y(f, { color: "#ffab02" }, {
4022
+ default: M(() => [
4023
+ se("mdi-white-balance-sunny")
4024
+ ]),
4025
+ _: 1
4026
+ })
4027
+ ]),
4028
+ _: 1
4029
+ }, 8, ["modelValue"]))
4030
+ ]),
4031
+ n.value ? H("", !0) : (h(), F("div", dl, z(_.value) + " " + z(I.value), 1))
4032
+ ])
4033
+ ]);
4034
+ };
4035
+ }
4036
+ }), ml = /* @__PURE__ */ te(vl, [["__scopeId", "data-v-daf8e1d9"]]), pl = /* @__PURE__ */ Q({
4037
+ __name: "VMiniMap",
4038
+ props: {
4039
+ minimapJSON: {},
4040
+ rootUrl: {},
4041
+ backgroundImage: {},
4042
+ allCameras: {},
4043
+ minimapCamera: {},
4044
+ currentCamera: {},
4045
+ level: {},
4046
+ rotation: {}
4047
+ },
4048
+ emits: ["setBackgroundImage", "close"],
4049
+ setup(u, { emit: t }) {
4050
+ const e = t, l = r(0), a = V(() => {
4051
+ let i = 1;
4052
+ return l.value !== 0 && (Math.abs(l.value) % 180 === 0 ? i = 1 : i = -1), i;
4053
+ });
4054
+ function n(i) {
4055
+ e("setBackgroundImage", i);
4056
+ }
4057
+ function s() {
4058
+ l.value = l.value + 90;
4059
+ }
4060
+ return (i, k) => (h(), N(ll, {
4061
+ onClose: k[0] || (k[0] = (p) => e("close")),
4062
+ onTransform: s
4063
+ }, {
4064
+ body: M(() => [
4065
+ y(sl, {
4066
+ scale: a.value,
4067
+ minimapCamera: i.minimapCamera,
4068
+ transformAngle: l.value
4069
+ }, null, 8, ["scale", "minimapCamera", "transformAngle"]),
4070
+ o("div", null, [
4071
+ y(Ja, {
4072
+ transformAngle: l.value,
4073
+ allCameras: i.allCameras,
4074
+ backgroundImage: i.backgroundImage,
4075
+ rotation: i.rotation,
4076
+ currentCamera: i.currentCamera,
4077
+ minimapCamera: i.minimapCamera
4078
+ }, null, 8, ["transformAngle", "allCameras", "backgroundImage", "rotation", "currentCamera", "minimapCamera"])
4079
+ ])
4080
+ ]),
4081
+ footer: M(() => [
4082
+ y(ml, {
4083
+ minimapJSON: i.minimapJSON,
4084
+ root: `${i.rootUrl}/minimap/`,
4085
+ level: i.level,
4086
+ onSetBackgroundImage: n
4087
+ }, null, 8, ["minimapJSON", "root", "level"])
4088
+ ]),
4089
+ _: 1
4090
+ }));
4091
+ }
4092
+ }), vt = /* @__PURE__ */ te(pl, [["__scopeId", "data-v-b903220b"]]);
4093
+ class hl {
4094
+ constructor(t, e) {
4095
+ J(this, "_doc");
4096
+ J(this, "_elemId");
4097
+ J(this, "_state");
4098
+ this._doc = t, this._elemId = e, this._state = { isActive: !1 };
4099
+ }
4100
+ get isActive() {
4101
+ return this._state.isActive;
4102
+ }
4103
+ setup() {
4104
+ const t = [
4105
+ "fullscreenchange",
4106
+ "webkitfullscreenchange",
4107
+ "mozfullscreenchange",
4108
+ "msfullscreenchange"
4109
+ ], e = this._getElement();
4110
+ t.forEach((l) => {
4111
+ e.addEventListener(l, this._toggle.bind(this), !1);
4112
+ });
4113
+ }
4114
+ toggle() {
4115
+ this.isActive ? this._exit() : this._enter();
4116
+ }
4117
+ _enter() {
4118
+ const t = this._getElement(), e = t.requestFullscreen || t.webkitRequestFullscreen || t.mozRequestFullscreen || t.msRequestFullscreen;
4119
+ e && e.apply(t);
4120
+ }
4121
+ _exit() {
4122
+ const t = this._doc.exitFullscreen || this._doc.webkitExitFullscreen || this._doc.mozExitFullscreen || this._doc.document.msExitFullscreen;
4123
+ t && t.apply(document);
4124
+ }
4125
+ _getElement() {
4126
+ return this._doc.getElementById(this._elemId);
4127
+ }
4128
+ _toggle() {
4129
+ const t = !!(this._doc.fullscreenElement || this._doc.webkitFullscreenElement || this._doc.mozFullscreenElement || this._doc.msFullscreenElement);
4130
+ this._state.isActive = t;
4131
+ }
4132
+ }
4133
+ function We(u) {
4134
+ return ("0" + u).slice(-2);
4135
+ }
4136
+ function fl() {
4137
+ const u = /* @__PURE__ */ new Date();
4138
+ return [
4139
+ u.getFullYear().toString(),
4140
+ We(u.getMonth() + 1),
4141
+ We(u.getDate()),
4142
+ " ",
4143
+ We(u.getHours()),
4144
+ We(u.getMinutes()),
4145
+ We(u.getSeconds())
4146
+ ].join("");
4147
+ }
4148
+ function gl() {
4149
+ return "Visuado-Snapshot-" + fl();
4150
+ }
4151
+ class wl {
4152
+ // private cameraParams: any
4153
+ constructor(t, e) {
4154
+ J(this, "data");
4155
+ this.data = t;
4156
+ }
4157
+ download(t = null) {
4158
+ t = t || gl();
4159
+ const e = document.createElement("a");
4160
+ typeof e.download == "string" ? (document.body.appendChild(e), e.download = t, e.href = this.data, e.click(), document.body.removeChild(e)) : location.replace(this.data);
4161
+ }
4162
+ }
4163
+ const kl = { class: "virtual-tour-wrapper" }, bl = {
4164
+ key: 0,
4165
+ class: "player-error"
4166
+ }, yl = { class: "player-and-components-wrapper" }, _l = { key: 1 }, Cl = {
4167
+ key: 3,
4168
+ class: "settings-panel"
4169
+ }, Al = {
4170
+ key: 0,
4171
+ class: "compass-wrapper"
4172
+ }, Ll = {
4173
+ key: 1,
4174
+ class: "btn-placeholder mr-2"
4175
+ }, Il = {
4176
+ key: 2,
4177
+ class: "btn-placeholder"
4178
+ }, Ml = { key: 0 }, Sl = /* @__PURE__ */ Q({
4179
+ __name: "VVirtualTour",
4180
+ props: {
4181
+ fileLoader: {},
4182
+ cdnRoot: {},
4183
+ projectSlug: {},
4184
+ apartmentId: {},
4185
+ defaultInteriorId: {},
4186
+ validInteriorIds: { default: () => [] },
4187
+ viewModes: { default: () => ["virtualTour", "slideShow"] },
4188
+ displayViewModeSwitch: { type: Boolean, default: !0 },
4189
+ websiteUrl: {},
4190
+ i18n: {},
4191
+ showCarousel: { type: Boolean, default: !0 },
4192
+ showTimeOfDay: { type: Boolean, default: !0 },
4193
+ showCompass: { type: Boolean, default: !0 },
4194
+ showFullScreen: { type: Boolean, default: !0 },
4195
+ showSnapshot: { type: Boolean, default: !0 },
4196
+ showShare: { type: Boolean, default: !0 },
4197
+ showInteriorOptions: { type: Boolean, default: !0 },
4198
+ showMiniMap: { type: Boolean, default: !0 },
4199
+ showFloorLevel: { type: Boolean, default: !0 },
4200
+ defaultWaypointIndex: { default: 0 },
4201
+ defaultViewMode: { default: "virtualTour" },
4202
+ mouseSensitivity: { default: 1 },
4203
+ isInIframe: { type: Boolean, default: !1 },
4204
+ adminMode: { type: Boolean, default: !1 },
4205
+ playerSettings: { default: () => ({
4206
+ temperature: 6500,
4207
+ targetLuminance: 1,
4208
+ exposureFovScale: 0.3,
4209
+ UNREAL_BLOOM_ENABLED: !0,
4210
+ sharpenFilter_amount: 0.6,
4211
+ UNREAL_BLOOM_STRENGTH: 0.3,
4212
+ TRANSITION_MOVEMENT_SCALE: 1.3,
4213
+ whitePoint: [1, 1, 1]
4214
+ }) }
4215
+ },
4216
+ emits: ["onSnapshot", "saveSettings", "onInteriorUpdate", "onCameraUpdate"],
4217
+ setup(u, { emit: t }) {
4218
+ const e = u, l = t, a = r(!1), n = r(!1), s = r(), i = r(), k = r(), p = r(), v = r(), m = r(0), I = r(), _ = r(), L = r(), C = r(0), E = r(0), D = r(0), g = r(!1), A = r(!1), R = r(), c = r(!1), f = r(new hl(document, "player-wrapper")), b = V(() => !!e.fileLoader), B = V(() => {
4219
+ let d = `${e.cdnRoot}/${e.projectSlug}`;
4220
+ return e.fileLoader && (d = ""), Vt(d);
4221
+ }), U = V(() => `${B.value}/${$.value}/${e.apartmentId}`), $ = V(() => I.value), q = V(() => i.value ? i.value.cameras : []), ee = V(() => {
4222
+ if (i.value) {
4223
+ const d = i.value.cameras.map(
4224
+ (G) => G.floorLevel
4225
+ );
4226
+ let O = [...new Set(d)];
4227
+ return O = O.sort(), O;
4228
+ } else
4229
+ return [];
4230
+ }), w = V(() => {
4231
+ let d = 0;
4232
+ if (i.value) {
4233
+ const O = i.value.cameras.map(
4234
+ (Ue) => Ue.floorLevel
4235
+ );
4236
+ let G = [...new Set(O)];
4237
+ G = G.sort();
4238
+ const ae = G.findIndex(
4239
+ (Ue) => Ue === E.value
4240
+ );
4241
+ ae !== -1 && (d = ae);
4242
+ }
4243
+ return d;
4244
+ }), x = V(() => Y.value.findIndex(
4245
+ (d) => d.archetypeID === I.value
4246
+ )), W = V(() => k.value ? k.value.cameras.map((d) => ({
4247
+ ...d,
4248
+ thumbnailUrl: et(
4249
+ `${B.value}/${$.value}/${e.apartmentId}/thumbs/200/${d.id}.jpg`
4250
+ ),
4251
+ imageUrl: et(
4252
+ `${B.value}/${$.value}/${e.apartmentId}/images/1600/${d.id}.jpg`
4253
+ )
4254
+ })) : []), S = V(() => !W.value || !W.value[m.value] ? "" : W.value[m.value].imageUrl), Y = V(() => {
4255
+ let d = [];
4256
+ return s.value && (d = s.value.archetypes), e.validInteriorIds.length ? d.filter(
4257
+ (O) => e.validInteriorIds.includes(O.archetypeID)
4258
+ ) : d;
4259
+ }), X = V(() => k.value ? Y.value.map((d) => ({
4260
+ ...d,
4261
+ url: `${B.value}/${d.archetypeID}/${e.apartmentId}/thumbs/200/${W.value[m.value].id}.jpg`
4262
+ })) : []), K = V(() => {
4263
+ if (p.value)
4264
+ return p.value.storeys[w.value];
4265
+ }), ne = V(() => i.value && i.value.timeInHours), ue = V(() => {
4266
+ if (i.value && i.value.timeInHours && e.showTimeOfDay)
4267
+ return Bt(i.value.timeInHours);
4268
+ }), ve = V(() => R.value ? R.value : `${B.value}/${$.value}/${e.apartmentId}/minimap/sunsim0_13.jpg`);
4269
+ De(
4270
+ "i18n",
4271
+ e.i18n ? new Le(e.i18n.labels, e.i18n.language) : new Le()
4272
+ ), De("localMode", b.value), De("fileLoader", e.fileLoader), Z([() => e.projectSlug, () => e.cdnRoot], async () => {
4273
+ await he(), ge(), await fe();
4274
+ }), Z(
4275
+ () => e.defaultViewMode,
4276
+ (d) => {
4277
+ d === "virtualTour" && (g.value = !1), d === "slideShow" && (g.value = !0, c.value = !0);
4278
+ },
4279
+ { immediate: !0 }
4280
+ ), Z(p, (d) => {
4281
+ if (d.storeys[w.value]) {
4282
+ const O = d.storeys[w.value].defaultSunsimFile;
4283
+ R.value = `${B.value}/${$.value}/${e.apartmentId}/minimap/${O}`;
4284
+ }
4285
+ }), ce(async () => {
4286
+ try {
4287
+ await he(), ge(), await fe(), f.value.setup(), Ie();
4288
+ } catch {
4289
+ n.value = !0;
4290
+ }
4291
+ });
4292
+ async function he() {
4293
+ s.value = await Me(B.value);
4294
+ }
4295
+ async function fe() {
4296
+ if (i.value = await Pe(
4297
+ B.value,
4298
+ $.value,
4299
+ e.apartmentId
4300
+ ), i.value && (_.value = i.value.cameras.find(() => !0).id), k.value = await Ve(
4301
+ B.value,
4302
+ $.value,
4303
+ e.apartmentId
4304
+ ), k.value) {
4305
+ let d = e.defaultWaypointIndex !== null ? e.defaultWaypointIndex : 0;
4306
+ m.value = d, _.value = k.value.cameras[d].id, L.value = k.value.cameras[d].id;
4307
+ }
4308
+ e.showMiniMap && (p.value = await Ge(
4309
+ B.value,
4310
+ $.value,
4311
+ e.apartmentId
4312
+ ));
4313
+ }
4314
+ function ge() {
4315
+ let d = e.defaultInteriorId;
4316
+ d || (d = s.value.defaultArchetypeID), e.validInteriorIds.length && !e.validInteriorIds.includes(d) && (d = e.validInteriorIds[0]), d || (d = s.value.archetypes[0].archetypeID), I.value = d;
4317
+ }
4318
+ function Ie() {
4319
+ const d = document.getElementById("main-canvas");
4320
+ d.addEventListener("touchmove", O, { passive: !1 });
4321
+ function O(ae) {
4322
+ ae.preventDefault(), window.scrollBy(0, 0);
4323
+ }
4324
+ d.addEventListener(
4325
+ "mouseenter",
4326
+ () => {
4327
+ document.addEventListener("wheel", G, {
4328
+ passive: !1
4329
+ });
4330
+ },
4331
+ { passive: !1 }
4332
+ ), d.addEventListener(
4333
+ "mouseleave",
4334
+ () => {
4335
+ document.removeEventListener("wheel", G);
4336
+ },
4337
+ { passive: !1 }
4338
+ );
4339
+ function G(ae) {
4340
+ ae.preventDefault(), window.scrollBy(0, 0);
4341
+ }
4342
+ }
4343
+ async function Me(d) {
4344
+ try {
4345
+ return await Qe(`${d}/config.json`);
4346
+ } catch (O) {
4347
+ console.error(
4348
+ "Error loading config.json - ",
4349
+ `${d}/config.json`,
4350
+ O
4351
+ );
4352
+ return;
4353
+ }
4354
+ }
4355
+ async function Pe(d, O, G) {
4356
+ try {
4357
+ return await Qe(
4358
+ `${d}/${O}/${G}/apartment.json`
4359
+ );
4360
+ } catch (ae) {
4361
+ console.error(
4362
+ "Error loading apartment.json - ",
4363
+ `${d}/${O}/${G}/apartment.json`,
4364
+ ae
4365
+ );
4366
+ return;
4367
+ }
4368
+ }
4369
+ async function Ve(d, O, G) {
4370
+ try {
4371
+ return await Qe(
4372
+ `${d}/${O}/${G}/thumbs.json`
4373
+ );
4374
+ } catch {
4375
+ console.error(
4376
+ "Error loading thumbs.json - ",
4377
+ `${d}/${O}/${G}/thumbs.json`
4378
+ );
4379
+ return;
4380
+ }
4381
+ }
4382
+ async function Ge(d, O, G) {
4383
+ try {
4384
+ return await Qe(
4385
+ `${d}/${O}/${G}/minimap/minimap.json`
4386
+ );
4387
+ } catch {
4388
+ console.error(
4389
+ "Error loading minimap.json - ",
4390
+ `${d}/${O}/${G}/minimap/minimap.json`
4391
+ );
4392
+ return;
4393
+ }
4394
+ }
4395
+ function Ae() {
4396
+ let d = m.value + 1;
4397
+ d >= W.value.length && (d = 0), m.value = d, P(W.value[m.value].id);
4398
+ }
4399
+ function Ne() {
4400
+ let d = m.value - 1;
4401
+ d < 0 && (d = W.value.length - 1), m.value = d, P(W.value[m.value].id);
4402
+ }
4403
+ function j(d, O = !0) {
4404
+ let G = W.value.findIndex((ae) => ae.id === d);
4405
+ G != -1 && (m.value = G, O && P(d));
4406
+ }
4407
+ function P(d) {
4408
+ _.value = d;
4409
+ }
4410
+ function le(d) {
4411
+ I.value = d, l("onInteriorUpdate", d), l("onCameraUpdate", L.value, i.value);
4412
+ }
4413
+ function Se(d) {
4414
+ j(d, !1), L.value = d, l("onCameraUpdate", d, i.value);
4415
+ }
4416
+ function Ee(d) {
4417
+ C.value = d;
4418
+ }
4419
+ function Fe(d) {
4420
+ E.value = d;
4421
+ }
4422
+ function we(d) {
4423
+ D.value = d;
4424
+ }
4425
+ function ke(d, O) {
4426
+ }
4427
+ function rt(d) {
4428
+ v.value = d, e.playerSettings && v.value.updateSettings(e.playerSettings);
4429
+ }
4430
+ function Mt() {
4431
+ f.value.toggle(), window.scrollTo({ top: 150, behavior: "smooth" });
4432
+ }
4433
+ function St() {
4434
+ g.value = !g.value;
4435
+ }
4436
+ function ut(d) {
4437
+ R.value = d;
4438
+ }
4439
+ async function Et() {
4440
+ const d = 180 / Math.PI, O = await v.value.takePhoto(), G = v.value.getRotationEuler(), ae = v.value.getCurrentCamera(), Ue = new wl(O, ae), Ut = [
4441
+ G.x * d,
4442
+ G.y * d,
4443
+ G.z * d
4444
+ ];
4445
+ return l("onSnapshot", Ue, Ut), Ue;
4446
+ }
4447
+ function et(d) {
4448
+ let O = d;
4449
+ return b.value ? O = `${e.fileLoader.getURL(d)}` : e.adminMode && (O = O + `?v=${Date.now()}`), O;
4450
+ }
4451
+ async function Qe(d) {
4452
+ const O = et(d);
4453
+ try {
4454
+ return (await gt.get(O)).data;
4455
+ } catch (G) {
4456
+ throw new Error(G);
4457
+ }
4458
+ }
4459
+ function Ft(d) {
4460
+ v.value.updateSettings(d);
4461
+ }
4462
+ function xt(d) {
4463
+ l("saveSettings", d);
4464
+ }
4465
+ function Bt(d) {
4466
+ if (d === void 0)
4467
+ return null;
4468
+ const O = Math.floor(d), G = Math.floor((O - d) * 60);
4469
+ return { hours: O, minutes: G };
4470
+ }
4471
+ function Vt(d) {
4472
+ return d.replace(/\/$/, "");
4473
+ }
4474
+ return (d, O) => {
4475
+ const G = T("v-btn");
4476
+ return h(), F("div", kl, [
4477
+ n.value ? (h(), F("div", bl, "Error loading the player!!")) : H("", !0),
4478
+ o("div", yl, [
4479
+ !f.value.isActive && p.value && L.value && K.value && A.value ? (h(), N(vt, {
4480
+ key: 0,
4481
+ allCameras: q.value,
4482
+ rootUrl: U.value,
4483
+ level: w.value,
4484
+ backgroundImage: ve.value,
4485
+ minimapJSON: p.value.storeys,
4486
+ rotation: C.value,
4487
+ currentCamera: L.value,
4488
+ minimapCamera: K.value,
4489
+ onClose: O[0] || (O[0] = (ae) => A.value = !1),
4490
+ onSetBackgroundImage: ut
4491
+ }, null, 8, ["allCameras", "rootUrl", "level", "backgroundImage", "minimapJSON", "rotation", "currentCamera", "minimapCamera"])) : H("", !0),
4492
+ $.value && _.value ? (h(), F("div", _l, [
4493
+ y(fn, {
4494
+ ref: "player",
4495
+ "file-loader": d.fileLoader,
4496
+ style: re({ zIndex: g.value ? 1 : 2 }),
4497
+ showStaticImage: g.value,
4498
+ isFullScreen: f.value.isActive,
4499
+ rootUrl: U.value,
4500
+ currentCameraId: _.value,
4501
+ "mouse-sensitivity": d.mouseSensitivity,
4502
+ "is-in-iframe": d.isInIframe,
4503
+ onNewCameraCallback: Se,
4504
+ onNewRotationCallback: Ee,
4505
+ onNewFloorCallback: Fe,
4506
+ onNewFovCallback: we,
4507
+ onNewSizeCallback: ke,
4508
+ onPlayerApiCallback: rt
4509
+ }, {
4510
+ "slideshow-image": M(() => [
4511
+ g.value ? (h(), N(Tn, {
4512
+ key: 0,
4513
+ image: S.value
4514
+ }, null, 8, ["image"])) : H("", !0)
4515
+ ]),
4516
+ "top-left": M(() => [
4517
+ d.adminMode ? de((h(), N(G, {
4518
+ key: 0,
4519
+ density: "comfortable",
4520
+ icon: "mdi-cog-outline",
4521
+ elevation: "3",
4522
+ class: "mr-2",
4523
+ onClick: O[1] || (O[1] = (ae) => a.value = !a.value)
4524
+ }, null, 512)), [
4525
+ [me, c.value]
4526
+ ]) : H("", !0),
4527
+ p.value && _.value && K.value ? de((h(), N(G, {
4528
+ key: 1,
4529
+ density: "comfortable",
4530
+ elevation: "3",
4531
+ icon: "mdi-floor-plan",
4532
+ class: "mr-2",
4533
+ onClick: O[2] || (O[2] = (ae) => A.value = !A.value)
4534
+ }, null, 512)), [
4535
+ [me, c.value]
4536
+ ]) : H("", !0),
4537
+ c.value && d.showFloorLevel && ee.value.length > 1 ? (h(), N(In, {
4538
+ key: 2,
4539
+ level: E.value,
4540
+ "floor-levels": ee.value,
4541
+ onLevel: Fe
4542
+ }, null, 8, ["level", "floor-levels"])) : H("", !0),
4543
+ c.value && d.adminMode && a.value ? (h(), F("div", Cl, [
4544
+ y(Na, {
4545
+ "project-slug": d.projectSlug,
4546
+ initialSettings: d.playerSettings,
4547
+ onUpdateSettings: Ft,
4548
+ onSaveSettings: xt
4549
+ }, null, 8, ["project-slug", "initialSettings"])
4550
+ ])) : H("", !0)
4551
+ ]),
4552
+ "top-center": M(() => [
4553
+ c.value ? (h(), N(qn, {
4554
+ key: 0,
4555
+ "return-url": d.websiteUrl
4556
+ }, null, 8, ["return-url"])) : H("", !0)
4557
+ ]),
4558
+ "top-right": M(() => [
4559
+ i.value && d.showCompass ? de((h(), F("div", Al, [
4560
+ y(Un, { rotation: C.value }, null, 8, ["rotation"])
4561
+ ], 512)), [
4562
+ [me, c.value]
4563
+ ]) : H("", !0),
4564
+ c.value && i.value && ne.value && d.showTimeOfDay ? (h(), N(Nn, {
4565
+ key: 1,
4566
+ hours: ue.value.hours,
4567
+ minutes: ue.value.minutes
4568
+ }, null, 8, ["hours", "minutes"])) : H("", !0)
4569
+ ]),
4570
+ "center-left": M(() => [
4571
+ y(ze, { name: "slide-x-transition" }, {
4572
+ default: M(() => [
4573
+ g.value ? (h(), N(G, {
4574
+ key: 0,
4575
+ density: "comfortable",
4576
+ elevation: "3",
4577
+ icon: "mdi-chevron-left",
4578
+ onClick: Ne
4579
+ })) : H("", !0)
4580
+ ]),
4581
+ _: 1
4582
+ })
4583
+ ]),
4584
+ "center-center": M(() => [
4585
+ y(Aa, {
4586
+ project: B.value,
4587
+ onCloseTutorial: O[3] || (O[3] = (ae) => c.value = !0)
4588
+ }, null, 8, ["project"]),
4589
+ f.value.isActive && p.value && L.value && K.value && A.value ? (h(), N(vt, {
4590
+ key: 0,
4591
+ allCameras: q.value,
4592
+ rootUrl: U.value,
4593
+ minimapJSON: p.value.storeys,
4594
+ backgroundImage: ve.value,
4595
+ rotation: C.value,
4596
+ currentCamera: L.value,
4597
+ minimapCamera: K.value,
4598
+ level: w.value,
4599
+ onClose: O[4] || (O[4] = (ae) => A.value = !1),
4600
+ onSetBackgroundImage: ut
4601
+ }, null, 8, ["allCameras", "rootUrl", "minimapJSON", "backgroundImage", "rotation", "currentCamera", "minimapCamera", "level"])) : H("", !0)
4602
+ ]),
4603
+ "center-right": M(() => [
4604
+ y(ze, { name: "slide-x-reverse-transition" }, {
4605
+ default: M(() => [
4606
+ g.value ? (h(), N(G, {
4607
+ key: 0,
4608
+ density: "comfortable",
4609
+ elevation: "3",
4610
+ icon: "mdi-chevron-right",
4611
+ onClick: Ae
4612
+ })) : H("", !0)
4613
+ ]),
4614
+ _: 1
4615
+ })
4616
+ ]),
4617
+ "bottom-left": M(() => [
4618
+ c.value && d.showFullScreen ? (h(), N(Wn, {
4619
+ key: 0,
4620
+ isFullScreen: f.value.isActive,
4621
+ class: "btn-fullscreen",
4622
+ onToggleFullscreen: Mt
4623
+ }, null, 8, ["isFullScreen"])) : H("", !0),
4624
+ c.value && d.showSnapshot ? (h(), F("div", Ll, [
4625
+ y(G, {
4626
+ density: "comfortable",
4627
+ elevation: "3",
4628
+ icon: "mdi-camera",
4629
+ onClick: Et
4630
+ })
4631
+ ])) : H("", !0),
4632
+ c.value && d.showShare && !f.value.isActive ? (h(), F("div", Il, [
4633
+ y(En)
4634
+ ])) : H("", !0)
4635
+ ]),
4636
+ "bottom-center": M(() => [
4637
+ c.value && d.showCarousel ? (h(), F("div", Ml, [
4638
+ d.displayViewModeSwitch ? (h(), N(Gn, {
4639
+ key: 0,
4640
+ "show-static-image": g.value,
4641
+ onToggle: St
4642
+ }, null, 8, ["show-static-image"])) : H("", !0),
4643
+ c.value && f.value.isActive ? (h(), N(dt, {
4644
+ key: 1,
4645
+ class: ye([f.value.isActive ? "full-screen" : ""]),
4646
+ thumbnails: W.value,
4647
+ active: m.value,
4648
+ onNext: Ae,
4649
+ onPrevious: Ne,
4650
+ onGoto: j
4651
+ }, null, 8, ["class", "thumbnails", "active"])) : H("", !0)
4652
+ ])) : H("", !0)
4653
+ ]),
4654
+ "bottom-right": M(() => [
4655
+ c.value && d.showInteriorOptions && X.value ? (h(), N(xn, {
4656
+ key: 0,
4657
+ availableArchetypes: X.value,
4658
+ selectedIndex: x.value,
4659
+ onSelectInterior: le
4660
+ }, null, 8, ["availableArchetypes", "selectedIndex"])) : H("", !0)
4661
+ ]),
4662
+ _: 1
4663
+ }, 8, ["file-loader", "style", "showStaticImage", "isFullScreen", "rootUrl", "currentCameraId", "mouse-sensitivity", "is-in-iframe"]),
4664
+ d.showCarousel && k.value ? (h(), N(dt, {
4665
+ key: 0,
4666
+ thumbnails: W.value,
4667
+ active: m.value,
4668
+ onNext: Ae,
4669
+ onPrevious: Ne,
4670
+ onGoto: j
4671
+ }, null, 8, ["thumbnails", "active"])) : H("", !0)
4672
+ ])) : H("", !0)
4673
+ ])
4674
+ ]);
4675
+ };
4676
+ }
4677
+ }), El = /* @__PURE__ */ te(Sl, [["__scopeId", "data-v-8e6a405e"]]), Fl = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4678
+ __proto__: null,
4679
+ VApartmentChooser: yo,
4680
+ VApartmentChooserNavigation: bt,
4681
+ VApartmentChooserRaster: wt,
4682
+ VApartmentChooserRotator: yt,
4683
+ VApartmentChooserSvg: kt,
4684
+ VBuildingChooser: zo,
4685
+ VBuildingChooserRaster: It,
4686
+ VBuildingChooserRasterOverlay: Lt,
4687
+ VBuildingChooserSceneImageStack: st,
4688
+ VBuildingChooserSunSimControl: it,
4689
+ VBuildingChooserSvg: At,
4690
+ VFloatingCard: Ze,
4691
+ VHoverProbe: He,
4692
+ VNorthDirection: Ke,
4693
+ VVirtualTour: El,
4694
+ VZoomBox: Xe
4695
+ }, Symbol.toStringTag, { value: "Module" }));
4696
+ class Ul {
4697
+ constructor(t) {
4698
+ J(this, "_data");
4699
+ this._data = t;
4700
+ }
4701
+ getPixel(t, e) {
4702
+ const l = this._data[t][e];
4703
+ if (l !== " ") {
4704
+ const a = Number.parseInt(l);
4705
+ return [a, a, a, 255];
4706
+ } else
4707
+ return [0, 0, 0, 0];
4708
+ }
4709
+ }
4710
+ const Dl = function(t) {
4711
+ Object.entries(Fl).forEach(([e, l]) => {
4712
+ t.component(e, l);
4713
+ });
4714
+ };
4715
+ export {
4716
+ tt as BatchLoadTracker,
4717
+ Re as BuildingMap,
4718
+ Ct as BuildingPickerResourceProvider,
4719
+ co as BuildingViewerModel,
4720
+ Te as CanvasRaster,
4721
+ Je as DayOfYearSelector,
4722
+ Le as I18N,
4723
+ $e as ResourceLoader,
4724
+ at as RotationStep,
4725
+ Ul as SampleRaster,
4726
+ qt as SceneRotator,
4727
+ yo as VApartmentChooser,
4728
+ bt as VApartmentChooserNavigation,
4729
+ wt as VApartmentChooserRaster,
4730
+ yt as VApartmentChooserRotator,
4731
+ kt as VApartmentChooserSvg,
4732
+ zo as VBuildingChooser,
4733
+ It as VBuildingChooserRaster,
4734
+ Lt as VBuildingChooserRasterOverlay,
4735
+ st as VBuildingChooserSceneImageStack,
4736
+ it as VBuildingChooserSunSimControl,
4737
+ At as VBuildingChooserSvg,
4738
+ Ze as VFloatingCard,
4739
+ He as VHoverProbe,
4740
+ Ke as VNorthDirection,
4741
+ El as VVirtualTour,
4742
+ Xe as VZoomBox,
4743
+ Dl as default
4744
+ };