@expofp/floorplan 3.2.6 → 3.2.8

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 (245) hide show
  1. package/dist/browser/{CookieConsent-AXeH9_mR.js → CookieConsent-B1LE7YfT.js} +2990 -2572
  2. package/dist/browser/{Debug-D5ilpjt9.js → Debug-DhDzWQYS.js} +7 -7
  3. package/dist/browser/{Demo-D2ZQ82R-.js → Demo-D_175gLz.js} +11 -11
  4. package/dist/browser/{Free-Cmu2GELK.js → Free-eF7PbjEi.js} +13 -13
  5. package/dist/browser/{Gallery-CHhf9uSJ.js → Gallery-BA-pvWo8.js} +9 -9
  6. package/dist/browser/{GpsLoader-D1p1K7tv.js → GpsLoader-CfS8cpM_.js} +35 -35
  7. package/dist/browser/{KioskStore-B5seJF_w.js → KioskStore-D6ga9Qev.js} +17 -17
  8. package/dist/browser/{Mapbox-vm-JvDPW.js → Mapbox-B2UgukAw.js} +41 -41
  9. package/dist/browser/{SetKioskMode-CsvIhnEp.js → SetKioskMode-DN9dYtQq.js} +18 -18
  10. package/dist/browser/ShowKiosk-NOvinyaO.js +26 -0
  11. package/dist/browser/{ThreeComponent-l50EC7kp.js → ThreeComponent-Dd6C-3ZE.js} +195 -195
  12. package/dist/browser/{TouchHand-CzIhbCk_.js → TouchHand-D4zCIp9f.js} +4 -4
  13. package/dist/browser/{ViewerMenuPanel-DN5BiNZZ.js → ViewerMenuPanel-3gfsNYAC.js} +17 -17
  14. package/dist/browser/{add-debug-secret-listener-BP0ji46o.js → add-debug-secret-listener-PCn2L2xn.js} +1 -1
  15. package/dist/browser/{boolean-editor-BIXc9xad.js → boolean-editor-C62I7paI.js} +10 -10
  16. package/dist/browser/bootIntercom-CJp5myUd.js +37 -0
  17. package/dist/browser/{box-Cj2OPB5o.js → box-BllGyNzW.js} +5 -5
  18. package/dist/browser/{browser-iEBlxETL.js → browser-hErw7TCJ.js} +2 -2
  19. package/dist/browser/bundle.json +53 -53
  20. package/dist/browser/{classnames-BdEjlCJw.js → classnames-DZ15rBvY.js} +2 -2
  21. package/dist/browser/{client-AFMbhyej.js → client-vSscuHGN.js} +4 -4
  22. package/dist/browser/{data-BNcMQJM9.js → data-Pg90oQgy.js} +49 -49
  23. package/dist/browser/{debug-overlay-BvzIl4S5.js → debug-overlay-Cz0LzO7B.js} +11 -11
  24. package/dist/browser/{debug-ui-Cjk1VEBj.js → debug-ui-HOJ52C7W.js} +6 -6
  25. package/dist/browser/{dist-CpONuUgR.js → dist-B-j5Mwk6.js} +5 -5
  26. package/dist/browser/{dist-CCy_DoUq.js → dist-D1FyJZyA.js} +6 -6
  27. package/dist/browser/{dist-B03hOAXP.js → dist-Di6V6Vgc.js} +3 -3
  28. package/dist/browser/{efp-debug-init-DjqnYMK4.js → efp-debug-init-GJ1wnZRj.js} +2 -2
  29. package/dist/browser/{enum-editor-DNavJMSd.js → enum-editor-DDYy1Hf6.js} +11 -11
  30. package/dist/browser/{exports-BaXbuICo.js → exports-D2FWPMfV.js} +1 -1
  31. package/dist/browser/{favicon-CPIIkXVW.js → favicon-CLnUT7_M.js} +1 -1
  32. package/dist/browser/{fetch-retry.umd-DuhpKOAv.js → fetch-retry.umd-CsTB0zFM.js} +2 -2
  33. package/dist/browser/{flex-BEEq9bN8.js → flex-fdrXlk1E.js} +6 -6
  34. package/dist/browser/{flex.props-DxAZIGSj.js → flex.props-CKl-laU4.js} +2 -2
  35. package/dist/browser/{floorplan.loader-KZ3u0Juq.js → floorplan.loader-B9u5roId.js} +9 -9
  36. package/dist/browser/{floorplan.ready-DMR98iUb.js → floorplan.ready-DhqJ6xoZ.js} +215 -254
  37. package/dist/browser/{fuse-CjSkZXtV.js → fuse-BiPQjoVv.js} +2 -2
  38. package/dist/browser/index.js +12 -12
  39. package/dist/browser/{is-debug-DPDBcjeg.js → is-debug-DatwRSE7.js} +3 -3
  40. package/dist/browser/{jsx-runtime-DnQmxKxk.js → jsx-runtime-IE8skafD.js} +2 -2
  41. package/dist/browser/{lib-BXRYaEmQ.js → lib-DeP5xNNM.js} +4 -4
  42. package/dist/browser/{main-Bw8nBuIh.js → main-DHo0y8hQ.js} +1 -1
  43. package/dist/browser/{mobx-DsBbHmhw.js → mobx-CrV9DCMJ.js} +4 -4
  44. package/dist/browser/{particles.min-BmgWvtXZ.js → particles.min-CvpZUl3e.js} +2 -2
  45. package/dist/browser/{prop-types-CRT2Qy-L.js → prop-types-BHwYgrUd.js} +2 -2
  46. package/dist/browser/{react-BCrcyjAU.js → react-B3Fm-ZS0.js} +2 -2
  47. package/dist/browser/{react-dom-z6XbaPl9.js → react-dom-CySklTOi.js} +3 -3
  48. package/dist/browser/{reset-all-settings-BOrTf1Lp.js → reset-all-settings-Cl74zGyE.js} +7 -7
  49. package/dist/browser/{rolldown-runtime-BSQQuCTD.js → rolldown-runtime-BAuBEODA.js} +1 -1
  50. package/dist/browser/{settings-DTDJKJjP.js → settings-BIgQOlLC.js} +2 -2
  51. package/dist/browser/{settings-item-DdnzmVZj.js → settings-item-CMHd9Vr7.js} +6 -6
  52. package/dist/browser/{store-CB1U4gvI.js → store-WG-XbhCX.js} +4643 -4503
  53. package/dist/browser/{string-editor-BEncfiNG.js → string-editor-Cdda3m3H.js} +8 -8
  54. package/dist/browser/{theme-RyeKAHMc.js → theme-CEfCl0Wg.js} +8 -8
  55. package/dist/browser/{ui-D5E2lSMl.js → ui-Cxw-zCCr.js} +8 -8
  56. package/dist/esm/RouteCutIn.js +1 -1
  57. package/dist/esm/components/IntercomLauncher.d.ts +5 -0
  58. package/dist/esm/components/IntercomLauncher.js +1 -0
  59. package/dist/esm/components/Layout.js +1 -1
  60. package/dist/esm/components/Map/Map.js +1 -1
  61. package/dist/esm/components/Map/drawing/config/config-all.js +1 -1
  62. package/dist/esm/components/Map/drawing/config/config-booths.js +1 -1
  63. package/dist/esm/components/SearchBox.js +1 -1
  64. package/dist/esm/components/gps/useUserLocationAndHeading.js +1 -1
  65. package/dist/esm/components/gps/utils.js +1 -1
  66. package/dist/esm/floorplan.ready.js +1 -1
  67. package/dist/esm/intercom/bootIntercom.js +1 -19
  68. package/dist/esm/services/routing.js +1 -1
  69. package/dist/esm/store/BoothStore.d.ts +0 -1
  70. package/dist/esm/store/BoothStore.js +1 -1
  71. package/dist/esm/store/IntercomStore.d.ts +7 -0
  72. package/dist/esm/store/IntercomStore.js +1 -0
  73. package/dist/esm/store/RootStore.d.ts +2 -0
  74. package/dist/esm/store/RootStore.js +1 -1
  75. package/dist/esm/store/RouteStore.d.ts +1 -1
  76. package/dist/esm/store/RouteStore.js +1 -1
  77. package/dist/esm/store/UIState.js +1 -1
  78. package/dist/esm/store/index.d.ts +1 -0
  79. package/dist/esm/store/index.js +1 -1
  80. package/dist/esm/store/init/init-booths.js +1 -1
  81. package/dist/esm/tools/track-event.js +1 -1
  82. package/dist/esm/utils/customCommands.d.ts +1 -1
  83. package/dist/esm/utils/customCommands.js +1 -1
  84. package/dist/esm/utils/gps.d.ts +0 -1
  85. package/dist/esm/utils/gps.js +1 -1
  86. package/dist/esm/utils/haversineDistance.d.ts +7 -0
  87. package/dist/esm/utils/haversineDistance.js +1 -0
  88. package/dist/esm/wayfinding/adapters/boothToEndpoint.d.ts +13 -0
  89. package/dist/esm/wayfinding/adapters/boothToEndpoint.js +1 -0
  90. package/dist/esm/wayfinding/adapters/boothToWaypoint.d.ts +1 -1
  91. package/dist/esm/wayfinding/adapters/canvasIconProvider.d.ts +20 -0
  92. package/dist/esm/wayfinding/adapters/canvasIconProvider.js +1 -0
  93. package/dist/esm/wayfinding/adapters/floorContext.d.ts +10 -0
  94. package/dist/esm/wayfinding/adapters/floorContext.js +1 -0
  95. package/dist/esm/wayfinding/adapters/graphDataSource.d.ts +1 -1
  96. package/dist/esm/wayfinding/adapters/iconProvider.d.ts +15 -0
  97. package/dist/esm/wayfinding/adapters/index.d.ts +9 -0
  98. package/dist/esm/wayfinding/adapters/index.js +1 -0
  99. package/dist/esm/wayfinding/adapters/kioskCanvas.d.ts +7 -0
  100. package/dist/esm/wayfinding/adapters/kioskCanvas.js +1 -0
  101. package/dist/esm/wayfinding/adapters/positionInput.d.ts +11 -0
  102. package/dist/esm/wayfinding/adapters/positionInput.js +1 -0
  103. package/dist/esm/wayfinding/bindMobxReactions.d.ts +27 -0
  104. package/dist/esm/wayfinding/bindMobxReactions.js +1 -0
  105. package/dist/esm/wayfinding/{__tests__ → core/__tests__}/helpers.d.ts +0 -5
  106. package/dist/esm/wayfinding/core/__tests__/helpers.js +1 -0
  107. package/dist/esm/wayfinding/core/createWayfindingEngine.d.ts +16 -0
  108. package/dist/esm/wayfinding/core/createWayfindingEngine.js +1 -0
  109. package/dist/esm/wayfinding/{graph → core/graph}/graphCache.d.ts +2 -1
  110. package/dist/esm/wayfinding/core/index.d.ts +16 -0
  111. package/dist/esm/wayfinding/core/index.js +1 -0
  112. package/dist/esm/wayfinding/core/position/distanceToRoute.d.ts +3 -0
  113. package/dist/esm/wayfinding/core/position/distanceToRoute.js +1 -0
  114. package/dist/esm/wayfinding/core/position/gpsThreshold.d.ts +22 -0
  115. package/dist/esm/wayfinding/core/position/gpsThreshold.js +1 -0
  116. package/dist/esm/wayfinding/core/position/shouldReroute.d.ts +3 -0
  117. package/dist/esm/wayfinding/core/position/shouldReroute.js +1 -0
  118. package/dist/esm/wayfinding/core/position/snapToRoute.d.ts +4 -0
  119. package/dist/esm/wayfinding/core/position/snapToRoute.js +1 -0
  120. package/dist/esm/{components/Map/drawing/config/route-snapping → wayfinding/core/position}/splitRouteByPoint.d.ts +1 -1
  121. package/dist/esm/wayfinding/core/position/splitRouteByPoint.js +1 -0
  122. package/dist/esm/wayfinding/core/rendering/computeTrailPoints.d.ts +19 -0
  123. package/dist/esm/wayfinding/core/rendering/computeTrailPoints.js +1 -0
  124. package/dist/esm/wayfinding/{rendering → core/rendering}/computeTransitionPoints.d.ts +2 -2
  125. package/dist/esm/wayfinding/core/rendering/computeTransitionPoints.js +1 -0
  126. package/dist/esm/wayfinding/core/rendering/getVisibleRouteLines.d.ts +11 -0
  127. package/dist/esm/wayfinding/core/rendering/getVisibleRouteLines.js +1 -0
  128. package/dist/esm/wayfinding/core/rendering/normalizeRouteDirection.d.ts +20 -0
  129. package/dist/esm/wayfinding/core/rendering/normalizeRouteDirection.js +1 -0
  130. package/dist/esm/wayfinding/core/rendering/routeGeometry.d.ts +15 -0
  131. package/dist/esm/wayfinding/core/rendering/routeGeometry.js +1 -0
  132. package/dist/esm/wayfinding/core/routing/optimizeWaypointOrder.d.ts +19 -0
  133. package/dist/esm/wayfinding/core/routing/optimizeWaypointOrder.js +1 -0
  134. package/dist/esm/wayfinding/core/routing/resolveWaypointCandidates.d.ts +7 -0
  135. package/dist/esm/wayfinding/core/routing/resolveWaypointCandidates.js +1 -0
  136. package/dist/esm/wayfinding/{types.d.ts → core/types.d.ts} +37 -0
  137. package/dist/esm/wayfinding/createWayfinding.d.ts +3 -0
  138. package/dist/esm/wayfinding/createWayfinding.js +1 -0
  139. package/dist/esm/wayfinding/handlers/kioskHandler.d.ts +25 -0
  140. package/dist/esm/wayfinding/handlers/kioskHandler.js +1 -0
  141. package/dist/esm/wayfinding/handlers/yahHandler.d.ts +23 -0
  142. package/dist/esm/wayfinding/handlers/yahHandler.js +1 -0
  143. package/dist/esm/wayfinding/layers.d.ts +14 -0
  144. package/dist/esm/wayfinding/layers.js +1 -0
  145. package/dist/esm/wayfinding/renderer/createWayfindingRenderer.d.ts +14 -0
  146. package/dist/esm/wayfinding/renderer/createWayfindingRenderer.js +1 -0
  147. package/dist/esm/wayfinding/renderer/iconManager.d.ts +31 -0
  148. package/dist/esm/wayfinding/renderer/iconManager.js +1 -0
  149. package/dist/esm/wayfinding/renderer/index.d.ts +3 -0
  150. package/dist/esm/wayfinding/renderer/index.js +1 -0
  151. package/dist/esm/wayfinding/renderer/layerManager.d.ts +27 -0
  152. package/dist/esm/wayfinding/renderer/layerManager.js +1 -0
  153. package/dist/esm/wayfinding/renderer/routeLineManager.d.ts +42 -0
  154. package/dist/esm/wayfinding/renderer/routeLineManager.js +1 -0
  155. package/dist/esm/wayfinding/renderer/trailManager.d.ts +27 -0
  156. package/dist/esm/wayfinding/renderer/trailManager.js +1 -0
  157. package/dist/esm/wayfinding/renderer/types.d.ts +162 -0
  158. package/dist/esm/wayfinding/runtime/createWayfindingRuntime.d.ts +3 -0
  159. package/dist/esm/wayfinding/runtime/createWayfindingRuntime.js +1 -0
  160. package/dist/esm/wayfinding/runtime/endpointView.d.ts +16 -0
  161. package/dist/esm/wayfinding/runtime/endpointView.js +1 -0
  162. package/dist/esm/wayfinding/runtime/getRouteLines.d.ts +13 -0
  163. package/dist/esm/wayfinding/runtime/getRouteLines.js +1 -0
  164. package/dist/esm/wayfinding/runtime/positionTrailView.d.ts +57 -0
  165. package/dist/esm/wayfinding/runtime/positionTrailView.js +1 -0
  166. package/dist/esm/wayfinding/runtime/positionView.d.ts +23 -0
  167. package/dist/esm/wayfinding/runtime/positionView.js +1 -0
  168. package/dist/esm/wayfinding/runtime/routeLinesView.d.ts +18 -0
  169. package/dist/esm/wayfinding/runtime/routeLinesView.js +1 -0
  170. package/dist/esm/wayfinding/runtime/routeRenderData.d.ts +29 -0
  171. package/dist/esm/wayfinding/runtime/routeRenderData.js +1 -0
  172. package/dist/esm/wayfinding/runtime/routeUpdate.d.ts +14 -0
  173. package/dist/esm/wayfinding/runtime/routeUpdate.js +1 -0
  174. package/dist/esm/wayfinding/runtime/trailView.d.ts +21 -0
  175. package/dist/esm/wayfinding/runtime/trailView.js +1 -0
  176. package/dist/esm/wayfinding/runtime/transitionView.d.ts +18 -0
  177. package/dist/esm/wayfinding/runtime/transitionView.js +1 -0
  178. package/dist/esm/wayfinding/runtime/types.d.ts +72 -0
  179. package/dist/esm/wayfinding/runtime/types.js +1 -0
  180. package/dist/esm/wayfinding/utils/findBoothInRadius.d.ts +4 -0
  181. package/dist/esm/wayfinding/utils/findBoothInRadius.js +1 -0
  182. package/package.json +3 -3
  183. package/dist/browser/ShowKiosk-BL9nfBDf.js +0 -26
  184. package/dist/browser/bootIntercom-D3i1xdrZ.js +0 -40
  185. package/dist/esm/components/Map/drawing/config/config-booth-scaled.d.ts +0 -14
  186. package/dist/esm/components/Map/drawing/config/config-booth-scaled.js +0 -1
  187. package/dist/esm/components/Map/drawing/config/config-wf.d.ts +0 -8
  188. package/dist/esm/components/Map/drawing/config/config-wf.js +0 -1
  189. package/dist/esm/components/Map/drawing/config/config-yah.d.ts +0 -2
  190. package/dist/esm/components/Map/drawing/config/config-yah.js +0 -1
  191. package/dist/esm/components/Map/drawing/config/route-snapping/index.d.ts +0 -5
  192. package/dist/esm/components/Map/drawing/config/route-snapping/index.js +0 -1
  193. package/dist/esm/components/Map/drawing/config/route-snapping/snapPositionToRoute.d.ts +0 -21
  194. package/dist/esm/components/Map/drawing/config/route-snapping/snapPositionToRoute.js +0 -1
  195. package/dist/esm/components/Map/drawing/config/route-snapping/splitRouteByPoint.js +0 -1
  196. package/dist/esm/components/Map/drawing/config/route-snapping/types.d.ts +0 -18
  197. package/dist/esm/components/Map/drawing/config/route-snapping/utils.d.ts +0 -29
  198. package/dist/esm/components/Map/drawing/config/route-snapping/utils.js +0 -1
  199. package/dist/esm/utils/buildOptimizedRoute.d.ts +0 -11
  200. package/dist/esm/utils/buildOptimizedRoute.js +0 -1
  201. package/dist/esm/utils/yah.d.ts +0 -8
  202. package/dist/esm/utils/yah.js +0 -1
  203. package/dist/esm/wayfinding/_PLAN-public-api.d.ts +0 -220
  204. package/dist/esm/wayfinding/__integration__/legacy/legacyWayfinding.d.ts +0 -27
  205. package/dist/esm/wayfinding/__integration__/legacy/legacyWayfinding.js +0 -1
  206. package/dist/esm/wayfinding/__tests__/helpers.js +0 -1
  207. package/dist/esm/wayfinding/index.d.ts +0 -18
  208. package/dist/esm/wayfinding/index.js +0 -1
  209. package/dist/esm/wayfinding/rendering/computeTransitionPoints.js +0 -1
  210. package/dist/esm/wayfinding/rendering/normalizeRouteDirection.d.ts +0 -19
  211. package/dist/esm/wayfinding/rendering/normalizeRouteDirection.js +0 -1
  212. package/dist/esm/wayfinding/rendering/routeGeometry.d.ts +0 -16
  213. package/dist/esm/wayfinding/rendering/routeGeometry.js +0 -1
  214. package/dist/esm/wayfinding/routing/getGraphLines.d.ts +0 -14
  215. package/dist/esm/wayfinding/routing/getGraphLines.js +0 -1
  216. /package/dist/esm/{components/Map/drawing/config/route-snapping/types.js → wayfinding/adapters/iconProvider.js} +0 -0
  217. /package/dist/esm/wayfinding/{graph → core/graph}/buildGraph.d.ts +0 -0
  218. /package/dist/esm/wayfinding/{graph → core/graph}/buildGraph.js +0 -0
  219. /package/dist/esm/wayfinding/{graph → core/graph}/buildNGraph.d.ts +0 -0
  220. /package/dist/esm/wayfinding/{graph → core/graph}/buildNGraph.js +0 -0
  221. /package/dist/esm/wayfinding/{graph → core/graph}/constants.d.ts +0 -0
  222. /package/dist/esm/wayfinding/{graph → core/graph}/constants.js +0 -0
  223. /package/dist/esm/wayfinding/{graph → core/graph}/findShortestPath.d.ts +0 -0
  224. /package/dist/esm/wayfinding/{graph → core/graph}/findShortestPath.js +0 -0
  225. /package/dist/esm/wayfinding/{graph → core/graph}/graphCache.js +0 -0
  226. /package/dist/esm/wayfinding/{graph → core/graph}/graphHelpers.d.ts +0 -0
  227. /package/dist/esm/wayfinding/{graph → core/graph}/graphHelpers.js +0 -0
  228. /package/dist/esm/wayfinding/{graph → core/graph}/linkCost.d.ts +0 -0
  229. /package/dist/esm/wayfinding/{graph → core/graph}/linkCost.js +0 -0
  230. /package/dist/esm/wayfinding/{graph → core/graph}/pathfinder/aStarPathFinder.d.ts +0 -0
  231. /package/dist/esm/wayfinding/{graph → core/graph}/pathfinder/aStarPathFinder.js +0 -0
  232. /package/dist/esm/wayfinding/{graph → core/graph}/pathfinder/parseNodeId.d.ts +0 -0
  233. /package/dist/esm/wayfinding/{graph → core/graph}/pathfinder/parseNodeId.js +0 -0
  234. /package/dist/esm/wayfinding/{routing → core/routing}/buildMultiPointRoute.d.ts +0 -0
  235. /package/dist/esm/wayfinding/{routing → core/routing}/buildMultiPointRoute.js +0 -0
  236. /package/dist/esm/wayfinding/{routing → core/routing}/buildRoute.d.ts +0 -0
  237. /package/dist/esm/wayfinding/{routing → core/routing}/buildRoute.js +0 -0
  238. /package/dist/esm/wayfinding/{routing → core/routing}/findNearestGraphPoint.d.ts +0 -0
  239. /package/dist/esm/wayfinding/{routing → core/routing}/findNearestGraphPoint.js +0 -0
  240. /package/dist/esm/wayfinding/{routing → core/routing}/getRouteLength.d.ts +0 -0
  241. /package/dist/esm/wayfinding/{routing → core/routing}/getRouteLength.js +0 -0
  242. /package/dist/esm/wayfinding/{routing → core/routing}/routeResult.d.ts +0 -0
  243. /package/dist/esm/wayfinding/{routing → core/routing}/routeResult.js +0 -0
  244. /package/dist/esm/wayfinding/{types.js → core/types.js} +0 -0
  245. /package/dist/esm/wayfinding/{_PLAN-public-api.js → renderer/types.js} +0 -0
