@expofp/floorplan 3.26.0 → 3.27.0

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 (203) hide show
  1. package/dist/browser/{Button-DI5g1CPS.js → Button-e8P-AcfW.js} +6 -6
  2. package/dist/browser/{CookieConsent-Qws_nQ3N.js → CookieConsent-DT6PZdD-.js} +8 -8
  3. package/dist/browser/{Debug-DTNPNDds.js → Debug-Btnxv9GC.js} +8 -8
  4. package/dist/browser/DebugTools-CH_HoQal.js +1922 -0
  5. package/dist/browser/{Demo-BDZjOBQc.js → Demo-DZoFFss-.js} +10 -10
  6. package/dist/browser/{Free-Cage9TkV.js → Free-DiFQkGSU.js} +10 -10
  7. package/dist/browser/{GalleryContainer-EeLKgziN.js → GalleryContainer-aJ6EZ5I3.js} +11 -11
  8. package/dist/browser/{GpsLoader-CJMX_mJN.js → GpsLoader-Bu9mBOam.js} +34 -34
  9. package/dist/browser/{KioskStore-BSza48xl.js → KioskStore-DUC4jNn0.js} +58 -107
  10. package/dist/browser/{MaplibreAdapter-evVQiVQj.js → MaplibreAdapter-DIlDXt73.js} +2056 -2141
  11. package/dist/browser/{ModalContainer-CTKDfIyR.js → ModalContainer-CVRxdpt2.js} +11 -11
  12. package/dist/browser/{PermissionNotice-O469DuWb.js → PermissionNotice-B5X5RQja.js} +7 -7
  13. package/dist/browser/SetKioskMode-BbDnU98F.js +48 -0
  14. package/dist/browser/{ShowKiosk-DumFiuHU.js → ShowKiosk-B7HfONvN.js} +11 -11
  15. package/dist/browser/{ViewerMenuPanel-ByFemA_T.js → ViewerMenuPanel-CT6kvVUw.js} +17 -17
  16. package/dist/browser/{add-debug-secret-listener-TLumKuSo.js → add-debug-secret-listener-Dvv-Pg0-.js} +1 -1
  17. package/dist/browser/{adopt-global-settings-ghJrZaU5.js → adopt-global-settings-CXzCKJtp.js} +10 -10
  18. package/dist/browser/{boolean-editor-WIpm-pFP.js → boolean-editor-CHMR9ZwP.js} +10 -10
  19. package/dist/browser/{bootIntercom-BR_Ehbyl.js → bootIntercom-DQcGuly8.js} +3 -3
  20. package/dist/browser/bundle.json +77 -65
  21. package/dist/browser/camera-events-BkrzcISl.js +18 -0
  22. package/dist/browser/{classnames-BmlkHMS8.js → classnames-BYuGpzao.js} +2 -2
  23. package/dist/browser/{client-CIHxJZmk.js → client-hxMr1frV.js} +793 -992
  24. package/dist/browser/{components-7lxOhyyi.js → components-DiB2l4Q7.js} +1952 -2013
  25. package/dist/browser/debug-context-CfyAAxAt.js +24315 -0
  26. package/dist/browser/{debug-overlay-B7jCqVlX.js → debug-overlay-PYUvPcx-.js} +11 -11
  27. package/dist/browser/{debug-ui-D1ApG52e.js → debug-ui-BXRAYxv6.js} +7 -7
  28. package/dist/browser/dimming-Dj-1kBgQ.js +1108 -0
  29. package/dist/browser/{dist-C67OkD_4.js → dist-30RVEJTr.js} +7 -7
  30. package/dist/browser/{dist-BrF5yJyj.js → dist-DgGMS59X.js} +6 -6
  31. package/dist/browser/{dist-CnpnDA-V.js → dist-opCvrhNh.js} +3 -3
  32. package/dist/browser/{efp-debug-init-BqEN61Fo.js → efp-debug-init-CYfrcz9M.js} +4 -4
  33. package/dist/browser/{enum-editor-Cy6VeZZd.js → enum-editor-BYO96W3-.js} +5 -5
  34. package/dist/browser/{es5-DyV1fctu.js → es5-Bpzk_wCi.js} +2 -2
  35. package/dist/browser/{event-not-found-BpFVdXz_.js → event-not-found-DEepFxEc.js} +1 -1
  36. package/dist/browser/{exports-C7NzL4lf.js → exports-Bo5VUoiX.js} +1 -1
  37. package/dist/browser/{favicon-BHscWjwp.js → favicon-Bf88cI9_.js} +1 -1
  38. package/dist/browser/{fetch-retry.umd-BytZeydp.js → fetch-retry.umd-D2BnNN8g.js} +2 -2
  39. package/dist/browser/{flex-BQBLAC6l.js → flex-B5cqWC1b.js} +6 -6
  40. package/dist/browser/{floorplan.loader-DkaQPhwC.js → floorplan.loader-D3lRYRJS.js} +10 -10
  41. package/dist/browser/{floorplan.ready-DwuXZphI.js → floorplan.ready-CsdDpbEv.js} +344 -308
  42. package/dist/browser/{fuse-DZTwJ52u.js → fuse-CzalO4Mu.js} +2 -2
  43. package/dist/browser/{i18n-Bcv8xw_q.js → i18n-D1sb3MoT.js} +5 -5
  44. package/dist/browser/index.js +14 -14
  45. package/dist/browser/{index.module-BFxDVa3K.js → index.module-JxYvexTC.js} +4 -4
  46. package/dist/browser/{integrateKiosk-VTNZSSfD.js → integrateKiosk-e4HqZu2W.js} +5 -5
  47. package/dist/browser/{is-webview-CjItzxdV.js → is-webview-ChPDTaTY.js} +1 -1
  48. package/dist/browser/{jsx-runtime-CT2c-IhD.js → jsx-runtime-Ca1Wj_4-.js} +2 -2
  49. package/dist/browser/{kiosk-record-v7r7q7t0.js → kiosk-record-C2cafcoW.js} +1 -1
  50. package/dist/browser/{lib-DGh8lZgT.js → lib-DXqE6M9Z.js} +3 -3
  51. package/dist/browser/{loadImage-a_ahClbD.js → loadImage-8qYzT9NG.js} +4 -4
  52. package/dist/browser/{logDeviceInfo-DHfa6NcE.js → logDeviceInfo-CF95RwQH.js} +9 -9
  53. package/dist/browser/{mobx-dAtztuiQ.js → mobx-B8aGIDdz.js} +7 -7
  54. package/dist/browser/{optional-boolean-editor-D43-yLO3.js → optional-boolean-editor-D02Q8KUS.js} +4 -4
  55. package/dist/browser/{optional-enum-editor-Cvn8TV-x.js → optional-enum-editor-RV_EKfNQ.js} +5 -5
  56. package/dist/browser/{optional-string-editor-sY0yVw_j.js → optional-string-editor-D_t_aZG2.js} +5 -5
  57. package/dist/browser/{particles.min-BD7iDSr6.js → particles.min-CDyH_67D.js} +2 -2
  58. package/dist/browser/{react-BJopqGbW.js → react-CDmIhEY6.js} +2 -2
  59. package/dist/browser/{react-dom-B77nDdqp.js → react-dom-PGvJwDoR.js} +3 -3
  60. package/dist/browser/{rolldown-runtime-BmHtYG9i.js → rolldown-runtime-CwqkRsWu.js} +1 -1
  61. package/dist/browser/scheduler-MBFOnOYr.js +212 -0
  62. package/dist/browser/{select-ByU-Ym6-.js → select-2x53pvd0.js} +11 -11
  63. package/dist/browser/{settings-CEH1i0Pj.js → settings-BCkl8gdb.js} +2 -2
  64. package/dist/browser/{settings-item-_PTji9Bz.js → settings-item-DT6Vnw06.js} +7 -7
  65. package/dist/browser/store-Dej5FGrq.js +31205 -0
  66. package/dist/browser/{string-editor-DaF1t7MK.js → string-editor-w9YDgRoR.js} +5 -5
  67. package/dist/browser/{text-field-XRLZPyNV.js → text-field-ricOc0h0.js} +6 -6
  68. package/dist/browser/{theme-D0OZcdto.js → theme-Ce7vpk9b.js} +9 -9
  69. package/dist/browser/{ui-7ozfXlN3.js → ui-PDV2rEkU.js} +9 -9
  70. package/dist/browser/{useRenderTarget-BG295f3e.js → useRenderTarget-DroCs5kL.js} +5 -5
  71. package/dist/browser/viewport-Jwms2MJD.js +41 -0
  72. package/dist/esm/components/Kiosk/KioskStore.d.ts +5 -2
  73. package/dist/esm/components/Kiosk/KioskStore.js +1 -1
  74. package/dist/esm/components/Kiosk/SetKioskMode.d.ts +1 -2
  75. package/dist/esm/components/Kiosk/SetKioskMode.js +1 -1
  76. package/dist/esm/components/Map/Map.d.ts +1 -1
  77. package/dist/esm/components/Map/Map.js +1 -1
  78. package/dist/esm/components/Map/MapCamera.d.ts +17 -0
  79. package/dist/esm/components/Map/MapCamera.js +1 -0
  80. package/dist/esm/components/Map/MapViewport.d.ts +12 -0
  81. package/dist/esm/components/Map/MapViewport.js +1 -0
  82. package/dist/esm/components/Map/booth-by-xy.d.ts +13 -0
  83. package/dist/esm/components/Map/booth-by-xy.js +1 -1
  84. package/dist/esm/components/Map/camera-events.d.ts +16 -0
  85. package/dist/esm/components/Map/camera-events.js +1 -0
  86. package/dist/esm/components/Map/camera.d.ts +48 -0
  87. package/dist/esm/components/Map/camera.js +1 -0
  88. package/dist/esm/components/Map/drawing/config/TextFitter.d.ts +1 -1
  89. package/dist/esm/components/Map/drawing/config/config-all.d.ts +1 -2
  90. package/dist/esm/components/Map/drawing/config/config-all.js +1 -1
  91. package/dist/esm/components/Map/drawing/config/config-bg.d.ts +1 -2
  92. package/dist/esm/components/Map/drawing/config/config-bg.js +1 -1
  93. package/dist/esm/components/Map/drawing/config/config-booth-badge.d.ts +70 -3
  94. package/dist/esm/components/Map/drawing/config/config-booth-badge.js +1 -1
  95. package/dist/esm/components/Map/drawing/config/config-booth-bg.d.ts +3 -6
  96. package/dist/esm/components/Map/drawing/config/config-booth-bg.js +1 -1
  97. package/dist/esm/components/Map/drawing/config/config-booth-bookmark.d.ts +11 -7
  98. package/dist/esm/components/Map/drawing/config/config-booth-bookmark.js +1 -1
  99. package/dist/esm/components/Map/drawing/config/config-booth-border.d.ts +2 -3
  100. package/dist/esm/components/Map/drawing/config/config-booth-border.js +1 -1
  101. package/dist/esm/components/Map/drawing/config/config-booth-labels-special.d.ts +16 -3
  102. package/dist/esm/components/Map/drawing/config/config-booth-labels-special.js +2 -2
  103. package/dist/esm/components/Map/drawing/config/config-booth-labels.d.ts +18 -4
  104. package/dist/esm/components/Map/drawing/config/config-booth-labels.js +1 -1
  105. package/dist/esm/components/Map/drawing/config/config-booths.d.ts +1 -2
  106. package/dist/esm/components/Map/drawing/config/config-booths.js +1 -1
  107. package/dist/esm/components/Map/drawing/config/config-load-layer.d.ts +1 -2
  108. package/dist/esm/components/Map/drawing/config/config-load-layer.js +1 -1
  109. package/dist/esm/components/Map/drawing/config/config-markers.d.ts +23 -2
  110. package/dist/esm/components/Map/drawing/config/config-markers.js +1 -1
  111. package/dist/esm/components/Map/drawing/config/layer-images.d.ts +35 -0
  112. package/dist/esm/components/Map/drawing/config/layer-images.js +1 -0
  113. package/dist/esm/components/Map/drawing/config/loadBoothsImages.d.ts +38 -3
  114. package/dist/esm/components/Map/drawing/config/loadBoothsImages.js +1 -1
  115. package/dist/esm/components/Map/pointer.d.ts +73 -0
  116. package/dist/esm/components/Map/pointer.js +1 -0
  117. package/dist/esm/components/Map/scene.d.ts +20 -0
  118. package/dist/esm/components/Map/scene.js +1 -0
  119. package/dist/esm/components/Map/traffic/trafficLayers.d.ts +2 -7
  120. package/dist/esm/components/Map/traffic/trafficLayers.js +1 -1
  121. package/dist/esm/components/Map/traffic/useBuildRoute.d.ts +4 -3
  122. package/dist/esm/components/Map/traffic/useBuildRoute.js +6 -6
  123. package/dist/esm/components/Map/traffic/useManageTraffic.d.ts +4 -3
  124. package/dist/esm/components/Map/traffic/useManageTraffic.js +1 -1
  125. package/dist/esm/components/Map/viewport.d.ts +63 -0
  126. package/dist/esm/components/Map/viewport.js +1 -0
  127. package/dist/esm/components/Maplibre/MaplibreAdapter.d.ts +6 -2
  128. package/dist/esm/components/Maplibre/MaplibreAdapter.js +1 -1
  129. package/dist/esm/components/Maplibre/MaplibreWrapper.d.ts +30 -8
  130. package/dist/esm/components/Maplibre/MaplibreWrapper.js +1 -1
  131. package/dist/esm/components/Maplibre/useDimming.d.ts +2 -2
  132. package/dist/esm/components/Maplibre/useDimming.js +1 -1
  133. package/dist/esm/components/Maplibre/useKioskIdleEvents.d.ts +5 -6
  134. package/dist/esm/components/Maplibre/useLayerVisibilitySync.d.ts +2 -2
  135. package/dist/esm/components/Maplibre/useLayerVisibilitySync.js +1 -1
  136. package/dist/esm/components/Maplibre/usePoiMarkers.d.ts +1 -2
  137. package/dist/esm/components/Maplibre/useWayfindingAndMarkers.d.ts +8 -5
  138. package/dist/esm/components/Maplibre/useWayfindingAndMarkers.js +1 -1
  139. package/dist/esm/components/Maplibre/utils/layer-defs.d.ts +8 -3
  140. package/dist/esm/components/Maplibre/utils/layer-defs.js +1 -1
  141. package/dist/esm/components/Maplibre/utils/poi-marker-hit-test.d.ts +3 -3
  142. package/dist/esm/components/Ws.js +1 -1
  143. package/dist/esm/engine/defs.d.ts +30 -0
  144. package/dist/esm/engine/defs.js +3 -0
  145. package/dist/esm/engine/fonts.js +1 -0
  146. package/dist/esm/engine/update-def.d.ts +52 -0
  147. package/dist/esm/engine/update-def.js +1 -0
  148. package/dist/esm/engine/utils/rotation.d.ts +6 -0
  149. package/dist/esm/engine/utils/rotation.js +1 -0
  150. package/dist/esm/floorplan.ready.d.ts +2 -0
  151. package/dist/esm/floorplan.ready.js +1 -1
  152. package/dist/esm/store/BoothStore.d.ts +11 -0
  153. package/dist/esm/store/LayerStore.d.ts +2 -0
  154. package/dist/esm/store/LayerStore.js +1 -1
  155. package/dist/esm/store/RootStore.d.ts +0 -2
  156. package/dist/esm/store/RootStore.js +1 -1
  157. package/dist/esm/store/RouteStore.js +1 -1
  158. package/dist/esm/store/UIState.js +1 -1
  159. package/dist/esm/store/details-events.d.ts +11 -0
  160. package/dist/esm/store/details-events.js +1 -0
  161. package/dist/esm/store/init/init-booths.js +1 -1
  162. package/dist/esm/utils/dimming.d.ts +13 -2
  163. package/dist/esm/utils/dimming.js +1 -1
  164. package/dist/esm/utils/mobx.d.ts +2 -2
  165. package/dist/esm/utils/mobx.js +1 -1
  166. package/dist/esm/utils/scene-bounds.d.ts +1 -1
  167. package/dist/esm/utils/scene-bounds.js +1 -1
  168. package/dist/esm/wayfinding/adapters/canvasIconProvider.js +1 -1
  169. package/dist/esm/wayfinding/createWayfinding.d.ts +19 -2
  170. package/dist/esm/wayfinding/createWayfinding.js +1 -1
  171. package/package.json +11 -10
  172. package/dist/browser/SetKioskMode-DUk4c-Gs.js +0 -57
  173. package/dist/browser/booth-by-xy-CyZpg1Fn.js +0 -1130
  174. package/dist/browser/main-sUuehgQu.js +0 -289
  175. package/dist/browser/store-Oj0dGPnb.js +0 -41431
  176. package/dist/esm/components/Map/pointInConvexQuad.d.ts +0 -3
  177. package/dist/esm/components/Map/pointInConvexQuad.js +0 -1
  178. package/dist/esm/components/Map/visibleArea.d.ts +0 -16
  179. package/dist/esm/components/Map/visibleArea.js +0 -1
  180. package/dist/esm/components/Maplibre/useRendererEvents.d.ts +0 -9
  181. package/dist/esm/components/Maplibre/useRendererEvents.js +0 -1
  182. package/dist/esm/components/Maplibre/utils/update-pump.d.ts +0 -18
  183. package/dist/esm/components/Maplibre/utils/update-pump.js +0 -1
  184. package/dist/esm/renderer/HandlerRegistry.d.ts +0 -18
  185. package/dist/esm/renderer/HandlerRegistry.js +0 -1
  186. package/dist/esm/renderer/RendererService.d.ts +0 -44
  187. package/dist/esm/renderer/RendererService.js +0 -1
  188. package/dist/esm/renderer/engine-core/defs.d.ts +0 -40
  189. package/dist/esm/renderer/engine-core/defs.js +0 -3
  190. package/dist/esm/renderer/engine-core/fonts.js +0 -1
  191. package/dist/esm/renderer/engine-core/settings.d.ts +0 -4
  192. package/dist/esm/renderer/engine-core/settings.js +0 -1
  193. package/dist/esm/renderer/engine-core/types.d.ts +0 -50
  194. package/dist/esm/renderer/engine-core/types.js +0 -1
  195. package/dist/esm/renderer/engine-core/update-def.d.ts +0 -12
  196. package/dist/esm/renderer/engine-core/update-def.js +0 -1
  197. package/dist/esm/renderer/engine-core/utils/rotation.d.ts +0 -17
  198. package/dist/esm/renderer/engine-core/utils/rotation.js +0 -1
  199. package/dist/esm/renderer/index.d.ts +0 -19
  200. package/dist/esm/renderer/index.js +0 -1
  201. /package/dist/esm/{renderer/engine-core → engine}/canvases.d.ts +0 -0
  202. /package/dist/esm/{renderer/engine-core → engine}/canvases.js +0 -0
  203. /package/dist/esm/{renderer/engine-core → engine}/fonts.d.ts +0 -0
