@expofp/floorplan 3.0.0-alpha.9 → 3.0.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 (351) hide show
  1. package/dist/browser/Debug-Yknbb09q.js +40 -0
  2. package/dist/browser/Demo-CaOFZa6L.js +47 -0
  3. package/dist/browser/Free-DTL80JI4.js +51 -0
  4. package/dist/browser/Gallery-Du04PQQo.js +71 -0
  5. package/dist/browser/GpsLoader-Cvn6RlOm.js +140 -0
  6. package/dist/browser/KioskStore-De5ViEMC.js +225 -0
  7. package/dist/browser/Mapbox-DwX3p3Kb.js +118 -0
  8. package/dist/browser/{SetKioskMode-C3fGoJPj.js → SetKioskMode-DY8Ihzh_.js} +92 -83
  9. package/dist/browser/{ShowKiosk-D-477yKH.js → ShowKiosk-fqRB_BUN.js} +28 -19
  10. package/dist/browser/{ThreeComponent-Z1K-qX4i.js → ThreeComponent-CrAcuY6n.js} +181 -172
  11. package/dist/browser/ViewerMenuPanel-CdiEJm9h.js +77 -0
  12. package/dist/browser/boolean-editor-BCIboJVq.js +157 -0
  13. package/dist/browser/bundle.json +34 -31
  14. package/dist/browser/{client-D6zJdOh6.js → client-BU0UzF6H.js} +848 -839
  15. package/dist/browser/compat-helper.js +5 -0
  16. package/dist/browser/{data-C6uYuLvP.js → data-DU1RvfMj.js} +278 -269
  17. package/dist/browser/{debug-overlay-BcmbSeG3.js → debug-overlay-DMGwYhOT.js} +100 -91
  18. package/dist/browser/debug-ui-BZSH53uY.js +67 -0
  19. package/dist/browser/{favicon-DalyEhbd.js → favicon-ZTHZQvuM.js} +11 -2
  20. package/dist/browser/fetch-retry.umd-CFhXCSM1.js +123 -0
  21. package/dist/browser/{flex-DA2yhKLl.js → flex-D0XnC5Mw.js} +76 -67
  22. package/dist/browser/{floorplan.ready-DEdtWjzo.js → floorplan.ready-DwzYk5s3.js} +20977 -22749
  23. package/dist/browser/fonts/efp-symbols.woff +0 -0
  24. package/dist/browser/{index-DSULYUX0.js → index-BZDxL6gh.js} +46 -37
  25. package/dist/browser/{index-BAvspl75.js → index-BpZSlPvc.js} +333 -324
  26. package/dist/browser/index-BxFqdKuM.js +57 -0
  27. package/dist/browser/index-fEI_0iId.js +882 -0
  28. package/dist/browser/index-h3LFHvKr.js +92 -0
  29. package/dist/browser/index-xQ7Ip4HB.js +54 -0
  30. package/dist/browser/index.html +1 -0
  31. package/dist/browser/index.js +12495 -2
  32. package/dist/browser/jsx-runtime-SRODV826.js +40 -0
  33. package/dist/browser/locales/ar.json +56 -5
  34. package/dist/browser/locales/de.json +56 -5
  35. package/dist/browser/locales/es.json +56 -5
  36. package/dist/browser/locales/fr.json +56 -5
  37. package/dist/browser/locales/he.json +56 -5
  38. package/dist/browser/locales/it.json +56 -5
  39. package/dist/browser/locales/kk.json +56 -5
  40. package/dist/browser/locales/ko.json +56 -5
  41. package/dist/browser/locales/mn.json +56 -5
  42. package/dist/browser/locales/nl.json +56 -5
  43. package/dist/browser/locales/pl.json +57 -6
  44. package/dist/browser/locales/pt.json +55 -4
  45. package/dist/browser/locales/ru.json +57 -6
  46. package/dist/browser/locales/sv.json +56 -5
  47. package/dist/browser/locales/th.json +56 -5
  48. package/dist/browser/locales/tr.json +56 -5
  49. package/dist/browser/locales/uk.json +56 -5
  50. package/dist/browser/locales/vi.json +56 -5
  51. package/dist/browser/locales/zh.json +56 -5
  52. package/dist/browser/{main-CD9JioNt.js → main-CcaoXWR4.js} +24 -15
  53. package/dist/browser/{particles.min-DcpKrPn3.js → particles.min-Ds_4ex2r.js} +40 -31
  54. package/dist/esm/RouteCutIn.d.ts +0 -1
  55. package/dist/esm/RouteCutIn.js +1 -1
  56. package/dist/esm/_misc_to_move/manifest.d.ts +13 -0
  57. package/dist/esm/_misc_to_move/ref.d.ts +6 -0
  58. package/dist/esm/_misc_to_move/ref.js +1 -0
  59. package/dist/esm/components/Alert.d.ts +2 -0
  60. package/dist/esm/components/Alert.js +1 -1
  61. package/dist/esm/components/Badge.d.ts +3 -2
  62. package/dist/esm/components/Badge.js +1 -1
  63. package/dist/esm/components/Bookmarks.js +1 -1
  64. package/dist/esm/components/Booth/BoothOnHold.d.ts +2 -2
  65. package/dist/esm/components/Booth/BoothOnHold.js +1 -1
  66. package/dist/esm/components/Booth/BoothReserved.d.ts +2 -1
  67. package/dist/esm/components/Booth/BoothReserved.js +1 -1
  68. package/dist/esm/components/Booth/BoothWithoutExhibitor.d.ts +2 -2
  69. package/dist/esm/components/Booth/BoothWithoutExhibitor.js +1 -1
  70. package/dist/esm/components/CookieConsent.js +1 -1
  71. package/dist/esm/components/Exhibitor.js +1 -1
  72. package/dist/esm/components/Gallery/GalleryControls/GalleryControls.d.ts +2 -2
  73. package/dist/esm/components/Gallery/GalleryControls/GalleryControls.js +1 -1
  74. package/dist/esm/components/Gallery/GalleryModal/GalleryModal.d.ts +2 -2
  75. package/dist/esm/components/Gallery/GalleryModal/GalleryModal.js +1 -1
  76. package/dist/esm/components/Kiosk/KioskStore.d.ts +3 -3
  77. package/dist/esm/components/Kiosk/KioskStore.js +1 -1
  78. package/dist/esm/components/Kiosk/SetKiosk/storage.d.ts +1 -1
  79. package/dist/esm/components/Kiosk/SetKiosk/storage.js +1 -1
  80. package/dist/esm/components/Kiosk/ShowKiosk.js +1 -1
  81. package/dist/esm/components/Kiosk/integrateKiosk.js +1 -1
  82. package/dist/esm/components/Language.js +1 -1
  83. package/dist/esm/components/LanguageRow.d.ts +0 -1
  84. package/dist/esm/components/LanguageRow.js +1 -1
  85. package/dist/esm/components/Layout.js +1 -1
  86. package/dist/esm/components/List.js +1 -1
  87. package/dist/esm/components/LogoOverlay.js +1 -1
  88. package/dist/esm/components/Map/Map.d.ts +0 -23
  89. package/dist/esm/components/Map/Map.js +1 -1
  90. package/dist/esm/components/Map/booth-by-xy.js +1 -1
  91. package/dist/esm/components/Map/drawing/config/TextFitter.d.ts +1 -1
  92. package/dist/esm/components/Map/drawing/config/config-all.d.ts +2 -3
  93. package/dist/esm/components/Map/drawing/config/config-all.js +1 -1
  94. package/dist/esm/components/Map/drawing/config/config-bg.d.ts +1 -1
  95. package/dist/esm/components/Map/drawing/config/config-bg.js +1 -1
  96. package/dist/esm/components/Map/drawing/config/config-booth-badge.d.ts +9 -0
  97. package/dist/esm/components/Map/drawing/config/config-booth-badge.js +1 -0
  98. package/dist/esm/components/Map/drawing/config/config-booth-bg.d.ts +5 -5
  99. package/dist/esm/components/Map/drawing/config/config-booth-bg.js +1 -1
  100. package/dist/esm/components/Map/drawing/config/config-booth-bookmark.d.ts +5 -5
  101. package/dist/esm/components/Map/drawing/config/config-booth-bookmark.js +1 -1
  102. package/dist/esm/components/Map/drawing/config/config-booth-border.d.ts +3 -3
  103. package/dist/esm/components/Map/drawing/config/config-booth-border.js +1 -1
  104. package/dist/esm/components/Map/drawing/config/config-booth-labels-special.d.ts +6 -6
  105. package/dist/esm/components/Map/drawing/config/config-booth-labels-special.js +2 -2
  106. package/dist/esm/components/Map/drawing/config/config-booth-labels.d.ts +5 -5
  107. package/dist/esm/components/Map/drawing/config/config-booth-labels.js +1 -1
  108. package/dist/esm/components/Map/drawing/config/config-booth-scaled.d.ts +3 -3
  109. package/dist/esm/components/Map/drawing/config/config-booth-scaled.js +1 -1
  110. package/dist/esm/components/Map/drawing/config/config-booths.d.ts +2 -2
  111. package/dist/esm/components/Map/drawing/config/config-booths.js +1 -1
  112. package/dist/esm/components/Map/drawing/config/config-load-layer.d.ts +2 -2
  113. package/dist/esm/components/Map/drawing/config/config-load-layer.js +1 -1
  114. package/dist/esm/components/Map/drawing/config/config-markers.d.ts +2 -3
  115. package/dist/esm/components/Map/drawing/config/config-markers.js +1 -1
  116. package/dist/esm/components/Map/drawing/config/config-wf.d.ts +2 -5
  117. package/dist/esm/components/Map/drawing/config/config-wf.js +1 -1
  118. package/dist/esm/components/Map/drawing/config/loadBoothsImages.d.ts +2 -3
  119. package/dist/esm/components/Map/drawing/config/loadBoothsImages.js +1 -1
  120. package/dist/esm/components/Map/drawing/config/route-snapping/snapPositionToRoute.d.ts +1 -1
  121. package/dist/esm/components/Map/drawing/config/route-snapping/snapPositionToRoute.js +1 -1
  122. package/dist/esm/components/Map/drawing/config/route-snapping/splitRouteByPoint.d.ts +1 -1
  123. package/dist/esm/components/Map/drawing/config/route-snapping/splitRouteByPoint.js +1 -1
  124. package/dist/esm/components/Map/drawing/config/route-snapping/types.d.ts +1 -1
  125. package/dist/esm/components/Map/drawing/config/route-snapping/utils.d.ts +1 -1
  126. package/dist/esm/components/Map/traffic/useBuildRoute.d.ts +3 -5
  127. package/dist/esm/components/Map/traffic/useBuildRoute.js +6 -6
  128. package/dist/esm/components/Map/traffic/useManageTraffic.d.ts +3 -5
  129. package/dist/esm/components/Map/traffic/useManageTraffic.js +1 -1
  130. package/dist/esm/components/MarketMaterialList.d.ts +3 -3
  131. package/dist/esm/components/MarketMaterialList.js +1 -1
  132. package/dist/esm/components/Menu.js +1 -2
  133. package/dist/esm/components/MobileToggleButton.js +1 -1
  134. package/dist/esm/components/MultiSelectGroups.d.ts +2 -2
  135. package/dist/esm/components/MultiSelectGroups.js +1 -1
  136. package/dist/esm/components/Overlay.d.ts +2 -0
  137. package/dist/esm/components/Overlay.js +1 -1
  138. package/dist/esm/components/OverlayContainer.js +1 -1
  139. package/dist/esm/components/QrCode.d.ts +46 -0
  140. package/dist/esm/components/QrCode.js +1 -0
  141. package/dist/esm/components/RebookingNotes.d.ts +2 -2
  142. package/dist/esm/components/RebookingNotes.js +1 -1
  143. package/dist/esm/components/RebookingRadioGroup.d.ts +2 -2
  144. package/dist/esm/components/RebookingRadioGroup.js +1 -1
  145. package/dist/esm/components/RoutePlanner/RoutePlanner.d.ts +4 -0
  146. package/dist/esm/components/RoutePlanner/RoutePlanner.js +1 -0
  147. package/dist/esm/components/RoutePlanner/RoutePlannerHeader.d.ts +4 -0
  148. package/dist/esm/components/RoutePlanner/RoutePlannerHeader.js +1 -0
  149. package/dist/esm/components/RoutePlanner/RoutePlannerStartPoint.d.ts +9 -0
  150. package/dist/esm/components/RoutePlanner/RoutePlannerStartPoint.js +1 -0
  151. package/dist/esm/components/RoutePlanner/RoutePlannerStopItem.d.ts +9 -0
  152. package/dist/esm/components/RoutePlanner/RoutePlannerStopItem.js +1 -0
  153. package/dist/esm/components/RouteQR.d.ts +2 -2
  154. package/dist/esm/components/RouteQR.js +1 -1
  155. package/dist/esm/components/Schedule.js +1 -1
  156. package/dist/esm/components/SearchBox.js +1 -1
  157. package/dist/esm/components/Sessions.js +1 -1
  158. package/dist/esm/components/Share.d.ts +2 -2
  159. package/dist/esm/components/Share.js +1 -1
  160. package/dist/esm/components/SidebarActions.d.ts +3 -0
  161. package/dist/esm/components/SidebarActions.js +1 -1
  162. package/dist/esm/components/SpeakersFiltersModal.js +1 -1
  163. package/dist/esm/components/ViewerMenuPanel.d.ts +5 -0
  164. package/dist/esm/components/ViewerMenuPanel.js +1 -0
  165. package/dist/esm/components/Wayfinding.d.ts +2 -2
  166. package/dist/esm/components/Wayfinding.js +1 -1
  167. package/dist/esm/components/WayfindingTemplate.d.ts +2 -2
  168. package/dist/esm/components/WayfindingTemplate.js +1 -1
  169. package/dist/esm/components/gps/GpsPermissionRequest.d.ts +4 -2
  170. package/dist/esm/components/gps/GpsPermissionRequest.js +1 -1
  171. package/dist/esm/components/index.d.ts +1 -3
  172. package/dist/esm/components/index.js +1 -1
  173. package/dist/esm/constants.d.ts +7 -0
  174. package/dist/esm/constants.js +1 -1
  175. package/dist/esm/data/tours.json +114 -0
  176. package/dist/esm/floorplan.loader.d.ts +5 -0
  177. package/dist/esm/floorplan.loader.js +1 -1
  178. package/dist/esm/floorplan.ready.d.ts +6 -3
  179. package/dist/esm/floorplan.ready.js +1 -1
  180. package/dist/esm/index.d.ts +0 -2
  181. package/dist/esm/index.js +1 -1
  182. package/dist/esm/load.d.ts +4 -1
  183. package/dist/esm/load.js +2 -2
  184. package/dist/esm/offline/offlineManager.js +1 -1
  185. package/dist/esm/renderer/HandlerRegistry.d.ts +18 -0
  186. package/dist/esm/renderer/HandlerRegistry.js +1 -0
  187. package/dist/esm/renderer/RendererService.d.ts +26 -0
  188. package/dist/esm/renderer/RendererService.js +1 -0
  189. package/dist/esm/renderer/engine-core/animation.d.ts +7 -0
  190. package/dist/esm/renderer/engine-core/animation.js +1 -0
  191. package/dist/esm/{components/Map/drawing/config → renderer}/engine-core/canvases.d.ts +1 -1
  192. package/dist/esm/renderer/engine-core/canvases.js +1 -0
  193. package/dist/esm/renderer/engine-core/fonts.js +1 -0
  194. package/dist/esm/renderer/engine-core/types.js +1 -0
  195. package/dist/esm/{components/Map/drawing/config/engine-core → renderer}/index.d.ts +10 -10
  196. package/dist/esm/renderer/index.js +1 -0
  197. package/dist/esm/services/routing.js +1 -1
  198. package/dist/esm/store/BookmarksStore.d.ts +12 -0
  199. package/dist/esm/store/BookmarksStore.js +2 -0
  200. package/dist/esm/store/FuzzySearchEngineStore.d.ts +7 -3
  201. package/dist/esm/store/FuzzySearchEngineStore.js +1 -1
  202. package/dist/esm/store/LayerStore.d.ts +1 -0
  203. package/dist/esm/store/LayerStore.js +1 -1
  204. package/dist/esm/store/RootStore.d.ts +10 -10
  205. package/dist/esm/store/RootStore.js +1 -1
  206. package/dist/esm/store/RoutePlannerStore.d.ts +58 -0
  207. package/dist/esm/store/RoutePlannerStore.js +1 -0
  208. package/dist/esm/store/RouteStore.d.ts +1 -1
  209. package/dist/esm/store/RouteStore.js +1 -1
  210. package/dist/esm/store/SearchStore.d.ts +2 -0
  211. package/dist/esm/store/SearchStore.js +1 -1
  212. package/dist/esm/store/ToursStore.js +1 -1
  213. package/dist/esm/store/UIState.d.ts +10 -7
  214. package/dist/esm/store/UIState.js +1 -1
  215. package/dist/esm/store/init/index.js +1 -1
  216. package/dist/esm/store/init/init-bookmarks.d.ts +7 -0
  217. package/dist/esm/store/init/init-bookmarks.js +1 -0
  218. package/dist/esm/store/init/init-events.d.ts +1 -1
  219. package/dist/esm/store/init/init-events.js +1 -1
  220. package/dist/esm/store/init/init-exhibitors.d.ts +1 -1
  221. package/dist/esm/store/init/init-exhibitors.js +1 -1
  222. package/dist/esm/store/init/init-layers.js +1 -1
  223. package/dist/esm/store/init/init-speakers.d.ts +1 -1
  224. package/dist/esm/store/init/init-speakers.js +1 -1
  225. package/dist/esm/store/search-buttons/SearchButtonsStore.d.ts +1 -1
  226. package/dist/esm/store/search-buttons/SearchButtonsStore.js +1 -1
  227. package/dist/esm/store/types.d.ts +11 -3
  228. package/dist/esm/tools/base-runtime-url.js +1 -1
  229. package/dist/esm/tools/sentry.js +1 -1
  230. package/dist/esm/tools/telemetry.d.ts +35 -0
  231. package/dist/esm/tools/telemetry.js +1 -0
  232. package/dist/esm/tools/track-event.d.ts +3 -1
  233. package/dist/esm/tools/track-event.js +1 -1
  234. package/dist/esm/utils/buildOptimizedRoute.d.ts +11 -0
  235. package/dist/esm/utils/buildOptimizedRoute.js +1 -0
  236. package/dist/esm/utils/geometry.d.ts +2 -0
  237. package/dist/esm/utils/geometry.js +1 -0
  238. package/dist/esm/utils/i18n.d.ts +6 -4
  239. package/dist/esm/utils/i18n.js +1 -1
  240. package/dist/esm/utils/loadCustomCss.d.ts +1 -1
  241. package/dist/esm/utils/loadCustomCss.js +1 -1
  242. package/dist/esm/utils/mapEntity.js +1 -1
  243. package/dist/esm/utils/math.d.ts +7 -0
  244. package/dist/esm/utils/math.js +1 -0
  245. package/dist/esm/utils/shortenName.js +1 -1
  246. package/dist/esm/utils/use-shadow.d.ts +1 -1
  247. package/dist/esm/utils/use-shadow.js +1 -1
  248. package/dist/esm/utils/useRenderTarget.js +1 -1
  249. package/dist/esm/wayfinding/_PLAN-public-api.d.ts +220 -0
  250. package/dist/esm/wayfinding/_PLAN-public-api.js +1 -0
  251. package/dist/esm/{utils/wayfinding.d.ts → wayfinding/__integration__/legacy/legacyWayfinding.d.ts} +5 -15
  252. package/dist/esm/wayfinding/__integration__/legacy/legacyWayfinding.js +1 -0
  253. package/dist/esm/wayfinding/__tests__/helpers.d.ts +21 -0
  254. package/dist/esm/wayfinding/__tests__/helpers.js +1 -0
  255. package/dist/esm/wayfinding/adapters/boothToWaypoint.d.ts +12 -0
  256. package/dist/esm/wayfinding/adapters/boothToWaypoint.js +1 -0
  257. package/dist/esm/wayfinding/adapters/graphDataSource.d.ts +3 -0
  258. package/dist/esm/wayfinding/adapters/graphDataSource.js +1 -0
  259. package/dist/esm/wayfinding/graph/buildGraph.d.ts +3 -0
  260. package/dist/esm/wayfinding/graph/buildGraph.js +1 -0
  261. package/dist/esm/wayfinding/graph/buildNGraph.d.ts +9 -0
  262. package/dist/esm/wayfinding/graph/buildNGraph.js +1 -0
  263. package/dist/esm/wayfinding/graph/constants.d.ts +3 -0
  264. package/dist/esm/wayfinding/graph/constants.js +1 -0
  265. package/dist/esm/wayfinding/graph/findShortestPath.d.ts +14 -0
  266. package/dist/esm/wayfinding/graph/findShortestPath.js +1 -0
  267. package/dist/esm/wayfinding/graph/graphCache.d.ts +6 -0
  268. package/dist/esm/wayfinding/graph/graphCache.js +1 -0
  269. package/dist/esm/wayfinding/graph/graphHelpers.d.ts +8 -0
  270. package/dist/esm/wayfinding/graph/graphHelpers.js +1 -0
  271. package/dist/esm/wayfinding/graph/linkCost.d.ts +4 -0
  272. package/dist/esm/wayfinding/graph/linkCost.js +1 -0
  273. package/dist/esm/wayfinding/graph/pathfinder/aStarPathFinder.d.ts +3 -0
  274. package/dist/esm/wayfinding/graph/pathfinder/aStarPathFinder.js +1 -0
  275. package/dist/esm/wayfinding/graph/pathfinder/parseNodeId.d.ts +9 -0
  276. package/dist/esm/wayfinding/graph/pathfinder/parseNodeId.js +1 -0
  277. package/dist/esm/wayfinding/index.d.ts +18 -0
  278. package/dist/esm/wayfinding/index.js +1 -0
  279. package/dist/esm/wayfinding/rendering/computeTransitionPoints.d.ts +31 -0
  280. package/dist/esm/wayfinding/rendering/computeTransitionPoints.js +1 -0
  281. package/dist/esm/wayfinding/rendering/normalizeRouteDirection.d.ts +19 -0
  282. package/dist/esm/wayfinding/rendering/normalizeRouteDirection.js +1 -0
  283. package/dist/esm/wayfinding/rendering/routeGeometry.d.ts +16 -0
  284. package/dist/esm/wayfinding/rendering/routeGeometry.js +1 -0
  285. package/dist/esm/wayfinding/routing/buildMultiPointRoute.d.ts +11 -0
  286. package/dist/esm/wayfinding/routing/buildMultiPointRoute.js +1 -0
  287. package/dist/esm/wayfinding/routing/buildRoute.d.ts +9 -0
  288. package/dist/esm/wayfinding/routing/buildRoute.js +1 -0
  289. package/dist/esm/wayfinding/routing/findNearestGraphPoint.d.ts +21 -0
  290. package/dist/esm/wayfinding/routing/findNearestGraphPoint.js +1 -0
  291. package/dist/esm/wayfinding/routing/getGraphLines.d.ts +14 -0
  292. package/dist/esm/wayfinding/routing/getGraphLines.js +1 -0
  293. package/dist/esm/wayfinding/routing/getRouteLength.d.ts +3 -0
  294. package/dist/esm/wayfinding/routing/getRouteLength.js +1 -0
  295. package/dist/esm/wayfinding/routing/routeResult.d.ts +4 -0
  296. package/dist/esm/wayfinding/routing/routeResult.js +1 -0
  297. package/dist/esm/wayfinding/types.d.ts +76 -0
  298. package/dist/esm/wayfinding/types.js +1 -0
  299. package/package.json +4 -8
  300. package/dist/browser/Debug-k5RKtjZM.js +0 -31
  301. package/dist/browser/Demo-CgMWCXus.js +0 -38
  302. package/dist/browser/Free-D7jT727E.js +0 -42
  303. package/dist/browser/Gallery-xjcSyY62.js +0 -279
  304. package/dist/browser/GpsLoader-_4iMtlKj.js +0 -131
  305. package/dist/browser/KioskStore-P8qIruSD.js +0 -216
  306. package/dist/browser/Mapbox-C7QZjYtQ.js +0 -109
  307. package/dist/browser/boolean-editor-C56suuE-.js +0 -148
  308. package/dist/browser/debug-ui-xTxa_Css.js +0 -58
  309. package/dist/browser/fetch-retry.umd-D12eSIuK.js +0 -114
  310. package/dist/browser/index-04R_J8Na.js +0 -45
  311. package/dist/browser/index-1HPoYB-N.js +0 -12526
  312. package/dist/browser/index-D1Nh_Rku.js +0 -48
  313. package/dist/browser/index-DmIJrF5Z.js +0 -83
  314. package/dist/browser/jsx-runtime-jIxVPx5o.js +0 -31
  315. package/dist/browser/sw.js +0 -2
  316. package/dist/esm/components/BoothRow.d.ts +0 -8
  317. package/dist/esm/components/BoothRow.js +0 -1
  318. package/dist/esm/components/ExhibitorRow.d.ts +0 -9
  319. package/dist/esm/components/ExhibitorRow.js +0 -1
  320. package/dist/esm/components/Map/drawing/config/engine-core/animation.d.ts +0 -3
  321. package/dist/esm/components/Map/drawing/config/engine-core/animation.js +0 -1
  322. package/dist/esm/components/Map/drawing/config/engine-core/canvases.js +0 -1
  323. package/dist/esm/components/Map/drawing/config/engine-core/fonts.js +0 -1
  324. package/dist/esm/components/Map/drawing/config/engine-core/index.js +0 -1
  325. package/dist/esm/components/Map/drawing/config/engine-core/renderer.d.ts +0 -4
  326. package/dist/esm/components/Map/drawing/config/engine-core/renderer.js +0 -1
  327. package/dist/esm/components/ScheduleRow.d.ts +0 -8
  328. package/dist/esm/components/ScheduleRow.js +0 -1
  329. package/dist/esm/expofp-debug.d.ts +0 -5
  330. package/dist/esm/expofp-debug.js +0 -1
  331. package/dist/esm/offline/sw.d.ts +0 -2
  332. package/dist/esm/offline/sw.js +0 -1
  333. package/dist/esm/store/LanguageStore.d.ts +0 -19
  334. package/dist/esm/store/LanguageStore.js +0 -1
  335. package/dist/esm/store/init/init-language.d.ts +0 -3
  336. package/dist/esm/store/init/init-language.js +0 -1
  337. package/dist/esm/utils/toRadians.d.ts +0 -3
  338. package/dist/esm/utils/toRadians.js +0 -1
  339. package/dist/esm/utils/wayfinding.js +0 -1
  340. package/dist/stats.html +0 -4950
  341. /package/dist/esm/{components/Map/drawing/config/engine-core/types.js → _misc_to_move/manifest.js} +0 -0
  342. /package/dist/esm/{components/Map/drawing/config → renderer}/engine-core/defs.d.ts +0 -0
  343. /package/dist/esm/{components/Map/drawing/config → renderer}/engine-core/defs.js +0 -0
  344. /package/dist/esm/{components/Map/drawing/config → renderer}/engine-core/fonts.d.ts +0 -0
  345. /package/dist/esm/{components/Map/drawing/config → renderer}/engine-core/settings.d.ts +0 -0
  346. /package/dist/esm/{components/Map/drawing/config → renderer}/engine-core/settings.js +0 -0
  347. /package/dist/esm/{components/Map/drawing/config → renderer}/engine-core/types.d.ts +0 -0
  348. /package/dist/esm/{components/Map/drawing/config → renderer}/engine-core/update-def.d.ts +0 -0
  349. /package/dist/esm/{components/Map/drawing/config → renderer}/engine-core/update-def.js +0 -0
  350. /package/dist/esm/{components/Map/drawing/config → renderer}/engine-core/utils/rotation.d.ts +0 -0
  351. /package/dist/esm/{components/Map/drawing/config → renderer}/engine-core/utils/rotation.js +0 -0