@@ -0,0 +1,21 @@
1
+ import type { IconProvider } from "../adapters";
2
+ import type { RoutePoint } from "../core";
3
+ import type { WayfindingRenderer } from "../renderer";
4
+ import type { FloorContext } from "./types";
5
+ /**
6
+ * Callers choose the slot name and provide two route-points; the view draws a dotted trail between them (or hides
7
+ * them if the layers are not on the active floor)
8
+ */
9
+ export interface TrailView {
10
+ /** Draws dotted points between two route-points in the named slot. */
11
+ place(slot: string, from: RoutePoint, to: RoutePoint): void;
12
+ clear(slot: string): void;
13
+ clearAll(): void;
14
+ }
15
+ export declare function createTrailView({ renderer, iconProvider, floorContext, layer, }: {
16
+ renderer: WayfindingRenderer;
17
+ iconProvider: IconProvider;
18
+ floorContext: FloorContext;
19
+ layer: string;
20
+ }): TrailView;
21
+ //# sourceMappingURL=trailView.d.ts.map
@@ -0,0 +1 @@
1
+ export function createTrailView({renderer:r,iconProvider:c,floorContext:i,layer:u}){const a=new Set;function o(l,t){if(i.showAllFloors())return!0;const e=i.getActiveFloor();return e?l===e&&t===e:!1}function n(l){r.setTrail(l,null,null),a.delete(l)}return{place(l,t,e){if(!o(t.layer,e.layer)){n(l);return}r.setTrail(l,t,e,{canvas:c.getIcon("trail").canvas,layer:u}),a.add(l)},clear(l){n(l)},clearAll(){for(const l of a)r.setTrail(l,null,null);a.clear()}}}
@@ -0,0 +1,18 @@
1
+ import type { IconProvider } from "../adapters";
2
+ import type { RouteLine, TransitionPointDef } from "../core";
3
+ import type { WayfindingRenderer } from "../renderer";
4
+ import type { FloorContext } from "./types";
5
+ interface TransitionView {
6
+ /** Recomputes transition points from route lines + floor context and places their icons. */
7
+ place(routeLines: RouteLine[]): void;
8
+ clear(): void;
9
+ }
10
+ export declare function createTransitionView({ renderer, iconProvider, floorContext, onTransitionClick, layer, }: {
11
+ renderer: WayfindingRenderer;
12
+ iconProvider: IconProvider;
13
+ floorContext: FloorContext;
14
+ onTransitionClick: (point: TransitionPointDef) => void;
15
+ layer: string;
16
+ }): TransitionView;
17
+ export {};
18
+ //# sourceMappingURL=transitionView.d.ts.map
@@ -0,0 +1 @@
1
+ import{computeTransitionPoints as f}from"../core";const a="transition";export function createTransitionView({renderer:t,iconProvider:r,floorContext:i,onTransitionClick:c,layer:s}){return{place(l){t.clearIcons(a);let e;if(i.showAllFloors())e=null;else{const o=i.getActiveFloor();if(!o)return;e=o}const u=f({routeLines:l,currentLayerName:e,floorOrder:i.getFloorOrder()});for(const[o,n]of u.entries())t.setIcon(a,{canvas:r.getIcon(p(n.role,n.direction)).canvas,layer:s,x:n.x,y:n.y,cardinalSnap:!0,onClick:n.role==="exit"?()=>c(n):void 0},o)},clear(){t.clearIcons(a)}}}function p(t,r){return t==="entry"?"transition_entry":r==="up"?"transition_up":r==="down"?"transition_down":"transition"}
@@ -0,0 +1,72 @@
1
+ import type { BoundingBox, RouteEndpoint, RouteLine, TransitionPointDef, WayfindingEngine } from "../core";
2
+ import type { WayfindingRenderer } from "../renderer";
3
+ import type { IconProvider } from "../adapters";
4
+ /** User position + optional heading, without efp store coupling. */
5
+ export interface PositionInput {
6
+ readonly x: number;
7
+ readonly y: number;
8
+ readonly layer: string;
9
+ /** Heading in degrees. Absent → no rotation (dot variant). */
10
+ readonly angle?: number;
11
+ }
12
+ export interface LayerNames {
13
+ readonly points: string;
14
+ readonly trail: string;
15
+ readonly lines: string;
16
+ readonly linesAnimated: string;
17
+ }
18
+ export interface SetRouteInput {
19
+ readonly from: RouteEndpoint;
20
+ readonly to: RouteEndpoint;
21
+ readonly waypoints?: ReadonlyArray<RouteEndpoint>;
22
+ readonly accessible: boolean;
23
+ }
24
+ export interface WayfindingRuntime {
25
+ /**
26
+ * Build (or update) the active route. Places endpoint/transition/trail icons
27
+ * and fires `onRouteUpdate` + `onRouteDistance` callbacks.
28
+ */
29
+ setRoute(input: SetRouteInput): void;
30
+ /**
31
+ * Notify the runtime that the user position changed. `null` hides the position icon and clears
32
+ * the off-route trail. Dot vs arrow variant is derived from `position.angle` internally.
33
+ */
34
+ onPositionChanged(position: PositionInput | null): void;
35
+ /** Notify the runtime that the active floor changed; re-renders visible route content. */
36
+ onFloorChanged(): void;
37
+ clearRoute(): void;
38
+ destroy(): void;
39
+ }
40
+ export interface WayfindingRuntimeConfig {
41
+ readonly engine: WayfindingEngine;
42
+ readonly renderer: WayfindingRenderer;
43
+ readonly iconProvider: IconProvider;
44
+ readonly floorContext: FloorContext;
45
+ readonly layers: LayerNames;
46
+ readonly snapThreshold: number;
47
+ readonly onTransitionClick: (point: TransitionPointDef) => void;
48
+ /** Fired when the route itself changes. `bounds` is the bbox of visible route points (null when empty). */
49
+ readonly onRouteUpdate: (lines: RouteLine[], bounds: BoundingBox | null) => void;
50
+ /** Fired when distance changes — on route change and on position snap updates. */
51
+ readonly onRouteDistance: (distance: number) => void;
52
+ }
53
+ /**
54
+ * Abstracts floor-state queries for the runtime.
55
+ *
56
+ * Views ask these predicates instead of reading any store directly;
57
+ * an adapter (see `adapters/floorContext.ts`) supplies the implementation
58
+ * that bridges to a concrete store (e.g., efp `LayerStore` + `RouteStore`).
59
+ *
60
+ * - {@link showAllFloors} — true when the map is rendering all floors simultaneously (no floor scoping/single-floor).
61
+ * - {@link getActiveFloor} — name of the active route floor, or `""` when unresolvable;
62
+ * callers must check `!showAllFloors()` first.
63
+ * - {@link isLayerVisible} — per-layer visibility for endpoint dim/hide and cross-floor trail gating.
64
+ * - {@link getFloorOrder} — stable floor-name order used by transition placement.
65
+ */
66
+ export interface FloorContext {
67
+ showAllFloors(): boolean;
68
+ getActiveFloor(): string;
69
+ isLayerVisible(layer: string): boolean;
70
+ getFloorOrder(): string[];
71
+ }
72
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ export{};
@@ -0,0 +1,4 @@
1
+ import type { Booth } from "../../store/BoothStore";
2
+ import type { CurrentPosition } from "../../store/RouteStore";
3
+ export declare function findBoothInRadius(position: CurrentPosition | null, booths: Booth[], excludeBooths?: Booth[], radius?: number): Booth | null;
4
+ //# sourceMappingURL=findBoothInRadius.d.ts.map
@@ -0,0 +1 @@
1
+ const s=20;function f(n,i,t){const u=n<t.x1?t.x1-n:n>t.x2?n-t.x2:0,d=i<t.y1?t.y1-i:i>t.y2?i-t.y2:0;return u*u+d*d}export function findBoothInRadius(n,i,t=[],u=20){if(!n||!i.length)return null;const d=n.z!=null?String(n.z):null,o=u*u,r=new Set(t.filter(e=>e?.id).map(e=>String(e.id)));let a=null,c=1/0;for(const e of i){if(!e.rect||e.id&&r.has(String(e.id))||d&&e.layer?.name!==d)continue;const l=f(n.x,n.y,e.rect);l<=o&&l<c&&(c=l,a=e)}return a}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expofp/floorplan",
3
- "version": "3.2.6",
3
+ "version": "3.2.8",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/expofp/efp-app.git",
@@ -76,8 +76,8 @@
76
76
  "twgl.js": "^4.14.0",