@@ -1,14 +1,14 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.26.0" };
4
+ e.SENTRY_RELEASE = { id: "3.27.0" };
5
5
  var t = new e.Error().stack;
6
- t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "0a67f4c1-0ef6-428f-92c6-94c57178bf21", e._sentryDebugIdIdentifier = "sentry-dbid-0a67f4c1-0ef6-428f-92c6-94c57178bf21");
6
+ t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "edf52ee9-f3a6-424f-a5ff-f0c8342333ab", e._sentryDebugIdIdentifier = "sentry-dbid-edf52ee9-f3a6-424f-a5ff-f0c8342333ab");
7
7
  } catch {}
8
8
  })();
9
- import { t as e } from "./jsx-runtime-CT2c-IhD.js";
10
- import { t } from "./settings-item-_PTji9Bz.js";
11
- import { t as n } from "./text-field-XRLZPyNV.js";
9
+ import { t as e } from "./jsx-runtime-Ca1Wj_4-.js";
10
+ import { t } from "./settings-item-DT6Vnw06.js";
11
+ import { t as n } from "./text-field-ricOc0h0.js";
12
12
  //#region ../debug/src/lib/ui/string-editor.tsx
13
13
  var r = e(), i = (e) => {
14
14
  var i;
@@ -1,15 +1,15 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.26.0" };
4
+ e.SENTRY_RELEASE = { id: "3.27.0" };
5
5
  var t = new e.Error().stack;
6
- t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "9c5a0877-c176-4e2d-b51c-123d50ab2b3c", e._sentryDebugIdIdentifier = "sentry-dbid-9c5a0877-c176-4e2d-b51c-123d50ab2b3c");
6
+ t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "b57a1337-f6ba-488a-8e6f-60f9358b45a2", e._sentryDebugIdIdentifier = "sentry-dbid-b57a1337-f6ba-488a-8e6f-60f9358b45a2");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-BmHtYG9i.js";
10
- import { t } from "./react-BJopqGbW.js";
11
- import { D as n, i as r, l as i, n as a, s as o, u as s, y as c } from "./flex-BQBLAC6l.js";
12
- import { t as l } from "./classnames-BmlkHMS8.js";
9
+ import { r as e } from "./rolldown-runtime-CwqkRsWu.js";
10
+ import { t } from "./react-CDmIhEY6.js";
11
+ import { D as n, i as r, l as i, n as a, s as o, u as s, y as c } from "./flex-B5cqWC1b.js";
12
+ import { t as l } from "./classnames-BYuGpzao.js";
13
13
  //#region ../../node_modules/.pnpm/@radix-ui+themes@3.3.0_@types+react-dom@19.2.3_@types+react@19.2.17__@types+react@19.2._5ea800d4e947acedb1fa1275f1697b17/node_modules/@radix-ui/themes/dist/esm/components/text-field.props.js
14
14
  var u = /* @__PURE__ */ e(t()), d = /* @__PURE__ */ e(l()), f = {
15
15
  size: {
@@ -1,18 +1,18 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.26.0" };
4
+ e.SENTRY_RELEASE = { id: "3.27.0" };
5
5
  var t = new e.Error().stack;
6
- t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "f658045a-5be7-4ea4-a4b2-ddea9ab9caf3", e._sentryDebugIdIdentifier = "sentry-dbid-f658045a-5be7-4ea4-a4b2-ddea9ab9caf3");
6
+ t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "f5429b84-6f5b-4b20-898f-e5345902ef44", e._sentryDebugIdIdentifier = "sentry-dbid-f5429b84-6f5b-4b20-898f-e5345902ef44");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-BmHtYG9i.js";
10
- import { t } from "./react-BJopqGbW.js";
11
- import { t as n } from "./jsx-runtime-CT2c-IhD.js";
12
- import { t as r } from "./react-dom-B77nDdqp.js";
13
- import { C as i, E as a, O as o, T as s, _ as c, o as l, v as u, w as d } from "./flex-BQBLAC6l.js";
14
- import { c as f, i as p, n as m, o as h, r as g, s as _, t as v } from "./dist-C67OkD_4.js";
15
- import { t as y } from "./classnames-BmlkHMS8.js";
9
+ import { r as e } from "./rolldown-runtime-CwqkRsWu.js";
10
+ import { t } from "./react-CDmIhEY6.js";
11
+ import { t as n } from "./jsx-runtime-Ca1Wj_4-.js";
12
+ import { t as r } from "./react-dom-PGvJwDoR.js";
13
+ import { C as i, E as a, O as o, T as s, _ as c, o as l, v as u, w as d } from "./flex-B5cqWC1b.js";
14
+ import { c as f, i as p, n as m, o as h, r as g, s as _, t as v } from "./dist-30RVEJTr.js";
15
+ import { t as y } from "./classnames-BYuGpzao.js";
16
16
  //#region ../../node_modules/.pnpm/@radix-ui+react-visually-hidden@1.2.3_@types+react-dom@19.2.3_@types+react@19.2.17__@ty_cffccd7838985066e8e1d993b5cb6017/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs
17
17
  var b = /* @__PURE__ */ e(r(), 1), x = /* @__PURE__ */ e(t(), 1), S = n(), C = Object.freeze({
18
18
  position: "absolute",
@@ -1,17 +1,17 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.26.0" };
4
+ e.SENTRY_RELEASE = { id: "3.27.0" };
5
5
  var t = new e.Error().stack;
6
- t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "3c34ab8b-5d65-4c06-8595-6ed371acabc5", e._sentryDebugIdIdentifier = "sentry-dbid-3c34ab8b-5d65-4c06-8595-6ed371acabc5");
6
+ t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "cbb5c555-77ff-4375-8420-80c8ae476dcf", e._sentryDebugIdIdentifier = "sentry-dbid-cbb5c555-77ff-4375-8420-80c8ae476dcf");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-BmHtYG9i.js";
10
- import { a as t, i as n, s as r } from "./efp-debug-init-BqEN61Fo.js";
11
- import { a as i, i as a } from "./adopt-global-settings-ghJrZaU5.js";
12
- import { t as o } from "./jsx-runtime-CT2c-IhD.js";
13
- import "./settings-CEH1i0Pj.js";
14
- import { t as s } from "./add-debug-secret-listener-TLumKuSo.js";
9
+ import { r as e } from "./rolldown-runtime-CwqkRsWu.js";
10
+ import { a as t, i as n, s as r } from "./efp-debug-init-CYfrcz9M.js";
11
+ import { a as i, i as a } from "./adopt-global-settings-CXzCKJtp.js";
12
+ import { t as o } from "./jsx-runtime-Ca1Wj_4-.js";
13
+ import "./settings-BCkl8gdb.js";
14
+ import { t as s } from "./add-debug-secret-listener-Dvv-Pg0-.js";
15
15
  //#region ../debug/src/lib/ui/render-debug-ui.tsx
16
16
  var c = /* @__PURE__ */ e(r(), 1), l = o(), u = !1;
17
17
  function d() {
@@ -26,7 +26,7 @@ function d() {
26
26
  }
27
27
  });