@@ -1 +1 @@
1
- import u,{layersStore as R}from"../../../../store";import{reaction as C}from"mobx";import{createImageCanvas as x}from"./canvases";import{createImageDef as L,updateRenderer as H,getBounds as b}from"./engine-core";import{toRadians as T}from"../../../../utils/toRadians";const P="_selected";export const MARKER_LAYER_NAME="markers";export function configMarkers(o,k){const h=[],r=new Map,c=new Map;let s=[];const g=k.rootLayer.children.find(e=>e.name===MARKER_LAYER_NAME);async function m(e){const n=[];e.forEach(i=>{const{name:l,content:t,width:a,height:d,scale:f}=i;if(r.has(l))return;const p=new Image,M=new Promise((D,v)=>{p.onload=()=>{r.set(l,{img:p,width:a,height:d,scale:f}),D()},p.onerror=w=>{v(w)}});n.push(M),p.src=t,p.crossOrigin="anonymous"}),await Promise.all(n)}const E=e=>`marker-ptScaleHandlers-${e.id}`,I=e=>`marker-rollHandlers-${e.id}`,$=(e,n)=>{o.ptScaleHandlers.push({fn:i=>{const{center:l,rotation:t}=e.bounds,{width:a,height:d}=e.source;return e.bounds=b(l.x,l.y,a,d,i,t),e},name:n})},N=(e,n)=>{o.rollHandlers.push({fn:i=>(e.bounds.rotation=i,e),name:n})};function _(){const e=u.routeStore.markersData.markers;if(!e.length)return;s=[];const n=u.renderer?.controls.getCameraState(),i=n?.ptScale||1,l=T(n?.roll)||0;e.forEach(t=>{const a=r.get(t.icon);if(!a)return;const d=a.scale||window.devicePixelRatio,f=t.icon;if(!c.has(f)){const y=x(a.img,a.width,a.height,d);c.set(f,y)}const p=c.get(f),M=r.get(t.selectedIcon),D=t.selectedIcon;if(!c.has(D)){const y=x(a.img,M.width,M.height,d);c.set(D,y)}const v=c.get(D),w=R.findLayer(t.z)?.visible??!0,B=b(t.x,t.y,p.width,p.height,i,l),F=b(t.x,t.y,v.width,v.height,i,l);let S;switch(t.position){case"lefttop":S=[0,0];break;case"centertop":S=[.5,0];break;case"centerbottom":S=[.5,1];break;default:S=[.5,.5]}const K={...L(p,B,{hidden:!w,origin:S}),id:t.id,scale:d},O={...L(v,F,{hidden:!(w&&t.active),origin:S}),id:`${t.id}${P}`,scale:d};s.push(K,O)}),g.children=s,s.forEach(t=>{const a=E(t),d=I(t);o.ptScaleHandlers=o.ptScaleHandlers.filter(f=>f.name!==a),o.rollHandlers=o.rollHandlers.filter(f=>f.name!==d),$(t,a),N(t,d)})}function z(){s.forEach(e=>{o.ptScaleHandlers=o.ptScaleHandlers.filter(n=>n.name!==E(e)),o.rollHandlers=o.rollHandlers.filter(n=>n.name!==I(e))}),g.children=[],s=[]}function A(){const e=u.routeStore.markersData.markers;e.length&&e.forEach(n=>{const i=s.find(a=>a.id===n.id),l=s.find(a=>a.id===`${n.id}${P}`);if(!i)return;const t=R.findLayer(n.z)?.visible??!0;n.active?(i.hidden=!0,l.hidden=!(t&&n.active)):(i.hidden=!t,l.hidden=!0)})}return h.push(C(()=>[u.routeStore.selectedMarkers,u.layerStore.visible],()=>{if(!u.routeStore.markersData.markers.length){z(),H(o,g);return}A(),H(o,...s)})),h.push(C(()=>u.routeStore.markersData.markers,()=>{m(u.routeStore.markersData.icons).then(()=>{_(),H(o,g)})})),function(){h.forEach(n=>n()),h.length=0}}export function getMarkerFromClick(o,k,h){for(const r of u.routeStore.markersData.markers){const c=u.routeStore.markersData.icons.find(m=>m.name===r.icon);if(!c)continue;const s=c.width*h*devicePixelRatio,g=c.height*h*devicePixelRatio;if(Y(o,k,r.x,r.y,s,g)){const m=u.layerStore.findLayer(r.z);if(!m||m&&m.visible)return r}}return null}function Y(o,k,h,r,c,s){const g=o>=h-c&&o<=h+c,m=k>=r-s&&k<=r+s;return g&&m}
1
+ import u,{layersStore as I}from"../../../../store";import{reaction as v}from"mobx";import{createImageCanvas as C}from"./canvases";import{createImageDef as x,getBounds as R}from"../../../../renderer";import{toRadians as F}from"../../../../utils/math";const L="_selected";export const MARKER_LAYER_NAME="markers";export function configMarkers(a){const h=[],l=new Map,s=new Map;let n=[];const m=a.scene.rootLayer.children.find(e=>e.name===MARKER_LAYER_NAME);async function k(e){const o=[];e.forEach(c=>{const{name:i,content:t,width:r,height:g,scale:y}=c;if(l.has(i))return;const f=new Image,M=new Promise((D,w)=>{f.onload=()=>{l.set(i,{img:f,width:r,height:g,scale:y}),D()},f.onerror=S=>{w(S)}});o.push(M),f.src=t,f.crossOrigin="anonymous"}),await Promise.all(o)}const d=e=>`marker-ptScaleHandlers-${e.id}`,E=e=>`marker-rollHandlers-${e.id}`,P=(e,o)=>{a.onPtScale(o,c=>{const{center:i,rotation:t}=e.bounds,{width:r,height:g}=e.source;return e.bounds=R(i.x,i.y,r,g,c,t),e})},H=(e,o)=>{a.onRoll(o,c=>(e.bounds.rotation=c,e))};function $(){const e=u.routeStore.markersData.markers;if(!e.length)return;n=[];const o=a.getCameraState(),c=o?.ptScale||1,i=F(o?.roll)||0;e.forEach(t=>{const r=l.get(t.icon);if(!r)return;const g=r.scale||window.devicePixelRatio,y=t.icon;if(!s.has(y)){const b=C(r.img,r.width,r.height,g);s.set(y,b)}const f=s.get(y),M=l.get(t.selectedIcon),D=t.selectedIcon;if(!s.has(D)){const b=C(r.img,M.width,M.height,g);s.set(D,b)}const w=s.get(D),S=I.findLayer(t.z)?.visible??!0,_=R(t.x,t.y,f.width,f.height,c,i),z=R(t.x,t.y,w.width,w.height,c,i);let p;switch(t.position){case"lefttop":p=[0,0];break;case"centertop":p=[.5,0];break;case"centerbottom":p=[.5,1];break;default:p=[.5,.5]}const A={...x(f,_,{hidden:!S,origin:p}),id:t.id,scale:g},K={...x(w,z,{hidden:!(S&&t.active),origin:p}),id:`${t.id}${L}`,scale:g};n.push(A,K)}),m.children=n,n.forEach(t=>{P(t,d(t)),H(t,E(t))})}function B(){n.forEach(e=>{a.ptScaleRegistry.unregisterByName(d(e)),a.rollRegistry.unregisterByName(E(e))}),m.children=[],n=[]}function N(){const e=u.routeStore.markersData.markers;e.length&&e.forEach(o=>{const c=n.find(r=>r.id===o.id),i=n.find(r=>r.id===`${o.id}${L}`);if(!c)return;const t=I.findLayer(o.z)?.visible??!0;o.active?(c.hidden=!0,i.hidden=!(t&&o.active)):(c.hidden=!t,i.hidden=!0)})}return h.push(v(()=>[u.routeStore.selectedMarkers,u.layerStore.visible],()=>{if(!u.routeStore.markersData.markers.length){B(),a.update(m);return}N(),a.update(...n)})),h.push(v(()=>u.routeStore.markersData.markers,()=>{k(u.routeStore.markersData.icons).then(()=>{$(),a.update(m)})})),function(){h.forEach(o=>o()),h.length=0}}export function getMarkerFromClick(a,h,l){for(const s of u.routeStore.markersData.markers){const n=u.routeStore.markersData.icons.find(d=>d.name===s.icon);if(!n)continue;const m=n.width*l*devicePixelRatio,k=n.height*l*devicePixelRatio;if(O(a,h,s.x,s.y,m,k)){const d=u.layerStore.findLayer(s.z);if(!d||d&&d.visible)return s}}return null}function O(a,h,l,s,n,m){const k=a>=l-n&&a<=l+n,d=h>=s-m&&h<=s+m;return k&&d}
@@ -1,11 +1,8 @@
1
- import { Point, Line } from "simple-geometry";
2
- import { SceneDef } from "@expofp/renderer";
3
- import { MapRenderer } from "../../Map";
1
+ import { RendererService } from "../../../../renderer";
4
2
  export declare const WF_TRAIL_LAYER_NAME = "wf-trail-points";
5
3
  export declare const WF_POINTS_LAYER_NAME = "wf-points";
6
4
  export declare const WF_CURRENT_POSITION_NAME = "wf-current-position";
7
5
  export declare const WF_LINES_LAYER_NAME = "wf-lines";
8
6
  export declare const WF_LINES_ANIMATED_LAYER_NAME = "wf-lines-animated";
9
- export default function configWf(renderer: MapRenderer, scene: SceneDef): () => void;
10
- export declare function splitPolyLine(lines: Line[], interval: number): Point[];
7
+ export default function configWf(rendererService: RendererService): () => void;
11
8
  //# sourceMappingURL=config-wf.d.ts.map