77
77
  "uuid": "^9.0.1",
78
78
  "zod": "4.3.5",
79
- "@expofp/debug": "3.2.6",
80
- "@expofp/resolve": "3.2.6"
79
+ "@expofp/debug": "3.2.8",
80
+ "@expofp/resolve": "3.2.8"
81
81
  },
82
82
  "devDependencies": {
83
83
  "@babel/plugin-proposal-decorators": "^7.29.0",
@@ -1,26 +0,0 @@
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.2.6" };
5
- var t = new e.Error().stack;
6
- t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "fbcf2d22-2146-4e45-93a8-c0b71d1a5eb0", e._sentryDebugIdIdentifier = "sentry-dbid-fbcf2d22-2146-4e45-93a8-c0b71d1a5eb0");
7
- } catch {}
8
- })();
9
- import "./rolldown-runtime-BSQQuCTD.js";
10
- import { t as e } from "./react-BCrcyjAU.js";
11
- import { t } from "./jsx-runtime-DnQmxKxk.js";
12
- import "./is-debug-DPDBcjeg.js";
13
- import { C as n, Xn as r, a as i, w as a } from "./store-CB1U4gvI.js";
14
- import { n as o } from "./mobx-DsBbHmhw.js";
15
- import { t as s } from "./TouchHand-CzIhbCk_.js";
16
- import { t as c } from "./KioskStore-B5seJF_w.js";
17
- e();
18
- var l = t(), u = r(() => (o(() => {
19
- if (localStorage.getItem("kiosk") === "0") return;
20
- let e = c.restoreData();
21
- if (e) return n(e, !0), a(e), i.setResetCameraFn(() => c.resetCamera()), () => {
22
- i.uiState.setKioskData(null), i.uiState.resetMapSettings(), c.resetCamera();
23
- };
24
- }), i.uiState.kiosk && i.uiState.inIdle ? /* @__PURE__ */ (0, l.jsx)(s, {}) : null));
25
- //#endregion
26
- export { u as default };
@@ -1,40 +0,0 @@
1
- //#region src/intercom/bootIntercom.ts
2
- (function() {
3
- try {
4
- var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
5
- e.SENTRY_RELEASE = { id: "3.2.6" };
6
- var t = new e.Error().stack;
7
- t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "06e888c6-8445-4eae-b329-7fd09afcdde9", e._sentryDebugIdIdentifier = "sentry-dbid-06e888c6-8445-4eae-b329-7fd09afcdde9");
8
- } catch {}
9
- })();
10
- var e = "k5f7wyx2", t = !1;
11
- function n() {
12
- if (document.getElementById("efp-intercom-position")) return;
13
- let e = document.createElement("style");
14
- e.id = "efp-intercom-position", e.textContent = "\n .intercom-namespace,\n .intercom-lightweight-app,\n .intercom-app,\n [class*=\"intercom-with-namespace-\"]:not(.intercom-messenger-frame) {\n z-index: 20 !important;\n }\n .intercom-lightweight-app-launcher,\n .intercom-app > [class*=\"intercom-with-namespace-\"]:not(.intercom-messenger-frame) {\n right: 10px !important;\n bottom: 50px !important;\n }\n @media (max-width: 767px) {\n .intercom-lightweight-app-launcher,\n .intercom-app > [class*=\"intercom-with-namespace-\"]:not(.intercom-messenger-frame) {\n bottom: 80px !important;\n }\n }\n ", document.head.appendChild(e);
15
- }
16
- function r(r) {
17
- if (t) return;
18
- t = !0;
19
- let { subDomain: i, subscriptionStatus: a } = r, o = window;
20
- o.intercomSettings = {
21
- api_base: "https://api-iam.intercom.io",
22
- app_id: e,
23
- alignment: "right",
24
- expofp_subdomain: i,
25
- expofp_subscription_status: a
26
- }, n();
27
- let s = function() {
28
- s.c(arguments);
29
- };
30
- s.q = [], s.c = function(e) {
31
- s.q.push(e);
32
- }, o.Intercom = s;
33
- let c = () => {
34
- let t = document.createElement("script");
35
- t.type = "text/javascript", t.async = !0, t.src = `https://widget.intercom.io/widget/${e}`, document.head.appendChild(t);
36
- };
37
- document.readyState === "complete" ? c() : window.addEventListener("load", c, !1);
38
- }
39
- //#endregion
40
- export { r as bootIntercom };
@@ -1,14 +0,0 @@
1
- import { Booth } from "../../../../store/BoothStore";
2
- import { BoothDrawerBaseWithoutPainter } from "./BoothDrawerBase";
3
- import { PathInfo } from "../../../../data/Data";
4
- import { RendererService } from "../../../../renderer";
5
- import { ImageDef, ImageSource } from "@expofp/renderer";
6
- export declare function canvasFromPath(paths: PathInfo[], scale: number | undefined, suffix: string): ImageSource;
7
- export default function configScaledBooth(rendererService: RendererService, booth: Booth): ScaledBoothDrawer;
8
- declare class ScaledBoothDrawer extends BoothDrawerBaseWithoutPainter {
9
- protected shape: ImageDef;
10
- constructor(rendererService: RendererService, booth: Booth);
11
- getShape(): ImageDef[];
12
- }
13
- export {};
14
- //# sourceMappingURL=config-booth-scaled.d.ts.map
@@ -1 +0,0 @@
1
- import d,{layersStore as f}from"../../../../store";import{LayersMode as h}from"../../../../store/LayerStore";import{BoothDrawerBaseWithoutPainter as u}from"./BoothDrawerBase";import{getTrianglesFromFpPaths as g}from"../../../../data/svg";import{reaction as p}from"mobx";import{Rect as E}from"./Rect";import{createImageDef as y}from"../../../../renderer";const l=document.createElement("canvas"),a=l.getContext("2d");export function canvasFromPath(m,s=.5,t){var e=[Number.MAX_VALUE,Number.MAX_VALUE,Number.MIN_VALUE,Number.MIN_VALUE];m.forEach(c=>{c.triangles=g(c.index,t),c.triangles.forEach(r=>{r.forEach(o=>{o[0]<e[0]?e[0]=o[0]:o[0]>e[2]&&(e[2]=o[0]),o[1]<e[1]?e[1]=o[1]:o[1]>e[3]&&(e[3]=o[1])})})});const n=e[0],i=e[1];return a.scale(s,s),m.forEach(c=>{a.beginPath(),a.fillStyle=c.color,c.triangles.forEach(r=>{a.moveTo(r[0][0]-n,r[0][1]-i),a.lineTo(r[1][0]-n,r[1][1]-i),a.lineTo(r[2][0]-n,r[2][1]-i),a.lineTo(r[0][0]-n,r[0][1]-i)}),a.fill()}),l}export default function x(m,s){return new L(m,s)}class L extends u{shape;constructor(s,t){super(t);const e=E.fromCoreRect(t.rect,t.rotate),n=canvasFromPath(t.paths,.5,d.layerStore.mode!==h.Default?t.layer.name:"");this.shape=y(n,e,{hidden:!0,dim:!0}),p(()=>[this.booth.skipDim,f.layersLoaded],()=>{f.layersLoaded&&(this.shape.dim=this.booth.skipDim?!1:void 0,s.update(this.shape))})}getShape(){return[this.shape]}}
@@ -1,8 +0,0 @@
1
- import { RendererService } from "../../../../renderer";
2
- export declare const WF_TRAIL_LAYER_NAME = "wf-trail-points";
3
- export declare const WF_POINTS_LAYER_NAME = "wf-points";
4
- export declare const WF_CURRENT_POSITION_NAME = "wf-current-position";
5
- export declare const WF_LINES_LAYER_NAME = "wf-lines";
6
- export declare const WF_LINES_ANIMATED_LAYER_NAME = "wf-lines-animated";
7
- export default function configWf(rendererService: RendererService): () => void;
8
- //# sourceMappingURL=config-wf.d.ts.map
@@ -1 +0,0 @@
1
- import ne from"color";import{observable as he,reaction as q}from"mobx";import{lineLength as Se}from"simple-geometry";import We from"../../../../core/Rect";import o,{layersStore as Ae,uiState as c}from"../../../../store";import{LayersMode as _e}from"../../../../store/LayerStore";import{boothToWaypoint as me,getGraphLines as Ye,graphDataSource as Ue,computeTransitionPoints as Ge,normalizeRouteDirection as qe,bezierCurve as Ke,splitPolyLine as Ve}from"../../../../wayfinding";import{decreaseByPercentage as oe}from"../../../../utils/math";import{strEqual as ie}from"../../../../utils/strEqual";import{createArrowCurrentCanvas as De,createCurrentCanvas as re,createImageCanvas as k,createTargetCanvas as Xe,createYahCanvas as je}from"./canvases";import{toRadians as Ie}from"../../../../utils/math";import{areLayersEnabled as ve}from"../../../../utils/areLayersEnabled";import{createImageDef as H,createLineDef as ye,createCircleCanvas as Je,getBounds as R,getRotation as Qe}from"../../../../renderer";import{animateLineSegments as Ze}from"../../../../renderer/engine-core/animation";import{splitRouteByPoint as et,snapPositionToRoute as tt,getThresholdSafe as nt,getThresholdFromMetersToSvg as ot,SNAP_THRESHOLD_METERS as it}from"./route-snapping";import{fpGeo as Ne}from"../../../../data/fpGeo";import{getRouteLength as pe}from"../../../../wayfinding";import{pickDefaultScene as Fe}from"../../../../renderer/engine-core/defs";const L=devicePixelRatio;let I=[],X=null,T=[],Q=ne("#00A2FF"),rt=ne("#FF9F06"),ke="#A4CCE2",at="#0794EA";const W=34;let z,B,M,$,Y,ge,Re,Le,xe,Z,C,E,N,F,O,we=[];function st(){I=[];const t=o.routeStore.currentRouteLayer?.name;X=ct();const r=X&&(ve()?ie(t,X.destination?.layer):!0);if(X){const l=X?.routePoint;l&&ie(t,l.layer)&&(I=dt(l,I))}let a=[],f=[];for(let l=0;l<T.length;l++){let _=T[l],x=o.layerStore.mode==_e.Default?!0:o.layerStore.layers.find(m=>m.name==t&&t===_.p0.layer)?.visible||!1;!_.virtual&&x&&a.push(_),(_.virtual||!x||l===T.length-1)&&a.length&&(f=a.map(({p0:m,p1:w})=>(I.push({x:m.x,y:m.y},{x:w.x,y:w.y}),{p0:m,p1:w})))}I.length||(E.hidden=!0,C.hidden=!0);let y=1e6,s=1e6,p=0,u=0;I.forEach(l=>{l.x<y&&(y=l.x),l.y<s&&(s=l.y),l.x>p&&(p=l.x),l.y>u&&(u=l.y)});const d=We.fromX1y1x2y2(y,s,p,u);return{rect:I.length&&(d.w||d.h)?d.withPadding(d.w,d.h):null,lines:f,addTrailPoints:r}}export const WF_TRAIL_LAYER_NAME="wf-trail-points",WF_POINTS_LAYER_NAME="wf-points",WF_CURRENT_POSITION_NAME="wf-current-position",WF_LINES_LAYER_NAME="wf-lines",WF_LINES_ANIMATED_LAYER_NAME="wf-lines-animated";export default function ut(t){let r=null;const a=[];let f=null,y=he.box([]),s=he.box([],{deep:!1}),p=[],u=he.box([],{deep:!1});const d=t.scene.rootLayer.children,l=d.find(e=>e.name===WF_POINTS_LAYER_NAME),_=d.find(e=>e.name===WF_CURRENT_POSITION_NAME),x=d.find(e=>e.name===WF_LINES_LAYER_NAME),m=d.find(e=>e.name===WF_TRAIL_LAYER_NAME),w=d.find(e=>e.name===WF_LINES_ANIMATED_LAYER_NAME),U=nt(Ne?.properties?.config?.snapThreshold)||it,ae=ot({thresholdInMeters:U,gpsConfig:Ne?.properties?.config});let ee=[];const j=o.fp.icons.get("destination");j?(j.id="destination",B=k(j,W,W,L)):B=Xe(L,rt.hex()),E=H(B,R(0,0,B.width,B.height),{hidden:!0});const G=o.fp.icons.get("departure");G?(G.id="departure",z=k(G,W,W,L)):z=re(L,Q.hex()),C=H(z,R(0,0,z.width,z.height),{hidden:!0}),M=re(L,Q.hex()),M.id="current-location",N=H(M,R(0,0,M.width,M.height),{hidden:!0,origin:[.5,.5]});const K=o.fp.icons.get("transition");K?(K.id="transition",ge=k(K,34,34,L)):ge=re(L,Q.hex());const se=o.fp.icons.get("transition_up");se&&(se.id="transition_up",Re=k(se,56,34,L));const ue=o.fp.icons.get("transition_down");ue&&(ue.id="transition_down",Le=k(ue,56,34,L)),G?xe=k(G,W,W,L):xe=re(L,Q.hex());const le=o.fp.icons.get("direction");le?(le.id="direction",$=k(le,W,W,L)):$=De(L,Q.hex()),F=H($,R(0,0,$.width,$.height),{hidden:!0});const Pe=o.fp.icons.get("yah");Pe?Y=k(Pe,oe(64,32),oe(90,32),L):Y=je(L,"#ff4343"),Y.id="current-location-2",O=H(Y,R(0,0,Y.width,Y.height),{hidden:!0,origin:[.5,1]}),Z=Je(4,ne("#b5b7bc").hex());function ce(e=null){const n=o.layerStore.visible.map(i=>i.name);if(I=[],y.set([]),e||(T=[]),n.length&&c.selectedRoute?.from?.rect&&c.selectedRoute?.to?.rect){let i=c.selectedRoute.from,h=c.selectedRoute.to;if(!T.length&&!e&&(T=Ye(Ue,me(i),me(h),o.routeStore.onlyAccessible,c.selectedRoute.waypoints?.map(me))),!T.length){if(o.routeStore.updateRoute(T),o.routeStore.updateRouteDistance(0),i.name!==h.name)throw new Error(`Route not found. From: ${i.name} to: ${h.name}`);return}const{rect:g,lines:D,addTrailPoints:b}=st();D.length?(lt(t.scale),ft(t.scale,s,p),ze(t,m,!b),t.ptScaleRegistry.unregisterByName(m.name),b&&t.onPtScale(m.name,()=>{const P=ze(t,m)||[];return m.children=P,we=P,m})):t.ptScaleRegistry.unregisterByName(m.name),ee=D,fe(),g&&(c.moveToRect=g)}else C.hidden=!0,E.hidden=!0;o.routeStore.updateRoute(T.filter(i=>!i.virtual)),y.get()||(C.hidden=!0,E.hidden=!0)}function J(){const e=o.routeStore.currentPosition,n=e?.angle?Ie(e.angle):null,i=o.routeStore.currentRouteLayer?.name,h=T.filter(A=>o.layerStore.mode==_e.Default?!0:o.layerStore.layers.find(He=>He.name==i&&i===A.p0.layer)?.visible).filter(A=>!A.virtual);if(c.kioskData&&c.selectedRoute?.from){const A=o.routeStore.currentRouteLayer;C.hidden=c.selectedRoute?.from?.entity?.type==="route-cut-in"&&A?.name===c.selectedRoute?.from?.layer?.name,E.hidden=c.selectedRoute?.to?.entity?.type==="route-cut-in"&&A?.name===c.selectedRoute?.to?.layer?.name}if(e){const A=Ae.findLayer(e.z)?.visible??!0;o.routeStore.iconType===0||c.selectedRoute?.from&&c.selectedRoute?.to?(O.hidden=!0,N.hidden=!A,N.dim=!A,N.bounds=R(e.x,e.y,M.width,M.height,t.scale),n!=null?(N.hidden=!0,F.hidden=!A,F.dim=!A,F.bounds=R(e.x,e.y,$.width,$.height,t.scale,n)):F.hidden=!0):(N.hidden=!0,F.hidden=!0,O.dim=!A,O.hidden=!A,O.bounds=R(e.x,e.y,Y.width,Y.height,t.scale))}else N.hidden=!0,O.hidden=!0,F.hidden=!0,de(),fe();if(!e||!I.length){t.update(F,N,O);return}const g=c.selectedRoute?.to,D=c.selectedRoute?.from,b={layer:D?.layer?.name,x:C.bounds.center.x,y:C.bounds.center.y},P={layer:g?.layer?.name,x:E.bounds.center.x,y:E.bounds.center.y},S=tt(e,h,{snapThreshold:ae,fromPoint:b,toPoint:P,fromRect:D?.rect,toRect:g?.rect}),v=S.snapped?S.snappedPoint:e;fe(S,!0),F.bounds=R(v.x,v.y,$.width,$.height,t.scale,n),N.bounds=R(v.x,v.y,M.width,M.height,t.scale,n),t.update(F,N,O)}function Be(){const e=[{point:F,name:"wf-current-arrow"},{point:N,name:"wf-current-location"},{point:O,name:"wf-current-location-2"}];_.children=e.map(({point:n})=>n),e.forEach(({point:n,name:i})=>te(n,i)),t.update(_)}function V(e=!1){const n=[C,E,...s.get(),...u.get()];e&&(Me(!0),m.children=[],n.forEach(i=>{i.source.id.includes("kiosk")||(i.hidden=!0)})),l.children=n,t.update(l,m)}function de(e,n){const i=T.filter(P=>!P.virtual),h=pe(i);if(!e?.snapped){o.routeStore.updateRouteDistance(h);return}const g=c.selectedRoute?.to,D=pe(n);let b;if(e.snappedPoint?.layer===g?.layer?.name||g?.layer?.name===o.routeStore.currentRouteLayer?.name)b=D;else if(e.snappedPoint?.layer!==g?.layer?.name&&e.snappedPoint?.layer===o.routeStore.currentRouteLayer?.name){const P=i.filter(v=>v.p0.layer!==e?.snappedPoint?.layer&&v.p1.layer!==e?.snappedPoint?.layer),S=pe(P);b=D+S}b&&o.routeStore.updateRouteDistance(b)}function fe(e,n=!1){const i=c.selectedRoute?.from,h=c.selectedRoute?.to;if(!i||!h)return;const g=T[0]?.p0.layer,D=qe(T,ee,{layer:i.layer?.name??g,x:i.rect.cx,y:i.rect.cy},{layer:h.layer?.name??g,x:h.rect.cx,y:h.rect.cy});if(!e?.snapped){const S=D.map(v=>ye(v,ke));o.routeStore.currentPosition&&o.routeStore.currentRouteLayer&&o.routeStore.currentPosition?.z?.toString()===o.routeStore.currentRouteLayer?.name.toString()&&de(),Ce([],S,n);return}const{passed:b,remaining:P}=et(D,e.snappedPoint);P.length&&(P[0]={...P[0],p0:e.snappedPoint}),de(e,P),Ce(b.map(S=>ye(S,"#B5B7BC")),P.map(S=>ye(S,ke)),n)}const te=(e,n)=>t.onPtScale(n,i=>(e.hidden||(e.bounds=R(e.bounds.center.x,e.bounds.center.y,e.source.width,e.source.height,i,e.bounds.rotation)),e)),be=(e,n)=>t.onRoll(n,i=>{const h=Qe(i,e.bounds.rotation);return h!==void 0&&(e.bounds.rotation=e.bounds.rotation+h),e});function Me(e){r&&(r.stop(),r=null),w.children=[],e&&(x.children=[]),t.update(w,x)}function Ce(e=[],n=[],i=!1){let h=0;if(r&&(i&&(h=r.getProgress()),r.stop(),r=null),x.children=[...e,...n],!n.length){w.children=[],t.update(w,x);return}const g=n.map(b=>({...b,color:at}));r=Ze(g,(b,P,S)=>{if(S)w.children=[];else{const v=g.slice(0,P);w.children=[...v,b]}t.update(w)},()=>t.scale,h)??null,t.update(x)}a.push(q(()=>[o.layerStore.layersLoaded],()=>{ce(),J(),V()}));const $e=q(()=>[o.routeStore.currentRouteLayer,c.getRouteNextFloor],()=>{o.layerStore.layersLoaded&&(f!==null&&clearTimeout(f),f=setTimeout(()=>{ce(o.routeStore.currentRouteLayer),J(),V(),f=null},0))});a.push(()=>{f!==null&&(clearTimeout(f),f=null),$e()}),a.push(q(()=>[c.selectedRoute,o.routeStore.onlyAccessible],()=>{ce(),J(),V(!c.selectedRoute)})),a.push(q(()=>o.routeStore.currentPosition,()=>{J(),V()})),a.push(q(()=>s.get(),e=>{const n="transitionPoints";t.ptScaleRegistry.unregisterByPrefix(n),t.rollRegistry.unregisterByPrefix(n),e.length&&e.forEach((i,h)=>{const g=`${n}-${h}`;te(i,g),be(i,g)})})),a.push(q(()=>[u.get()],()=>{const e=u.get(),n="kioskArrows";t.ptScaleRegistry.unregisterByPrefix(n),e.length&&e.forEach((i,h)=>te(i,`${n}-${h}`))})),a.push(q(()=>[c.kioskData,Ae.floors.find(e=>e.active),c.selectedRoute],([e,n])=>{u.set([]);const i=ve()?e?.z===n?.name:!0;e&&i&&ht(e,{skipdim:!0,visible:!0,pixelRatio:L},t.scale,u),V()}));function Ee({data:e}){const{defs:n}=Fe(e),i=p.find(h=>n.includes(h.imageDef));i&&o.layerStore.updateVisibility(i.targetLayer,!0)}t.renderer.events.addEventListener("pointer:click",Ee),a.push(()=>t.renderer.events.removeEventListener("pointer:click",Ee));function Te({data:e}){const{defs:n}=Fe(e),i=p.some(h=>n.includes(h.imageDef));t.renderer.canvas.style.cursor=i?"pointer":""}t.renderer.events.addEventListener("pointer:move",Te),a.push(()=>t.renderer.events.removeEventListener("pointer:move",Te)),[{point:C,name:"wf-source"},{point:E,name:"wf-destination"}].forEach(({point:e,name:n})=>{te(e,n),be(e,n)}),V(),J(),Be();function Oe(){r&&(r.stop(),r=null),a.forEach(e=>e()),a.length=0}return Oe}function lt(t){const r=o.routeStore.currentRouteLayer?.name,a=I;let f=c.selectedRoute?.from,y=c.selectedRoute?.to;const s=c.selectedRoute?.waypoints;if(f?.entity.type==="route-cut-in"&&(f=null),y?.entity.type==="route-cut-in"&&(y=null),!a.length)return;const p=[{key:"sourceLocation",rect:f?.rect,index:void 0},{key:"destinationLocation",rect:y?.rect,index:void 0}];s&&p.push(...s?.map((x,m)=>({key:`waypoint-${x.externalId}`,index:m,rect:x.rect})));const u=r?ie(r,f?.layer?.name):!0,d=r?ie(r,y?.layer?.name):!0;let l=!1,_=!1;a.forEach(({x,y:m})=>{for(const{key:w,rect:U,index:ae}of p)if(U?.containsPoint(x,m)){w==="sourceLocation"&&(C.bounds=R(x,m,z.width,z.height,t),C.hidden=!u,C.dim=!u,l=u),w==="destinationLocation"&&(E.bounds=R(x,m,B.width,B.height,t),E.hidden=!d,E.dim=!d,_=d);break}}),l||(C.bounds=R(a[a.length-1].x,a[a.length-1].y,z.width,z.height,t),C.hidden=!1,C.dim=!1),_||(E.bounds=R(a[0].x,a[0].y,B.width,B.height,t),E.hidden=!d,E.dim=!d)}function ct(){const{from:t,to:r}=o.uiState.selectedRoute||{},a="route-cut-in";return t&&t?.entity.type===a||r&&r?.entity.type===a?o.routeStore.defaultFrom:null}function dt(t,r){if(!t||!r.length)return r;const a=r.reduce((f,y,s)=>Se(t,y)<Se(t,r[f])?s:f,0);return a<=r.length/2?r.slice(a):r.slice(0,a)}function ft(t,r,a){const f=o.routeStore.currentRouteLayer?.name,y=o.layerStore.floors.map(u=>u.name).reverse(),s=Ge({routeLines:T,currentLayerName:f,floorOrder:y});a.length=0;const p=s.map(u=>{const d=u.role==="entry"?xe:u.direction==="up"&&Re?Re:u.direction==="down"&&Le?Le:ge,l=H(d,R(u.x,u.y,d.width,d.height,t),{hidden:!1,dim:!1});return u.role==="exit"&&a.push({imageDef:l,targetLayer:u.targetLayer}),l});r.set(p)}function ht(t,r,a=1,f){if(!t)return;const y=o.fp.icons.get("kiosk");y.id="kiosk";let s;if(y){const u=t?.iconSizePercent?t.iconSizePercent/100:1,d=55;s=k(y,oe(199*u,d),oe(152*u,d),L)}else s=De(L,ne("#ee4422").hex());const p=H(s,R(t.x,t.y,s.width,s.height,a,Ie(t.heading||0)),{hidden:!r.visible,dim:!r.skipdim});f.set([...f.get(),p])}function ze(t,r,a=!1){let f=I.length-1;if(c.selectedRoute?.to?.entity.type==="route-cut-in"&&(f=0),a){we=[],r.children=[],t.update(r);return}const y=t.scale,s=I[f],p=X?.destination;if(!s||!p)return;const u=Z.width,d=Ve([{p0:s,p1:p}],u*2*y);if(d.length<2)return;const l=p.x-s.x,_=p.y-s.y,x=Math.hypot(l,_),m={x:(s.x+p.x)/2,y:(s.y+p.y)/2-x*.2},w=[s,m,p],U=d.map((ae,ee,j)=>{const G=(ee+1)/(j.length+1),K=Ke(w,G);return H(Z,R(K.x,K.y,Z.width,Z.height,y),{hidden:!1,dim:!1})})||[];return r.children=U,we=U,U}
@@ -1,2 +0,0 @@
1
- export default function configYah(): () => void;
2
- //# sourceMappingURL=config-yah.d.ts.map
@@ -1 +0,0 @@
1
- import{Point as n}from"simple-geometry";import r from"../../../../store";import{getYah as s}from"../../../../utils/yah";export default function a(){let t=s();const e=window.location.search.length>1?decodeURIComponent(window.location.search.substring(1)):"";if(!t&&e.startsWith("route")){const o=e.split(":").find(h=>h.startsWith("yah_"));o&&(t=o)}const i=Array.isArray(t)||!1;return r.routeStore.defaultFrom=i?r.boothStore.getBoothAtPoint(new n(t[0],t[1])):r.boothStore.booths.find(o=>o.name===t),r.boothStore.booths.filter(o=>o.yah).forEach(o=>r.boothStore.booths.splice(r.boothStore.booths.indexOf(o),1)),()=>{}}
@@ -1,5 +0,0 @@
1
- export type { SplitRouteResult, RouteSnapResult } from "./types";
2
- export { splitRouteByPoint } from "./splitRouteByPoint";
3
- export { snapPositionToRoute, SNAP_THRESHOLD_METERS } from "./snapPositionToRoute";
4
- export { distancePointToRouteOnLayer, getThresholdFromMetersToSvg, findBoothInRadius, getThresholdSafe } from "./utils";
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- export{splitRouteByPoint}from"./splitRouteByPoint";export{snapPositionToRoute,SNAP_THRESHOLD_METERS}from"./snapPositionToRoute";export{distancePointToRouteOnLayer,getThresholdFromMetersToSvg,findBoothInRadius,getThresholdSafe}from"./utils";
@@ -1,21 +0,0 @@
1
- import type { RouteLine, RoutePoint } from "../../../../../wayfinding/types";
2
- import { CurrentPosition } from "../../../../../store/RouteStore";
3
- import type { RouteSnapResult } from "./types";
4
- type Rect = {
5
- x1: number;
6
- x2: number;
7
- y1: number;
8
- y2: number;
9
- };
10
- export declare const SNAP_THRESHOLD_METERS = 7.5;
11
- export type SnapToRouteConfig = {
12
- snapThreshold: number;
13
- minRemainingUnits?: number;
14
- toPoint: RoutePoint;
15
- toRect?: Rect;
16
- fromPoint?: RoutePoint;
17
- fromRect?: Rect;
18
- };
19
- export declare function snapPositionToRoute(position: CurrentPosition, routeLines: RouteLine[], config: SnapToRouteConfig): RouteSnapResult;
20
- export {};
21
- //# sourceMappingURL=snapPositionToRoute.d.ts.map
@@ -1 +0,0 @@
1
- export const SNAP_THRESHOLD_METERS=7.5;function O(t,n){return t.x>=n.x1&&t.x<=n.x2&&t.y>=n.y1&&t.y<=n.y2}function E(t,n){let r=0;for(const e of t){const a=Math.hypot(e.p1.x-e.p0.x,e.p1.y-e.p0.y);if(a!==0){if(r+a>=n){const d=(n-r)/a,x=e.p0.x+(e.p1.x-e.p0.x)*d,f=e.p0.y+(e.p1.y-e.p0.y)*d;return{point:{layer:e.p0.layer,x,y:f},line:e}}r+=a}}const l=t[t.length-1];return{point:{layer:l.p0.layer,x:l.p1.x,y:l.p1.y},line:l}}export function snapPositionToRoute(t,n,r){const l=n.length;if(!l)return{snapped:!1};const{snapThreshold:e,toPoint:a,minRemainingUnits:d=.5,fromPoint:x,fromRect:f,toRect:A}=r,i=t.z!=null?String(t.z):null;let M=1/0,u=null,S=0,I=i==null;for(let s=0;s<l;s++){const p=n[s],{p0:o,p1:y}=p,g=y.x-o.x,P=y.y-o.y,D=g*g+P*P;if(D===0)continue;const F=Math.sqrt(D);if(i!=null&&String(o.layer)!==i){S+=F;continue}I=!0;const N=((t.x-o.x)*g+(t.y-o.y)*P)/D,R=Math.max(0,Math.min(1,N)),U=o.x+g*R,j=o.y+P*R,H=Math.hypot(t.x-U,t.y-j);H<M&&(M=H,u={segmentIndex:s,t:R,distanceFromPolylineStart:S+F*R}),S+=F}if(i!=null&&!I)return{snapped:!1};const c=S,b=n[0].p0,q=n[l-1].p1,_=Math.hypot(a.x-b.x,a.y-b.y),w=Math.hypot(a.x-q.x,a.y-q.y),m=_<=w,T=Math.min(d,c),v={layer:(i??n[0].p0.layer).toString(),x:t.x,y:t.y};if(f&&x&&(i==null||String(x.layer)===i)&&O(v,f)){const s=c,p=m?s:c-s,o=E(n,p);return{snapped:!0,snappedPoint:o.point,snappedLine:o.line}}if(A&&(i==null||String(a.layer)===i)&&O(v,A)){const s=T,p=c-s,y=E(n,m?s:p);return{snapped:!0,snappedPoint:y.point,snappedLine:y.line}}if(!u||M>e)return{snapped:!1};let h=m?u.distanceFromPolylineStart:c-u.distanceFromPolylineStart;h<T&&(h=T);const L=c-h,z=E(n,m?h:L);return{snapped:!0,snappedPoint:z.point,snappedLine:z.line}}
@@ -1 +0,0 @@
1
- export function splitRouteByPoint(t,i){let n=-1,e=0,f=1/0;for(let l=0;l<t.length;l++){const c=t[l];if(c.p0.layer!==i.layer)continue;const s=c.p1.x-c.p0.x,y=c.p1.y-c.p0.y,r=s*s+y*y;if(r===0)continue;const x=((i.x-c.p0.x)*s+(i.y-c.p0.y)*y)/r;if(x<-1e-6||x>1+1e-6)continue;const a=Math.min(1,Math.max(0,x)),m=c.p0.x+a*s,g=c.p0.y+a*y,o=(i.x-m)**2+(i.y-g)**2;o<f&&(f=o,n=l,e=a)}if(n===-1)return{passed:[],remaining:t};if(e<1e-6)return{passed:t.slice(0,n),remaining:t.slice(n)};if(e>1-1e-6)return{passed:t.slice(0,n+1),remaining:t.slice(n+1)};const p=t[n],d={layer:p.p0.layer,x:p.p0.x+e*(p.p1.x-p.p0.x),y:p.p0.y+e*(p.p1.y-p.p0.y)};return{passed:[...t.slice(0,n),{...p,p1:d}],remaining:[{...p,p0:d},...t.slice(n+1)]}}
@@ -1,18 +0,0 @@
1
- import type { RouteLine, RoutePoint } from "../../../../../wayfinding/types";
2
- export type RouteSnapResult = {
3
- snapped: false;
4
- } | {
5
- snapped: true;
6
- snappedPoint: RoutePoint;
7
- snappedLine: RouteLine;
8
- };
9
- export type SplitRouteResult = {
10
- snapped: true;
11
- passed: RouteLine[];
12
- remaining: RouteLine[];
13
- splitPoint: RoutePoint;
14
- } | {
15
- snapped: false;
16
- remaining: RouteLine[];
17
- };
18
- //# sourceMappingURL=types.d.ts.map
@@ -1,29 +0,0 @@
1
- import type { RouteLine, RoutePoint } from "../../../../../wayfinding/types";
2
- import { Booth } from "../../../../../store/BoothStore";
3
- export declare function distancePointToRouteOnLayer(point: RoutePoint, lines: RouteLine[]): number;
4
- export declare function findBoothInRadius<T extends Booth>(position: {
5
- x: number;
6
- y: number;
7
- z?: string | number;
8
- } | null | undefined, booths: T[] | null | undefined, excludeBooths?: T[], radius?: number): T | null;
9
- type GpsProjectionConfig = {
10
- p0: {
11
- x: number;
12
- y: number;
13
- lat: number;
14
- lng: number;
15
- };
16
- p2: {
17
- x: number;
18
- y: number;
19
- lat: number;
20
- lng: number;
21
- };
22
- };
23
- export declare const getThresholdSafe: (value: number) => number | undefined;
24
- export declare function getThresholdFromMetersToSvg({ thresholdInMeters, gpsConfig }: {
25
- thresholdInMeters?: number;
26
- gpsConfig?: GpsProjectionConfig;
27
- }): number;
28
- export {};
29
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- import{lineLength as b}from"simple-geometry";import{distance as L}from"../../../../../utils/gps";export function distancePointToRouteOnLayer(t,r){let e=1/0;for(const o of r){if(t.layer&&(o.p0.layer!==t.layer||o.p1.layer!==t.layer))continue;const i=B(t.x,t.y,o.p0.x,o.p0.y,o.p1.x,o.p1.y);i<e&&(e=i)}return e}function B(t,r,e,o,i,d){const f=i-e,a=d-o,S=t-e,x=r-o,y=f*f+a*a;if(y===0)return Math.hypot(t-e,r-o);let n=(S*f+x*a)/y;n<0?n=0:n>1&&(n=1);const s=e+n*f,c=o+n*a;return Math.hypot(t-s,r-c)}const M=20;export function findBoothInRadius(t,r,e,o=M){if(!t||!r?.length)return null;const i=t.z?String(t.z):null,d=o*o,f=new Set;e?.forEach(n=>n?.id&&f.add(String(n.id)));function a(n){const s=n?.x1,c=n?.x2,u=n?.y1,l=n?.y2;if(s==null||c===null||c===void 0||u===null||u===void 0||l===null||l===void 0)return null;const m=Math.min(s,c),h=Math.max(s,c),g=Math.min(u,l),T=Math.max(u,l);return{x1:m,x2:h,y1:g,y2:T}}function S(n,s,c){const u=n<c.x1?c.x1-n:n>c.x2?n-c.x2:0,l=s<c.y1?c.y1-s:s>c.y2?s-c.y2:0;return u*u+l*l}let x=null,y=1/0;for(const n of r){const s=!(n.id&&f.has(String(n.id))),c=n.layer?.name??n.layer??null,u=!i||c&&String(c)===i,l=a(n.rect);if(s&&u&&!!l){const h=S(t.x,t.y,l);h<=d&&h<y&&(y=h,x=n)}}return x}const R=20;export const getThresholdSafe=t=>{if(typeof t=="number"&&Number.isFinite(t))return t};function O(t,r){const{p0:e,p2:o}=r,i=L(e.lat,e.lng,o.lat,o.lng),d=b(e,o);return!i||!d?0:t*(d/i)}export function getThresholdFromMetersToSvg({thresholdInMeters:t,gpsConfig:r}){let e=0;return t&&r&&(e=O(t,r)),e||(e=R),e}
@@ -1,11 +0,0 @@
1
- type Point = {
2
- cx: number;
3
- cy: number;
4
- };
5
- /**
6
- * Optimizes waypoint ordering to minimize total travel distance.
7
- * Nearest neighbor O(n²) + 2-opt refinement O(k·n²), k ≤ 100.
8
- */
9
- export declare function buildOptimizedRoute(data: [string, Point][]): string[];
10
- export {};
11
- //# sourceMappingURL=buildOptimizedRoute.d.ts.map
@@ -1 +0,0 @@
1
- const d=100,x=-.01;export function buildOptimizedRoute(s){const c=new Map(s),t=Array.from(c.keys());if(t.length<=2)return t;const e=b(t,c);return e.length<4?e:u(e,c)}function b(s,c){const t=[s[0]],e=new Set(s);e.delete(s[0]);let M=s[0];for(;e.size>0;){const r=c.get(M);let n="",a=1/0;for(const o of e){const l=c.get(o),i=Math.abs(r.cx-l.cx)+Math.abs(r.cy-l.cy);i<a&&(a=i,n=o)}if(!n)break;t.push(n),e.delete(n),M=n}return t}function u(s,c){const t=[...s];let e=!0;for(let M=0;e&&M<100;M++){e=!1;t:for(let r=1;r<t.length-2;r++)for(let n=r+1;n<t.length-1;n++){const a=c.get(t[r-1]),o=c.get(t[r]),l=c.get(t[n]),i=c.get(t[n+1]);if(Math.abs(a.cx-l.cx)+Math.abs(a.cy-l.cy)+Math.abs(o.cx-i.cx)+Math.abs(o.cy-i.cy)-(Math.abs(a.cx-o.cx)+Math.abs(a.cy-o.cy))-(Math.abs(l.cx-i.cx)+Math.abs(l.cy-i.cy))<-.01){for(let f=r,h=n;f<h;f++,h--)[t[f],t[h]]=[t[h],t[f]];e=!0;break t}}}return t}
@@ -1,8 +0,0 @@
1
- import type { BoothBase } from "../store/BoothStore";
2
- export declare const yahKey = "__yah";
3
- export declare function setYah(value: string): void;
4
- export declare function removeYah(): void;
5
- export declare function isYahBooth(booth: BoothBase): boolean;
6
- export declare function getYah(): [number, number, number] | string;
7
- export declare function getRawYah(): string | null;
8
- //# sourceMappingURL=yah.d.ts.map
@@ -1 +0,0 @@
1
- import{isLocalStorageAvailable as e}from"./localStorage";export const yahKey="__yah";export function setYah(t){e&&localStorage.setItem(yahKey,t)}export function removeYah(){e&&localStorage.removeItem(yahKey)}export function isYahBooth(t){return/^yah_/i.test(t.name)||/^You\s+are\s+here$/i.test(t.title?.trim())}export function getYah(){if(e&&localStorage.getItem(yahKey)){const t=localStorage.getItem(yahKey).split(",");if(t.length===3)return[parseFloat(t[0]),parseFloat(t[1]),parseFloat(t[2])];if(t.length===1)return t[0]}}export function getRawYah(){return localStorage.getItem(yahKey)}