28
28
  let o = async (t) => {
29
- let { DebugUi: n } = await import("./debug-ui-D1ApG52e.js"), { createRoot: i } = await import("./client-CIHxJZmk.js").then((t) => /* @__PURE__ */ e(t.default, 1)), a = document.createElement("div");
29
+ let { DebugUi: n } = await import("./debug-ui-BXRAYxv6.js"), { createRoot: i } = await import("./client-hxMr1frV.js").then((t) => /* @__PURE__ */ e(t.t(), 1)), a = document.createElement("div");
30
30
  document.body.appendChild(a), i(a).render(/* @__PURE__ */ (0, l.jsx)(n, {
31
31
  useDebugButtonState: r.useState,
32
32
  open: t
@@ -1,14 +1,14 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.26.0" };
4
+ e.SENTRY_RELEASE = { id: "3.27.0" };
5
5
  var t = new e.Error().stack;
6
- t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "7407e64e-4c4e-4bfb-b2ef-80063ad22998", e._sentryDebugIdIdentifier = "sentry-dbid-7407e64e-4c4e-4bfb-b2ef-80063ad22998");
6
+ t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "39485aff-c926-4ecb-9ba3-8a127a388075", e._sentryDebugIdIdentifier = "sentry-dbid-39485aff-c926-4ecb-9ba3-8a127a388075");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-BmHtYG9i.js";
10
- import { t } from "./react-BJopqGbW.js";
11
- import { l as n } from "./store-Oj0dGPnb.js";
9
+ import { r as e } from "./rolldown-runtime-CwqkRsWu.js";
10
+ import { t } from "./react-CDmIhEY6.js";
11
+ import { l as n } from "./store-Dej5FGrq.js";
12
12
  //#region ../ui/src/shared/activeElement.ts
13
13
  var r = (e) => !!e && "activeElement" in e;
14
14
  function i(e) {
@@ -0,0 +1,41 @@
1
+ (function() {
2
+ try {
3
+ var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
+ e.SENTRY_RELEASE = { id: "3.27.0" };
5
+ var t = new e.Error().stack;
6
+ t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "df793f8e-2c61-4fcc-bf8c-e603b2d7b174", e._sentryDebugIdIdentifier = "sentry-dbid-df793f8e-2c61-4fcc-bf8c-e603b2d7b174");
7
+ } catch {}
8
+ })();
9
+ import { c as e, vt as t } from "./store-Dej5FGrq.js";
10
+ //#region src/components/Map/viewport.ts
11
+ function n(e) {
12
+ return {
13
+ canvasToPlan: (t) => e.current.api.canvasToPlan(t),
14
+ planToCanvas: (t) => e.current.api.planToCanvas(t),
15
+ isVisible: (t) => e.current.api.isVisible(t)
16
+ };
17
+ }
18
+ function r(e) {
19
+ a = e;
20
+ }
21
+ function i() {
22
+ return a;
23
+ }
24
+ var a;
25
+ function o(n) {
26
+ let r = i();
27
+ if (!n || !r) throw Error("Canvas not ready");
28
+ let a = r.canvasToPlan({
29
+ x: n.clientWidth / 2,
30
+ y: n.clientHeight / 2
31
+ });
32
+ if (!a) throw Error("The camera is not looking at the plan");
33
+ let o = e.layerStore.visible.find((e) => e.mode === t.TurnedOff || e.mode === t.TurnedOn);
34
+ return {
35
+ x: a.x,
36
+ y: a.y,
37
+ z: (o == null ? void 0 : o.name) || null
38
+ };
39
+ }
40
+ //#endregion
41
+ export { r as i, n, i as r, o as t };
@@ -4,7 +4,6 @@ import { type SetKioskChangeEvent } from './SetKiosk/types';
4
4
  declare class KioskStore {
5
5
  get kiosk(): Kiosk | null;
6
6
  setKiosk(kiosk: Kiosk | null): void;
7
- get renderer(): import("@expofp/renderer").Renderer | null;
8
7
  private getCameraState;
9
8
  savedKiosk: Kiosk | null;
10
9
  get hasUnsavedChanges(): boolean;
@@ -23,7 +22,11 @@ declare class KioskStore {
23
22
  */
24
23
  private resetMaplibreCamera;
25
24
  private waitForMaplibreCameraPort;
26
- private resetRendererCamera;
25
+ /**
26
+ * Restores the home framing on the floor plan. The plan's own camera takes it whenever it is up;
27
+ * without one mounted there is nothing to move.
28
+ */
29
+ private resetPlanCamera;
27
30
  restoreData(): void;
28
31
  handleSetupReady(): void;
29
32
  handleClose(): void;
@@ -1 +1 @@
1
- import{__decorate as r}from"tslib";import{action as o,computed as m,observable as d,toJS as c,when as k}from"mobx";import a from"../../store";import{areLayersEnabled as S}from"../../utils/areLayersEnabled";import{t as h}from"../../utils/i18n";import{isPointVisible as g}from"../Map/visibleArea";import{getPtScaleZoomRatio as f,toFiniteNumber as u}from"./kiosk-record";import{updateKiosk as C}from"./kioskApi";import{getSavedKiosk as y,removeKiosk as M,saveKiosk as K}from"./SetKiosk";const v=2e4;class s{constructor(){this.savedKiosk=null,this.statusMessages=[],this.statusMessageTimer=0,this.isResettingCamera=!1}get kiosk(){return a.uiState.kioskData}setKiosk(e){a.uiState.setKioskData(e)}get renderer(){return a.rendererService.renderer}getCameraState(){if(a.maplibreStore.showMaplibre){const t=a.maplibreStore.cameraPort?.getCameraState();return t?{mapCenterLng:t.lng,mapCenterLat:t.lat,mapZoom:t.zoom,mapBearingDegrees:t.bearing,mapPitchDegrees:t.pitch}:{}}const e=a.rendererService.getCameraState();return e?{mapInitialPtScale:this.initialPtScale,mapPtScale:e.ptScale,mapCenterX:e.center.x,mapCenterY:e.center.y,mapRollDegrees:e.roll,mapPitch:e.pitch}:{}}get hasUnsavedChanges(){const e=this.savedKiosk,t=c(this.kiosk);if(!t||!e)return!!t!=!!e;const n=Object.keys(e),i=Object.keys(t);if(n.length!==i.length)return!0;for(const l of n)if(!(l in t)||e[l]!==t[l])return!0;return!1}addStatusMessage(e){this.statusMessages=[{...e,id:Date.now()}],this.startCleanupMessages()}clearStatusMessages(){this.statusMessages=[]}startCleanupMessages(){clearTimeout(this.statusMessageTimer),this.statusMessageTimer=window.setTimeout(()=>this.clearStatusMessages(),1e3)}async resetCamera(){if(!this.isResettingCamera){this.isResettingCamera=!0;try{if(a.maplibreStore.showMaplibre&&await this.resetMaplibreCamera())return;await this.resetRendererCamera()}finally{this.isResettingCamera=!1}}}async resetMaplibreCamera(){const e=await this.waitForMaplibreCameraPort();if(!e)return!1;const t=this.kiosk;t?.z!=null&&a.fp.activateFloor({name:String(t.z)});const n=u(t?.mapCenterLng),i=u(t?.mapCenterLat),l=u(t?.mapZoom);return n===void 0||i===void 0||l===void 0?(e.resetPitch(),a.uiState.fitBounds(),!0):(e.applyCameraState({lng:n,lat:i,zoom:l,bearing:u(t?.mapBearingDegrees),pitch:u(t?.mapPitchDegrees)}),!0)}async waitForMaplibreCameraPort(){const{maplibreStore:e}=a;if(e.cameraPort)return e.cameraPort;try{await k(()=>!!e.cameraPort||!e.showMaplibre,{timeout:v})}catch{return null}return e.cameraPort}async resetRendererCamera(){const e=this.renderer;if(!e)return;const t=this.kiosk;await e.controls.resetCamera({pan:!0,zoom:!0,roll:!0,pitch:!0},!0),t?.z!=null&&a.fp.activateFloor({name:String(t.z)});const n=f(t);n!==void 0&&await e.controls.zoomBy(n,!0);const i=u(t?.mapCenterX),l=u(t?.mapCenterY);i!==void 0&&l!==void 0&&await e.controls.panTo(i,l,!0);const p=u(t?.mapRollDegrees);p!==void 0&&await e.controls.rollTo(p,!0)}restoreData(){const e=y();e&&(this.setKiosk(e),this.savedKiosk=e,a.uiState.kiosk=!0)}handleSetupReady(){this.restoreData(),a.uiState.kiosk=!0,a.uiState.hideFreeOrDemo=!0,a.uiState.setForceDim(!0),a.searchStore.setSearchText(""),a.searchStore.setFocused(!1),this.resetCamera()}handleClose(){this.setKiosk(null),a.uiState.setForceDim(!1),a.uiState.enableSetKioskMode(!1),a.searchStore.closeSearch()}handleDelete(){M(),this.setKiosk(null),a.uiState.resetMapSettings(),a.uiState.resetUIScale(),this.addStatusMessage({variant:"success",title:h("Deleted")})}handleSave(){const e=this.renderer;if(!e)return;const t=c(this.kiosk);if(!t)return;const n=this.getCameraState(),i={...t,...n};if(!g(e,i)){this.addStatusMessage({variant:"error",title:h("Kiosk not visible")});return}this.setKiosk(i),K(i),C(i,"https://app.expofp.com/"),a.uiState.setUIScale(i.uiScale,!0),this.addStatusMessage({variant:"success",title:h("Saved")}),this.savedKiosk=i}delayChange(e){requestAnimationFrame(()=>e?.())}handleChange(e){const t=c(this.kiosk);t&&(Number.isFinite(e.angle)&&this.setKiosk({...t,heading:e.angle}),Number.isFinite(e.scale)&&(this.setKiosk({...t,uiScale:e.scale}),this.delayChange(()=>a.uiState.setUIScale(e.scale,!1))),Number.isFinite(e.percent)&&this.setKiosk({...t,iconSizePercent:e.percent}))}setInitialPtScale(e){if(this.initialPtScale)return;this.initialPtScale=e;const t=c(this.kiosk);t&&this.setKiosk({...t,mapInitialPtScale:e})}handleClick(e){const t=c(this.kiosk),n=a.fp.getFloors(),i=S()?n.find(p=>p.active)?.name??null:null,l=a.uiState.uiScale;this.setKiosk({...t,x:e.x,y:e.y,z:i,uiScale:t?.uiScale||l,heading:t?.heading||0,iconSizePercent:t?.iconSizePercent||100,...this.getCameraState()})}handleNavigationChange(){const e=c(this.kiosk);e&&this.setKiosk({...e,...this.getCameraState()})}}r([m({keepAlive:!0})],s.prototype,"kiosk",null),r([o],s.prototype,"setKiosk",null),r([m({keepAlive:!0})],s.prototype,"renderer",null),r([d],s.prototype,"savedKiosk",void 0),r([m({keepAlive:!0})],s.prototype,"hasUnsavedChanges",null),r([d],s.prototype,"statusMessages",void 0),r([o],s.prototype,"addStatusMessage",null),r([o],s.prototype,"clearStatusMessages",null),r([o],s.prototype,"startCleanupMessages",null),r([o],s.prototype,"resetCamera",null),r([o],s.prototype,"restoreData",null),r([o],s.prototype,"handleSetupReady",null),r([o],s.prototype,"handleClose",null),r([o],s.prototype,"handleDelete",null),r([o],s.prototype,"handleSave",null),r([o],s.prototype,"handleChange",null),r([o],s.prototype,"setInitialPtScale",null),r([o],s.prototype,"handleClick",null),r([o],s.prototype,"handleNavigationChange",null);export default new s;
1
+ import{__decorate as i}from"tslib";import{action as o,computed as h,observable as k,toJS as c,when as S}from"mobx";import a from"../../store";import{areLayersEnabled as g}from"../../utils/areLayersEnabled";import{t as m}from"../../utils/i18n";import{mapCamera as d}from"../Map/camera";import{mapViewport as f}from"../Map/viewport";import{getPtScaleZoomRatio as C,toFiniteNumber as u}from"./kiosk-record";import{updateKiosk as y}from"./kioskApi";import{getSavedKiosk as M,removeKiosk as K,saveKiosk as P}from"./SetKiosk";const b=2e4;class s{constructor(){this.savedKiosk=null,this.statusMessages=[],this.statusMessageTimer=0,this.isResettingCamera=!1}get kiosk(){return a.uiState.kioskData}setKiosk(e){a.uiState.setKioskData(e)}getCameraState(){if(a.maplibreStore.showMaplibre){const t=a.maplibreStore.cameraPort?.getCameraState();return t?{mapCenterLng:t.lng,mapCenterLat:t.lat,mapZoom:t.zoom,mapBearingDegrees:t.bearing,mapPitchDegrees:t.pitch}:{}}const e=d()?.state();return e?{mapInitialPtScale:this.initialPtScale,mapPtScale:e.pixelSize,mapCenterX:e.center.x,mapCenterY:e.center.y,mapRollDegrees:e.roll,mapPitch:e.pitch}:{}}get hasUnsavedChanges(){const e=this.savedKiosk,t=c(this.kiosk);if(!t||!e)return!!t!=!!e;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!0;for(const l of n)if(!(l in t)||e[l]!==t[l])return!0;return!1}addStatusMessage(e){this.statusMessages=[{...e,id:Date.now()}],this.startCleanupMessages()}clearStatusMessages(){this.statusMessages=[]}startCleanupMessages(){clearTimeout(this.statusMessageTimer),this.statusMessageTimer=window.setTimeout(()=>this.clearStatusMessages(),1e3)}async resetCamera(){if(!this.isResettingCamera){this.isResettingCamera=!0;try{if(a.maplibreStore.showMaplibre&&await this.resetMaplibreCamera())return;await this.resetPlanCamera()}finally{this.isResettingCamera=!1}}}async resetMaplibreCamera(){const e=await this.waitForMaplibreCameraPort();if(!e)return!1;const t=this.kiosk;t?.z!=null&&a.fp.activateFloor({name:String(t.z)});const n=u(t?.mapCenterLng),r=u(t?.mapCenterLat),l=u(t?.mapZoom);return n===void 0||r===void 0||l===void 0?(e.resetPitch(),a.uiState.fitBounds(),!0):(e.applyCameraState({lng:n,lat:r,zoom:l,bearing:u(t?.mapBearingDegrees),pitch:u(t?.mapPitchDegrees)}),!0)}async waitForMaplibreCameraPort(){const{maplibreStore:e}=a;if(e.cameraPort)return e.cameraPort;try{await S(()=>!!e.cameraPort||!e.showMaplibre,{timeout:b})}catch{return null}return e.cameraPort}async resetPlanCamera(){const e=d();if(!e)return;const t=this.kiosk;await e.api.reset({pan:!0,zoom:!0,roll:!0,pitch:!0},{immediate:!0}),t?.z!=null&&a.fp.activateFloor({name:String(t.z)});const n=C(t);n!==void 0&&await e.api.zoomBy(n,{immediate:!0});const r=u(t?.mapCenterX),l=u(t?.mapCenterY);r!==void 0&&l!==void 0&&await e.api.panTo({x:r,y:l},{immediate:!0});const p=u(t?.mapRollDegrees);p!==void 0&&await e.api.rollTo(p,{immediate:!0})}restoreData(){const e=M();e&&(this.setKiosk(e),this.savedKiosk=e,a.uiState.kiosk=!0)}handleSetupReady(){this.restoreData(),a.uiState.kiosk=!0,a.uiState.hideFreeOrDemo=!0,a.uiState.setForceDim(!0),a.searchStore.setSearchText(""),a.searchStore.setFocused(!1),this.resetCamera()}handleClose(){this.setKiosk(null),a.uiState.setForceDim(!1),a.uiState.enableSetKioskMode(!1),a.searchStore.closeSearch()}handleDelete(){K(),this.setKiosk(null),a.uiState.resetMapSettings(),a.uiState.resetUIScale(),this.addStatusMessage({variant:"success",title:m("Deleted")})}handleSave(){const e=f();if(!e)return;const t=c(this.kiosk);if(!t)return;const n=this.getCameraState(),r={...t,...n};if(!e.isVisible({x:r.x,y:r.y})){this.addStatusMessage({variant:"error",title:m("Kiosk not visible")});return}this.setKiosk(r),P(r),y(r,"https://app.expofp.com/"),a.uiState.setUIScale(r.uiScale,!0),this.addStatusMessage({variant:"success",title:m("Saved")}),this.savedKiosk=r}delayChange(e){requestAnimationFrame(()=>e?.())}handleChange(e){const t=c(this.kiosk);t&&(Number.isFinite(e.angle)&&this.setKiosk({...t,heading:e.angle}),Number.isFinite(e.scale)&&(this.setKiosk({...t,uiScale:e.scale}),this.delayChange(()=>a.uiState.setUIScale(e.scale,!1))),Number.isFinite(e.percent)&&this.setKiosk({...t,iconSizePercent:e.percent}))}setInitialPtScale(e){if(this.initialPtScale)return;this.initialPtScale=e;const t=c(this.kiosk);t&&this.setKiosk({...t,mapInitialPtScale:e})}handleClick(e){const t=c(this.kiosk),n=a.fp.getFloors(),r=g()?n.find(p=>p.active)?.name??null:null,l=a.uiState.uiScale;this.setKiosk({...t,x:e.x,y:e.y,z:r,uiScale:t?.uiScale||l,heading:t?.heading||0,iconSizePercent:t?.iconSizePercent||100,...this.getCameraState()})}handleNavigationChange(){const e=c(this.kiosk);e&&this.setKiosk({...e,...this.getCameraState()})}}i([h({keepAlive:!0})],s.prototype,"kiosk",null),i([o],s.prototype,"setKiosk",null),i([k],s.prototype,"savedKiosk",void 0),i([h({keepAlive:!0})],s.prototype,"hasUnsavedChanges",null),i([k],s.prototype,"statusMessages",void 0),i([o],s.prototype,"addStatusMessage",null),i([o],s.prototype,"clearStatusMessages",null),i([o],s.prototype,"startCleanupMessages",null),i([o],s.prototype,"resetCamera",null),i([o],s.prototype,"restoreData",null),i([o],s.prototype,"handleSetupReady",null),i([o],s.prototype,"handleClose",null),i([o],s.prototype,"handleDelete",null),i([o],s.prototype,"handleSave",null),i([o],s.prototype,"handleChange",null),i([o],s.prototype,"setInitialPtScale",null),i([o],s.prototype,"handleClick",null),i([o],s.prototype,"handleNavigationChange",null);export default new s;
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
- declare const SetKioskMode: React.FunctionComponent<object>;
1
+ declare const SetKioskMode: import("react").FunctionComponent<object>;
3
2
  export default SetKioskMode;
4
3
  //# sourceMappingURL=SetKioskMode.d.ts.map
@@ -1 +1 @@
1
- import{jsx as l}from"react/jsx-runtime";import{observer as c}from"mobx-react-lite";import{useEffect as d}from"react";import{isDefaultScene as v,pickDefaultScene as m}from"../../renderer/engine-core/defs";import r from"../../store";import{useInit as S}from"../../utils/mobx";import e from"./KioskStore";import h from"./SetKiosk";const p=c(()=>{S(()=>{Promise.resolve().then(()=>e.handleSetupReady())}),d(()=>{const t=({ptScale:a,sceneId:i})=>{v(i)&&e.setInitialPtScale(a)};e.renderer.events.addEventListener("viewport:ptscale",t);const s=({data:a})=>{const{point:i}=m(a);e.handleClick(i)};e.renderer.events.addEventListener("pointer:click",s);const o=()=>e.handleNavigationChange();return e.renderer.events.addEventListener("navigation:change",o),()=>{e.renderer.events.removeEventListener("viewport:ptscale",t),e.renderer.events.removeEventListener("pointer:click",s),e.renderer.events.removeEventListener("navigation:change",o)}},[e.renderer]);const n=!!e.kiosk;return l(h,{isSaveDisabled:n?!e.hasUnsavedChanges:!0,isDeleteDisabled:!n,areControlsDisabled:!n,confirmOnClose:n?e.hasUnsavedChanges:!1,angle:e.kiosk?.heading||0,uiScale:e.kiosk?.uiScale||r.uiState.uiScale,minUiScale:r.uiState.minUIScale,maxUiScale:r.uiState.maxUIScale,uiScaleStep:.01,iconSizePercent:e.kiosk?.iconSizePercent||100,isInfoVisible:!n,statusMessages:e.statusMessages,onClose:()=>e.handleClose(),onDelete:()=>e.handleDelete(),onSave:()=>e.handleSave(),onChange:t=>e.handleChange(t)})});export default p;
1
+ import{jsx as n}from"react/jsx-runtime";import{observer as r}from"mobx-react-lite";import{useEffect as i}from"react";import s from"../../store";import{useInit as l}from"../../utils/mobx";import{mapCamera as m}from"../Map/camera";import{onCameraMoved as S}from"../Map/camera-events";import{setPlanClickListener as t}from"../Map/pointer";import e from"./KioskStore";import c from"./SetKiosk";const d=r(()=>{l(()=>{Promise.resolve().then(()=>e.handleSetupReady())}),i(()=>{const a=m()?.state();a&&e.setInitialPtScale(a.pixelSize)},[]),i(()=>(t(a=>e.handleClick(a)),()=>t()),[]),i(()=>S(()=>e.handleNavigationChange()),[]);const o=!!e.kiosk;return n(c,{isSaveDisabled:o?!e.hasUnsavedChanges:!0,isDeleteDisabled:!o,areControlsDisabled:!o,confirmOnClose:o?e.hasUnsavedChanges:!1,angle:e.kiosk?.heading||0,uiScale:e.kiosk?.uiScale||s.uiState.uiScale,minUiScale:s.uiState.minUIScale,maxUiScale:s.uiState.maxUIScale,uiScaleStep:.01,iconSizePercent:e.kiosk?.iconSizePercent||100,isInfoVisible:!o,statusMessages:e.statusMessages,onClose:()=>e.handleClose(),onDelete:()=>e.handleDelete(),onSave:()=>e.handleSave(),onChange:a=>e.handleChange(a)})});export default d;
@@ -1,2 +1,2 @@
1
- export default function Map(): import("react").JSX.Element;
1
+ export default function Map(): import("react").JSX.Element | null;
2
2
  //# sourceMappingURL=Map.d.ts.map
@@ -1 +1 @@
1
- import{Fragment as ne,jsx as k,jsxs as U}from"react/jsx-runtime";import{Box as L}from"@expofp/geometry";import{Draggable as ie}from"@expofp/ui";import ae from"classnames";import se from"color";import{observable as le,reaction as me}from"mobx";import{useObserver as ce}from"mobx-react-lite";import{useEffect as fe,useMemo as de,useRef as x,useState as ue}from"react";import{DEBUG_STORAGE_KEY as Z}from"../../constants";import pe from"../../data";import{fpGeo as he}from"../../data/fpGeo";import{svgArea as j}from"../../data/svg";import{boxToRenderer as B,createSceneDef as ve,mapRollSetting as A}from"../../renderer";import{pickDefaultScene as $,pickDefaultScenePoint as ye}from"../../renderer/engine-core/defs";import n,{boothStore as ge,layersStore as v,uiState as o}from"../../store";import{BoothBase as K}from"../../store/BoothStore";import{Category as be}from"../../store/CategoryStore";import{Exhibitor as V}from"../../store/ExhibitorStore";import{LayerMode as R}from"../../store/LayerStore";import{Route as we}from"../../store/RouteStore";import E from"../../tools/logger";import h from"../../tools/settings";import{areLayersEnabled as Se}from"../../utils/areLayersEnabled";import{parseNumberPair as W}from"../../utils/camera-map-settings";import{applyVenueDimValue as xe,createDimmingAnimator as Re}from"../../utils/dimming";import{convertGpsToLocal as Te}from"../../utils/gps";import y from"../../utils/is-debug";import{isPathwayLayer as H}from"../../utils/is-pathway-layer";import{useReaction as u}from"../../utils/mobx";import{createWayfinding as Ce}from"../../wayfinding";import q from"./booth-by-xy";import ke from"./drawing/config/config-all";import{configMarkers as Le,getMarkerFromClick as Be}from"./drawing/config/config-markers";import{loadLayersImages as Ee}from"./drawing/config/loadBoothsImages";import{useBuildRoute as Me}from"./traffic/useBuildRoute";import{useManageTraffic as Pe}from"./traffic/useManageTraffic";const M=Number.isFinite(h.maxZoom)?h.maxZoom:void 0,ze=M!==void 0;export default function Ie(){let P={};const J="#ebebeb",g=x(null),b=de(()=>le({moving:!1,prevLevel:n.layerStore.layers.find(e=>!e.frozen&&e.visible)}),[]),a=n.rendererService,T=x(Re(e=>xe(a,e)));let m;const w=x(null),z=x(null);let I=null,_=null,D=null,F=!1;function G(){v.layers.forEach(e=>{e.configured=!1,e.children=[],e.loaded=!1})}const[Q,Y]=ue(()=>typeof window<"u"&&window.localStorage?localStorage.getItem(Z)!=="false":!0);u(()=>n.routeStore.currentRouteLayer,()=>{const e=n.routeStore.currentRouteLayer;if(!a.scene||!e||b.prevLevel===e)return;const r=a.scene.rootLayer.children.filter(t=>n.layerStore.floors.some(l=>t.name.includes(l.name))),s=e.name;if(!r.find(t=>t.name===s))return;const i=r?.map(t=>(t.name===s&&(t.hidden=!1),t.name===b.prevLevel?.name&&(t.hidden=!0),t));b.prevLevel=e,a.update(...i)}),u(()=>o.centerMap,()=>{!o.centerMap||n.maplibreStore.showMaplibre||(m.controls.resetCamera({zoom:!!(o.list.type==="search"&&o.list.text)}),o.centerMap=!1)}),fe(()=>{if(!g.current)return;async function e(){const r=g.current;if(!r)return;G(),v.layersLoaded=!1;let s={};try{if(y){const t=document.createElement("canvas").getContext("webgl2"),l=t&&t.getExtension("EXT_disjoint_timer_query_webgl2"),f=(await import("stats-gl")).default,c=new f({trackGPU:l,horizontal:!0}),p=z.current;if(!p)throw new Error("memoryInfoPanel not found.");c.dom.style.position="relative",p.style.width=`${90*(l?3:2)}px`,p.style.height="48px",p.appendChild(c.dom),s={stats:c,memoryInfoPanel:p}}}catch(i){console.error(i)}m=a.create({canvas:r,ui:s}),w.current=m,me(()=>o.canvasVisibleRectPx,(i,t)=>{i&&(m.visibleRect=B(i)),t.dispose()},{fireImmediately:!0}),ke(a).then(({layers:i,cleanup:t})=>{if(F||w.current!==m){t();return}D=t,y&&console.log("Renderer settings",m);const l=se(h.backgroundColor==="none"?J:h.backgroundColor).string();P=ve(i,j,l),a.start(P),T.current.setTarget(o.dimmed,{immediate:!0}),A(m,n.fp.enableRotation?1:0),M!==void 0&&m.viewport.setMaxZoom(M),v.layersLoaded=!0,n.fp.onFpConfigured&&n.fp?.onFpConfigured(),I=Ce(a,n),_=Le(a),Ee(a)}),m.events.addEventListener("pointer:move",({data:i})=>{if(o.setKioskModeEnabled)return;const{point:t,defs:l}=$(i),d=q(t.x,t.y),f=N(l[0]);o.hoveredBooth=d||f}),m.events.addEventListener("pointer:out",()=>{o.setKioskModeEnabled||(o.hoveredBooth=null)}),m.events.addEventListener("pointer:click",({data:i})=>{if(!o?.rootElement)return;window.__resett&&window.__resett(),o.overlayPosition==="bottom"&&o.overlaySize==="full"&&n.showMap();const{point:t,defs:l}=$(i),{x:d,y:f}=t;if(o.onGetCoordsClick){const S=n.layerStore.layers.find(C=>C.visible&&(C.mode===R.TurnedOn||C.mode===R.TurnedOff));o.onGetCoordsClick({x:d,y:f,z:S?.name||null})}if(o.setKioskModeEnabled)return;if(o.onMarkerClick){const S=Be(d,f,a.scale);y&&console.log("marker",S),o.onMarkerClick(S)}const c=q(t.x,t.y),p=N(l[0]);y&&console.log("boothIdFromClientXy",c,"boothByShape",p,"pointer:click point",t),n.clickBooth(c||p)}),m.events.addEventListener("navigation:change",()=>window.__resett&&window.__resett())}return e(),n.fp.getCenterCoordinates=oe,()=>ee()},[]);function ee(){F=!0,T.current.stop(),I?.(),_?.(),D?.(),G(),v.layersLoaded=!1,a.disposeIfCurrent(w.current),w.current=null}function oe(){const e=g.current;if(!e)throw new Error("Canvas not ready");const r=ye(m.viewport.canvasToSvg({x:e.clientWidth/2,y:e.clientHeight/2})),i=n.layerStore.visible.find(t=>t.mode===R.TurnedOff||t.mode===R.TurnedOn)?.name||null;return{...r,z:i}}function N(e){return!e||!e.shape?null:ge.booths.find(r=>r.shapes?.find(s=>s.shape==e.shape))??null}u(()=>o.zoomBy,()=>{if(!o.zoomBy||n.maplibreStore.showMaplibre)return;const e=o.zoomBy;m.controls.zoomBy(e),o.zoomBy=null}),u(()=>o.dimmed,e=>{T.current.setTarget(e)}),u(()=>o.details,()=>{if(!o.onDetails)return;if(!o.details){o.onDetails(null);return}let e=o.details;if(h.EXPO==="wineparis"&&(e instanceof V&&(e=e.booths[0]),!e))return;let r=null,s=[];e instanceof V?(r="exhibitor",s=e.booths.map(t=>t.name).sort((t,l)=>t==n.routeStore.tempToBooth?.name?-1:l==n.routeStore.tempToBooth?.name?1:0)):e instanceof K?(r="booth",s=[e.name]):e instanceof we?(r="route",s=[e.from?.name,e.to?.name].filter(t=>!!t)):e instanceof be&&(r="category",s=e.exhibitors.map(t=>t.booths.map(l=>l.name)).flat());const i={type:r,name:e?.name,id:e?.id,externalId:e?.externalId,boothsNames:s};o.onDetails({...i,...r==="route"?{routeInfo:n.routeStore.routeInfo??void 0}:{}})}),u(()=>o.canvasVisibleRectPx,e=>{a.renderer&&(a.renderer.visibleRect=B(e))},{fireImmediately:!0}),u(()=>o.moveToRect,()=>{!o.moveToRect||n.maplibreStore.showMaplibre||(o.moveToRect&&o.moveToRect.size.height!==1/0&&o.moveToRect.size.width!==1/0&&o.moveToRect.size.height>0&&o.moveToRect.size.width>0&&X(o.moveToRect,o.moveToRectPaddingPercent),o.moveToRect=null,o.moveToRectPaddingPercent=null)}),u(()=>o.rollReset,e=>{e&&(m.controls.resetCamera({roll:!0}),o.rollReset=!1)}),u(()=>o.moveToBooths,()=>{if(E.log("this.moveToBooths",o.moveToBooths),!o.moveToBooths||n.maplibreStore.showMaplibre)return;E.log("watched moveToBooths",o.moveToBooths);const e=o.moveToBooths.filter(r=>r.rect).map(r=>r.rect);e.length!==0&&(X(L.fromUnion(...e)),o.moveToBooths=null)}),u(()=>o.mapSettings,({zoomtime:e,center:r,centerxy:s,bearing:i,roll:t,z:l})=>{if(!(n.maplibreStore.showMaplibre||!a.renderer))try{e&&e!==o.defaultMapSettings.zoomtime&&a.renderer.controls.configure({zoomTime:e/1e3}),n.fp.enableRotation&&A(m,t??0);let d;if(r){const f=W(r),c=he?.properties.config;if(!c)throw new Error("Map center given in GPS, but the plan has no GPS config");f&&(d=Te({lat:f[0],lng:f[1]},c)??void 0)}else if(s){const f=W(s);f&&(d={x:f[0],y:f[1]})}l&&n.fp.activateFloor({name:l}),d&&a.renderer.controls.panTo(d.x,d.y),typeof i=="number"&&Number.isFinite(i)&&a.renderer.controls.rollTo(i)}catch(d){E.error("Error in mapSettings reaction",d)}}),Me({enabled:v.layersLoaded&&o.buildRoute,rendererService:a});const O="routes-api.expofp.com",te=pe.busRoutes??!1;Pe({permission:v.layersLoaded&&te,rendererService:a,dataJsonUrl:`https://${O}/v1/routes?expo=${h.EXPO}`,websocketUrl:`wss://${O}/locations?expo=${h.EXPO}`}),u(()=>n.layerStore.visible,e=>{if(!a.scene)return;const r=e.filter(t=>H(t.name)),i=a.scene.rootLayer.children.filter(t=>H(t.name));i.forEach(t=>{t.hidden=!r.find(l=>l.name===t.name)}),a.update(...i)});function X(e,r){let s=e;const i=r??re(e,j),t=o.selectedRoute?.from,l=t instanceof K?t.layer?.name:t?.layer;o.kioskData&&(!Se()||l===n.routeStore.currentRouteLayer?.name)&&(s=L.fromUnion(e,new L(o.kioskData.x,o.kioskData.y,1,1)));const d=B(s),f={paddingPercent:i,maxZoom:ze?void 0:10},c=m.visibleRect;if(o.shouldShiftMapRect&&c){c.min={...c.min,x:c.min.x+o.overlayWidthPx},m.visibleRect=c;try{m.controls.zoomTo(d,f)}finally{c.min={...c.min,x:c.min.x-o.overlayWidthPx}}}else m.controls.zoomTo(d,f)}function re(e,r){return!e||!r?0:(e.area/r.area>.1?15:25)/100}return ce(()=>U(ne,{children:[k("canvas",{style:{width:"100%",height:"100%"},ref:g,className:ae({map:!0,moving:b.moving,hidden:n.maplibreStore.showMaplibre}),children:"ExpoFP.com"}),y&&Q&&U(ie,{className:"debug-fps",children:[k("div",{ref:z}),k("button",{onClick:()=>{typeof window<"u"&&window.localStorage&&localStorage.setItem(Z,"false"),Y(!1)},style:{padding:"4px 8px",fontSize:"11px",cursor:"pointer",backgroundColor:"#333",color:"#fff",border:"1px solid #555",width:"100%"},children:"Hide debug"})]})]}))}
1
+ import{jsx as S,jsxs as P}from"react/jsx-runtime";import{Renderer as _,update as h}from"@expofp/renderer";import F from"classnames";import{observable as D}from"mobx";import{useObserver as b}from"mobx-react-lite";import{useEffect as g,useMemo as N,useRef as y,useState as O}from"react";import z from"../../data";import{svgArea as k}from"../../data/svg";import{createSceneDef as j}from"../../engine/defs";import i,{layersStore as d,uiState as m}from"../../store";import f from"../../tools/settings";import{applyVenueDim as I,createDimmingAnimator as V}from"../../utils/dimming";import Z from"../../utils/is-debug";import{isPathwayLayer as x}from"../../utils/is-pathway-layer";import{useReaction as v}from"../../utils/mobx";import{createWayfinding as $}from"../../wayfinding";import U from"./drawing/config/config-all";import{configMarkers as W}from"./drawing/config/config-markers";import{loadLayersImages as X}from"./drawing/config/loadBoothsImages";import{MapCamera as B}from"./MapCamera";import{MapViewport as H}from"./MapViewport";import{clearSelection as G}from"./pointer";import{setMapScene as E}from"./scene";import{useBuildRoute as J}from"./traffic/useBuildRoute";import{useManageTraffic as q}from"./traffic/useManageTraffic";import{centerCoordinates as K}from"./viewport";const Q="#ebebeb",C="routes-api.expofp.com",Y=1e4;function ee(t){return Number.isFinite(f.maxZoom)?f.maxZoom:t.viewbox.size.width>Y?100:35}function re(){if(!i.fp.enableRotation)return!1;const t=m.mapSettings.roll;return t===void 0||Number(t)===1}function oe(){return f.EXPO==="imexamerica25-3d"?!0:void 0}function te(){const t=m.mapSettings.zoomtime;if(!(!t||t===m.defaultMapSettings.zoomtime))return{zoomTime:t/1e3}}export default function ne(){const t=y(null),l=N(()=>D({moving:!1,prevLevel:i.layerStore.layers.find(r=>!r.frozen&&r.visible)}),[]),[o,T]=O(void 0),c=y(null),p=y(null);function R(){d.layers.forEach(r=>{r.configured=!1,r.children=[],r.loaded=!1})}g(()=>{let r=!1;return R(),d.layersLoaded=!1,U().then(({layers:s,cleanup:a})=>{if(r){a();return}p.current=a;const n=f.backgroundColor==="none"?Q:f.backgroundColor,e=j(s,k,n);T(e),E(e),c.current=V(u=>{I(e,u)&&h(e.rootLayer)}),c.current.setTarget(m.dimmed,{immediate:!0}),d.layersLoaded=!0,i.fp.onFpConfigured&&i.fp.onFpConfigured(),X()}),()=>{r=!0,p.current?.(),p.current=null,c.current?.stop(),c.current=null,E(void 0),R()}},[]),v(()=>m.dimmed,r=>{c.current?.setTarget(r)}),g(()=>{i.fp.getCenterCoordinates=()=>K(t.current)},[]),g(()=>{if(!o)return;const r=$({scene:o,store:i,canvas:t}),s=W({scene:o});return()=>{r(),s()}},[o]),v(()=>i.routeStore.currentRouteLayer,()=>{const r=i.routeStore.currentRouteLayer;if(!o||!r||l.prevLevel===r)return;const s=o.rootLayer.children.filter(e=>i.layerStore.floors.some(u=>e.name.includes(u.name))),a=r.name;if(!s.find(e=>e.name===a))return;const n=[];s.forEach(e=>{e.name===a&&e.hidden!==!1&&(e.hidden=!1,n.push(e)),e.name===l.prevLevel?.name&&e.hidden!==!0&&(e.hidden=!0,n.push(e))}),l.prevLevel=r,n.length&&h(...n)},void 0,[o]),v(()=>i.layerStore.visible,r=>{if(!o)return;const s=r.filter(e=>x(e.name)),a=o.rootLayer.children,n=[];for(const e of a){if(!x(e.name))continue;const u=!s.find(A=>A.name===e.name);e.hidden!==u&&(e.hidden=u,n.push(e))}n.length&&h(...n)},void 0,[o]);const L=b(()=>d.layersLoaded),M=b(()=>!!m.buildRoute);J({enabled:L&&M,scene:o});const w=z.busRoutes??!1;return q({permission:L&&w,scene:o,dataJsonUrl:`https://${C}/v1/routes?expo=${f.EXPO}`,websocketUrl:`wss://${C}/locations?expo=${f.EXPO}`}),b(()=>o?P(_,{debug:Z,style:{width:"100%",height:"100%"},ref:t,className:F({map:!0}),scene:o,maxZoom:ee(o),bounds:d.bounds,controls:{roll:re(),pitch:oe()},smoothTime:te(),visibleRect:m.canvasVisibleRectPx,onPointerMissed:G,children:[S(B,{}),S(H,{})]}):null)}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Everything that moves the plan's camera on the store's say-so, and the camera itself handed out to
3
+ * the SDK that lives outside React.
4
+ *
5
+ * Rendered **inside** `<Renderer>`, which is what lets it hold the camera: the renderer publishes it
6
+ * through a hook, and a hook only resolves in a component R3F has mounted under the canvas. That is
7
+ * the whole reason `Map` is split in two — the outer half watches the stores and builds the scene,
8
+ * this half drives what the stores ask for. The plan's coordinate conversions go out the same way
9
+ * but from `MapViewport`, which the MapLibre view mounts too.
10
+ *
11
+ * Each of the store's command flags is a one-shot: it is read, acted on, and cleared, exactly as the
12
+ * imperative map read them. None of them check for MapLibre any more — `Layout` unmounts the plan
13
+ * entirely in that mode, so there is nothing here to guard.
14
+ * @returns Nothing; this renders no scene node.
15
+ */
16
+ export declare function MapCamera(): null;
17
+ //# sourceMappingURL=MapCamera.d.ts.map
@@ -0,0 +1 @@
1
+ import{Box as s}from"@expofp/geometry";import{useCameraAPI as h,useCameraMoveStart as y,useCameraState as x}from"@expofp/renderer";import{useEffect as R,useLayoutEffect as T,useRef as B,useState as M}from"react";import{fpGeo as P}from"../../data/fpGeo";import{svgArea as S}from"../../data/svg";import p,{uiState as r}from"../../store";import{BoothBase as C}from"../../store/BoothStore";import d from"../../tools/logger";import F from"../../tools/settings";import{areLayersEnabled as w}from"../../utils/areLayersEnabled";import{parseNumberPair as l}from"../../utils/camera-map-settings";import{convertGpsToLocal as z}from"../../utils/gps";import{useReaction as f}from"../../utils/mobx";import{createMapCamera as E,setMapCamera as v}from"./camera";import{notifyCameraMoved as N}from"./camera-events";import{resetExternalOverlay as b}from"./pointer";export function MapCamera(){const o=h(),n=x(),t=B({api:o,state:n}),[a]=M(()=>E(t));return T(()=>{t.current={api:o,state:n}}),R(()=>(v(a),()=>v(void 0)),[a]),y(()=>{b(),N()}),f(()=>r.zoomBy,e=>{e&&(t.current.api.zoomBy(e),r.zoomBy=null)},void 0,[]),f(()=>r.rollReset,e=>{e&&(t.current.api.reset({roll:!0}),r.rollReset=!1)},void 0,[]),f(()=>r.centerMap,e=>{e&&(t.current.api.reset({zoom:!!(r.list.type==="search"&&r.list.text)}),r.centerMap=!1)},void 0,[]),f(()=>r.moveToRect,e=>{if(!e)return;const{width:m,height:i}=e.size;m>0&&i>0&&Number.isFinite(m)&&Number.isFinite(i)&&g(t.current.api,e,r.moveToRectPaddingPercent??void 0),r.moveToRect=null,r.moveToRectPaddingPercent=null},void 0,[]),f(()=>r.moveToBooths,e=>{if(!e)return;d.log("watched moveToBooths",e);const m=e.filter(i=>i.rect).map(i=>i.rect);m.length&&g(t.current.api,s.fromUnion(...m)),r.moveToBooths=null},void 0,[]),f(()=>r.mapSettings,({center:e,centerxy:m,bearing:i,z:c})=>{try{c&&p.fp.activateFloor({name:c});const u=A(e,m);u&&t.current.api.panTo(u),Number.isFinite(i)&&t.current.api.rollTo(i)}catch(u){d.error("Error in mapSettings reaction",u)}},void 0,[]),null}function g(o,n,t){o.zoomTo(L(n),{padding:t??G(n,S),maxZoom:Number.isFinite(F.maxZoom)?void 0:10,within:k()})}function k(){const o=r.canvasVisibleRectPx;return r.shouldShiftMapRect?s.fromMinMax({x:o.min.x+r.overlayWidthPx,y:o.min.y},o.max):o}function L(o){const n=r.kioskData;if(!n)return o;const t=r.selectedRoute?.from,a=t instanceof C?t.layer?.name:t?.layer;return(w()?a===p.routeStore.currentRouteLayer?.name:!0)?s.fromUnion(o,new s(n.x,n.y,1,1)):o}function G(o,n){return!o||!n?0:(o.area/n.area>.1?15:25)/100}function A(o,n){if(o){const a=l(o);if(!a)return;const e=P?.properties?.config;if(!e)throw new Error("Map center given in GPS, but the plan has no GPS config");return z({lat:a[0],lng:a[1]},e)??void 0}const t=l(n);if(t)return{x:t[0],y:t[1]}}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Hands the plan's coordinate conversions out to the SDK that lives outside React.
3
+ *
4
+ * Rendered **inside** `<Renderer>`, which is what lets it hold them: `useViewport` only resolves in
5
+ * a component R3F has mounted under the canvas. A component of its own rather than another job for
6
+ * `MapCamera` because the conversions outlive that split — they depend on the scene's `Space` and
7
+ * the camera three is drawing with, and on nothing that steers the camera, so they are just as
8
+ * available in external mode, where MapLibre owns the camera and `MapCamera` is not mounted at all.
9
+ * @returns Nothing; this renders no scene node.
10
+ */
11
+ export declare function MapViewport(): null;
12
+ //# sourceMappingURL=MapViewport.d.ts.map
@@ -0,0 +1 @@
1
+ import{useViewport as p}from"@expofp/renderer";import{useEffect as i,useLayoutEffect as n,useRef as u,useState as f}from"react";import{createMapViewport as a,setMapViewport as o}from"./viewport";export function MapViewport(){const e=p(),t=u({api:e}),[r]=f(()=>a(t));return n(()=>{t.current={api:e}}),i(()=>(o(r),()=>o(void 0)),[r]),null}
@@ -1,3 +1,16 @@
1
1
  import type { Booth } from '../../store/BoothStore';
2
+ /**
3
+ * Starts keeping the hit-test index current with the stores, and returns the disposer.
4
+ *
5
+ * Called from the instance wiring (`floorplan.ready`) rather than run at module scope: this module
6
+ * sits inside the store ↔ components import cycle (the store's own modules reach it through the
7
+ * config chain), and `reaction` reads its expression the moment it is created — at module scope
8
+ * that is `boothStore` still in its temporal dead zone. Bound at init, every store exists;
9
+ * `fireImmediately` buckets whatever a remount finds already loaded, and the reaction tracks
10
+ * changes from there exactly as before. One binding serves both map modes — the MapLibre path
11
+ * resolves outdoor-PoI booths through this index too.
12
+ * @returns Disposes the reaction.
13
+ */
14
+ export declare function bindBoothHitTest(): () => void;
2
15
  export default function getBoothIdFromClientXy(clientX: number, clientY: number): Booth | null;
3
16
  //# sourceMappingURL=booth-by-xy.d.ts.map
@@ -1 +1 @@
1
- import{Box as d,Polygon as v,Rect as z}from"@expofp/geometry";import{reaction as I}from"mobx";import{getTrianglesFromFpPaths as X}from"../../data/svg";import{boothStore as b,layersStore as x}from"../../store";import{LayersMode as A}from"../../store/LayerStore";import F from"../../tools/logger";let y=[],u=new Map,g=null,w=[];function S(){const l=b.booths.filter(t=>t.visible&&t.rect&&t.rect.size.width>0&&t.rect.size.height>0);if(y=[],g=null,u=new Map,w=l.filter(t=>t.paths),!l.length)return;const c=[];let s=1/0,n=1/0,f=-1/0,e=-1/0;for(const t of l){const a=t.rotate?new z(t.rect.center,t.rect.size,t.rotate):null,o=a?a.bounds:t.rect;c.push({booth:t,shape:a??t.rect,bounds:o}),o.min.x<s&&(s=o.min.x),o.min.y<n&&(n=o.min.y),o.max.x>f&&(f=o.max.x),o.max.y>e&&(e=o.max.y)}const i=d.fromMinMax({x:s,y:n},{x:f,y:e}),r=2,m=Math.ceil(i.size.width/r),h=Math.ceil(i.size.height/r);for(let t=0;t<r;t++)for(let a=0;a<r;a++){const o=i.min.x+t*m,M=i.min.y+a*h,p=new d(o,M,m,h);y.push(p),u.set(p,c.filter(P=>p.intersects(P.bounds)))}F.log("hover segmentToHitAreas",u)}I(()=>[b.booths,x.loaded,x.visible],()=>S());function B(l,c){const s={x:l,y:c};let n;g&&g.containsPoint(s)?n=g:n=y.find(e=>e.containsPoint(s)),n&&(g=n);const f=n?u.get(n):void 0;if(f){const e=f.filter(i=>i.booth.visible&&i.shape.containsPoint(s));if(e.length)return(e.length>1?e.sort((r,m)=>r.booth.rect.area-m.booth.rect.area)[0]:e[0]).booth}for(const e of w)if(e.visible)for(const i of e.paths)for(const r of X(i.index,x.mode!==A.Default?e.layer.name:"")){const m=r.map(h=>({x:h[0],y:h[1]}));if(v.fromConvexRing(m).containsPoint(s))return e}return null}export default function C(l,c){return B(l,c)}
1
+ import{Box as y,Polygon as v,Rect as I}from"@expofp/geometry";import{reaction as z}from"mobx";import{getTrianglesFromFpPaths as X}from"../../data/svg";import{boothStore as b,layersStore as d}from"../../store";import{LayersMode as A}from"../../store/LayerStore";import B from"../../tools/logger";let x=[],g=new Map,u=null,w=[];function F(){const l=b.booths.filter(t=>t.visible&&t.rect&&t.rect.size.width>0&&t.rect.size.height>0);if(x=[],u=null,g=new Map,w=l.filter(t=>t.paths),!l.length)return;const c=[];let r=1/0,n=1/0,f=-1/0,e=-1/0;for(const t of l){const a=t.rotate?new I(t.rect.center,t.rect.size,t.rotate):null,o=a?a.bounds:t.rect;c.push({booth:t,shape:a??t.rect,bounds:o}),o.min.x<r&&(r=o.min.x),o.min.y<n&&(n=o.min.y),o.max.x>f&&(f=o.max.x),o.max.y>e&&(e=o.max.y)}const i=y.fromMinMax({x:r,y:n},{x:f,y:e}),s=2,m=Math.ceil(i.size.width/s),h=Math.ceil(i.size.height/s);for(let t=0;t<s;t++)for(let a=0;a<s;a++){const o=i.min.x+t*m,M=i.min.y+a*h,p=new y(o,M,m,h);x.push(p),g.set(p,c.filter(P=>p.intersects(P.bounds)))}B.log("hover segmentToHitAreas",g)}export function bindBoothHitTest(){return z(()=>[b.booths,d.loaded,d.visible],()=>F(),{fireImmediately:!0})}function H(l,c){const r={x:l,y:c};let n;u&&u.containsPoint(r)?n=u:n=x.find(e=>e.containsPoint(r)),n&&(u=n);const f=n?g.get(n):void 0;if(f){const e=f.filter(i=>i.booth.visible&&i.shape.containsPoint(r));if(e.length)return(e.length>1?e.sort((s,m)=>s.booth.rect.area-m.booth.rect.area)[0]:e[0]).booth}for(const e of w)if(e.visible)for(const i of e.paths)for(const s of X(i.index,d.mode!==A.Default?e.layer.name:"")){const m=s.map(h=>({x:h[0],y:h[1]}));if(v.fromConvexRing(m).containsPoint(r))return e}return null}export default function S(l,c){return H(l,c)}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * A camera-movement signal for the parts of the SDK that are not components.
3
+ *
4
+ * `MapCamera` notifies from the controls' own update event — the same signal the imperative
5
+ * renderer published as `navigation:change` — and the kiosk setup screen listens to know the
6
+ * operator has framed a new home view. Deliberately minimal: no payload, because every consumer
7
+ * reads what it needs (`mapCamera().state()`) at the moment it cares.
8
+ * @param listener - Called after every camera movement while subscribed.
9
+ * @returns An unsubscribe function.
10
+ */
11
+ export declare function onCameraMoved(listener: () => void): () => void;
12
+ /**
13
+ * Reports that the camera moved. Called by the mounted map; nothing else should.
14
+ */
15
+ export declare function notifyCameraMoved(): void;
16
+ //# sourceMappingURL=camera-events.d.ts.map
@@ -0,0 +1 @@
1
+ export function onCameraMoved(e){return o.add(e),()=>o.delete(e)}export function notifyCameraMoved(){for(const e of o)e()}const o=new Set;
@@ -0,0 +1,48 @@
1
+ import { type CameraAPI, type CameraState } from '@expofp/renderer';
2
+ /** The plan's camera, as the parts of the SDK that live outside React reach it. */
3
+ export interface MapCameraHandle {
4
+ /** Moving the camera. */
5
+ readonly api: CameraAPI;
6
+ /** Reading where it is, at the moment of asking. */
7
+ state(): CameraState;
8
+ }
9
+ /** What the mounted map holds, and hands the handle below a live view of. */
10
+ export interface MountedCamera {
11
+ /** The camera commands, as the renderer last handed them over. */
12
+ api: CameraAPI;
13
+ /** The camera reader, likewise. */
14
+ state: () => CameraState;
15
+ }
16
+ /**
17
+ * Wraps the map's live camera in a handle whose identity never changes.
18
+ *
19
+ * The renderer's hooks return a fresh object on every render, deliberately — it memoizes nothing, so
20
+ * that the cost of a settled identity is paid by whoever knows how often they render. That is this
21
+ * map: it reads them through a ref, and hands out this one object for the life of the mount, so
22
+ * nothing outside React ever holds a stale command.
23
+ * @param camera - A live view of what the mounted map holds.
24
+ * @returns The handle to publish.
25
+ */
26
+ export declare function createMapCamera(camera: {
27
+ readonly current: MountedCamera;
28
+ }): MapCameraHandle;
29
+ /**
30
+ * Publishes the plan's camera, for as long as the map is on screen.
31
+ *
32
+ * The same inversion {@link setMarkerResolver} performs, and for the same reason: the renderer's
33
+ * camera is reached through hooks, which only resolve inside a component mounted under
34
+ * `<Renderer>` — and that is deliberate, since it is what stops anything touching the camera
35
+ * before the canvas exists. The SDK's own methods, the kiosk store and the route store are not
36
+ * components and cannot hold a hook, so `MapCamera` hands the camera out here once it is safe.
37
+ * @param camera - The camera; omitted to unpublish it as the map unmounts.
38
+ */
39
+ export declare function setMapCamera(camera?: MapCameraHandle): void;
40
+ /**
41
+ * The plan's camera, if the map is on screen.
42
+ *
43
+ * Absent before the canvas has mounted, and in MapLibre mode, where the map is unmounted entirely
44
+ * and the imperative renderer drives the embed instead.
45
+ * @returns The camera, or `undefined`.
46
+ */
47
+ export declare function mapCamera(): MapCameraHandle | undefined;
48
+ //# sourceMappingURL=camera.d.ts.map
@@ -0,0 +1 @@
1
+ export function createMapCamera(t){return{get api(){return t.current.api},state:()=>t.current.state()}}export function setMapCamera(t){e=t}export function mapCamera(){return e}let e;
@@ -1,4 +1,4 @@
1
- import { FontSizeFactor } from '../../../../renderer';
1
+ import { FontSizeFactor } from '../../../../engine/defs';
2
2
  export default class TextFitter {
3
3
  private readonly maxMultilineFontSize;
4
4
  private readonly baseFontSize;
@@ -1,6 +1,5 @@
1
1
  import { type LayerDef } from '@expofp/renderer';
2
- import { type RendererService } from '../../../../renderer';
3
- export default function configAll(rendererService: RendererService): Promise<{
2
+ export default function configAll(): Promise<{
4
3
  layers: LayerDef[];
5
4
  cleanup: () => void;
6
5
  }>;
@@ -1 +1 @@
1
- import{createLayerDef as r}from"../../../../renderer";import i from"../../../../store";import{isPathwayLayer as d}from"../../../../utils/is-pathway-layer";import{WF_CURRENT_POSITION_LAYER_NAME as u,WF_LINES_ANIMATED_LAYER_NAME as N,WF_LINES_LAYER_NAME as R,WF_POINTS_LAYER_NAME as h,WF_TRAIL_LAYER_NAME as M}from"../../../../wayfinding/layers";import{createTrafficLayers as w}from"../../traffic/trafficLayers";import{configBoothsBadges as I}from"./config-booth-badge";import P from"./config-load-layer";import{MARKER_LAYER_NAME as T}from"./config-markers";export default function S(n){const{defaultLayer:a}=i.layerStore;let{layers:o}=i.layerStore;if(a){const e=[...o],s=o.indexOf(a);e.splice(s,1),o=[a,...e]}const L=o.filter(e=>!e.rootParent).map(e=>P(e,n));return Promise.all(L).then(e=>{const s=r(h,[],{dim:!1,interactive:!0}),c=r(R,[],{dim:!1}),y=r(T,[]),p=r(M,[],{dim:!1}),_=r(N,[],{dim:!1}),A=r(u,[],{dim:!1}),f=[],l=[];for(const t of e.flat())d(t.name)?(t.dim=!1,l.push(t)):f.push(t);const{layer:m,cleanup:E}=I(n,"root",i.boothStore.booths);return{layers:[...f,...m?[m]:[],...l,...w(),y,p,c,_,s,A],cleanup:E}})}
1
+ import{createLayerDef as e}from"../../../../engine/defs";import n from"../../../../store";import{isPathwayLayer as E}from"../../../../utils/is-pathway-layer";import{WF_CURRENT_POSITION_LAYER_NAME as d,WF_LINES_ANIMATED_LAYER_NAME as N,WF_LINES_LAYER_NAME as u,WF_POINTS_LAYER_NAME as R,WF_TRAIL_LAYER_NAME as h}from"../../../../wayfinding/layers";import{createTrafficLayers as M}from"../../traffic/trafficLayers";import{configBoothsBadges as w}from"./config-booth-badge";import I from"./config-load-layer";import{MARKER_LAYER_NAME as P}from"./config-markers";export default function S(){const{defaultLayer:a}=n.layerStore;let{layers:o}=n.layerStore;if(a){const r=[...o],s=o.indexOf(a);r.splice(s,1),o=[a,...r]}const L=o.filter(r=>!r.rootParent).map(r=>I(r));return Promise.all(L).then(r=>{const s=e(R,[],{dim:0}),l=e(u,[],{dim:0}),c=e(P,[]),y=e(h,[],{dim:0}),p=e(N,[],{dim:0}),_=e(d,[],{dim:0}),i=[],f=[];for(const t of r.flat())E(t.name)?(t.dim=0,f.push(t)):i.push(t);const{layer:m,cleanup:A}=w("root",n.boothStore.booths);return{layers:[...i,...m?[m]:[],...f,...M(),c,y,l,p,s,_],cleanup:A}})}
@@ -1,7 +1,6 @@
1
1
  import { LayerDef } from '@expofp/renderer';
2
- import { PathInfo } from '../../../../renderer/engine-core/types';
3
2
  import { Layer } from '../../../../store/LayerStore';
4
- import { ShapeBgDef } from '../../../../types/drawing.types';
3
+ import { PathInfo, ShapeBgDef } from '../../../../types/drawing.types';
5
4
  export declare const BG_LAYER_NAME = "bg";
6
5
  export declare const FG_LAYER_NAME = "fg";
7
6
  export default function configBg(layer: Layer): Promise<LayerDef>;
@@ -1 +1 @@
1
- import{select as d}from"d3-selection";import{getLayerSvg as m,gtePathByIndex as p}from"../../../../data/svg";import{meshToShapeDef as g,rectToShapeDef as i}from"../../../../renderer";import h from"../../../../store";import{LayersMode as u}from"../../../../store/LayerStore";export const BG_LAYER_NAME="bg",FG_LAYER_NAME="fg";export default async function x(t){let o=[],n=[];const a=[],r=d(m(t)).select(`[data-layer="${t.name}"]`),c=r.selectAll(":scope > *:not([data-tagname='efp-booth']):not(g[data-is-editable='false']) path, :scope > path").nodes(),f=r.selectAll(":scope g[data-layer] > g[data-is-editable='false'] path, :scope > g[data-is-editable='false'] path, :scope > path[data-tagname='ptext']").nodes(),l=h.layerStore.mode!==u.Default?t.rootParent?.name||t.name:"";for(const e of c){const s=+e.getAttribute("data-index");e.tagName==="path"&&s!==-1?o.push(buildPathDef({color:e.style.fill,index:s},l)):e.tagName==="rect"&&o.push(i(e))}for(const e of f){const s=+e.getAttribute("data-index");e.tagName==="path"&&s!==-1?n.push(buildPathDef({color:e.style.fill,index:s},l)):e.tagName==="rect"&&n.push(i(e))}return a.push({name:BG_LAYER_NAME,children:o.filter(e=>e)}),a.push({name:FG_LAYER_NAME,children:n.filter(e=>e)}),Promise.resolve({name:t.name,children:a.filter(e=>e.children.length)})}export function buildPathDef(t,o){if(t.index===-1||Number.isNaN(t.index))return;(!t.color||t.color==="none")&&(t.color="transparent");const n=parseInt(t.index.toString()),a=p(n,o),r=g(a,t.color);return r.unblinking=t.unblinking,r}
1
+ import{select as m}from"d3-selection";import{getLayerSvg as p,gtePathByIndex as g}from"../../../../data/svg";import{meshToShapeDef as h,rectToShapeDef as c}from"../../../../engine/defs";import u from"../../../../store";import{LayersMode as x}from"../../../../store/LayerStore";export const BG_LAYER_NAME="bg",FG_LAYER_NAME="fg";export default async function b(e){let r=[],l=[];const n=[],a=m(p(e)).select(`[data-layer="${e.name}"]`),f=a.selectAll(":scope > *:not([data-tagname='efp-booth']):not(g[data-is-editable='false']) path, :scope > path").nodes(),d=a.selectAll(":scope g[data-layer] > g[data-is-editable='false'] path, :scope > g[data-is-editable='false'] path, :scope > path[data-tagname='ptext']").nodes(),i=u.layerStore.mode!==x.Default?e.rootParent?.name||e.name:"";for(const t of f){const s=+t.getAttribute("data-index");let o;t.tagName==="path"&&s!==-1?o=buildPathDef({color:t.style.fill,index:s},i):t.tagName==="rect"&&(o=c(t)),o&&r.push(o)}for(const t of d){const s=+t.getAttribute("data-index");let o;t.tagName==="path"&&s!==-1?o=buildPathDef({color:t.style.fill,index:s},i):t.tagName==="rect"&&(o=c(t)),o&&l.push(o)}return n.push({name:BG_LAYER_NAME,children:r}),n.push({name:FG_LAYER_NAME,children:l}),Promise.resolve({name:e.name,children:n.filter(t=>t.children.length)})}export function buildPathDef(e,r){if(e.index===-1||Number.isNaN(e.index))return;(!e.color||e.color==="none")&&(e.color="transparent");const l=parseInt(e.index.toString()),n=g(l,r),a=h(n,e.color);return a.unblinking=e.unblinking,a}
@@ -1,12 +1,79 @@
1
1
  import { type LayerDef, type ShapeDef, type TextDef } from '@expofp/renderer';
2
- import { type RendererService } from '../../../../renderer';
3
2
  import { type Booth, RegularBooth } from '../../../../store/BoothStore';
4
- export declare function createBoothBadge(rendererService: RendererService, booth: RegularBooth): {
3
+ export declare function createBoothBadge(booth: RegularBooth): {
5
4
  bg: ShapeDef;
6
5
  text: TextDef;
7
6
  dispose: () => void;
8
7
  };
9
- export declare function configBoothsBadges(rendererService: RendererService, layerName: string, booths: Booth[]): {
8
+ /**
9
+ * Lays a booth's badge out as the plan zooms: the background rect, and the booth number inside it.
10
+ *
11
+ * One instance per badge, holding the geometry the layout reads — where the badge is anchored inside
12
+ * the booth's footprint, its size at scale 1, and the scale beyond which it would spill out of the
13
+ * polygon. The defs' `onScale` closures delegate to the two methods here.
14
+ */
15
+ export declare class BoothBadgeDrawer {
16
+ private readonly placement;
17
+ /**
18
+ * @param placement - Everything the layout reads: the booth, where the badge is anchored, its size
19
+ * at scale 1, the booth's rotation, the scale it may not exceed, the pixel ratio its font is
20
+ * authored against, and the two defs it writes.
21
+ */
22
+ constructor(placement: BadgePlacement);
23
+ /**
24
+ * Lays the background rect out for a new pixel size.
25
+ * @param pixelSize - Plan units per device pixel.
26
+ * @returns The background unless its floor is switched off — the rect is kept current either
27
+ * way, so showing it draws the right size straight away.
28
+ */
29
+ layOutBg(pixelSize: number): ShapeDef[];
30
+ /**
31
+ * Lays the booth number out for a new pixel size. The font stops growing at the scale the badge
32
+ * itself stops growing, so the text never outgrows the rect around it.
33
+ * @param pixelSize - Plan units per device pixel.
34
+ * @returns The text unless its floor is switched off, as for the background.
35
+ */
36
+ layOutText(pixelSize: number): TextDef[];
37
+ /**
38
+ * The badge's rect at a pixel size, clamped to what fits inside the booth.
39
+ *
40
+ * The anchor is in world space and names the badge's top-left corner, so the center is
41
+ * `anchor + R(rotation) · (w/2, h/2)`; the renderer then rotates the badge about that center, which
42
+ * lands it where the anchor says.
43
+ * @param pixelSize - Plan units per device pixel.
44
+ * @returns The rect.
45
+ */
46
+ private rectScaled;
47
+ /**
48
+ * Whether the badge's floor is switched off, which hides it wherever it sits.
49
+ * @returns Whether to hide it.
50
+ */
51
+ private isHidden;
52
+ }
53
+ /** Everything {@link BoothBadgeDrawer} needs to place a badge, gathered once when it is built. */
54
+ export interface BadgePlacement {
55
+ /** The booth the badge belongs to; its layer's visibility decides whether the badge is drawn. */
56
+ booth: RegularBooth;
57
+ /** Where the badge's top-left corner sits on the plan, before rotation. */
58
+ anchor: {
59
+ x: number;
60
+ y: number;
61
+ };
62
+ /** The badge's width and height at scale 1. */
63
+ source: {
64
+ x: number;
65
+ y: number;
66
+ };
67
+ /** The booth's rotation, in radians. */
68
+ rotation: number;
69
+ /** The largest scale that still fits inside the booth's footprint. */
70
+ maxScale: number;
71
+ /** The badge's background rect. */
72
+ bg: ShapeDef;
73
+ /** The booth number drawn inside it. */
74
+ text: TextDef;
75
+ }
76
+ export declare function configBoothsBadges(layerName: string, booths: Booth[]): {
10
77
  layer: LayerDef | null;
11
78
  cleanup: () => void;
12
79
  };