@@ -1 +1 @@
1
- import ft from"color";import{observable as pt,reaction as rt}from"mobx";import{lineLength as bt}from"simple-geometry";import Ot from"../../../../core/Rect";import r,{layersStore as vt,uiState as g}from"../../../../store";import{LayersMode as Ct}from"../../../../store/LayerStore";import{getGraphLines as kt,getRouteLength as gt,RoutePoint as ht}from"../../../../utils/wayfinding";import{strEqual as O}from"../../../../utils/strEqual";import{createArrowCurrentCanvas as It,createCurrentCanvas as xt,createImageCanvas as V,createTargetCanvas as Wt,createYahCanvas as qt}from"./canvases";import{toRadians as Et}from"../../../../utils/toRadians";import{areLayersEnabled as Tt}from"../../../../utils/areLayersEnabled";import{createImageDef as Z,createLineDef as Rt,updateRenderer as tt,createCircleCanvas as Ut,getBounds as w,getRotation as Xt}from"./engine-core";import{animateLineSegments as $t}from"./engine-core/animation";import{splitRouteByPoint as Gt,snapPositionToRoute as Kt,getThresholdSafe as jt,getThresholdFromMetersToSvg as Jt,SNAP_THRESHOLD_METERS as Qt}from"./route-snapping";import{fpGeo as At}from"../../../Mapbox/utils/fpGeo";const C=devicePixelRatio;let z=[],st=null,F=[],yt=ft("#00A2FF"),Vt=ft("#FF9F06"),_t="#A4CCE2",Zt="#0794EA";const at=34;let $,G,K,j,et,Lt,Dt,Mt,dt,T,A,k,W,J,St=[];function te(){z=[];const t=r.routeStore.currentRouteLayer?.name;st=oe();const o=st&&(Tt()?O(t,st.destination?.layer):!0);if(st){const d=st?.routePoint;d&&O(t,d.layer)&&(z=ie(d,z))}let n=[],i=[];for(let d=0;d<F.length;d++){let L=F[d],m=r.layerStore.mode==Ct.Default?!0:r.layerStore.layers.find(a=>a.name==t&&t===L.p0.layer)?.visible||!1;!L.virtual&&m&&n.push(L),(L.virtual||!m||d===F.length-1)&&n.length&&(i=n.map(({p0:a,p1:s})=>(z.push({x:a.x,y:a.y},{x:s.x,y:s.y}),{p0:a,p1:s})))}z.length||(A.hidden=!0,T.hidden=!0);let l=1e6,u=1e6,p=0,y=0;z.forEach(d=>{d.x<l&&(l=d.x),d.y<u&&(u=d.y),d.x>p&&(p=d.x),d.y>y&&(y=d.y)});const h=Ot.fromX1y1x2y2(l,u,p,y);return{rect:z.length&&(h.w||h.h)?h.withPadding(h.w,h.h):null,lines:i,addTrailPoints:o}}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 ee(t,o){let n=null;const i=[];let l=null,u=pt.box([]),p=pt.box([],{deep:!1}),y=pt.box([],{deep:!1});const h=o.rootLayer.children,d=h.find(e=>e.name===WF_POINTS_LAYER_NAME),L=h.find(e=>e.name===WF_CURRENT_POSITION_NAME),m=h.find(e=>e.name===WF_LINES_LAYER_NAME),a=h.find(e=>e.name===WF_TRAIL_LAYER_NAME),s=h.find(e=>e.name===WF_LINES_ANIMATED_LAYER_NAME),x=jt(At?.properties?.config?.snapThreshold)||Qt,S=Jt({thresholdInMeters:x,gpsConfig:At?.properties?.config});let P=[];const q=r.fp.icons.get("destination");q?(q.id="destination",G=V(q,at,at,C)):G=Wt(C,Vt.hex()),A=Z(G,w(0,0,G.width,G.height),{hidden:!0});const I=r.fp.icons.get("departure");I?(I.id="departure",$=V(I,at,at,C)):$=xt(C,yt.hex()),T=Z($,w(0,0,$.width,$.height),{hidden:!0}),K=xt(C,yt.hex()),K.id="current-location",k=Z(K,w(0,0,K.width,K.height),{hidden:!0,origin:[.5,.5]});const R=r.fp.icons.get("transition");R?(R.id="transition",Lt=V(R,34,34,C)):Lt=xt(C,yt.hex());const D=r.fp.icons.get("transition_up");D&&(D.id="transition_up",Dt=V(D,56,34,C));const Y=r.fp.icons.get("transition_down");Y&&(Y.id="transition_down",Mt=V(Y,56,34,C));const Q=r.fp.icons.get("direction");Q?(Q.id="direction",j=V(Q,at,at,C)):j=It(C,yt.hex()),W=Z(j,w(0,0,j.width,j.height),{hidden:!0});const B=r.fp.icons.get("yah");B?et=V(B,mt(64,32),mt(90,32),C):et=qt(C,"#ff4343"),et.id="current-location-2",J=Z(et,w(0,0,et.width,et.height),{hidden:!0,origin:[.5,1]}),dt=Ut(4,ft("#b5b7bc").hex());function N(e=null){const f=r.layerStore.visible.map(c=>c.name);if(z=[],u.set([]),e||(F=[]),f.length&&g.selectedRoute?.from?.rect&&g.selectedRoute?.to?.rect){let c=g.selectedRoute.from,_=g.selectedRoute.to;if(!F.length&&!e&&(F=kt(c,_,r.routeStore.onlyAccessible,g.selectedRoute.waypoints)),!F.length){if(r.routeStore.updateRoute(F),r.routeStore.updateRouteDistance(0),c.name!==_.name)throw new Error(`Route not found. From: ${c.name} to: ${_.name}`);return}const{rect:E,lines:b,addTrailPoints:v}=te();b.length&&(ne(t.scale),re(t.scale,p),Ft(t,a,!v)),P=b,lt(),E&&(g.moveToRect=E)}else T.hidden=!0,A.hidden=!0;r.routeStore.updateRoute(F.filter(c=>!c.virtual)),u.get()||(T.hidden=!0,A.hidden=!0)}function U(){const e=r.routeStore.currentPosition,f=e?.angle?Et(e.angle):null,c=r.routeStore.currentRouteLayer?.name,_=F.filter(M=>r.layerStore.mode==Ct.Default?!0:r.layerStore.layers.find(Bt=>Bt.name==c&&c===M.p0.layer)?.visible).filter(M=>!M.virtual);if(g.kioskData&&g.selectedRoute?.from){const M=r.routeStore.currentRouteLayer;T.hidden=g.selectedRoute?.from?.entity?.type==="route-cut-in"&&M?.name===g.selectedRoute?.from?.layer?.name,A.hidden=g.selectedRoute?.to?.entity?.type==="route-cut-in"&&M?.name===g.selectedRoute?.to?.layer?.name}if(e){const M=vt.findLayer(e.z)?.visible??!0;r.routeStore.iconType===0||g.selectedRoute?.from&&g.selectedRoute?.to?(J.hidden=!0,k.hidden=!M,k.dim=!M,k.bounds=w(e.x,e.y,K.width,K.height,t.scale),f!=null?(k.hidden=!0,W.hidden=!M,W.dim=!M,W.bounds=w(e.x,e.y,j.width,j.height,t.scale,f)):W.hidden=!0):(k.hidden=!0,W.hidden=!0,J.dim=!M,J.hidden=!M,J.bounds=w(e.x,e.y,et.width,et.height,t.scale))}else k.hidden=!0,J.hidden=!0,W.hidden=!0,nt(),lt();if(!e||!z.length){tt(t,W,k,J);return}const E=g.selectedRoute?.to,b=g.selectedRoute?.from,v=new ht(b?.layer?.name,T.bounds.center.x,T.bounds.center.y),X=new ht(E?.layer?.name,A.bounds.center.x,A.bounds.center.y),ut=Kt(e,_,{snapThreshold:S,fromPoint:v,toPoint:X,fromRect:b?.rect,toRect:E?.rect}),it=ut.snapped?ut.snappedPoint:e;lt(ut),W.bounds=w(it.x,it.y,j.width,j.height,t.scale,f),k.bounds=w(it.x,it.y,K.width,K.height,t.scale,f),tt(t,W,k,J)}function ct(){const e=[W,k,J];L.children=e,e.forEach(f=>ot(f)),tt(t,L)}function H(e=!1){const f=[T,A,...p.get(),...y.get()];e&&(Ht(!0),a.children=[],f.forEach(c=>{c.source.id.includes("kiosk")||(c.hidden=!0)})),d.children=f,tt(t,d,a)}function nt(e,f){const c=F.filter(X=>!X.virtual),_=gt(c);if(!e?.snapped){r.routeStore.updateRouteDistance(_);return}const E=g.selectedRoute?.to,b=gt(f);let v;if(e.snappedPoint?.layer===E?.layer?.name||E?.layer?.name===r.routeStore.currentRouteLayer?.name)v=b;else if(e.snappedPoint?.layer!==E?.layer?.name&&e.snappedPoint?.layer===r.routeStore.currentRouteLayer?.name){const X=c.filter(it=>it.p0.layer!==e?.snappedPoint?.layer&&it.p1.layer!==e?.snappedPoint?.layer),ut=gt(X);v=b+ut}v&&r.routeStore.updateRouteDistance(v)}function lt(e){const f=g.selectedRoute?.from,c=g.selectedRoute?.to;if(!f||!c)return;const _=ae(F,P,new ht(f?.layer?.name,f?.rect.cx,f?.rect.cy),new ht(c?.layer?.name,c?.rect.cx,c?.rect.cy));if(!e?.snapped){const v=_.map(X=>Rt(X,_t));r.routeStore.currentPosition&&r.routeStore.currentRouteLayer&&r.routeStore.currentPosition?.z?.toString()===r.routeStore.currentRouteLayer?.name.toString()&&nt(),Pt([],v);return}const{passed:E,remaining:b}=Gt(_,e.snappedPoint);b.length&&(b[0]={...b[0],p0:e.snappedPoint}),nt(e,b),Pt(E.map(v=>Rt(v,"#B5B7BC")),b.map(v=>Rt(v,_t)))}const ot=(e,f)=>{t.ptScaleHandlers.push({fn:c=>(e.hidden||(e.bounds=w(e.bounds.center.x,e.bounds.center.y,e.source.width,e.source.height,c,e.bounds.rotation)),e),name:f})},wt=(e,f)=>{t.rollHandlers.push({fn:c=>{const _=Xt(c,e.bounds.rotation);return _!==void 0&&(e.bounds.rotation=e.bounds.rotation+_),e},name:f})};function Ht(e){n&&(n(),n=null),s.children=[],e&&(m.children=[]),tt(t,s,m)}function Pt(e=[],f=[]){n&&(n(),n=null),m.children=[...e,...f];const c=f.map(E=>({...E,color:Zt}));n=$t(c,(E,b,v)=>{if(v)s.children=[];else{const X=c.slice(0,b);s.children=[...X,E]}tt(t,s)},()=>t.scale),tt(t,m)}i.push(rt(()=>[r.layerStore.layersLoaded],()=>{N(),U(),H()}));const zt=rt(()=>[r.routeStore.currentRouteLayer,g.getRouteNextFloor],()=>{r.layerStore.layersLoaded&&(l!==null&&clearTimeout(l),l=setTimeout(()=>{N(r.routeStore.currentRouteLayer),U(),H(),l=null},0))});i.push(()=>{l!==null&&(clearTimeout(l),l=null),zt()}),i.push(rt(()=>[g.selectedRoute,r.routeStore.onlyAccessible],()=>{N(),U(),H(!g.selectedRoute)})),i.push(rt(()=>r.routeStore.currentPosition,()=>{U(),H()})),i.push(rt(()=>p.get(),e=>{const f="transitionPoints";t.ptScaleHandlers=t.ptScaleHandlers.filter(c=>c.name!==f),e.length&&e.forEach(c=>{ot(c,f),wt(c,f)})})),i.push(rt(()=>[y.get()],()=>{const e=y.get(),f="kioskArrows";t.ptScaleHandlers=t.ptScaleHandlers.filter(c=>c.name!==f),e.length&&e.forEach(c=>ot(c,f))})),i.push(rt(()=>[g.kioskData,vt.floors.find(e=>e.active),g.selectedRoute],([e,f])=>{y.set([]);const c=Tt()?e?.z===f?.name:!0;e&&c&&se(e,{skipdim:!0,visible:!0,pixelRatio:C},t.scale,y),H()})),[T,A].forEach(e=>{ot(e),wt(e)}),H(),U(),ct();function Yt(){n&&(n(),n=null),i.forEach(e=>e()),i.length=0}return Yt}function ne(t){const o=r.routeStore.currentRouteLayer?.name,n=z;let i=g.selectedRoute?.from,l=g.selectedRoute?.to;const u=g.selectedRoute?.waypoints;if(i?.entity.type==="route-cut-in"&&(i=null),l?.entity.type==="route-cut-in"&&(l=null),!n.length)return;const p=[{key:"sourceLocation",rect:i?.rect,index:void 0},{key:"destinationLocation",rect:l?.rect,index:void 0}];u&&p.push(...u?.map((m,a)=>({key:`waypoint-${m.externalId}`,index:a,rect:m.rect})));const y=o?O(o,i?.layer?.name):!0,h=o?O(o,l?.layer?.name):!0;let d=!1,L=!1;n.forEach(({x:m,y:a})=>{for(const{key:s,rect:x,index:S}of p)if(x?.containsPoint(m,a)){s==="sourceLocation"&&(T.bounds=w(m,a,$.width,$.height,t),T.hidden=!y,T.dim=!y,d=y),s==="destinationLocation"&&(A.bounds=w(m,a,G.width,G.height,t),A.hidden=!h,A.dim=!h,L=h);break}}),d||(T.bounds=w(n[n.length-1].x,n[n.length-1].y,$.width,$.height,t),T.hidden=!1,T.dim=!1),L||(A.bounds=w(n[0].x,n[0].y,G.width,G.height,t),A.hidden=!h,A.dim=!h)}function oe(){const{from:t,to:o}=r.uiState.selectedRoute||{},n="route-cut-in";return t&&t?.entity.type===n||o&&o?.entity.type===n?r.routeStore.defaultFrom:null}function ie(t,o){if(!t||!o.length)return o;const n=o.reduce((i,l,u)=>bt(t,l)<bt(t,o[i])?u:i,0);return n<=o.length/2?o.slice(n):o.slice(0,n)}function re(t,o){const n=r.routeStore.currentRouteLayer?.name,i=g.getRouteNextFloor,l=r.layerStore.floors.map(a=>a.name),u=(a,s)=>a.findIndex(x=>O(x,s)),p=u(l,n),y=u(l,i),h=y!==-1,d=F.filter(a=>n?a.virtual&&(O(a.p0.layer,n)||O(a.p1.layer,n))&&(O(a.p0.layer,i)||O(a.p1.layer,i)):a.virtual).flatMap(a=>[a.p0,a.p1]),L=[];let m;d.forEach(a=>{if(i&&!O(a.layer,i)&&(h&&y>p&&r.fp.icons.get("transition_up")?m=Mt:h&&y<p&&r.fp.icons.get("transition_down")?m=Dt:m=Lt),m){const s=O(n,a.layer),x=w(a.x,a.y,m.width,m.height,t),S=Z(m,x,{hidden:!s,dim:!1});L.push(S)}}),o.set(L)}function se(t,o,n=1,i){if(!t)return;const l=r.fp.icons.get("kiosk");l.id="kiosk";let u;if(l){const y=t?.iconSizePercent?t.iconSizePercent/100:1,h=55;u=V(l,mt(199*y,h),mt(152*y,h),C)}else u=It(C,ft("#ee4422").hex());const p=Z(u,w(t.x,t.y,u.width,u.height,n,Et(t.heading||0)),{hidden:!o.visible,dim:!o.skipdim});i.set([...i.get(),p])}function mt(t,o){return t*(1-o/100)}function Ft(t,o,n=!1){t.ptScaleHandlers=t.ptScaleHandlers.filter(S=>S.name!==o.name);let i=z.length-1;if(g.selectedRoute?.to?.entity.type==="route-cut-in"&&(i=0),n){St=[],o.children=[],tt(t,o);return}const l=t.scale,u=z[i],p=st?.destination;if(!u||!p)return;const y=dt.width,h=splitPolyLine([{p0:u,p1:p}],y*2*l);if(h.length<2)return;const d=p.x-u.x,L=p.y-u.y,m=Math.hypot(d,L),a={x:(u.x+p.x)/2,y:(u.y+p.y)/2-m*.2},s=[u,a,p],x=h.map((S,P,q)=>{const I=(P+1)/(q.length+1),R=Nt(s,I);return Z(dt,w(R.x,R.y,dt.width,dt.height,l),{hidden:!1,dim:!1})})||[];return o.children=x,t.ptScaleHandlers.push({fn:S=>{t.scale=S;const P=Ft(t,o)||[];return o.children=P,St=P,o},name:o.name}),St=x,x}function Nt(t,o){if(t.length===1)return t[0];const n=[];for(let i=0;i<t.length-1;i++){const l=(1-o)*t[i].x+o*t[i+1].x,u=(1-o)*t[i].y+o*t[i+1].y;n.push({x:l,y:u})}return Nt(n,o)}export function splitPolyLine(t,o){if(t.length===0)return[];const n=[];let i=0;for(let y=0;y<t.length;y++){const h=t[y],d=h.p0,L=h.p1,m=L.x-d.x,a=L.y-d.y,s=Math.sqrt(m*m+a*a);if(s===0)continue;const x=m/s,S=a/s;let P=0;for(;i+P*o<=s;){const R=i+P*o,D=d.x+x*R,Y=d.y+S*R;n.push({x:D,y:Y}),P++}const q=i+(P-1)*o;let I=s-q;if(I=Math.max(I,0),y<t.length-1){const R=t[y+1],D=R.p0,Y=R.p1,Q=Y.x-D.x,B=Y.y-D.y,N=Math.sqrt(Q*Q+B*B);if(N===0)i=0;else{const U=Q/N,ct=B/N,H=x*U+S*ct,nt=I*H;i=o-nt}}else i=o-I;i=Math.max(i,0)}const l=t[0].p0;(n.length===0||!n[0]||n[0].x!==l.x||n[0].y!==l.y)&&n.unshift(l);const u=t[t.length-1].p1,p=n[n.length-1];return(n.length===0||!p||p.x!==u.x||p.y!==u.y)&&n.push(u),n}function ae(t,o,n,i){if(!o.length)return o;const l=new Array(t.length);let u=0;for(let s=0;s<t.length;s++){const x=t[s],S=Math.hypot(x.p1.x-x.p0.x,x.p1.y-x.p0.y);l[s]=S,u+=S}const p=s=>s?String(s):null;function y(s){let x=0,S=1/0,P=1/0;const q=p(s.layer);for(let I=0;I<t.length;I++){const R=t[I],D=l[I],Y=p(R.p0.layer);if(!(q===null||Y===null||Y===q)){x+=D;continue}const B=R.p1.x-R.p0.x,N=R.p1.y-R.p0.y,U=B*B+N*N;if(U===0){x+=D;continue}const ct=((s.x-R.p0.x)*B+(s.y-R.p0.y)*N)/U,H=Math.max(0,Math.min(1,ct)),nt=R.p0.x+B*H,lt=R.p0.y+N*H,ot=Math.hypot(s.x-nt,s.y-lt);ot<S&&(S=ot,P=x+D*H),x+=D}return{found:P!==1/0,fromStart:P,total:u}}const h=y(n),d=h.found?h:y(i);if(!d.found)return o;const L=d.fromStart,m=d.total-d.fromStart;return(h.found?m<L:L<m)?o.slice().reverse().map(s=>({...s,p0:s.p1,p1:s.p0})):o}
1
+ import ne from"color";import{observable as he,reaction as q}from"mobx";import{lineLength as Se}from"simple-geometry";import He 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 We,graphDataSource as Ye,computeTransitionPoints as Ue,normalizeRouteDirection as Ge,bezierCurve as qe,splitPolyLine as Ke}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 z,createTargetCanvas as Ve,createYahCanvas as Xe}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 Je}from"../../../../renderer";import{animateLineSegments as Qe}from"../../../../renderer/engine-core/animation";import{splitRouteByPoint as Ze,snapPositionToRoute as et,getThresholdSafe as tt,getThresholdFromMetersToSvg as nt,SNAP_THRESHOLD_METERS as ot}from"./route-snapping";import{fpGeo as Ne}from"../../../Mapbox/utils/fpGeo";import{getRouteLength as pe}from"../../../../wayfinding";const L=devicePixelRatio;let I=[],X=null,T=[],Q=ne("#00A2FF"),it=ne("#FF9F06"),Fe="#A4CCE2",rt="#0794EA";const W=34;let B,M,k,$,Y,ge,Re,Le,xe,Z,C,E,N,F,O,we=[];function at(){I=[];const t=o.routeStore.currentRouteLayer?.name;X=lt();const r=X&&(ve()?ie(t,X.destination?.layer):!0);if(X){const l=X?.routePoint;l&&ie(t,l.layer)&&(I=ct(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(h=>h.name==t&&t===_.p0.layer)?.visible||!1;!_.virtual&&x&&a.push(_),(_.virtual||!x||l===T.length-1)&&a.length&&(f=a.map(({p0:h,p1:w})=>(I.push({x:h.x,y:h.y},{x:w.x,y:w.y}),{p0:h,p1:w})))}I.length||(E.hidden=!0,C.hidden=!0);let m=1e6,s=1e6,y=0,u=0;I.forEach(l=>{l.x<m&&(m=l.x),l.y<s&&(s=l.y),l.x>y&&(y=l.x),l.y>u&&(u=l.y)});const d=He.fromX1y1x2y2(m,s,y,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 st(t){let r=null;const a=[];let f=null,m=he.box([]),s=he.box([],{deep:!1}),y=[],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),h=d.find(e=>e.name===WF_TRAIL_LAYER_NAME),w=d.find(e=>e.name===WF_LINES_ANIMATED_LAYER_NAME),U=tt(Ne?.properties?.config?.snapThreshold)||ot,ae=nt({thresholdInMeters:U,gpsConfig:Ne?.properties?.config});let ee=[];const j=o.fp.icons.get("destination");j?(j.id="destination",M=z(j,W,W,L)):M=Ve(L,it.hex()),E=H(M,R(0,0,M.width,M.height),{hidden:!0});const G=o.fp.icons.get("departure");G?(G.id="departure",B=z(G,W,W,L)):B=re(L,Q.hex()),C=H(B,R(0,0,B.width,B.height),{hidden:!0}),k=re(L,Q.hex()),k.id="current-location",N=H(k,R(0,0,k.width,k.height),{hidden:!0,origin:[.5,.5]});const K=o.fp.icons.get("transition");K?(K.id="transition",ge=z(K,34,34,L)):ge=re(L,Q.hex());const se=o.fp.icons.get("transition_up");se&&(se.id="transition_up",Re=z(se,56,34,L));const ue=o.fp.icons.get("transition_down");ue&&(ue.id="transition_down",Le=z(ue,56,34,L)),G?xe=z(G,W,W,L):xe=re(L,Q.hex());const le=o.fp.icons.get("direction");le?(le.id="direction",$=z(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=z(Pe,oe(64,32),oe(90,32),L):Y=Xe(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=[],m.set([]),e||(T=[]),n.length&&c.selectedRoute?.from?.rect&&c.selectedRoute?.to?.rect){let i=c.selectedRoute.from,p=c.selectedRoute.to;if(!T.length&&!e&&(T=We(Ye,me(i),me(p),o.routeStore.onlyAccessible,c.selectedRoute.waypoints?.map(me))),!T.length){if(o.routeStore.updateRoute(T),o.routeStore.updateRouteDistance(0),i.name!==p.name)throw new Error(`Route not found. From: ${i.name} to: ${p.name}`);return}const{rect:g,lines:D,addTrailPoints:b}=at();D.length?(ut(t.scale),dt(t.scale,s,y),ze(t,h,!b),t.ptScaleRegistry.unregisterByName(h.name),b&&t.onPtScale(h.name,()=>{const P=ze(t,h)||[];return h.children=P,we=P,h})):t.ptScaleRegistry.unregisterByName(h.name),ee=D,fe(),g&&(c.moveToRect=g)}else C.hidden=!0,E.hidden=!0;o.routeStore.updateRoute(T.filter(i=>!i.virtual)),m.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,p=T.filter(A=>o.layerStore.mode==_e.Default?!0:o.layerStore.layers.find(Oe=>Oe.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,k.width,k.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=et(e,p,{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,k.width,k.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),h.children=[],n.forEach(i=>{i.source.id.includes("kiosk")||(i.hidden=!0)})),l.children=n,t.update(l,h)}function de(e,n){const i=T.filter(P=>!P.virtual),p=pe(i);if(!e?.snapped){o.routeStore.updateRouteDistance(p);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,p=c.selectedRoute?.to;if(!i||!p)return;const g=T[0]?.p0.layer,D=Ge(T,ee,{layer:i.layer?.name??g,x:i.rect.cx,y:i.rect.cy},{layer:p.layer?.name??g,x:p.rect.cx,y:p.rect.cy});if(!e?.snapped){const S=D.map(v=>ye(v,Fe));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}=Ze(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,Fe)),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 p=Je(i,e.bounds.rotation);return p!==void 0&&(e.bounds.rotation=e.bounds.rotation+p),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 p=0;if(r&&(i&&(p=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:rt}));r=Qe(g,(b,P,S)=>{if(S)w.children=[];else{const v=g.slice(0,P);w.children=[...v,b]}t.update(w)},()=>t.scale,p)??null,t.update(x)}a.push(q(()=>[o.layerStore.layersLoaded],()=>{ce(),J(),V()}));const ke=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),ke()}),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,p)=>{const g=`${n}-${p}`;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,p)=>te(i,`${n}-${p}`))})),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&&ft(e,{skipdim:!0,visible:!0,pixelRatio:L},t.scale,u),V()}));function Ee({defs:e}){const n=y.find(i=>e.includes(i.imageDef));n&&o.layerStore.updateVisibility(n.targetLayer,!0)}t.renderer.events.addEventListener("pointer:click",Ee),a.push(()=>t.renderer.events.removeEventListener("pointer:click",Ee));function Te({defs:e}){const n=y.some(i=>e.includes(i.imageDef));t.renderer.canvas.style.cursor=n?"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 $e(){r&&(r.stop(),r=null),a.forEach(e=>e()),a.length=0}return $e}function ut(t){const r=o.routeStore.currentRouteLayer?.name,a=I;let f=c.selectedRoute?.from,m=c.selectedRoute?.to;const s=c.selectedRoute?.waypoints;if(f?.entity.type==="route-cut-in"&&(f=null),m?.entity.type==="route-cut-in"&&(m=null),!a.length)return;const y=[{key:"sourceLocation",rect:f?.rect,index:void 0},{key:"destinationLocation",rect:m?.rect,index:void 0}];s&&y.push(...s?.map((x,h)=>({key:`waypoint-${x.externalId}`,index:h,rect:x.rect})));const u=r?ie(r,f?.layer?.name):!0,d=r?ie(r,m?.layer?.name):!0;let l=!1,_=!1;a.forEach(({x,y:h})=>{for(const{key:w,rect:U,index:ae}of y)if(U?.containsPoint(x,h)){w==="sourceLocation"&&(C.bounds=R(x,h,B.width,B.height,t),C.hidden=!u,C.dim=!u,l=u),w==="destinationLocation"&&(E.bounds=R(x,h,M.width,M.height,t),E.hidden=!d,E.dim=!d,_=d);break}}),l||(C.bounds=R(a[a.length-1].x,a[a.length-1].y,B.width,B.height,t),C.hidden=!1,C.dim=!1),_||(E.bounds=R(a[0].x,a[0].y,M.width,M.height,t),E.hidden=!d,E.dim=!d)}function lt(){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 ct(t,r){if(!t||!r.length)return r;const a=r.reduce((f,m,s)=>Se(t,m)<Se(t,r[f])?s:f,0);return a<=r.length/2?r.slice(a):r.slice(0,a)}function dt(t,r,a){const f=o.routeStore.currentRouteLayer?.name,m=o.layerStore.floors.map(u=>u.name).reverse(),s=Ue({routeLines:T,currentLayerName:f,floorOrder:m});a.length=0;const y=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(y)}function ft(t,r,a=1,f){if(!t)return;const m=o.fp.icons.get("kiosk");m.id="kiosk";let s;if(m){const u=t?.iconSizePercent?t.iconSizePercent/100:1,d=55;s=z(m,oe(199*u,d),oe(152*u,d),L)}else s=De(L,ne("#ee4422").hex());const y=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(),y])}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 m=t.scale,s=I[f],y=X?.destination;if(!s||!y)return;const u=Z.width,d=Ke([{p0:s,p1:y}],u*2*m);if(d.length<2)return;const l=y.x-s.x,_=y.y-s.y,x=Math.hypot(l,_),h={x:(s.x+y.x)/2,y:(s.y+y.y)/2-x*.2},w=[s,h,y],U=d.map((ae,ee,j)=>{const G=(ee+1)/(j.length+1),K=qe(w,G);return H(Z,R(K.x,K.y,Z.width,Z.height,m),{hidden:!1,dim:!1})})||[];return r.children=U,we=U,U}
@@ -2,9 +2,8 @@ import { ImageUrls } from "../../../../utils/loadImagesInBatches";
2
2
  import { Img } from "../../../../utils/imageloader";
3
3
  import type { Booth } from "../../../../store/BoothStore";
4
4
  import type { Layer } from "../../../../store/LayerStore";
5
- import { SceneDef } from "@expofp/renderer";
6
- import { MapRenderer } from "../../Map";
7
- export declare function loadLayersImages(renderer: MapRenderer, scene: SceneDef): Promise<void>;
5
+ import { RendererService } from "../../../../renderer";
6
+ export declare function loadLayersImages(rendererService: RendererService): Promise<void>;
8
7
  export declare const getImageLayerName: (layerName: string) => string;
9
8
  export declare function mapBoothsLogos(booths: Booth[]): Map<number, ImageUrls>;
10
9
  export declare function getLayerIcons(layer: Layer): SVGImageElement[];
@@ -1 +1 @@
1
- import{getLayerSvg as w}from"../../../../data/svg";import{select as y}from"d3";import{getLogoUrl as x}from"../../../../utils/getLogoUrl";import{flipImageDef as I,isInnerInsideOuter as L,updateRenderer as B}from"./engine-core";import{SEPARATOR as R}from"../../../../constants";import{rotateImageDef as A}from"./engine-core/utils/rotation";export async function loadLayersImages(o,t){const e=performance.now(),a=o.layerImagesHandlers.filter(Boolean);await Promise.all(a.map(async n=>{const s=await n.fn();if(!s)return;const{name:c,children:f}=s,l=p(t.rootLayer.children,c);if(l&&f.length){const d=[];for(const{shape:m,parentRect:g}of s.children){const u=L(m.bounds,g);l.name.includes("Pathway_")||o.rollHandlers.push(u?{fn:h=>A(m,h),name:"imageRotationHandler"}:{fn:h=>I(m,h),name:"imageFlipHandler"}),d.push(m)}l.children.push(...d),B(o,l)}}));const r=+(performance.now()-e).toFixed(2);console.log(`\u{1F4CA} Total loadBoothsImages time: ${r} ms`)}export const getImageLayerName=o=>`${o}${R}images`;export function mapBoothsLogos(o){return new Map(o.map(t=>{const e=t.rect&&t.exhibitors.find(a=>a.logoInBooth&&a.logo);return e?[t.id,{preferred:x(e.logo),fallback:e.logo}]:null}).filter(Boolean))}export function getLayerIcons(o){const t=y(w(o)).select(`[data-layer="${o.name}"]`);return(window.__fpVersion>5?t.selectAll(":scope > image, :scope > g:not([data-layer]) image").nodes():t.selectAll(":scope > g[data-is-editable='false'] image").nodes()).filter(Boolean)}export function createBoothImg(o,t){const e=o.rect,a=e.h?e.w/e.h:1,i=t.height?t.width/t.height:1;let r,n,s;const c=.9;a>i?(n=e.h*c,r=n*i):(r=e.w*c,n=r/i);const f=o.rotate||0;i>=2&&!f&&e.h>=e.w*2?(n=e.w*c,r=n*i,s=-90):s=-f*180/Math.PI,r>e.w&&(r=e.w,n=r/i),n>e.h&&(n=e.h,r=n*i);const l=e.cx-r/2,d=e.cy-n/2;return{name:o.slug,bounds:{x:l,y:d,width:r,height:n,angle:s},htmlImage:t,booth:o}}function p(o,t){for(const e of o){if(e.name===t)return e;if(e.children&&e.children.length>0){const a=p(e.children,t);if(a)return a}}return null}
1
+ import{getLayerSvg as f}from"../../../../data/svg";import{select as h}from"d3";import{getLogoUrl as d}from"../../../../utils/getLogoUrl";import{flipImageDef as u,isInnerInsideOuter as y}from"../../../../renderer";import{SEPARATOR as w}from"../../../../constants";import{rotateImageDef as x}from"../../../../renderer/engine-core/utils/rotation";export async function loadLayersImages(t){const n=t.layerImagesRegistry.invoke();await Promise.all(n.map(async e=>{const l=await e;if(!l)return;const{layer:i,children:o}=l;if(o.length){const a=[];for(let r=0;r<o.length;r++){const{shape:s,parentRect:c}=o[r],g=y(s.bounds,c);if(!i.name.includes("Pathway_")){const m=g?"image-rotate":"image-flip";t.onRoll(`${m}-${name}-${r}`,g?p=>x(s,p):p=>u(s,p))}a.push(s)}i.children.push(...a),t.update(i)}}))}export const getImageLayerName=t=>`${t}${w}images`;export function mapBoothsLogos(t){return new Map(t.map(n=>{const e=n.rect&&n.exhibitors.find(l=>l.logoInBooth&&l.logo);return e?[n.id,{preferred:d(e.logo),fallback:e.logo}]:null}).filter(Boolean))}export function getLayerIcons(t){const n=h(f(t)).select(`[data-layer="${t.name}"]`);return(window.__fpVersion>5?n.selectAll(":scope > image, :scope > g:not([data-layer]) image").nodes():n.selectAll(":scope > g[data-is-editable='false'] image").nodes()).filter(Boolean)}export function createBoothImg(t,n){const e=t.rect,l=e.h?e.w/e.h:1,i=n.height?n.width/n.height:1;let o,a,r;const s=.9;l>i?(a=e.h*s,o=a*i):(o=e.w*s,a=o/i);const c=t.rotate||0;i>=2&&!c&&e.h>=e.w*2?(a=e.w*s,o=a*i,r=-90):r=-c*180/Math.PI,o>e.w&&(o=e.w,a=o/i),a>e.h&&(a=e.h,o=a*i);const g=e.cx-o/2,m=e.cy-a/2;return{name:t.slug,bounds:{x:g,y:m,width:o,height:a,angle:r},htmlImage:n,booth:t}}
@@ -1,4 +1,4 @@
1
- import { RouteLine, RoutePoint } from "../../../../../utils/wayfinding";
1
+ import type { RouteLine, RoutePoint } from "../../../../../wayfinding/types";
2
2
  import { CurrentPosition } from "../../../../../store/RouteStore";
3
3
  import type { RouteSnapResult } from "./types";
4
4
  type Rect = {
@@ -1 +1 @@
1
- import{RoutePoint as E}from"../../../../../utils/wayfinding";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 w(t,n){let p=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(p+a>=n){const d=(n-p)/a,f=e.p0.x+(e.p1.x-e.p0.x)*d,x=e.p0.y+(e.p1.y-e.p0.y)*d;return{point:new E(e.p0.layer,f,x),line:e}}p+=a}}const c=t[t.length-1];return{point:new E(c.p0.layer,c.p1.x,c.p1.y),line:c}}export function snapPositionToRoute(t,n,p){const c=n.length;if(!c)return{snapped:!1};const{snapThreshold:e,toPoint:a,minRemainingUnits:d=.5,fromPoint:f,fromRect:x,toRect:A}=p,i=t.z!=null?String(t.z):null;let M=1/0,u=null,m=0,I=i==null;for(let s=0;s<c;s++){const r=n[s],{p0:o,p1:y}=r,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){m+=F;continue}I=!0;const U=((t.x-o.x)*g+(t.y-o.y)*P)/D,R=Math.max(0,Math.min(1,U)),j=o.x+g*R,k=o.y+P*R,H=Math.hypot(t.x-j,t.y-k);H<M&&(M=H,u={segmentIndex:s,t:R,distanceFromPolylineStart:m+F*R}),m+=F}if(i!=null&&!I)return{snapped:!1};const l=m,b=n[0].p0,q=n[c-1].p1,_=Math.hypot(a.x-b.x,a.y-b.y),L=Math.hypot(a.x-q.x,a.y-q.y),S=_<=L,T=Math.min(d,l),v=new E((i??n[0].p0.layer).toString(),t.x,t.y);if(x&&f&&(i==null||String(f.layer)===i)&&O(v,x)){const s=l,r=S?s:l-s,o=w(n,r);return{snapped:!0,snappedPoint:o.point,snappedLine:o.line}}if(A&&(i==null||String(a.layer)===i)&&O(v,A)){const s=T,r=l-s,y=w(n,S?s:r);return{snapped:!0,snappedPoint:y.point,snappedLine:y.line}}if(!u||M>e)return{snapped:!1};let h=S?u.distanceFromPolylineStart:l-u.distanceFromPolylineStart;h<T&&(h=T);const N=l-h,z=w(n,S?h:N);return{snapped:!0,snappedPoint:z.point,snappedLine:z.line}}
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,4 +1,4 @@
1
- import { RouteLine, RoutePoint } from "../../../../../utils/wayfinding";
1
+ import type { RouteLine, RoutePoint } from "../../../../../wayfinding/types";
2
2
  export declare function splitRouteByPoint(routeLines: RouteLine[], snapPoint: RoutePoint): {
3
3
  passed: RouteLine[];
4
4
  remaining: RouteLine[];
@@ -1 +1 @@
1
- import{RoutePoint as E}from"../../../../../utils/wayfinding";export function splitRouteByPoint(t,c){let n=-1,e=0,a=1/0;for(let l=0;l<t.length;l++){const p=t[l];if(p.p0.layer!==c.layer)continue;const s=p.p1.x-p.p0.x,y=p.p1.y-p.p0.y,r=s*s+y*y;if(r===0)continue;const x=((c.x-p.p0.x)*s+(c.y-p.p0.y)*y)/r;if(x<-1e-6||x>1+1e-6)continue;const o=Math.min(1,Math.max(0,x)),m=p.p0.x+o*s,g=p.p0.y+o*y,d=(c.x-m)**2+(c.y-g)**2;d<a&&(a=d,n=l,e=o)}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 i=t[n],f=new E(i.p0.layer,i.p0.x+e*(i.p1.x-i.p0.x),i.p0.y+e*(i.p1.y-i.p0.y));return{passed:[...t.slice(0,n),{...i,p1:f}],remaining:[{...i,p0:f},...t.slice(n+1)]}}
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,4 +1,4 @@
1
- import { RouteLine, RoutePoint } from "../../../../../utils/wayfinding";
1
+ import type { RouteLine, RoutePoint } from "../../../../../wayfinding/types";
2
2
  export type RouteSnapResult = {
3
3
  snapped: false;
4
4
  } | {
@@ -1,4 +1,4 @@
1
- import { RouteLine, RoutePoint } from "../../../../../utils/wayfinding";
1
+ import type { RouteLine, RoutePoint } from "../../../../../wayfinding/types";
2
2
  import { Booth } from "../../../../../store/BoothStore";
3
3
  export declare function distancePointToRouteOnLayer(point: RoutePoint, lines: RouteLine[]): number;
4
4
  export declare function findBoothInRadius<T extends Booth>(position: {
@@ -1,10 +1,8 @@
1
- import { Renderer, SceneDef } from "@expofp/renderer";
1
+ import { RendererService } from "../../../renderer";
2
2
  export interface BuildRouteParams {
3
3
  enabled: boolean;
4
- renderer: Renderer;
5
- scene: SceneDef;
6
- initialScale: number;
4
+ rendererService: RendererService;
7
5
  cb?: () => void;
8
6
  }
9
- export declare function useBuildRoute({ enabled, renderer, scene, initialScale }: BuildRouteParams): void;
7
+ export declare function useBuildRoute({ enabled, rendererService }: BuildRouteParams): void;
10
8
  //# sourceMappingURL=useBuildRoute.d.ts.map
@@ -1,7 +1,7 @@
1
- import{useCallback as _,useEffect as $,useMemo as w,useRef as E}from"react";import{BUILD_ROUTE_DOTS as A,BUILD_ROUTE_LINES as K}from"./trafficLayers";import{createCircleCanvas as R,getBounds as C}from"../drawing/config/engine-core/canvases";import{UpdateQueue as T}from"./UpdateQueue";const O=49,D=`hsl(257, 76%, ${O}%)`,H=`hsl(339.903, 82%, ${O}%)`,Y=`hsl(257, 76%, ${Math.round(O*1.82)}%)`,I=4,B=I,b="U",N="R",M="S",U="P";class J{_state=[[]];index=0;pointHashSet=new Set;locked=!1;storageKey="expofp_build_route_state";_selected=0;get points(){return this._state[this.index]}set points(t){this._state.push(t),this.setIndex(),this.save()}setIndex(){this.index=Math.max(this._state.length-1,0)}genPointHash(t){return`${t.x},${t.y}`}add(t){const f=this.genPointHash(t);this.pointHashSet.has(f)||(this.pointHashSet.add(f),this.points=[...this.points,t])}undo(){this.index&&(this._state.pop(),this.setIndex(),this.save(),this.select(this.points.length-1))}execute(t){try{if(this.locked)return;this.locked=!0,t()}finally{requestAnimationFrame(()=>{this.locked=!1})}}log(t,f=12){console.log(`%c${t}`,`color: black; font-size: ${f}px; background: LemonChiffon;`)}instruct(){this.log(`How to Build a Route:
1
+ import{useCallback as x,useEffect as M,useMemo as _,useRef as v}from"react";import{BUILD_ROUTE_DOTS as U,BUILD_ROUTE_LINES as $}from"./trafficLayers";import{createCircleCanvas as S,getBounds as I}from"../../../renderer/engine-core/canvases";import{UpdateQueue as A}from"./UpdateQueue";const E=49,C=`hsl(257, 76%, ${E}%)`,K=`hsl(339.903, 82%, ${E}%)`,T=`hsl(257, 76%, ${Math.round(E*1.82)}%)`,O=4,H=O,R="U",D="R",b="S",N="P";class Y{_state=[[]];index=0;pointHashSet=new Set;locked=!1;storageKey="expofp_build_route_state";_selected=0;get points(){return this._state[this.index]}set points(t){this._state.push(t),this.setIndex(),this.save()}setIndex(){this.index=Math.max(this._state.length-1,0)}genPointHash(t){return`${t.x},${t.y}`}add(t){const a=this.genPointHash(t);this.pointHashSet.has(a)||(this.pointHashSet.add(a),this.points=[...this.points,t])}undo(){this.index&&(this._state.pop(),this.setIndex(),this.save(),this.select(this.points.length-1))}execute(t){try{if(this.locked)return;this.locked=!0,t()}finally{requestAnimationFrame(()=>{this.locked=!1})}}log(t,a=12){console.log(`%c${t}`,`color: black; font-size: ${a}px; background: LemonChiffon;`)}instruct(){this.log(`How to Build a Route:
2
2
  Add Point: Click on the map.
3
- Apply Smoothing: Press ${N}.
4
- Apply Simplification: Press ${M}.
5
- Undo: Press ${b}.
6
- Enable/Disable Preview: Press ${U}.
7
- `,16)}applyChaikinSmoothing(t,f,x){let i=[];if(x>=1&&t.length>=2){i=[t[0]];for(let c=1;c<t.length;c++){const r=t[c-1],u=t[c];for(let e=1;e<=x;e++){const n=e/(x+1);i.push({x:r.x+(u.x-r.x)*n,y:r.y+(u.y-r.y)*n})}i.push(u)}}else i=t.slice();for(let c=0;c<f&&!(i.length<2);c++){const r=[{...i[0]}];for(let u=1;u<i.length;u++){const e=i[u-1],n=i[u];r.push({x:.75*e.x+.25*n.x,y:.75*e.y+.25*n.y}),r.push({x:.25*e.x+.75*n.x,y:.25*e.y+.75*n.y})}r.push({...i[i.length-1]}),i=r}return i}applySmoothing(){this.points.length<3||(this.points=this.applyChaikinSmoothing(this.points,1,0),this.select(this.points.length-1))}save(){try{this.points.length?sessionStorage.setItem(this.storageKey,JSON.stringify(this.points)):sessionStorage.removeItem(this.storageKey)}catch(t){console.warn(t)}}restore(){try{const t=sessionStorage.getItem(this.storageKey);if(!t)return;const f=JSON.parse(t);if(!Array.isArray(f))return;f.forEach(x=>this.add(x)),this.select(this.points.length-1)}catch(t){console.warn(t)}}topologyPreservingSimplify(t,f){if(t.length<=2)return t.map(e=>({...e}));const x=(e,n,p)=>{const l=e.x,y=e.y,a=n.x,h=n.y,s=p.x,o=p.y,d=Math.abs((o-h)*l-(s-a)*y+s*h-o*a),m=Math.sqrt((o-h)**2+(s-a)**2);return d/(m||1e-10)},i=(e,n,p,l)=>{const y=(a,h,s)=>(s.y-a.y)*(h.x-a.x)-(h.y-a.y)*(s.x-a.x);return y(e,p,l)*y(n,p,l)<0&&y(p,e,n)*y(l,e,n)<0},c=new Array(t.length).fill(!1);c[0]=c[c.length-1]=!0;const r=[],u=(e,n)=>{if(n<=e+1)return;const p=t[e],l=t[n];let y=0,a=0;for(let h=e+1;h<n;h++){const s=x(t[h],p,l);s>y&&(y=s,a=h)}if(y>f){const h=t[a];let s=!0;for(let o=0;o<r.length-1;o++)if(i(r[o],r[o+1],p,h)||i(r[o],r[o+1],h,l)){s=!1;break}s&&(c[a]=!0,u(e,a),u(a,n))}};return u(0,t.length-1),t.filter((e,n)=>c[n])}applySimplification(){this.points=this.topologyPreservingSimplify(this.points,.5),this.select(this.points.length-1)}get selected(){return this._selected}select(t){this._selected=Math.max(0,Math.min(t,this.points.length-1))}}export function useBuildRoute({enabled:S,renderer:t,scene:f,initialScale:x}){const i=E(!1),c=E(),r=w(()=>R(I,D),[]),u=w(()=>R(I,H),[]),e=w(()=>new J,[]),n=E(new T),p=w(()=>{if(!f)return{};const s=f.rootLayer.children,o=s.find(m=>m.name===K),d=s.find(m=>m.name===A);return{linesLayer:o,pointsLayer:d}},[f]),l=_(()=>{if(!t||!p||!r||!u)return;const{linesLayer:s,pointsLayer:o}=p;if(!s||!o)return;const d=e.points,m=i.current;m?o.children.length=0:o.children=d.map(({x:g,y:L},k)=>{const P=k==e.selected?u:r;return{source:P,bounds:C(g,L,P.width,P.height,c.current)}});const v=[];for(let g=1;g<d.length;g++){const L=d[g-1],k=d[g];v.push({points:[L,k],color:m?D:Y,width:B})}v.length?s.children=v:s.children.length=0,n.current.add(()=>t.update(o,s)),e.instruct(),e.log(JSON.stringify(e.points))},[t,e,p,r,u]),y=_(s=>{const o=s.key.toUpperCase();e.execute(()=>{switch(o){case b:s.preventDefault(),e.undo(),i.current=!1,l();break;case N:s.preventDefault(),e.applySmoothing(),i.current=!1,l();break;case M:s.preventDefault(),e.applySimplification(),i.current=!1,l();break;case U:s.preventDefault(),i.current=!i.current,l();break}})},[e,l]),a=_(s=>{if(!t||!p)return;const{pointsLayer:o}=p;o&&(c.current=s,e.execute(()=>{const d=o.children,m=[];for(let v=0;v<d.length;v++){const g=d[v];g.bounds=C(g.bounds.center.x,g.bounds.center.y,g.source.width,g.source.height,c.current),m.push(g)}n.current.add(()=>t.update(...m))}))},[t,p,e]),h=_(s=>{e.execute(()=>{e.add({x:s.point.x,y:s.point.y}),e.select(e.points.length-1),l()})},[e,l]);$(()=>{if(S)return c.current=x||window.devicePixelRatio,e.execute(()=>{e.restore(),l()}),t.events.addEventListener("pointer:click",h),t.events.addEventListener("viewport:ptscale",a),window.addEventListener("keyup",y),()=>{window.removeEventListener("keyup",y),t.events.removeEventListener("pointer:click",h),t.events.removeEventListener("viewport:ptscale",a),n.current.destroy()}},[S,t,x,e,l,h,a,y])}
3
+ Apply Smoothing: Press ${D}.
4
+ Apply Simplification: Press ${b}.
5
+ Undo: Press ${R}.
6
+ Enable/Disable Preview: Press ${N}.
7
+ `,16)}applyChaikinSmoothing(t,a,d){let c=[];if(d>=1&&t.length>=2){c=[t[0]];for(let h=1;h<t.length;h++){const s=t[h-1],u=t[h];for(let o=1;o<=d;o++){const n=o/(d+1);c.push({x:s.x+(u.x-s.x)*n,y:s.y+(u.y-s.y)*n})}c.push(u)}}else c=t.slice();for(let h=0;h<a&&!(c.length<2);h++){const s=[{...c[0]}];for(let u=1;u<c.length;u++){const o=c[u-1],n=c[u];s.push({x:.75*o.x+.25*n.x,y:.75*o.y+.25*n.y}),s.push({x:.25*o.x+.75*n.x,y:.25*o.y+.75*n.y})}s.push({...c[c.length-1]}),c=s}return c}applySmoothing(){this.points.length<3||(this.points=this.applyChaikinSmoothing(this.points,1,0),this.select(this.points.length-1))}save(){try{this.points.length?sessionStorage.setItem(this.storageKey,JSON.stringify(this.points)):sessionStorage.removeItem(this.storageKey)}catch(t){console.warn(t)}}restore(){try{const t=sessionStorage.getItem(this.storageKey);if(!t)return;const a=JSON.parse(t);if(!Array.isArray(a))return;a.forEach(d=>this.add(d)),this.select(this.points.length-1)}catch(t){console.warn(t)}}topologyPreservingSimplify(t,a){if(t.length<=2)return t.map(o=>({...o}));const d=(o,n,y)=>{const g=o.x,f=o.y,e=n.x,i=n.y,r=y.x,l=y.y,m=Math.abs((l-i)*g-(r-e)*f+r*i-l*e),p=Math.sqrt((l-i)**2+(r-e)**2);return m/(p||1e-10)},c=(o,n,y,g)=>{const f=(e,i,r)=>(r.y-e.y)*(i.x-e.x)-(i.y-e.y)*(r.x-e.x);return f(o,y,g)*f(n,y,g)<0&&f(y,o,n)*f(g,o,n)<0},h=new Array(t.length).fill(!1);h[0]=h[h.length-1]=!0;const s=[],u=(o,n)=>{if(n<=o+1)return;const y=t[o],g=t[n];let f=0,e=0;for(let i=o+1;i<n;i++){const r=d(t[i],y,g);r>f&&(f=r,e=i)}if(f>a){const i=t[e];let r=!0;for(let l=0;l<s.length-1;l++)if(c(s[l],s[l+1],y,i)||c(s[l],s[l+1],i,g)){r=!1;break}r&&(h[e]=!0,u(o,e),u(e,n))}};return u(0,t.length-1),t.filter((o,n)=>h[n])}applySimplification(){this.points=this.topologyPreservingSimplify(this.points,.5),this.select(this.points.length-1)}get selected(){return this._selected}select(t){this._selected=Math.max(0,Math.min(t,this.points.length-1))}}export function useBuildRoute({enabled:w,rendererService:t}){const a=v(!1),d=v(),c=_(()=>S(O,C),[]),h=_(()=>S(O,K),[]),s=_(()=>new Y,[]),u=v(new A),o=_(()=>{if(!t.scene)return{};const e=t.scene.rootLayer.children,i=e.find(l=>l.name===$),r=e.find(l=>l.name===U);return{linesLayer:i,pointsLayer:r}},[t.scene]),n=x(()=>{if(!t?.renderer||!o||!c||!h)return;const{linesLayer:e,pointsLayer:i}=o;if(!e||!i)return;const r=s.points,l=a.current;l?i.children.length=0:i.children=r.map(({x:p,y:L},k)=>{const P=k==s.selected?h:c;return{source:P,bounds:I(p,L,P.width,P.height,d.current)}});const m=[];for(let p=1;p<r.length;p++){const L=r[p-1],k=r[p];m.push({points:[L,k],color:l?C:T,width:H})}m.length?e.children=m:e.children.length=0,u.current.add(()=>t.update(i,e)),s.instruct(),s.log(JSON.stringify(s.points))},[t,s,o,c,h]),y=x(e=>{const i=e.key.toUpperCase();s.execute(()=>{switch(i){case R:e.preventDefault(),s.undo(),a.current=!1,n();break;case D:e.preventDefault(),s.applySmoothing(),a.current=!1,n();break;case b:e.preventDefault(),s.applySimplification(),a.current=!1,n();break;case N:e.preventDefault(),a.current=!a.current,n();break}})},[s,n]),g=x(e=>{if(!t?.renderer||!o)return;const{pointsLayer:i}=o;i&&(d.current=e,s.execute(()=>{const r=i.children,l=[];for(let m=0;m<r.length;m++){const p=r[m];p.bounds=I(p.bounds.center.x,p.bounds.center.y,p.source.width,p.source.height,d.current),l.push(p)}u.current.add(()=>t.update(...l))}))},[t,o,s]),f=x(e=>{s.execute(()=>{s.add({x:e.point.x,y:e.point.y}),s.select(s.points.length-1),n()})},[s,n]);M(()=>{const e=t.renderer;if(!(!w||!e))return d.current=t.getCameraState().ptScale||window.devicePixelRatio,s.execute(()=>{s.restore(),n()}),e.events.addEventListener("pointer:click",f),e.events.addEventListener("viewport:ptscale",g),window.addEventListener("keyup",y),()=>{window.removeEventListener("keyup",y),e.events.removeEventListener("pointer:click",f),e.events.removeEventListener("viewport:ptscale",g),u.current.destroy()}},[w,t,s,n,f,g,y])}
@@ -1,11 +1,9 @@
1
- import { Renderer, SceneDef } from "@expofp/renderer";
1
+ import { RendererService } from "../../../renderer";
2
2
  export interface ManageTrafficParams {
3
3
  permission: boolean;
4
- renderer: Renderer;
5
- scene: SceneDef;
4
+ rendererService: RendererService;
6
5
  dataJsonUrl: string;
7
6
  websocketUrl: string;
8
- initialScale: number;
9
7
  }
10
- export declare function useManageTraffic({ permission, renderer, scene, dataJsonUrl, websocketUrl, initialScale }: ManageTrafficParams): void;
8
+ export declare function useManageTraffic({ permission, rendererService, dataJsonUrl, websocketUrl }: ManageTrafficParams): void;
11
9
  //# sourceMappingURL=useManageTraffic.d.ts.map
@@ -1 +1 @@
1
- import{useEffect as wt,useRef as M}from"react";import{getBounds as k}from"../drawing/config/engine-core";import{getRouteLayerRegex as xt,getRouteStopLayerRegex as Et,TRAFFIC_VEHICLES as It}from"./trafficLayers";import{loadImage as Mt}from"../../../utils/loadImage";import{createImageCanvas as vt}from"../drawing/config/canvases";import{UpdateQueue as St}from"./UpdateQueue";import Lt from"../../../tools/base-runtime-url";import{toRadians as bt}from"../../../utils/toRadians";const nt=2,Rt=nt*3.5,G=nt*12,ut=G*.7,Ft=8,At="transport_locations",Tt=150,ot="#a4aab6",lt=1e3,Pt=2e4,ht=500;export function useManageTraffic({permission:t,renderer:o,scene:c,dataJsonUrl:r,websocketUrl:e,initialScale:i}){const n=M(window.devicePixelRatio),s=M(new Map),d=M(new Map),h=M(),I=M(),L=M(performance.now()),b=M(1),y=M(new St),x=M(new Map),g=M(),a=M(lt),P=M(new Map),C=M();wt(()=>{async function R(){try{if(!t||!o||!c)return;let f;try{f=await(await fetch(r,{method:"GET",headers:{"Content-Type":"application/json"}})).json()}catch(u){console.warn("useManageTraffic failed to get JSON",u)}if(!f||f?.disabled||f?.error)return;n.current=dt(i);const Z=new Map(f.routes.map(({id:u,color:m})=>[u,m])),V=c.rootLayer.children,W=new Map;Z.forEach(u=>{W.set(u,_t({radius:Rt,color:u,scale:window.devicePixelRatio}))});const z=xt(),Y=V.filter(u=>z.test(u.name)),B=Et(),U=V.filter(u=>B.test(u.name));f.routes.slice(0,Y.length).forEach(({id:u,color:m,path:A,stops:v,hiddenPoints:p},w)=>{x.current.set(u,A);const E=Y[w];if(E){const O=new Map(p?.map(l=>[rt(l),l])??[]);for(let l=1;l<A.length;l++){const D=A[l-1],H=A[l];O.has(rt(D))||O.has(rt(H))||E.children.push({points:[D,H],color:m,width:nt})}E.children.length&&y.current.add(()=>o.update(E))}const N=U[w];if(N&&v?.length){const O=W.get(m);v.forEach(l=>{N.children.push({source:O,bounds:k(l.x,l.y,O.width,O.height,n.current)})}),N.children.length&&y.current.add(()=>o.update(N))}});const $=V.find(u=>u.name===It),J=new Map;g.current=u=>{try{n.current=dt(u);const m=[];for(let v=0;v<U.length;v++){const p=U[v].children;for(let w=0;w<p.length;w++){const E=p[w];E.bounds=k(E.bounds.center.x,E.bounds.center.y,E.source.width,E.source.height,n.current,E.bounds.rotation),m.push(E)}}const A=[...s.current.values()];for(let v=0;v<A.length;v++){const p=A[v];p.bounds=k(p.bounds.center.x,p.bounds.center.y,p.source.width,p.source.height,n.current,p.bounds.rotation)}y.current.add(()=>o.update(...m,...A))}catch(m){console.error("ptscale",m)}},o.events.addEventListener("viewport:ptscale",g.current),Z.forEach((u,m)=>{J.set(m,ft({id:m,width:G,height:G,color:u,scale:window.devicePixelRatio}))}),J.set(ot,ft({id:"orphan",width:G,height:G,color:ot,scale:window.devicePixelRatio}));let j=null;try{const u=await Mt(`${Lt}icons/bus-white.svg`);j=vt(u,ut,ut,window.devicePixelRatio)}catch(u){console.error(u)}I.current=u=>{try{const m=JSON.parse(u.data);if(m.type!==At)return;const A=u.timeStamp||performance.now();b.current=Math.round(A-L.current),L.current=A;const v=Math.max(b.current??ht,ht),p=d.current,w=s.current,E=$.children,N=y.current;let O=!1;m.data.forEach(({id:l,x:D,y:H,route_id:st,hidden:yt})=>{if(p.has(l)&&(p.get(l)?.(),p.delete(l)),yt&&w.has(l)&&w.has(Q(l))){const T=w.get(l);T.hidden=!0;const S=w.get(Q(l));S.hidden=!0,N.add(()=>o.update(T,S));return}if(P.current.set(l,performance.now()),!w.has(l)){const T=J.get(st)||J.get(ot),S={id:l,source:T,bounds:k(D,H,T.width,T.height,n.current,0)};if(w.set(l,S),j){const q=Q(l),at={id:q,source:j,bounds:k(D,H,j.width,j.height,n.current,0)};j.setAttribute("id",q),w.set(q,at),E.push(S,at)}else E.push(S);O=!0;return}const K=w.get(l),it=w.get(Q(l)),pt=K.bounds.center,et=Ot(pt,{x:D,y:H},x.current.get(st));if(et.reduce((T,S,q)=>q===0?T:T+ct(et[q-1],S),0)>=Tt||document.hidden)gt({renderer:o,updateQueue:N,vehicle:K,vehicleFinery:it,x:D,y:H,scale:n.current,angle:Ct(K.bounds.center,{x:D,y:H})});else{const T=Dt(et,v,S=>{gt({renderer:o,updateQueue:N,vehicle:K,vehicleFinery:it,x:S.x,y:S.y,scale:n.current,angle:S.angle})});p.set(l,T)}}),O&&N.add(()=>o.update($))}catch(m){console.error("handleSocketMessage",m)}},F(),X(f.config?(Number(f.config.vehicle_inactive_interval)||20)*1e3:Pt)}catch(f){console.warn(f)}}R();function F(){h.current?.readyState===WebSocket.OPEN||h.current?.readyState===WebSocket.CONNECTING||(h.current=new WebSocket(e),h.current.onmessage=I.current,h.current.onopen=()=>{a.current=lt},h.current.onclose=()=>{if(!navigator.onLine)return;setTimeout(F,a.current);const f=3e4;a.current=Math.min(a.current*2,f)})}function _(){F()}window.addEventListener("online",_);function X(f){clearInterval(C.current),C.current=window.setInterval(()=>{const Z=performance.now(),V=[],W=[];P.current.forEach((z,Y)=>{if(Z-z<f)return;const B=s.current.get(Y);B&&(B.hidden=!0,W.push(B),V.push(Y));const U=Q(Y),$=s.current.get(U);$&&($.hidden=!0,W.push($),V.push(U))}),W.length&&y.current.add(()=>o.update(...W)),V.forEach(z=>P.current.delete(z))},f)}return()=>{g.current&&o.events.removeEventListener("viewport:ptscale",g.current),d.current.forEach(f=>f?.()),d.current.clear(),s.current.clear(),y.current.destroy(),window.removeEventListener("online",_),clearInterval(C.current)}},[t,o,c,r,e])}function dt(t){return Math.min(t||window.devicePixelRatio,Ft)}function Ct(t,o){return Math.atan2(o.y-t.y,o.x-t.x)}function _t({radius:t,scale:o,color:c}){const r=document.createElement("canvas"),e=r.getContext("2d");e.imageSmoothingEnabled=!1;const i=Math.ceil(t*2*o),n=i/2,s=t*.78,d=t*.33;return r.width=i,r.height=i,e.translate(n,n),e.scale(o,o),e.beginPath(),e.arc(0,0,t,0,2*Math.PI),e.fillStyle="#FFFFFF",e.fill(),e.beginPath(),e.arc(0,0,s,0,2*Math.PI),e.fillStyle=c,e.fill(),e.beginPath(),e.arc(0,0,d,0,2*Math.PI),e.fillStyle="#FFFFFF",e.fill(),r}function ft({id:t,width:o,height:c,color:r,scale:e}){const i=2*e,n=o/2*e,s=c*e,d=.6,h=.01,I=s*d,L=s,b=8*e,y=L+i+I/2+b*2,x=n*2+I+i+b*2,g=document.createElement("canvas");g.setAttribute("id",t),g.width=y,g.height=x;const a=g.getContext("2d"),P=y/2,C=x/2;a.save(),a.translate(P,C),a.rotate(-Math.PI/2),a.translate(-P,-C);const R=P,F=C-L/2+n,_=F+I;return a.shadowColor="rgba(16, 24, 40, 0.2)",a.shadowBlur=b/2,a.beginPath(),a.arc(R,F,n,Math.PI,0,!1),a.bezierCurveTo(R+n,F+s*.3,R+h*n,_,R,_),a.bezierCurveTo(R-h*n,_,R-n,F+s*.3,R-n,F),a.closePath(),a.fillStyle=r,a.fill(),a.strokeStyle="#FFFFFF",a.lineWidth=i,a.stroke(),a.restore(),g}function ct(t,o){return Math.hypot(t.x-o.x,t.y-o.y)}function Q(t){return`${t}_finery`}function gt({renderer:t,updateQueue:o,vehicle:c,vehicleFinery:r,x:e,y:i,scale:n,angle:s}){if(c.bounds=k(e,i,c.source.width,c.source.height,n,s),c.hidden=!1,r){const d=t.controls.getCameraState();r.bounds=k(e,i,r.source.width,r.source.height,n,bt(d.roll||0)),r.hidden=!1,o.add(()=>t.update(r,c))}else o.add(()=>t.update(c))}function tt(t,o,c){return{x:t.x+(o.x-t.x)*c,y:t.y+(o.y-t.y)*c}}function mt(t,o){let c=1/0,r={index:0,t:0};for(let e=0;e<o.length-1;e++){const i=o[e],n=o[e+1],s=n.x-i.x,d=n.y-i.y,h=s*s+d*d,I=h?((t.x-i.x)*s+(t.y-i.y)*d)/h:0,L=Math.max(0,Math.min(1,I)),b=tt(i,n,L),y=ct(t,b);y<c&&(c=y,r={index:e,t:L})}return r}function Nt(t,o,c){const r=ct(t,o),e=Math.max(2,Math.ceil(r/c)+1),i=[];for(let n=0;n<e;n++){const s=n/(e-1),d=tt(t,o,s);i.push({x:d.x,y:d.y})}return i}function Ot(t,o,c){if(!c||!c.length)return Nt(t,o,10);const r=mt(t,c),e=mt(o,c),i=[],n=s=>i.push({x:s.x,y:s.y});r.index+1<c.length?n(tt(c[r.index],c[r.index+1],r.t)):n(c[r.index]);for(let s=r.index+1;s<=e.index&&s<c.length;s++)n(c[s]);return e.index+1<c.length?n(tt(c[e.index],c[e.index+1],e.t)):n(c[e.index]),i}function Dt(t,o,c,r){if(t.length<2)return()=>{};let e=null,i;const n=[];let s=0;for(let h=0;h<t.length-1;h++){const I=Math.hypot(t[h+1].x-t[h].x,t[h+1].y-t[h].y);n.push(I),s+=I}const d=h=>{e||(e=h);const I=h-e,L=Math.min(I/o,1),b=L*s;let y=0,x=0;for(;x<n.length&&y+n[x]<b;)y+=n[x],x++;x>=n.length&&(x=n.length-1);const g=t[x],a=t[Math.min(x+1,t.length-1)],P=n[x]||0,C=P===0?0:(b-y)/P,R=g.x+(a.x-g.x)*C,F=g.y+(a.y-g.y)*C,_=a.x-g.x,X=a.y-g.y,f=_===0&&X===0?0:Math.atan2(X,_);c({x:R,y:F,angle:f}),L<1?i=requestAnimationFrame(d):r&&r()};return i=requestAnimationFrame(d),()=>{i&&cancelAnimationFrame(i)}}function rt(t){return`${t.x},${t.y}`}
1
+ import{useEffect as yt,useRef as L}from"react";import{getBounds as k}from"../../../renderer";import{getRouteLayerRegex as pt,getRouteStopLayerRegex as wt,TRAFFIC_VEHICLES as xt}from"./trafficLayers";import{loadImage as Et}from"../../../utils/loadImage";import{createImageCanvas as It}from"../drawing/config/canvases";import{UpdateQueue as Mt}from"./UpdateQueue";import Lt from"../../../tools/base-runtime-url";import{toRadians as bt}from"../../../utils/math";const tt=2,Rt=tt*3.5,G=tt*12,at=G*.7,Ft=8,At="transport_locations",Tt=150,et="#a4aab6",it=1e3,Pt=2e4,ut=500;export function useManageTraffic({permission:e,rendererService:n,dataJsonUrl:c,websocketUrl:a}){const t=L(window.devicePixelRatio),s=L(new Map),o=L(new Map),r=L(),d=L(),f=L(performance.now()),M=L(1),x=L(new Mt),A=L(new Map),I=L(),g=L(it),y=L(new Map),i=L();yt(()=>{async function O(){if(!(!e||!n.scene))try{let h;try{h=await(await fetch(c,{method:"GET",headers:{"Content-Type":"application/json"}})).json()}catch(u){console.warn("useManageTraffic failed to get JSON",u)}if(!h||h?.disabled||h?.error)return;t.current=lt(n.getCameraState().ptScale);const V=new Map(h.routes.map(({id:u,color:m})=>[u,m])),_=n.scene.rootLayer.children,W=new Map;V.forEach(u=>{W.set(u,Ct({radius:Rt,color:u,scale:window.devicePixelRatio}))});const z=pt(),Y=_.filter(u=>z.test(u.name)),B=wt(),U=_.filter(u=>B.test(u.name));h.routes.slice(0,Y.length).forEach(({id:u,color:m,path:T,stops:R,hiddenPoints:p},w)=>{A.current.set(u,T);const E=Y[w];if(E){const S=new Map(p?.map(l=>[ot(l),l])??[]);for(let l=1;l<T.length;l++){const D=T[l-1],H=T[l];S.has(ot(D))||S.has(ot(H))||E.children.push({points:[D,H],color:m,width:tt})}E.children.length&&x.current.add(()=>n.update(E))}const N=U[w];if(N&&R?.length){const S=W.get(m);R.forEach(l=>{N.children.push({source:S,bounds:k(l.x,l.y,S.width,S.height,t.current)})}),N.children.length&&x.current.add(()=>n.update(N))}});const $=_.find(u=>u.name===xt),X=new Map;I.current=u=>{try{t.current=lt(u);const m=[];for(let R=0;R<U.length;R++){const p=U[R].children;for(let w=0;w<p.length;w++){const E=p[w];E.bounds=k(E.bounds.center.x,E.bounds.center.y,E.source.width,E.source.height,t.current,E.bounds.rotation),m.push(E)}}const T=[...s.current.values()];for(let R=0;R<T.length;R++){const p=T[R];p.bounds=k(p.bounds.center.x,p.bounds.center.y,p.source.width,p.source.height,t.current,p.bounds.rotation)}x.current.add(()=>n.update(...m,...T))}catch(m){console.error("ptscale",m)}},n.renderer.events.addEventListener("viewport:ptscale",I.current),V.forEach((u,m)=>{X.set(m,ht({id:m,width:G,height:G,color:u,scale:window.devicePixelRatio}))}),X.set(et,ht({id:"orphan",width:G,height:G,color:et,scale:window.devicePixelRatio}));let j=null;try{const u=await Et(`${Lt}icons/bus-white.svg`);j=It(u,at,at,window.devicePixelRatio)}catch(u){console.error(u)}d.current=u=>{try{const m=JSON.parse(u.data);if(m.type!==At)return;const T=u.timeStamp||performance.now();M.current=Math.round(T-f.current),f.current=T;const R=Math.max(M.current??ut,ut),p=o.current,w=s.current,E=$.children,N=x.current;let S=!1;m.data.forEach(({id:l,x:D,y:H,route_id:ct,hidden:gt})=>{if(p.has(l)&&(p.get(l)?.(),p.delete(l)),gt&&w.has(l)&&w.has(Q(l))){const P=w.get(l);P.hidden=!0;const F=w.get(Q(l));F.hidden=!0,N.add(()=>n.update(P,F));return}if(y.current.set(l,performance.now()),!w.has(l)){const P=X.get(ct)||X.get(et),F={id:l,source:P,bounds:k(D,H,P.width,P.height,t.current,0)};if(w.set(l,F),j){const q=Q(l),rt={id:q,source:j,bounds:k(D,H,j.width,j.height,t.current,0)};j.setAttribute("id",q),w.set(q,rt),E.push(F,rt)}else E.push(F);S=!0;return}const Z=w.get(l),st=w.get(Q(l)),mt=Z.bounds.center,K=Nt(mt,{x:D,y:H},A.current.get(ct));if(K.reduce((P,F,q)=>q===0?P:P+nt(K[q-1],F),0)>=Tt||document.hidden)dt({rendererService:n,updateQueue:N,vehicle:Z,vehicleFinery:st,x:D,y:H,scale:t.current,angle:vt(Z.bounds.center,{x:D,y:H})});else{const P=St(K,R,F=>{dt({rendererService:n,updateQueue:N,vehicle:Z,vehicleFinery:st,x:F.x,y:F.y,scale:t.current,angle:F.angle})});p.set(l,P)}}),S&&N.add(()=>n.update($))}catch(m){console.error("handleSocketMessage",m)}},v(),C(h.config?(Number(h.config.vehicle_inactive_interval)||20)*1e3:Pt)}catch(h){console.warn(h)}}O();function v(){r.current?.readyState===WebSocket.OPEN||r.current?.readyState===WebSocket.CONNECTING||(r.current=new WebSocket(a),r.current.onmessage=d.current,r.current.onopen=()=>{g.current=it},r.current.onclose=()=>{if(!navigator.onLine)return;setTimeout(v,g.current);const h=3e4;g.current=Math.min(g.current*2,h)})}function b(){v()}window.addEventListener("online",b);function C(h){clearInterval(i.current),i.current=window.setInterval(()=>{const V=performance.now(),_=[],W=[];y.current.forEach((z,Y)=>{if(V-z<h)return;const B=s.current.get(Y);B&&(B.hidden=!0,W.push(B),_.push(Y));const U=Q(Y),$=s.current.get(U);$&&($.hidden=!0,W.push($),_.push(U))}),W.length&&x.current.add(()=>n.update(...W)),_.forEach(z=>y.current.delete(z))},h)}return()=>{I.current&&n.renderer&&n.renderer.events.removeEventListener("viewport:ptscale",I.current),o.current.forEach(h=>h?.()),o.current.clear(),s.current.clear(),x.current.destroy(),window.removeEventListener("online",b),clearInterval(i.current)}},[e,n,c,a])}function lt(e){return Math.min(e||window.devicePixelRatio,Ft)}function vt(e,n){return Math.atan2(n.y-e.y,n.x-e.x)}function Ct({radius:e,scale:n,color:c}){const a=document.createElement("canvas"),t=a.getContext("2d");t.imageSmoothingEnabled=!1;const s=Math.ceil(e*2*n),o=s/2,r=e*.78,d=e*.33;return a.width=s,a.height=s,t.translate(o,o),t.scale(n,n),t.beginPath(),t.arc(0,0,e,0,2*Math.PI),t.fillStyle="#FFFFFF",t.fill(),t.beginPath(),t.arc(0,0,r,0,2*Math.PI),t.fillStyle=c,t.fill(),t.beginPath(),t.arc(0,0,d,0,2*Math.PI),t.fillStyle="#FFFFFF",t.fill(),a}function ht({id:e,width:n,height:c,color:a,scale:t}){const s=2*t,o=n/2*t,r=c*t,d=.6,f=.01,M=r*d,x=r,A=8*t,I=x+s+M/2+A*2,g=o*2+M+s+A*2,y=document.createElement("canvas");y.setAttribute("id",e),y.width=I,y.height=g;const i=y.getContext("2d"),O=I/2,v=g/2;i.save(),i.translate(O,v),i.rotate(-Math.PI/2),i.translate(-O,-v);const b=O,C=v-x/2+o,h=C+M;return i.shadowColor="rgba(16, 24, 40, 0.2)",i.shadowBlur=A/2,i.beginPath(),i.arc(b,C,o,Math.PI,0,!1),i.bezierCurveTo(b+o,C+r*.3,b+f*o,h,b,h),i.bezierCurveTo(b-f*o,h,b-o,C+r*.3,b-o,C),i.closePath(),i.fillStyle=a,i.fill(),i.strokeStyle="#FFFFFF",i.lineWidth=s,i.stroke(),i.restore(),y}function nt(e,n){return Math.hypot(e.x-n.x,e.y-n.y)}function Q(e){return`${e}_finery`}function dt({rendererService:e,updateQueue:n,vehicle:c,vehicleFinery:a,x:t,y:s,scale:o,angle:r}){if(c.bounds=k(t,s,c.source.width,c.source.height,o,r),c.hidden=!1,a){const d=e.getCameraState();a.bounds=k(t,s,a.source.width,a.source.height,o,bt(d.roll||0)),a.hidden=!1,n.add(()=>e.update(a,c))}else n.add(()=>e.update(c))}function J(e,n,c){return{x:e.x+(n.x-e.x)*c,y:e.y+(n.y-e.y)*c}}function ft(e,n){let c=1/0,a={index:0,t:0};for(let t=0;t<n.length-1;t++){const s=n[t],o=n[t+1],r=o.x-s.x,d=o.y-s.y,f=r*r+d*d,M=f?((e.x-s.x)*r+(e.y-s.y)*d)/f:0,x=Math.max(0,Math.min(1,M)),A=J(s,o,x),I=nt(e,A);I<c&&(c=I,a={index:t,t:x})}return a}function _t(e,n,c){const a=nt(e,n),t=Math.max(2,Math.ceil(a/c)+1),s=[];for(let o=0;o<t;o++){const r=o/(t-1),d=J(e,n,r);s.push({x:d.x,y:d.y})}return s}function Nt(e,n,c){if(!c||!c.length)return _t(e,n,10);const a=ft(e,c),t=ft(n,c),s=[],o=r=>s.push({x:r.x,y:r.y});a.index+1<c.length?o(J(c[a.index],c[a.index+1],a.t)):o(c[a.index]);for(let r=a.index+1;r<=t.index&&r<c.length;r++)o(c[r]);return t.index+1<c.length?o(J(c[t.index],c[t.index+1],t.t)):o(c[t.index]),s}function St(e,n,c,a){if(e.length<2)return()=>{};let t=null,s;const o=[];let r=0;for(let f=0;f<e.length-1;f++){const M=Math.hypot(e[f+1].x-e[f].x,e[f+1].y-e[f].y);o.push(M),r+=M}const d=f=>{t||(t=f);const M=f-t,x=Math.min(M/n,1),A=x*r;let I=0,g=0;for(;g<o.length&&I+o[g]<A;)I+=o[g],g++;g>=o.length&&(g=o.length-1);const y=e[g],i=e[Math.min(g+1,e.length-1)],O=o[g]||0,v=O===0?0:(A-I)/O,b=y.x+(i.x-y.x)*v,C=y.y+(i.y-y.y)*v,h=i.x-y.x,V=i.y-y.y,_=h===0&&V===0?0:Math.atan2(V,h);c({x:b,y:C,angle:_}),x<1?s=requestAnimationFrame(d):a&&a()};return s=requestAnimationFrame(d),()=>{s&&cancelAnimationFrame(s)}}function ot(e){return`${e.x},${e.y}`}
@@ -1,9 +1,9 @@
1
1
  import React from "react";
2
- import type { MarketMaterial } from "../data/Data";
2
+ import { MarketMaterial } from "../data/Data";
3
3
  import "./MarketMaterialList.scss";
4
4
  export type MarketMaterialListProps = {
5
5
  list: MarketMaterial[];
6
6
  };
7
- declare const MarketMaterialList: React.FC<MarketMaterialListProps>;
8
- export default MarketMaterialList;
7
+ declare const _default: React.FunctionComponent<MarketMaterialListProps>;
8
+ export default _default;
9
9
  //# sourceMappingURL=MarketMaterialList.d.ts.map
@@ -1 +1 @@
1
- import{jsx as a,jsxs as t}from"react/jsx-runtime";import{t as i}from"../utils/i18n";import"./MarketMaterialList.scss";const s=({fileName:e,path:r})=>t("a",{className:"market-materials__item",href:r,download:!0,target:"_blank",rel:"noopener noreferrer","aria-label":`Download ${e}`,children:[a("div",{className:"market-materials__item-icon",children:a("i",{className:"icon-file-solid"})}),a("div",{className:"market-materials__item-name",children:a("span",{children:e})}),a("div",{className:"market-materials__item-download",children:a("i",{className:"icon-download"})})]}),l=({list:e})=>t("div",{className:"market-materials",children:[a("div",{className:"market-materials__title font-medium",children:i("Read More")}),a("div",{className:"market-materials__list",role:"list",children:e.map(r=>a(s,{...r},r.path))})]});export default l;
1
+ import{jsx as a,jsxs as t}from"react/jsx-runtime";import{observer as i}from"mobx-react-lite";import{t as s}from"../utils/i18n";import"./MarketMaterialList.scss";const l=({fileName:e,path:r})=>t("a",{className:"market-materials__item",href:r,download:!0,target:"_blank",rel:"noopener noreferrer","aria-label":`Download ${e}`,children:[a("div",{className:"market-materials__item-icon",children:a("i",{className:"icon-file-solid"})}),a("div",{className:"market-materials__item-name",children:a("span",{children:e})}),a("div",{className:"market-materials__item-download",children:a("i",{className:"icon-download"})})]}),m=({list:e})=>t("div",{className:"market-materials",children:[a("div",{className:"market-materials__title font-medium",children:s("Read More")}),a("div",{className:"market-materials__list",role:"list",children:e.map(r=>a(l,{...r},r.path))})]});export default i(m);
@@ -1,2 +1 @@
1
- import{jsx as o,jsxs as m,Fragment as x}from"react/jsx-runtime";import{useLocalStore as C,useObserver as v}from"mobx-react-lite";import{autorun as D}from"mobx";import{t as s}from"../utils/i18n";import n from"../data";import g from"../utils/is-iframe";import T from"copy-to-clipboard";import r,{exhibitorStore as b,uiState as t}from"../store";import I from"./Badge";import _ from"../tools/logger";import w from"../tools/settings";import"./Menu.scss";import"./Menu_custom.scss";const p=/^https?:\/\//i.test(n.logo)?n.logo:window.__dataUrlBase+n.logo;_.log("Logo url: ",p),window.setTimeout(function(){const l=new Image;l.onload=()=>{_.log("Logo image loaded")},l.crossOrigin="anonymous",l.src=p},1500);function U({allowConsent:l,isGDPR:c}){const a=C(()=>({logoVisibility:"visible",shown:!1,shownTimeout:void 0,modalOpen:!1,selectedCategoryIds:(t.selectedCategoryFilters||[]).map(e=>Number(e.id)),pendingSelectedIds:(t.selectedCategoryFilters||[]).map(e=>Number(e.id))}));D(()=>{t.menu?(a.shownTimeout=window.setTimeout(()=>a.shown=!0,1),t.list.type==="sessions"&&r.searchStore.selectSearch()):(a.shown=!1,a.shownTimeout&&window.clearTimeout(a.shownTimeout))});function y(e){if(t.kiosk)return e.preventDefault()}function S(e){e.preventDefault(),f(),r.searchStore.selectSearch()}function $(e){e.preventDefault(),r.clickBookmarks(),r.moveToList()}function j(e){e.preventDefault(),f();const d=window.location,k=b.bookmarked.map(h=>h.id),u=r.eventStore.bookmarked.map(h=>h.id),i=[...k,...u],L=`${d.protocol}//${d.host}/?b=`+i.join("|");T(L),alert(s("Link copied to clipboard")+`.
2
- `+s("Open it on another device to import bookmarks")+".")}function N(e){e.preventDefault(),r.clickLanguage()}return v(()=>{if(!t.menu)return null;const e=r.boothStore.booths.filter(i=>i.bookmarked).map(i=>i.name),d=r.eventStore.eventItems.length>0,k=b.exhibitors.filter(i=>i.bookmarked).length+r.eventStore.bookmarked.length,u=window.__fpSettings?.fpVer?`https://api-v2.expofp.com/export/v2/${w.EXPO}/pdf`:`https://api.expofp.com/service/convert/${w.EXPO}/pdf`;return m("div",{className:`menu ${a.shown?"shown":""}`,children:[g?o("div",{className:"menu__cover -empty"}):o("div",{className:"menu__cover",children:o("a",{href:n.homeUrl,target:"_blank",rel:"noopener noreferrer",onClick:y,children:o("img",{src:p,onError:()=>a.logoVisibility="hidden",style:{visibility:a.logoVisibility},alt:"",crossOrigin:"anonymous"})})}),m("div",{className:"menu__content",children:[o("a",{href:"/#",onClick:S,className:"menu__item",children:s("Search")}),!n.hideEventHomeLink&&!t.kiosk&&!g&&!!n.homeUrl&&m("a",{href:n.homeUrl,target:"_blank",className:"menu__item",rel:"noopener noreferrer",children:[s("Event Home").replace(/ /g,"\xA0"),"\xA0",o("i",{className:"icon-link-external"})]}),!n.hideRegisterToAttendLink&&!t.kiosk&&!g&&!!n.registerUrl&&m("a",{href:n.registerUrl,target:"_blank",className:"menu__item",rel:"noopener noreferrer",children:[s("Register to Attend").replace(/ /g,"\xA0"),"\xA0",o("i",{className:"icon-link-external"})]}),!t.hideLanguage&&!n.hideLanguage&&!n.hideLanguageLink&&m("a",{href:"?language",onClick:N,className:"menu__item -language",children:[m("span",{children:[s("Language")," "]}),m("span",{className:"menu__icons",children:[o(I,{variant:"gray",size:"md",noMargins:!0,children:r.languageStore.language?.name}),o("i",{className:"icon-chevron-right"})]})]}),!n.hideDownloadPdfLink&&!t.kiosk&&o("a",{className:"menu__item -pdf",target:"_blank",rel:"noopener noreferrer",href:`${u}/?exhibitors=true&bookmarks=${e.join(",")}&layers=${(r.layerStore.layers.length>=r.layerStore.visible.length?r.layerStore.visible.map(i=>i.name).join(","):"").replace(/&/g,"%26")}`,children:s("Download PDF")}),l===void 0&&c&&o("a",{href:"/#",className:"menu__item -cookie-consent",onClick:i=>{i.preventDefault(),t.hideCookieConsent=!1},children:s("Review Cookie Consent")})]})]})});function f(){t.menu=!1}}export default({isGDPR:l,allowConsent:c})=>v(()=>o(x,{children:t.menu?o(U,{isGDPR:l,allowConsent:c}):null}));
1
+ import{jsx as e,jsxs as s,Fragment as y}from"react/jsx-runtime";import L,{Suspense as N}from"react";import{useLocalStore as S,useObserver as h}from"mobx-react-lite";import{autorun as C}from"mobx";import{t as m,getLocale as x,getLocales as D}from"../utils/i18n";import r from"../data";import d from"../utils/is-iframe";import a,{uiState as n}from"../store";import T from"./Badge";const U=L.lazy(()=>import("./ViewerMenuPanel"));import f from"../tools/logger";import g from"../tools/settings";import"./Menu.scss";import"./Menu_custom.scss";const u=/^https?:\/\//i.test(r.logo)?r.logo:window.__dataUrlBase+r.logo;f.log("Logo url: ",u),window.setTimeout(function(){const l=new Image;l.onload=()=>{f.log("Logo image loaded")},l.crossOrigin="anonymous",l.src=u},1500);function E({allowConsent:l,isGDPR:c}){const t=S(()=>({logoVisibility:"visible",shown:!1,shownTimeout:void 0,modalOpen:!1,selectedCategoryIds:(n.selectedCategoryFilters||[]).map(o=>Number(o.id)),pendingSelectedIds:(n.selectedCategoryFilters||[]).map(o=>Number(o.id))}));C(()=>{n.menu?(t.shownTimeout=window.setTimeout(()=>t.shown=!0,1),n.list.type==="sessions"&&a.searchStore.selectSearch()):(t.shown=!1,t.shownTimeout&&window.clearTimeout(t.shownTimeout))});function p(o){if(n.kiosk)return o.preventDefault()}function k(o){o.preventDefault(),w(),a.searchStore.selectSearch()}function v(o){o.preventDefault(),a.fp?.onLeaveEvent?.()}function _(o){o.preventDefault(),a.clickLanguage()}return h(()=>{if(!n.menu)return null;const o=a.boothStore.booths.filter(i=>i.bookmarked).map(i=>i.name),b=window.__fpSettings?.fpVer?`https://api-v2.expofp.com/export/v2/${g.EXPO}/pdf`:`https://api.expofp.com/service/convert/${g.EXPO}/pdf`;return s("div",{className:`menu ${t.shown?"shown":""}`,children:[d?e("div",{className:"menu__cover -empty"}):e("div",{className:"menu__cover",children:e("a",{href:r.homeUrl,target:"_blank",rel:"noopener noreferrer",onClick:p,children:e("img",{src:u,onError:()=>t.logoVisibility="hidden",style:{visibility:t.logoVisibility},alt:"",crossOrigin:"anonymous"})})}),s("div",{className:"menu__content",children:[n.viewerMode&&e(N,{fallback:null,children:e(U,{})}),!n.viewerMode&&e("a",{href:"/#",onClick:k,className:"menu__item",children:m("Search")}),!r.hideEventHomeLink&&!n.kiosk&&!d&&!!r.homeUrl&&s("a",{href:r.homeUrl,target:"_blank",className:"menu__item",rel:"noopener noreferrer",children:[m("Event Home").replace(/ /g,"\xA0"),"\xA0",e("i",{className:"icon-link-external"})]}),!r.hideRegisterToAttendLink&&!n.kiosk&&!d&&!!r.registerUrl&&s("a",{href:r.registerUrl,target:"_blank",className:"menu__item",rel:"noopener noreferrer",children:[m("Register to Attend").replace(/ /g,"\xA0"),"\xA0",e("i",{className:"icon-link-external"})]}),!n.hideLanguage&&!r.hideLanguage&&!r.hideLanguageLink&&s("a",{href:"?language",onClick:_,className:"menu__item -language",children:[s("span",{children:[m("Language")," "]}),s("span",{className:"menu__icons",children:[e(T,{variant:"gray",size:"md",noMargins:!0,children:D().find(i=>i.id===x())?.name}),e("i",{className:"icon-chevron-right"})]})]}),!r.hideDownloadPdfLink&&!n.kiosk&&e("a",{className:"menu__item -pdf",target:"_blank",rel:"noopener noreferrer",href:`${b}/?exhibitors=true&bookmarks=${o.join(",")}&layers=${(a.layerStore.layers.length>=a.layerStore.visible.length?a.layerStore.visible.map(i=>i.name).join(","):"").replace(/&/g,"%26")}`,children:m("Download PDF")}),l===void 0&&c&&e("a",{href:"/#",className:"menu__item -cookie-consent",onClick:i=>{i.preventDefault(),n.hideCookieConsent=!1},children:m("Review Cookie Consent")}),n.viewerMode&&e("a",{href:"/#",className:"menu__item -leave-event menu__leave-link",onClick:v,children:m("Select another event")})]})]})});function w(){n.menu=!1}}export default({isGDPR:l,allowConsent:c})=>h(()=>e(y,{children:n.menu?e(E,{isGDPR:l,allowConsent:c}):null}));
@@ -1 +1 @@
1
- import{jsx as i,jsxs as r}from"react/jsx-runtime";import{useObserver as u}from"mobx-react-lite";import{useCallback as m}from"react";import t,{searchStore as p}from"../store";import{t as s}from"../utils/i18n";import c from"classnames";import"./MobileToggleButton.scss";function S(){const o=m(()=>{t.uiState.isOverlayOpen&&t.uiState.overlaySize==="full"?t.uiState.desiredOverlaySize="small":p.openOverlayWithoutInputFocus()},[]);return u(()=>{if(!(t.uiState.overlayPosition==="bottom"&&!t.uiState.details&&!t.uiState.menu&&t.uiState.list.type!=="language"&&t.uiState.list.type!=="bookmarks"&&t.uiState.list.type!=="sessions"))return null;const e=!t.uiState.isOverlayOpen||t.uiState.overlaySize!=="full",a=e?s("List"):s("Map"),l=e?"is-list":"is-map",n=e?"icon-list":"icon-map";return r("button",{className:c("efp-mobile-toggle-button",{"is-with-banner":t.uiState.isBannerVisible},l),onClick:o,type:"button","aria-label":e?s("List"):s("Map"),children:[i("i",{className:n}),i("span",{className:"efp-mobile-toggle-button__text",children:a})]})})}export default S;
1
+ import{jsx as s,jsxs as u}from"react/jsx-runtime";import{useObserver as m}from"mobx-react-lite";import{useCallback as p}from"react";import t,{searchStore as c}from"../store";import{t as i}from"../utils/i18n";import{LANGUAGE_TYPE as S}from"../constants";import b from"classnames";import"./MobileToggleButton.scss";function f(){const o=p(()=>{t.uiState.isOverlayOpen&&t.uiState.overlaySize==="full"?t.uiState.desiredOverlaySize="small":c.openOverlayWithoutInputFocus()},[]);return m(()=>{const a=t.uiState.list.type==="route-planner";if(!(t.uiState.overlayPosition==="bottom"&&(a||!t.uiState.details&&!t.uiState.menu&&t.uiState.list.type!==S&&t.uiState.list.type!=="bookmarks"&&t.uiState.list.type!=="sessions")))return null;const e=!t.uiState.isOverlayOpen||t.uiState.overlaySize!=="full",l=e?i("List"):i("Map"),r=e?"is-list":"is-map",n=e?"icon-list":"icon-map";return u("button",{className:b("efp-mobile-toggle-button",{"is-with-banner":t.uiState.isBannerVisible},r),onClick:o,type:"button","aria-label":e?i("List"):i("Map"),children:[s("i",{className:n}),s("span",{className:"efp-mobile-toggle-button__text",children:l})]})})}export default f;
@@ -28,6 +28,6 @@ export interface MultiSelectGroupsProps {
28
28
  itemCountProvider?: (item: MultiSelectGroupItem) => number;
29
29
  customItemRenderer?: (item: MultiSelectGroupItem, isSelected: boolean) => React.ReactNode;
30
30
  }
31
- declare const MultiSelectGroups: React.FC<MultiSelectGroupsProps>;
32
- export default MultiSelectGroups;
31
+ declare const _default: React.FunctionComponent<MultiSelectGroupsProps>;
32
+ export default _default;
33
33
  //# sourceMappingURL=MultiSelectGroups.d.ts.map
@@ -1 +1 @@
1
- import{Fragment as F,jsx as o,jsxs as c}from"react/jsx-runtime";import I,{useCallback as g,useState as M,useMemo as P}from"react";import v from"classnames";import{t as m}from"../utils/i18n";import"./MultiSelectGroups.scss";const q=I.memo(({item:r,isSelected:s,variant:p,showCount:f,count:h,onClick:u,customRenderer:d})=>d?o(F,{children:d(r,s)}):c("button",{type:"button",className:v("multi-select-groups__item",{"is-selected":s,"is-disabled":r.disabled,[`multi-select-groups__item--${p}`]:p}),onClick:()=>!r.disabled&&u(r.id),disabled:r.disabled,"aria-pressed":s,children:[o("div",{className:"multi-select-groups__item-name",children:r.name}),f&&h>0&&o("span",{className:"multi-select-groups__item-count",children:h})]},r.id)),L=({groups:r=[],selectedIds:s=[],showItemCounts:p=!0,showGroupActions:f=!0,variant:h="default",maxItemsVisible:u=20,itemCountProvider:d,customItemRenderer:S,onChange:a})=>{const[G,y]=M(new Set),A=g(e=>{const t=s.includes(e)?s.filter(l=>l!==e):[...s,e];a(t)},[s,a]),C=g(e=>{const l=e.items.filter(n=>n.id&&!n.disabled).map(n=>n.id).filter(n=>!s.includes(n));l.length!==0&&a([...s,...l])},[s,a]),k=g(e=>{const t=new Set(e.items.map(n=>n.id)),l=s.filter(n=>!t.has(n));a(l)},[s,a]),x=g(e=>{y(t=>{const l=new Set(t);return l.has(e)?l.delete(e):l.add(e),l})},[]),j=e=>e.count!==void 0?e.count:e.countProvider?e.countProvider():d?d(e):0,N=P(()=>new Set(s),[s]);return!Array.isArray(r)||!r.length?null:o("div",{className:"multi-select-groups",children:o("div",{className:"multi-select-groups__list",children:r.map(e=>{if(!e?.groupName||!Array.isArray(e.items))return null;const t=e.items.filter(i=>i.id),l=t.filter(i=>N.has(i.id)),n=l.length===t.length&&t.length>0,E=l.length>0&&!n,_=G.has(e.groupName),b=_||t.length<=u?t:t.slice(0,u),w=t.length-b.length>0?t.slice(u).filter(i=>N.has(i.id)).length:0;return c("div",{className:v("multi-select-groups__group",{"multi-select-groups__group--full-width":e.fullWidth},e.customGroupClass),children:[c("div",{className:"multi-select-groups__group-header",children:[o("div",{className:"multi-select-groups__group-title",children:e.groupName}),f&&e.showGroupActions!==!1&&c("div",{className:"multi-select-groups__group-actions",children:[!n&&o("button",{type:"button",className:"multi-select-groups__action-btn",onClick:()=>C(e),children:m("Select all")}),(E||n)&&o("button",{type:"button",className:"multi-select-groups__action-btn",onClick:()=>k(e),children:m("Clear all")})]})]}),c("div",{className:"multi-select-groups__group-items",children:[b.map(i=>o(q,{item:i,isSelected:N.has(i.id),variant:h,showCount:p,count:j(i),onClick:A,customRenderer:S},i.id)),t.length>u&&c("button",{type:"button",className:"multi-select-groups__show-more-btn",onClick:()=>x(e.groupName),children:[o("i",{className:_?"icon-chevron-up":"icon-chevron-down","aria-hidden":"true"}),_?m("Show Less"):m("Show More"),!_&&w>0&&c("span",{className:"multi-select-groups__show-more-badge",children:[w," ",m("selected")]})]})]})]},e.groupName)})})})};export default L;
1
+ import{Fragment as F,jsx as o,jsxs as c}from"react/jsx-runtime";import I,{useCallback as g,useState as M,useMemo as P}from"react";import{observer as q}from"mobx-react-lite";import v from"classnames";import{t as m}from"../utils/i18n";import"./MultiSelectGroups.scss";const L=I.memo(({item:r,isSelected:s,variant:p,showCount:f,count:h,onClick:u,customRenderer:d})=>d?o(F,{children:d(r,s)}):c("button",{type:"button",className:v("multi-select-groups__item",{"is-selected":s,"is-disabled":r.disabled,[`multi-select-groups__item--${p}`]:p}),onClick:()=>!r.disabled&&u(r.id),disabled:r.disabled,"aria-pressed":s,children:[o("div",{className:"multi-select-groups__item-name",children:r.name}),f&&h>0&&o("span",{className:"multi-select-groups__item-count",children:h})]},r.id)),R=({groups:r=[],selectedIds:s=[],showItemCounts:p=!0,showGroupActions:f=!0,variant:h="default",maxItemsVisible:u=20,itemCountProvider:d,customItemRenderer:S,onChange:a})=>{const[G,y]=M(new Set),A=g(e=>{const t=s.includes(e)?s.filter(l=>l!==e):[...s,e];a(t)},[s,a]),C=g(e=>{const l=e.items.filter(n=>n.id&&!n.disabled).map(n=>n.id).filter(n=>!s.includes(n));l.length!==0&&a([...s,...l])},[s,a]),k=g(e=>{const t=new Set(e.items.map(n=>n.id)),l=s.filter(n=>!t.has(n));a(l)},[s,a]),x=g(e=>{y(t=>{const l=new Set(t);return l.has(e)?l.delete(e):l.add(e),l})},[]),j=e=>e.count!==void 0?e.count:e.countProvider?e.countProvider():d?d(e):0,N=P(()=>new Set(s),[s]);return!Array.isArray(r)||!r.length?null:o("div",{className:"multi-select-groups",children:o("div",{className:"multi-select-groups__list",children:r.map(e=>{if(!e?.groupName||!Array.isArray(e.items))return null;const t=e.items.filter(i=>i.id),l=t.filter(i=>N.has(i.id)),n=l.length===t.length&&t.length>0,E=l.length>0&&!n,_=G.has(e.groupName),b=_||t.length<=u?t:t.slice(0,u),w=t.length-b.length>0?t.slice(u).filter(i=>N.has(i.id)).length:0;return c("div",{className:v("multi-select-groups__group",{"multi-select-groups__group--full-width":e.fullWidth},e.customGroupClass),children:[c("div",{className:"multi-select-groups__group-header",children:[o("div",{className:"multi-select-groups__group-title",children:e.groupName}),f&&e.showGroupActions!==!1&&c("div",{className:"multi-select-groups__group-actions",children:[!n&&o("button",{type:"button",className:"multi-select-groups__action-btn",onClick:()=>C(e),children:m("Select all")}),(E||n)&&o("button",{type:"button",className:"multi-select-groups__action-btn",onClick:()=>k(e),children:m("Clear all")})]})]}),c("div",{className:"multi-select-groups__group-items",children:[b.map(i=>o(L,{item:i,isSelected:N.has(i.id),variant:h,showCount:p,count:j(i),onClick:A,customRenderer:S},i.id)),t.length>u&&c("button",{type:"button",className:"multi-select-groups__show-more-btn",onClick:()=>x(e.groupName),children:[o("i",{className:_?"icon-chevron-up":"icon-chevron-down","aria-hidden":"true"}),_?m("Show Less"):m("Show More"),!_&&w>0&&c("span",{className:"multi-select-groups__show-more-badge",children:[w," ",m("selected")]})]})]})]},e.groupName)})})})};export default q(R);
@@ -12,6 +12,8 @@ export interface OverlayPanelProps {
12
12
  mediumSizeMultiplier?: number;
13
13
  fullSizeOffset?: number;
14
14
  scrollThreshold?: number;
15
+ disableDrag?: boolean;
16
+ forceFull?: boolean;
15
17
  onChangeSize?: (size: Size) => void;
16
18
  onScrollStateChange?: (isScrolled: boolean) => void;
17
19
  }
@@ -1 +1 @@
1
- import{jsx as R,jsxs as J}from"react/jsx-runtime";import ae from"classnames";import{useEffect as D,useRef as v,useState as u,useCallback as a,useMemo as Q,createContext as de}from"react";import{uiState as j}from"../store";import X from"../tools/debounce";import fe from"./OverlayParticles";import{useWindowSize as me}from"../hooks/useWindowSize";import{useDragGesture as ge}from"../hooks/useDragGesture";import{MOBILE_BREAKPOINT as Y}from"../constants";import"./Overlay.scss";export const OverlayScrollContext=de(null);const Z=70,he="0.3s",ve=10,B=()=>window!==window.top&&(document.documentElement.clientHeight||document.body.clientHeight)||window.innerHeight,$=(d=B(),s,r,I)=>({small:d/s,medium:d/r,full:d-I}),we=({children:d,open:s,size:r="medium",particles:I=!1,className:V,onChangeSize:U,onScrollStateChange:w,smallSizeMultiplier:x=12.6,mediumSizeMultiplier:O=2.6,fullSizeOffset:S=0,scrollThreshold:C=ve})=>{const{width:A,height:z}=me(),[t,ee]=u(()=>$(B(),x,O,S)),[c,te]=u(()=>A<=Y),[p,F]=u(!1),[l,oe]=u(()=>t[r]),[g,N]=u(()=>t[r]),[h,y]=u(!1),[ne,G]=u(s),[b,M]=u(!1),L=v(),P=v(),W=v(null),K=v(null),f=v(null),i=a(e=>{const o=t[e];oe(o),N(o),U?.(e)},[t,U]),re=Q(()=>c?{height:s||h?g:0}:{height:s?"auto":void 0},[c,s,g,p,r,h]),q=a(e=>{const o=[t.small,t.medium,t.full].sort();if(e>=t.full){i("full");return}if(e<=t.small){i("small");return}const n=l||t.medium,m=e>n?o.find(E=>E+Z>=e)||t.full:o.reverse().find(E=>E-Z<=e)||t.small;m===t.full?i("full"):m===t.medium?i("medium"):i("small")},[t,l,i]),se=a(e=>{F(!0),L.current=e},[]),le=a(e=>{const o=L.current;if(o===void 0)return;const n=f.current;if(n?.scrollTop>0&&l===t.full)return;const m=o-e;let _=(l||t.medium)+m;n&&l===t.full&&_<l&&(n.style.overflow="hidden"),_=Math.min(Math.max(_,t.small),t.full),P.current=m,N(_)},[l,t]),ie=a(()=>{F(!1),L.current=void 0;const e=f.current;e&&e.style.removeProperty("overflow");const o=P.current;P.current=void 0,o!==void 0&&g!==void 0&&q(g)},[g,q]),k=a(e=>{if(p)return;i(r==="small"?"medium":r==="medium"?"full":"small")},[p,r,i]),{touchHandlers:T,mouseHandlers:H}=ge({onDragStart:se,onDragMove:le,onDragEnd:ie}),ce=a(()=>{const e=f.current;if(!e)return;const n=e.scrollTop>=C;b!==n&&(M(n),w?.(n))},[C,b,w]),ue=Q(()=>X(()=>{window.__resett?.()},250),[]);D(()=>{if(!c)return;const e=W.current,o=K.current,n=f.current;e&&(e.ontouchstart=T.onTouchStart,e.ontouchend=T.onTouchEnd,window.ontouchmove=T.onTouchMove,e.onmousedown=H.onMouseDown,e.onmouseup=H.onMouseUp,window.onmousemove=H.onMouseMove),o&&o.addEventListener("mouseup",k);const m=()=>{l&&l<t.full&&n&&(n.style.overflow="hidden")};return n&&(n.ontouchstart=m),()=>{e&&(window.ontouchmove=null,window.onmousemove=null),o&&o.removeEventListener("mouseup",k)}},[c,T,H,k,l,t]),D(()=>{te(A<=Y);const e=B();ee($(e,x,O,S))},[A,z,x,O,S]),D(()=>{if(s){G(!0),y(!0);const e=setTimeout(()=>{i(r),y(!1)},10);return()=>clearTimeout(e)}else{y(!0),c&&N(0);const e=setTimeout(()=>{G(!1),y(!1),M(!1)},parseFloat(he)*1e3);return()=>clearTimeout(e)}},[s,r,i,c]),D(()=>{s&&!h&&(f.current?.scrollTo({top:0}),M(!1),w?.(!1))},[s,h,w,j.details,j.list.type]);const pe=a(X(()=>{window.__resett?.()},250),[j.kiosk]);return ne?R(OverlayScrollContext.Provider,{value:f.current,children:J("div",{className:ae("efp-overlay",{"is-open":s,"is-draggable":p,"is-small":r==="small","is-medium":r==="medium","is-full":r==="full","is-mobile":c,"is-desktop":!c,"is-hidden":!c&&!s,"is-animating":h,"is-scrolled":b},V),style:re,ref:W,children:[R("div",{className:"efp-overlay__draghandle",ref:K}),J("div",{className:"efp-overlay__scroll",ref:f,onScroll:e=>{ce(),ue()},children:[I?R(fe,{}):null,R("div",{className:"efp-overlay__content",children:d||"No content"})]})]})}):null};export default we;
1
+ import{jsx as R,jsxs as X}from"react/jsx-runtime";import fe from"classnames";import{useEffect as I,useRef as v,useState as u,useCallback as a,useMemo as Y,createContext as me}from"react";import{uiState as U}from"../store";import Z from"../tools/debounce";import ge from"./OverlayParticles";import{useWindowSize as he}from"../hooks/useWindowSize";import{useDragGesture as ve}from"../hooks/useDragGesture";import{MOBILE_BREAKPOINT as $}from"../constants";import"./Overlay.scss";export const OverlayScrollContext=me(null);const V=70,we="0.3s",pe=10,x=()=>window!==window.top&&(document.documentElement.clientHeight||document.body.clientHeight)||window.innerHeight,z=(d=x(),r,s,D)=>({small:d/r,medium:d/s,full:d-D}),ye=({children:d,open:r,size:s="medium",particles:D=!1,className:ee,onChangeSize:C,onScrollStateChange:w,smallSizeMultiplier:O=12.6,mediumSizeMultiplier:S=2.6,fullSizeOffset:A=0,scrollThreshold:G=pe,disableDrag:W=!1,forceFull:N=!1})=>{const{width:M,height:te}=he(),[t,oe]=u(()=>z(x(),O,S,A)),[l,ne]=u(()=>M<=$),[p,K]=u(!1),[i,re]=u(()=>t[s]),[g,b]=u(()=>t[s]),[h,y]=u(!1),[se,q]=u(r),[L,P]=u(!1),k=v(),j=v(),F=v(null),J=v(null),f=v(null),c=a(e=>{const o=t[e];re(o),b(o),C?.(e)},[t,C]),le=Y(()=>l?N&&r?{height:x()}:{height:r||h?g:0}:{height:r?"auto":void 0},[l,r,g,p,s,h,N]),Q=a(e=>{const o=[t.small,t.medium,t.full].sort();if(e>=t.full){c("full");return}if(e<=t.small){c("small");return}const n=i||t.medium,m=e>n?o.find(E=>E+V>=e)||t.full:o.reverse().find(E=>E-V<=e)||t.small;m===t.full?c("full"):m===t.medium?c("medium"):c("small")},[t,i,c]),ie=a(e=>{K(!0),k.current=e},[]),ce=a(e=>{const o=k.current;if(o===void 0)return;const n=f.current;if(n?.scrollTop>0&&i===t.full)return;const m=o-e;let _=(i||t.medium)+m;n&&i===t.full&&_<i&&(n.style.overflow="hidden"),_=Math.min(Math.max(_,t.small),t.full),j.current=m,b(_)},[i,t]),ue=a(()=>{K(!1),k.current=void 0;const e=f.current;e&&e.style.removeProperty("overflow");const o=j.current;j.current=void 0,o!==void 0&&g!==void 0&&Q(g)},[g,Q]),B=a(e=>{if(p)return;c(s==="small"?"medium":s==="medium"?"full":"small")},[p,s,c]),{touchHandlers:T,mouseHandlers:H}=ve({onDragStart:ie,onDragMove:ce,onDragEnd:ue}),ae=a(()=>{const e=f.current;if(!e)return;const n=e.scrollTop>=G;L!==n&&(P(n),w?.(n))},[G,L,w]),de=Y(()=>Z(()=>{window.__resett?.()},250),[]);I(()=>{if(!l||W)return;const e=F.current,o=J.current,n=f.current;e&&(e.ontouchstart=T.onTouchStart,e.ontouchend=T.onTouchEnd,window.ontouchmove=T.onTouchMove,e.onmousedown=H.onMouseDown,e.onmouseup=H.onMouseUp,window.onmousemove=H.onMouseMove),o&&o.addEventListener("mouseup",B);const m=()=>{i&&i<t.full&&n&&(n.style.overflow="hidden")};return n&&(n.ontouchstart=m),()=>{e&&(window.ontouchmove=null,window.onmousemove=null),o&&o.removeEventListener("mouseup",B)}},[l,T,H,B,i,t]),I(()=>{ne(M<=$);const e=x();oe(z(e,O,S,A))},[M,te,O,S,A]),I(()=>{if(r){q(!0),y(!0);const e=setTimeout(()=>{c(s),y(!1)},10);return()=>clearTimeout(e)}else{y(!0),l&&b(0);const e=setTimeout(()=>{q(!1),y(!1),P(!1)},parseFloat(we)*1e3);return()=>clearTimeout(e)}},[r,s,c,l]),I(()=>{r&&!h&&(f.current?.scrollTo({top:0}),P(!1),w?.(!1))},[r,h,w,U.details,U.list.type]);const Te=a(Z(()=>{window.__resett?.()},250),[U.kiosk]);return se?R(OverlayScrollContext.Provider,{value:f.current,children:X("div",{className:fe("efp-overlay",{"is-open":r,"is-draggable":p,"is-small":s==="small","is-medium":s==="medium","is-full":s==="full","is-mobile":l,"is-desktop":!l,"is-hidden":!l&&!r,"is-animating":h,"is-scrolled":L,"is-forced-full":N&&l},ee),style:le,ref:F,children:[!W&&R("div",{className:"efp-overlay__draghandle",ref:J}),X("div",{className:"efp-overlay__scroll",ref:f,onScroll:e=>{ae(),de()},children:[D?R(ge,{}):null,R("div",{className:"efp-overlay__content",children:d||"No content"})]})]})}):null};export default ye;
@@ -1 +1 @@
1
- import{jsx as o,jsxs as v}from"react/jsx-runtime";import{useMemo as S,useCallback as a}from"react";import{observer as y}from"mobx-react-lite";import g,{uiState as e}from"../store";import h from"./Overlay";import k from"./Menu";import C from"./Search";import z from"./Exhibitor";import O from"./Booth/Booth";import b from"./Bookmarks";import x from"./Visited";import A from"./Language";import E from"./Category";import M from"./Wayfinding";import P from"./Filter";import j from"./Sessions";import R from"./Speakers";import B from"./Tours";import F from"./TourPoints";import I from"./Event";import _ from"./Speaker";import w from"classnames";const T={full:"full",medium:"medium",small:"medium"},$=t=>T[t],L=y(({isGDPR:t,allowConsent:l})=>{const m=a(r=>{e.desiredOverlaySize=r},[]),n=a(r=>{e.setOverlayScrolled(r)},[]),c=$(e.overlaySize),d=e.selectedRoute?.from&&e.selectedRoute?.to,f=e.list.type==="search"&&!e.details?9:d?7:3,p=e.fullSizeOffset,u=S(()=>{const r={"-backdrop":e.canvasStarted&&e.shouldUseBackdrop&&!e.dimmed&&!e.galleryActive,"-no-transition":e.dimmed,"-gallery-active":e.galleryActive,collapsed:e.overlayCollapsed,kiosk:e.kiosk,start:e.overlayPosition==="left",bottom:e.overlayPosition!=="left",[e.overlaySize]:!0},s=w(r),i=e.overlayInterfaceClasses.join(" ");return i?`${s} ${i}`:s},[e.canvasStarted,e.shouldUseBackdrop,e.dimmed,e.galleryActive,e.overlayCollapsed,e.kiosk,e.inIdle,e.setKioskModeEnabled,e.overlayPosition,e.overlaySize,e.overlayInterfaceClasses]);return v(h,{open:e.isOverlayOpen,size:c,particles:e.isFeaturedExhibitorActive,className:u,mediumSizeMultiplier:f,fullSizeOffset:p,onChangeSize:m,onScrollStateChange:n,children:[o(k,{isGDPR:t,allowConsent:l}),o(C,{}),o(z,{}),o(O,{}),o(b,{}),o(x,{}),o(A,{}),o(E,{}),o(M,{}),o(P,{}),o(j,{showFilters:!0}),o(R,{showFilters:!0}),o(B,{}),o(F,{}),o(I,{}),o(_,{})]},`overlay-container-language-${g.languageStore.language?.id}`)});export default L;
1
+ import{jsx as o,jsxs as v}from"react/jsx-runtime";import{useMemo as S,useCallback as l}from"react";import{observer as y}from"mobx-react-lite";import{uiState as e}from"../store";import h from"./Overlay";import k from"./Menu";import C from"./Search";import z from"./Exhibitor";import g from"./Booth/Booth";import O from"./Bookmarks";import b from"./Visited";import x from"./Language";import M from"./Category";import A from"./Wayfinding";import P from"./Filter";import E from"./Sessions";import R from"./Speakers";import j from"./Tours";import w from"./TourPoints";import F from"./RoutePlanner/RoutePlanner";import B from"./Event";import I from"./Speaker";import _ from"classnames";const T={full:"full",medium:"medium",small:"medium"},D=t=>T[t],L=y(({isGDPR:t,allowConsent:a})=>{const m=l(r=>{e.desiredOverlaySize=r},[]),n=l(r=>{e.setOverlayScrolled(r)},[]),c=D(e.overlaySize),d=e.selectedRoute?.from&&e.selectedRoute?.to,f=e.list.type==="search"&&!e.details?9:d?7:3,p=e.fullSizeOffset,u=S(()=>{const r={"-backdrop":e.canvasStarted&&e.shouldUseBackdrop&&!e.dimmed&&!e.galleryActive,"-no-transition":e.dimmed,"-gallery-active":e.galleryActive,collapsed:e.overlayCollapsed,kiosk:e.kiosk,start:e.overlayPosition==="left",bottom:e.overlayPosition!=="left",[e.overlaySize]:!0},i=_(r),s=e.overlayInterfaceClasses.join(" ");return s?`${i} ${s}`:i},[e.canvasStarted,e.shouldUseBackdrop,e.dimmed,e.galleryActive,e.overlayCollapsed,e.kiosk,e.inIdle,e.setKioskModeEnabled,e.overlayPosition,e.overlaySize,e.overlayInterfaceClasses]);return v(h,{open:e.isOverlayOpen,size:c,particles:e.isFeaturedExhibitorActive,className:u,mediumSizeMultiplier:f,fullSizeOffset:p,disableDrag:e.viewerMode&&e.menu,forceFull:e.viewerMode&&e.menu,onChangeSize:m,onScrollStateChange:n,children:[o(k,{isGDPR:t,allowConsent:a}),o(C,{}),o(z,{}),o(g,{}),o(O,{}),o(b,{}),o(x,{}),o(M,{}),o(A,{}),o(P,{}),o(E,{showFilters:!0}),o(R,{showFilters:!0}),o(j,{}),o(w,{}),o(F,{}),o(B,{}),o(I,{})]})});export default L;
@@ -0,0 +1,46 @@
1
+ declare const QrCode: import("react").LazyExoticComponent<{
2
+ new (props: import("react-qr-code").QRCodeProps): {
3
+ render(): React.ReactNode;
4
+ context: unknown;
5
+ setState<K extends string | number | symbol>(state: any, callback?: (() => void) | undefined): void;
6
+ forceUpdate(callback?: (() => void) | undefined): void;
7
+ readonly props: Readonly<import("react-qr-code").QRCodeProps>;
8
+ state: Readonly<any>;
9
+ componentDidMount?(): void;
10
+ shouldComponentUpdate?(nextProps: Readonly<import("react-qr-code").QRCodeProps>, nextState: Readonly<any>, nextContext: any): boolean;
11
+ componentWillUnmount?(): void;
12
+ componentDidCatch?(error: Error, errorInfo: import("react").ErrorInfo): void;
13
+ getSnapshotBeforeUpdate?(prevProps: Readonly<import("react-qr-code").QRCodeProps>, prevState: Readonly<any>): any;
14
+ componentDidUpdate?(prevProps: Readonly<import("react-qr-code").QRCodeProps>, prevState: Readonly<any>, snapshot?: any): void;
15
+ componentWillMount?(): void;
16
+ UNSAFE_componentWillMount?(): void;
17
+ componentWillReceiveProps?(nextProps: Readonly<import("react-qr-code").QRCodeProps>, nextContext: any): void;
18
+ UNSAFE_componentWillReceiveProps?(nextProps: Readonly<import("react-qr-code").QRCodeProps>, nextContext: any): void;
19
+ componentWillUpdate?(nextProps: Readonly<import("react-qr-code").QRCodeProps>, nextState: Readonly<any>, nextContext: any): void;
20
+ UNSAFE_componentWillUpdate?(nextProps: Readonly<import("react-qr-code").QRCodeProps>, nextState: Readonly<any>, nextContext: any): void;
21
+ };
22
+ new (props: import("react-qr-code").QRCodeProps, context: any): {
23
+ render(): React.ReactNode;
24
+ context: unknown;
25
+ setState<K extends string | number | symbol>(state: any, callback?: (() => void) | undefined): void;
26
+ forceUpdate(callback?: (() => void) | undefined): void;
27
+ readonly props: Readonly<import("react-qr-code").QRCodeProps>;
28
+ state: Readonly<any>;
29
+ componentDidMount?(): void;
30
+ shouldComponentUpdate?(nextProps: Readonly<import("react-qr-code").QRCodeProps>, nextState: Readonly<any>, nextContext: any): boolean;
31
+ componentWillUnmount?(): void;
32
+ componentDidCatch?(error: Error, errorInfo: import("react").ErrorInfo): void;
33
+ getSnapshotBeforeUpdate?(prevProps: Readonly<import("react-qr-code").QRCodeProps>, prevState: Readonly<any>): any;
34
+ componentDidUpdate?(prevProps: Readonly<import("react-qr-code").QRCodeProps>, prevState: Readonly<any>, snapshot?: any): void;
35
+ componentWillMount?(): void;
36
+ UNSAFE_componentWillMount?(): void;
37
+ componentWillReceiveProps?(nextProps: Readonly<import("react-qr-code").QRCodeProps>, nextContext: any): void;
38
+ UNSAFE_componentWillReceiveProps?(nextProps: Readonly<import("react-qr-code").QRCodeProps>, nextContext: any): void;
39
+ componentWillUpdate?(nextProps: Readonly<import("react-qr-code").QRCodeProps>, nextState: Readonly<any>, nextContext: any): void;
40
+ UNSAFE_componentWillUpdate?(nextProps: Readonly<import("react-qr-code").QRCodeProps>, nextState: Readonly<any>, nextContext: any): void;
41
+ };
42
+ contextType?: import("react").Context<any> | undefined;
43
+ propTypes?: any;
44
+ }>;
45
+ export default QrCode;
46
+ //# sourceMappingURL=QrCode.d.ts.map
@@ -0,0 +1 @@
1
+ import{lazy as o}from"react";const r=o(()=>import("react-qr-code"));export default r;