@expofp/floorplan 3.3.7 → 3.4.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.
- package/dist/browser/CookieConsent-BgzFI0o5.js +38 -0
- package/dist/browser/{Debug-A2TjoZQK.js → Debug-DwwZ0jVT.js} +9 -9
- package/dist/browser/{Demo-iK72mOgP.js → Demo-Bhv7muKd.js} +11 -11
- package/dist/browser/{Free-BcbAZA3y.js → Free-EaDzP7U5.js} +12 -12
- package/dist/browser/{Gallery-U-ldyITy.js → Gallery-BFio06PY.js} +10 -10
- package/dist/browser/{GpsLoader-DqPTky-0.js → GpsLoader-BhYirpWa.js} +46 -47
- package/dist/browser/{KioskStore-DIKp1HfX.js → KioskStore-DiTPaFb2.js} +17 -17
- package/dist/browser/MaplibreAdapter-BKj3sK8A.js +35131 -0
- package/dist/browser/{Modal-BLjdiYfi.js → Modal-DVY124d5.js} +10 -10
- package/dist/browser/PermissionNotice-CrAxf_da.js +54 -0
- package/dist/browser/{SetKioskMode-CIDQnVVK.js → SetKioskMode-Cj1IbMbn.js} +11 -11
- package/dist/browser/ShowKiosk-CqmJT8yJ.js +26 -0
- package/dist/browser/{TouchHand-4OAXEmLA.js → TouchHand-BdZWU_I1.js} +4 -4
- package/dist/browser/{ViewerMenuPanel-BFEwT9oC.js → ViewerMenuPanel-DbVIwrJO.js} +19 -19
- package/dist/browser/{add-debug-secret-listener-B2ugeAcj.js → add-debug-secret-listener-B8gxDWmn.js} +1 -1
- package/dist/browser/{boolean-editor-Cc1GCvQj.js → boolean-editor-CIT7g6C5.js} +10 -10
- package/dist/browser/{bootIntercom-BVGw_SpO.js → bootIntercom-CcgHFRAw.js} +2 -2
- package/dist/browser/{box-CaErtqkj.js → box-CydZk4HJ.js} +5 -5
- package/dist/browser/{browser-_paBhqQW.js → browser-DlMYMMvJ.js} +2 -2
- package/dist/browser/bundle.json +61 -61
- package/dist/browser/{classnames-CVk0A91C.js → classnames-DmdaKMoa.js} +2 -2
- package/dist/browser/{client-B70Nbh5h.js → client-8ygU_jvu.js} +4 -4
- package/dist/browser/components-BgwIl1Lu.js +6289 -0
- package/dist/browser/createWayfinding-D9tuHHx5.js +1889 -0
- package/dist/browser/{debug-overlay-CyYqgTdj.js → debug-overlay-Dos3Ate2.js} +11 -11
- package/dist/browser/{debug-ui-D9A6yzed.js → debug-ui-BjmKfkgV.js} +6 -6
- package/dist/browser/{dist-BUD3zJ9Z.js → dist-B3Y58WKJ.js} +6 -6
- package/dist/browser/{dist-BPljQLT7.js → dist-Bm6VKnC2.js} +3 -3
- package/dist/browser/{dist-BrWnw-Ri.js → dist-_wJOZ0rm.js} +5 -5
- package/dist/browser/{efp-debug-init-CL7ckXKd.js → efp-debug-init-yyCWZRTx.js} +5 -4
- package/dist/browser/{enum-editor-Djt6vsG1.js → enum-editor-D8X_uabc.js} +11 -11
- package/dist/browser/{event-not-found-CAUywrB2.js → event-not-found-Bm_W5xxA.js} +1 -1
- package/dist/browser/{exports-D5aj-cpr.js → exports-DnHrfjiU.js} +1 -1
- package/dist/browser/{favicon-B3ilFIzN.js → favicon-Bnz633J6.js} +1 -1
- package/dist/browser/{fetch-retry.umd-CC6nRZde.js → fetch-retry.umd-BunUcQza.js} +2 -2
- package/dist/browser/{flex-SCSgjwpS.js → flex-DwDJlblp.js} +6 -6
- package/dist/browser/{flex.props-DM7y21yG.js → flex.props-BAGkFvkN.js} +2 -2
- package/dist/browser/{floorplan.loader-BmVUKCxN.js → floorplan.loader-B3PUqtqn.js} +30 -31
- package/dist/browser/{floorplan.ready-da1pQZ1-.js → floorplan.ready-BAnq_GdS.js} +196 -196
- package/dist/browser/{fuse-DY6Kjf36.js → fuse-Bhsd7fBU.js} +2 -2
- package/dist/browser/{i18n-1-u98ly9.js → i18n-C5BBGKZk.js} +5 -5
- package/dist/browser/index.js +13 -13
- package/dist/browser/{jsx-runtime-BESB6cP1.js → jsx-runtime-Dk2--jeN.js} +2 -2
- package/dist/browser/{lib-BhhCH6-T.js → lib-Brd2BCh_.js} +4 -4
- package/dist/browser/locales/ar.json +0 -1
- package/dist/browser/locales/de.json +0 -1
- package/dist/browser/locales/es.json +0 -1
- package/dist/browser/locales/fr.json +0 -1
- package/dist/browser/locales/he.json +0 -1
- package/dist/browser/locales/it.json +0 -1
- package/dist/browser/locales/kk.json +0 -1
- package/dist/browser/locales/ko.json +0 -1
- package/dist/browser/locales/mn.json +0 -1
- package/dist/browser/locales/nl.json +0 -1
- package/dist/browser/locales/pl.json +0 -1
- package/dist/browser/locales/pt.json +0 -1
- package/dist/browser/locales/ru.json +0 -1
- package/dist/browser/locales/sv.json +0 -1
- package/dist/browser/locales/th.json +0 -1
- package/dist/browser/locales/tr.json +0 -1
- package/dist/browser/locales/uk.json +0 -1
- package/dist/browser/locales/vi.json +0 -1
- package/dist/browser/locales/zh.json +0 -1
- package/dist/browser/{main-D2NmCv2H.js → main-pIcuVUIg.js} +1 -1
- package/dist/browser/{mobx-Cfh5Vfk6.js → mobx-BfCD0EQ-.js} +4 -4
- package/dist/browser/{particles.min-B5qlVBuL.js → particles.min-ChGMv-bm.js} +2 -2
- package/dist/browser/{prop-types-DZ8VfWUb.js → prop-types-xdXFFTmm.js} +2 -2
- package/dist/browser/{react-cXsgFw41.js → react-BbZc5Oeq.js} +2 -2
- package/dist/browser/{react-dom-l5Q31Wma.js → react-dom-BBDOhlbP.js} +3 -3
- package/dist/browser/{reset-all-settings-B6K1EwXP.js → reset-all-settings-BQC7zljW.js} +7 -7
- package/dist/browser/{rolldown-runtime-hPqAdzN2.js → rolldown-runtime-DS4W77DU.js} +1 -1
- package/dist/browser/{settings-BZyvLLph.js → settings-CK-qRFM8.js} +2 -2
- package/dist/browser/{settings-item-zDeA5cv4.js → settings-item-CUnGC7xO.js} +6 -6
- package/dist/browser/{storage-CneO9F9t.js → storage-0QGL3b8S.js} +3 -3
- package/dist/browser/{store-CQphSXxk.js → store-Bm4aFC2V.js} +4543 -4998
- package/dist/browser/{string-editor-BJn1AFSw.js → string-editor-BNry84Oh.js} +8 -8
- package/dist/browser/{theme-DoAOOaRE.js → theme-BIXywNMw.js} +8 -8
- package/dist/browser/{ui-DNF4wGZh.js → ui-AzubEvGd.js} +8 -8
- package/dist/browser/{useRenderTarget-BYpCY_A9.js → useRenderTarget-Bf7cQRFi.js} +4 -4
- package/dist/esm/_misc_to_move/manifest.d.ts +1 -0
- package/dist/esm/components/AlertContainer.d.ts +1 -1
- package/dist/esm/components/Controls.js +1 -1
- package/dist/esm/components/CookieConsent.d.ts +3 -3
- package/dist/esm/components/CookieConsent.js +1 -1
- package/dist/esm/components/EntityItemContainer.d.ts +1 -1
- package/dist/esm/components/Exhibitor.js +1 -1
- package/dist/esm/components/HeatmapLegendContainer.d.ts +6 -0
- package/dist/esm/components/HeatmapLegendContainer.js +1 -0
- package/dist/esm/components/HighlightTextContainer.d.ts +1 -1
- package/dist/esm/components/Kiosk/SetKiosk/SetKioskComponent.js +1 -1
- package/dist/esm/components/Layout.js +1 -1
- package/dist/esm/components/LevelBadgeContainer.d.ts +6 -0
- package/dist/esm/components/LevelBadgeContainer.js +1 -0
- package/dist/esm/components/LevelSelector.js +1 -1
- package/dist/esm/components/LogoOverlay.js +1 -1
- package/dist/esm/components/Map/Map.js +1 -1
- package/dist/esm/components/Map/drawing/config/config-booth-bg.d.ts +3 -2
- package/dist/esm/components/Map/drawing/config/config-booth-bg.js +1 -1
- package/dist/esm/components/Map/drawing/config/config-booth-border.js +1 -1
- package/dist/esm/components/Map/drawing/config/config-booths.js +1 -1
- package/dist/esm/components/Map/drawing/config/config-load-layer.js +1 -1
- package/dist/esm/components/Map/traffic/useManageTraffic.js +1 -1
- package/dist/esm/components/Maplibre/MaplibreAdapter.d.ts +14 -0
- package/dist/esm/components/Maplibre/MaplibreAdapter.js +1 -0
- package/dist/esm/components/Maplibre/MaplibreWrapper.d.ts +69 -0
- package/dist/esm/components/Maplibre/MaplibreWrapper.js +1 -0
- package/dist/esm/components/Maplibre/useCameraReactions.d.ts +10 -0
- package/dist/esm/components/Maplibre/useCameraReactions.js +1 -0
- package/dist/esm/components/Maplibre/useDimming.d.ts +16 -0
- package/dist/esm/components/Maplibre/useDimming.js +1 -0
- package/dist/esm/components/Maplibre/useLayerVisibilitySync.d.ts +11 -0
- package/dist/esm/components/Maplibre/useLayerVisibilitySync.js +1 -0
- package/dist/esm/components/Maplibre/useRendererEvents.d.ts +9 -0
- package/dist/esm/components/Maplibre/useRendererEvents.js +1 -0
- package/dist/esm/components/Maplibre/useWayfindingAndMarkers.d.ts +8 -0
- package/dist/esm/components/Maplibre/useWayfindingAndMarkers.js +1 -0
- package/dist/esm/components/Maplibre/utils/geo-config.d.ts +30 -0
- package/dist/esm/components/Maplibre/utils/geo-config.js +1 -0
- package/dist/esm/components/Maplibre/utils/layer-defs.d.ts +4 -0
- package/dist/esm/components/Maplibre/utils/layer-defs.js +1 -0
- package/dist/esm/components/Maplibre/utils/map-helpers.d.ts +9 -0
- package/dist/esm/components/Maplibre/utils/map-helpers.js +1 -0
- package/dist/esm/components/Maplibre/utils/solver.d.ts +24 -0
- package/dist/esm/components/Maplibre/utils/solver.js +1 -0
- package/dist/esm/components/OverlayContainer.d.ts +1 -1
- package/dist/esm/components/OverlayGripContainer.d.ts +4 -0
- package/dist/esm/components/OverlayGripContainer.js +1 -0
- package/dist/esm/components/ScrollableRowContainer.d.ts +6 -0
- package/dist/esm/components/ScrollableRowContainer.js +1 -0
- package/dist/esm/components/SearchButtons/SearchButtons.d.ts +1 -1
- package/dist/esm/components/SearchButtons/SearchButtons.js +1 -1
- package/dist/esm/components/Shortcuts/ShortcutsToolbar.d.ts +1 -1
- package/dist/esm/components/Shortcuts/ShortcutsToolbar.js +1 -1
- package/dist/esm/components/WayfindingFloorSelectorContainer.d.ts +1 -1
- package/dist/esm/components/gps/GpsPermissionRequest.js +1 -1
- package/dist/esm/components/index.d.ts +9 -8
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/data/Flags.d.ts +1 -0
- package/dist/esm/data/fpGeo.d.ts +20 -1
- package/dist/esm/floorplan.loader.d.ts +1 -0
- package/dist/esm/floorplan.loader.js +1 -1
- package/dist/esm/floorplan.ready.js +1 -1
- package/dist/esm/renderer/RendererService.d.ts +5 -0
- package/dist/esm/renderer/RendererService.js +1 -1
- package/dist/esm/services/routing.js +1 -1
- package/dist/esm/store/HeatmapStore.js +1 -1
- package/dist/esm/store/MaplibreStore.d.ts +22 -0
- package/dist/esm/store/MaplibreStore.js +1 -0
- package/dist/esm/store/RootStore.d.ts +2 -2
- package/dist/esm/store/RootStore.js +1 -1
- package/dist/esm/store/RouteStore.js +1 -1
- package/dist/esm/store/init/init-booths.js +1 -1
- package/dist/esm/types.d.ts +9 -0
- package/dist/esm/ui/Draggable/Draggable.d.ts +9 -0
- package/dist/esm/ui/Draggable/Draggable.js +1 -0
- package/dist/esm/ui/Draggable/index.d.ts +3 -0
- package/dist/esm/ui/Draggable/index.js +1 -0
- package/dist/esm/ui/HeatmapLegend/HeatmapLegend.d.ts +13 -0
- package/dist/esm/ui/HeatmapLegend/HeatmapLegend.js +1 -0
- package/dist/esm/ui/HeatmapLegend/index.d.ts +3 -0
- package/dist/esm/ui/HeatmapLegend/index.js +1 -0
- package/dist/esm/ui/LevelBadge/LevelBadge.d.ts +9 -0
- package/dist/esm/ui/LevelBadge/LevelBadge.js +1 -0
- package/dist/esm/ui/LevelBadge/index.d.ts +3 -0
- package/dist/esm/ui/LevelBadge/index.js +1 -0
- package/dist/esm/ui/OverlayGrip/OverlayGrip.d.ts +11 -0
- package/dist/esm/ui/OverlayGrip/OverlayGrip.js +1 -0
- package/dist/esm/ui/OverlayGrip/index.d.ts +3 -0
- package/dist/esm/ui/OverlayGrip/index.js +1 -0
- package/dist/esm/ui/PermissionNotice/PermissionNotice.d.ts +16 -0
- package/dist/esm/ui/PermissionNotice/PermissionNotice.js +1 -0
- package/dist/esm/ui/PermissionNotice/index.d.ts +3 -0
- package/dist/esm/ui/PermissionNotice/index.js +1 -0
- package/dist/esm/{components → ui/ScrollableRow}/ScrollableRow.d.ts +5 -4
- package/dist/esm/ui/ScrollableRow/ScrollableRow.js +1 -0
- package/dist/esm/ui/ScrollableRow/index.d.ts +3 -0
- package/dist/esm/ui/ScrollableRow/index.js +1 -0
- package/dist/esm/ui/ToggleSwitch/ToggleSwitch.d.ts +4 -10
- package/dist/esm/ui/ToggleSwitch/ToggleSwitch.js +1 -1
- package/dist/esm/ui/shared/interactive.d.ts +2 -0
- package/dist/esm/ui/shared/interactive.js +1 -0
- package/dist/esm/utils/color-gradient.d.ts +2 -0
- package/dist/esm/utils/color-gradient.js +1 -0
- package/dist/esm/utils/dimming.d.ts +16 -0
- package/dist/esm/utils/dimming.js +1 -0
- package/dist/esm/wayfinding/core/position/gpsThreshold.d.ts +1 -1
- package/package.json +5 -9
- package/dist/browser/CookieConsent-DeA-DR4A.js +0 -71
- package/dist/browser/Mapbox-ChPNLhVw.js +0 -120
- package/dist/browser/ShowKiosk-CprbVv29.js +0 -26
- package/dist/browser/ThreeComponent-CtqPjAlQ.js +0 -1494
- package/dist/browser/components-XkvqySvZ.js +0 -8143
- package/dist/browser/data-DshpY4Eh.js +0 -27967
- package/dist/browser/vendor/mapbox/mapbox-gl.css +0 -1
- package/dist/esm/components/BookmarkSvg.d.ts +0 -4
- package/dist/esm/components/BookmarkSvg.js +0 -1
- package/dist/esm/components/Draggable.d.ts +0 -10
- package/dist/esm/components/Draggable.js +0 -1
- package/dist/esm/components/HeatmapLegend.d.ts +0 -12
- package/dist/esm/components/HeatmapLegend.js +0 -1
- package/dist/esm/components/LevelBadge.d.ts +0 -8
- package/dist/esm/components/LevelBadge.js +0 -1
- package/dist/esm/components/Mapbox/Button.d.ts +0 -10
- package/dist/esm/components/Mapbox/Button.js +0 -1
- package/dist/esm/components/Mapbox/Dot.d.ts +0 -10
- package/dist/esm/components/Mapbox/Dot.js +0 -1
- package/dist/esm/components/Mapbox/MapLoader.d.ts +0 -4
- package/dist/esm/components/Mapbox/MapLoader.js +0 -1
- package/dist/esm/components/Mapbox/Mapbox.d.ts +0 -4
- package/dist/esm/components/Mapbox/Mapbox.js +0 -1
- package/dist/esm/components/Mapbox/utils/data.d.ts +0 -38
- package/dist/esm/components/Mapbox/utils/data.js +0 -1
- package/dist/esm/components/OverlayGrip.d.ts +0 -5
- package/dist/esm/components/OverlayGrip.js +0 -1
- package/dist/esm/components/PermissionNotice/PermissionNotice.d.ts +0 -14
- package/dist/esm/components/PermissionNotice/PermissionNotice.js +0 -1
- package/dist/esm/components/ScrollableRow.js +0 -1
- package/dist/esm/components/Threejs/ThreeComponent.d.ts +0 -7
- package/dist/esm/components/Threejs/ThreeComponent.js +0 -1
- package/dist/esm/components/Threejs/UIManager.d.ts +0 -28
- package/dist/esm/components/Threejs/UIManager.js +0 -1
- package/dist/esm/components/Threejs/common/BoothMesh.d.ts +0 -20
- package/dist/esm/components/Threejs/common/BoothMesh.js +0 -1
- package/dist/esm/components/Threejs/common/Scene.d.ts +0 -13
- package/dist/esm/components/Threejs/common/Scene.js +0 -1
- package/dist/esm/components/Threejs/common/SpriteMesh.d.ts +0 -5
- package/dist/esm/components/Threejs/common/SpriteMesh.js +0 -1
- package/dist/esm/components/Threejs/common/dataLoader.d.ts +0 -31
- package/dist/esm/components/Threejs/common/dataLoader.js +0 -1
- package/dist/esm/components/Threejs/common/modelLoader.d.ts +0 -3
- package/dist/esm/components/Threejs/common/modelLoader.js +0 -1
- package/dist/esm/components/Threejs/common/sceneLoader.d.ts +0 -7
- package/dist/esm/components/Threejs/common/sceneLoader.js +0 -1
- package/dist/esm/components/Threejs/index.d.ts +0 -4
- package/dist/esm/components/Threejs/index.js +0 -1
- package/dist/esm/components/Threejs/mapbox/configureWebGLForMapbox.d.ts +0 -2
- package/dist/esm/components/Threejs/mapbox/configureWebGLForMapbox.js +0 -1
- package/dist/esm/components/Threejs/mapbox/index_mapbox.d.ts +0 -4
- package/dist/esm/components/Threejs/mapbox/index_mapbox.js +0 -1
- package/dist/esm/components/Threejs/mapbox/init-mapbox.d.ts +0 -3
- package/dist/esm/components/Threejs/mapbox/init-mapbox.js +0 -1
- package/dist/esm/components/Threejs/utils/canvasFromText.d.ts +0 -2
- package/dist/esm/components/Threejs/utils/canvasFromText.js +0 -1
- package/dist/esm/components/Threejs/utils/textureMerger.d.ts +0 -60
- package/dist/esm/components/Threejs/utils/textureMerger.js +0 -1
- package/dist/esm/store/MapboxStore.d.ts +0 -13
- package/dist/esm/store/MapboxStore.js +0 -1
- package/dist/esm/tools/Color.d.ts +0 -2
- package/dist/esm/tools/Color.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useEffect as
|
|
1
|
+
import{useEffect as pt,useRef as F}from"react";import{getBounds as k}from"../../../renderer";import{getRouteLayerRegex as wt,getRouteStopLayerRegex as xt,TRAFFIC_VEHICLES as Et}from"./trafficLayers";import{loadImage as It}from"../../../utils/loadImage";import{createImageCanvas as Mt}from"../drawing/config/canvases";import{UpdateQueue as Lt}from"./UpdateQueue";import bt from"../../../tools/base-runtime-url";import{toRadians as Ft}from"../../../utils/math";import{isDefaultScene as Rt}from"../../../renderer/engine-core/defs";const et=2,At=et*3.5,Q=et*12,at=Q*.7,Pt=8,Tt="transport_locations",vt=150,nt="#a4aab6",ut=1e3,_t=2e4,lt=500;export function useManageTraffic({permission:t,rendererService:n,dataJsonUrl:c,websocketUrl:i}){const e=F(window.devicePixelRatio),s=F(new Map),o=F(new Map),r=F(),p=F(),f=F(performance.now()),M=F(1),E=F(new Lt),A=F(new Map),I=F(),g=F(ut),w=F(new Map),u=F();pt(()=>{let T;async function N(){if(!(!t||!n.scene))try{let d;try{const a=await fetch(c,{method:"GET",headers:{"Content-Type":"application/json"}});if(!a.ok||a.status===204)return;d=await a.json()}catch(a){console.warn("useManageTraffic failed to get JSON",a)}if(!d||d?.disabled||d?.error)return;e.current=dt(n.scale);const Y=new Map(d.routes.map(({id:a,color:x})=>[a,x])),H=n.scene.rootLayer.children,V=new Map;Y.forEach(a=>{V.set(a,St({radius:At,color:a,scale:window.devicePixelRatio}))});const B=wt(),q=H.filter(a=>B.test(a.name)),G=xt(),z=H.filter(a=>G.test(a.name));d.routes.slice(0,q.length).forEach(({id:a,color:x,path:C,stops:W,hiddenPoints:_},h)=>{A.current.set(a,C);const m=q[h];if(m){const y=new Map(_?.map(l=>[ct(l),l])??[]);for(let l=1;l<C.length;l++){const D=C[l-1],O=C[l];y.has(ct(D))||y.has(ct(O))||m.children.push({points:[D,O],color:x,width:et})}m.children.length&&E.current.add(()=>n.update(m))}const b=z[h];if(b&&W?.length){const y=V.get(x);W.forEach(l=>{b.children.push({source:y,bounds:k(l.x,l.y,y.width,y.height,e.current)})}),b.children.length&&E.current.add(()=>n.update(b))}});const U=H.find(a=>a.name===Et),Z=new Map;I.current=a=>{try{const{ptScale:x,sceneId:C}=Ct(a);if(!Rt(C))return;e.current=dt(x);const W=[];for(let h=0;h<z.length;h++){const m=z[h].children;for(let b=0;b<m.length;b++){const y=m[b];y.bounds=k(y.bounds.center.x,y.bounds.center.y,y.source.width,y.source.height,e.current,y.bounds.rotation),W.push(y)}}const _=[...s.current.values()];for(let h=0;h<_.length;h++){const m=_[h];m.bounds=k(m.bounds.center.x,m.bounds.center.y,m.source.width,m.source.height,e.current,m.bounds.rotation)}E.current.add(()=>n.update(...W,..._))}catch(x){console.error("ptscale",x)}},n.renderer.events.addEventListener("viewport:ptscale",I.current),T=requestAnimationFrame(()=>{I.current?.(n.scale)}),Y.forEach((a,x)=>{Z.set(x,ht({id:x,width:Q,height:Q,color:a,scale:window.devicePixelRatio}))}),Z.set(nt,ht({id:"orphan",width:Q,height:Q,color:nt,scale:window.devicePixelRatio}));let $=null;try{const a=await It(`${bt}icons/bus-white.svg`);$=Mt(a,at,at,window.devicePixelRatio)}catch(a){console.error(a)}p.current=a=>{try{const x=JSON.parse(a.data);if(x.type!==Tt)return;const C=a.timeStamp||performance.now();M.current=Math.round(C-f.current),f.current=C;const W=Math.max(M.current??lt,lt),_=o.current,h=s.current,m=U.children,b=E.current;let y=!1;x.data.forEach(({id:l,x:D,y:O,route_id:st,hidden:mt})=>{if(_.has(l)&&(_.get(l)?.(),_.delete(l)),mt&&h.has(l)&&h.has(X(l))){const P=h.get(l);P.hidden=!0;const R=h.get(X(l));R.hidden=!0,b.add(()=>n.update(P,R));return}if(w.current.set(l,performance.now()),!h.has(l)){const P=Z.get(st)||Z.get(nt),R={id:l,source:P,bounds:k(D,O,P.width,P.height,e.current,0)};if(h.set(l,R),$){const j=X(l),it={id:j,source:$,bounds:k(D,O,$.width,$.height,e.current,0)};$.setAttribute("id",j),h.set(j,it),m.push(R,it)}else m.push(R);y=!0;return}const J=h.get(l),rt=h.get(X(l)),yt=J.bounds.center,tt=Ot(yt,{x:D,y:O},A.current.get(st));if(tt.reduce((P,R,j)=>j===0?P:P+ot(tt[j-1],R),0)>=vt||document.hidden)ft({rendererService:n,updateQueue:b,vehicle:J,vehicleFinery:rt,x:D,y:O,scale:e.current,angle:Nt(J.bounds.center,{x:D,y:O})});else{const P=Ht(tt,W,R=>{ft({rendererService:n,updateQueue:b,vehicle:J,vehicleFinery:rt,x:R.x,y:R.y,scale:e.current,angle:R.angle})});_.set(l,P)}}),y&&b.add(()=>n.update(U))}catch(x){console.error("handleSocketMessage",x)}},L(),S(d.config?(Number(d.config.vehicle_inactive_interval)||20)*1e3:_t)}catch(d){console.warn(d)}}N();function L(){r.current?.readyState===WebSocket.OPEN||r.current?.readyState===WebSocket.CONNECTING||(r.current=new WebSocket(i),r.current.onmessage=p.current,r.current.onopen=()=>{g.current=ut},r.current.onclose=()=>{if(!navigator.onLine)return;setTimeout(L,g.current);const d=3e4;g.current=Math.min(g.current*2,d)})}function v(){L()}window.addEventListener("online",v);function S(d){clearInterval(u.current),u.current=window.setInterval(()=>{const Y=performance.now(),H=[],V=[];w.current.forEach((B,q)=>{if(Y-B<d)return;const G=s.current.get(q);G&&(G.hidden=!0,V.push(G),H.push(q));const z=X(q),U=s.current.get(z);U&&(U.hidden=!0,V.push(U),H.push(z))}),V.length&&E.current.add(()=>n.update(...V)),H.forEach(B=>w.current.delete(B))},d)}return()=>{I.current&&n.renderer&&n.renderer.events.removeEventListener("viewport:ptscale",I.current),T!==void 0&&cancelAnimationFrame(T),o.current.forEach(d=>d?.()),o.current.clear(),s.current.clear(),E.current.destroy(),window.removeEventListener("online",v),clearInterval(u.current)}},[t,n,c,i])}function dt(t){return Math.min(t||window.devicePixelRatio,Pt)}function Ct(t){return typeof t=="number"?{ptScale:t}:t}function Nt(t,n){return Math.atan2(n.y-t.y,n.x-t.x)}function St({radius:t,scale:n,color:c}){const i=document.createElement("canvas"),e=i.getContext("2d");e.imageSmoothingEnabled=!1;const s=Math.ceil(t*2*n),o=s/2,r=t*.78,p=t*.33;return i.width=s,i.height=s,e.translate(o,o),e.scale(n,n),e.beginPath(),e.arc(0,0,t,0,2*Math.PI),e.fillStyle="#FFFFFF",e.fill(),e.beginPath(),e.arc(0,0,r,0,2*Math.PI),e.fillStyle=c,e.fill(),e.beginPath(),e.arc(0,0,p,0,2*Math.PI),e.fillStyle="#FFFFFF",e.fill(),i}function ht({id:t,width:n,height:c,color:i,scale:e}){const s=2*e,o=n/2*e,r=c*e,p=.6,f=.01,M=r*p,E=r,A=8*e,I=E+s+M/2+A*2,g=o*2+M+s+A*2,w=document.createElement("canvas");w.setAttribute("id",t),w.width=I,w.height=g;const u=w.getContext("2d"),T=I/2,N=g/2;u.save(),u.translate(T,N),u.rotate(-Math.PI/2),u.translate(-T,-N);const L=T,v=N-E/2+o,S=v+M;return u.shadowColor="rgba(16, 24, 40, 0.2)",u.shadowBlur=A/2,u.beginPath(),u.arc(L,v,o,Math.PI,0,!1),u.bezierCurveTo(L+o,v+r*.3,L+f*o,S,L,S),u.bezierCurveTo(L-f*o,S,L-o,v+r*.3,L-o,v),u.closePath(),u.fillStyle=i,u.fill(),u.strokeStyle="#FFFFFF",u.lineWidth=s,u.stroke(),u.restore(),w}function ot(t,n){return Math.hypot(t.x-n.x,t.y-n.y)}function X(t){return`${t}_finery`}function ft({rendererService:t,updateQueue:n,vehicle:c,vehicleFinery:i,x:e,y:s,scale:o,angle:r}){c.bounds=k(e,s,c.source.width,c.source.height,o,r),c.hidden=!1,i?(i.bounds=k(e,s,i.source.width,i.source.height,o,Ft(t.angle)),i.hidden=!1,n.add(()=>t.update(i,c))):n.add(()=>t.update(c))}function K(t,n,c){return{x:t.x+(n.x-t.x)*c,y:t.y+(n.y-t.y)*c}}function gt(t,n){let c=1/0,i={index:0,t:0};for(let e=0;e<n.length-1;e++){const s=n[e],o=n[e+1],r=o.x-s.x,p=o.y-s.y,f=r*r+p*p,M=f?((t.x-s.x)*r+(t.y-s.y)*p)/f:0,E=Math.max(0,Math.min(1,M)),A=K(s,o,E),I=ot(t,A);I<c&&(c=I,i={index:e,t:E})}return i}function Dt(t,n,c){const i=ot(t,n),e=Math.max(2,Math.ceil(i/c)+1),s=[];for(let o=0;o<e;o++){const r=o/(e-1),p=K(t,n,r);s.push({x:p.x,y:p.y})}return s}function Ot(t,n,c){if(!c||!c.length)return Dt(t,n,10);const i=gt(t,c),e=gt(n,c),s=[],o=r=>s.push({x:r.x,y:r.y});i.index+1<c.length?o(K(c[i.index],c[i.index+1],i.t)):o(c[i.index]);for(let r=i.index+1;r<=e.index&&r<c.length;r++)o(c[r]);return e.index+1<c.length?o(K(c[e.index],c[e.index+1],e.t)):o(c[e.index]),s}function Ht(t,n,c,i){if(t.length<2)return()=>{};let e=null,s;const o=[];let r=0;for(let f=0;f<t.length-1;f++){const M=Math.hypot(t[f+1].x-t[f].x,t[f+1].y-t[f].y);o.push(M),r+=M}const p=f=>{e||(e=f);const M=f-e,E=Math.min(M/n,1),A=E*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 w=t[g],u=t[Math.min(g+1,t.length-1)],T=o[g]||0,N=T===0?0:(A-I)/T,L=w.x+(u.x-w.x)*N,v=w.y+(u.y-w.y)*N,S=u.x-w.x,d=u.y-w.y,Y=S===0&&d===0?0:Math.atan2(d,S);c({x:L,y:v,angle:Y}),E<1?s=requestAnimationFrame(p):i&&i()};return s=requestAnimationFrame(p),()=>{s&&cancelAnimationFrame(s)}}function ct(t){return`${t.x},${t.y}`}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { MaplibreViewMode } from '../../store/MaplibreStore';
|
|
2
|
+
/**
|
|
3
|
+
* Main MobX adapter component that bridges application state to the
|
|
4
|
+
* state-agnostic MaplibreWrapper.
|
|
5
|
+
*
|
|
6
|
+
* Reused renderer config modules still read singleton stores internally;
|
|
7
|
+
* MaplibreWrapper itself remains pure and decoupled from application state.
|
|
8
|
+
*/
|
|
9
|
+
interface MaplibreAdapterProps {
|
|
10
|
+
viewMode: MaplibreViewMode;
|
|
11
|
+
}
|
|
12
|
+
declare const MaplibreAdapter: import("react").FunctionComponent<MaplibreAdapterProps>;
|
|
13
|
+
export default MaplibreAdapter;
|
|
14
|
+
//# sourceMappingURL=MaplibreAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as U}from"react/jsx-runtime";import w from"color";import{runInAction as G}from"mobx";import{observer as V}from"mobx-react-lite";import{useCallback as h,useEffect as P,useMemo as m,useRef as b,useState as E}from"react";import{getLayerSvg as J,svgArea as _}from"../../data/svg";import{createSceneDef as W}from"../../renderer";import t,{uiState as f}from"../../store";import R from"../../tools/settings";import X from"../Map/drawing/config/config-all";import{loadLayersImages as H}from"../Map/drawing/config/loadBoothsImages";import{Rect as K}from"../Map/drawing/config/Rect";import{useBuildRoute as Z}from"../Map/traffic/useBuildRoute";import{useManageTraffic as Q}from"../Map/traffic/useManageTraffic";import Y from"./MaplibreWrapper";import{useCameraReactions as q}from"./useCameraReactions";import{useDimming as ee}from"./useDimming";import{useLayerVisibilitySync as re}from"./useLayerVisibilitySync";import{useRendererEvents as oe}from"./useRendererEvents";import{useWayfindingAndMarkers as te}from"./useWayfindingAndMarkers";import{deriveGeoConfig as ne,deriveVenueMapBounds as ae,getLocalRectGeoBounds as ie,getVisibleRectFitPadding as se,INITIAL_FIT_ZOOM_ADJUSTMENT as le}from"./utils/geo-config";import{applyMapOptions as k,DEFAULT_MAP_OPTIONS as ce,getTileSource as me,MAP_2D_OPTIONS as fe}from"./utils/map-helpers";import{calculateTransformMatrix as ue}from"./utils/solver";const x="routes-api.expofp.com";function I(){G(()=>{t.layerStore.layers.forEach(u=>{u.configured=!1,u.children=[],u.loaded=!1}),t.layerStore.layersLoaded=!1})}const pe=V(function({viewMode:M}){const[D,$]=E(null),[C,T]=E(null),e=t.rendererService,S=b(null),a=b(null),v=b(null),r=m(()=>ne(),[]),i=m(()=>r?{center:r.center,bearing:r.bearing,zoom:r.zoom,bounds:ie(_,r.gpsConfig),fitPadding:se(0),zoomAdjustment:le}:null,[r]),L=m(()=>r?ue(r.gpsConfig,J()?.getAttribute("units")):null,[r]),s=m(()=>({...M==="map2d"?fe:ce,maxBounds:r?ae(r.gpsConfig):void 0}),[r,M]),O=b(s),F=m(()=>me(),[]),{mapDimAnimatorRef:p,venueDimAnimatorRef:d,handleMapDimLayerReady:j}=ee(a,e);P(()=>{if(!r)return;let o=!1;I();const g=X(e).then(n=>{if(o)return;const y=w(R.backgroundColor==="none"?"#ebebeb":R.backgroundColor).string(),c=W(n,K.fromCoreRect(_),y);$(c)}).catch(n=>{o||console.warn("Maplibre scene configuration failed.",n)}),A=p.current,l=d.current;return()=>{o=!0,I();const n=S.current;g.finally(()=>e.disposeIfCurrent(n)),S.current=null,a.current=null,v.current=null,T(null),A?.stop(),l?.stop(),f.sceneDefReady=!1}},[r,p,e,d]);const z=h((o,g,A,l)=>{S.current=o,a.current=g,v.current=l,T(o),e.attach(o,A,l),k(g,O.current),p.current?.setTarget(f.dimmed,{immediate:!0}),d.current?.setTarget(f.dimmed,{immediate:!0}),H(e);const n=e.ptScaleRegistry.invoke(e.scale||1);n.length&&e.update(...n);const y=e.rollRegistry.invoke(e.angle||0).flatMap(c=>Array.isArray(c)?c:[c]);y.length&&e.update(...y),t.layerStore.layersLoaded=!0,t.fp.onFpConfigured&&t.fp.onFpConfigured(),f.sceneDefReady=!0,l()},[e,p,d]);P(()=>{O.current=s,k(a.current,s,!0)},[s]),oe(C,e),te(C,e),re(e,a,r),q(a,r),Z({enabled:t.layerStore.layersLoaded&&f.buildRoute,rendererService:e}),Q({permission:t.layerStore.layersLoaded,rendererService:e,dataJsonUrl:`https://${x}/v1/routes?expo=${R.EXPO}`,websocketUrl:`wss://${x}/locations?expo=${R.EXPO}`});const B=h(o=>{console.warn("Maplibre map failed to load; falling back to floorplan mode.",o),t.maplibreStore.deactivateMaplibre()},[]);if(!r||!i||!L||!D)return null;const N=`${i.center.join(",")}:${i.bearing}:${i.zoom}`;return U(Y,{sceneDef:D,geoConfig:i,staticTransform:L,tileSource:F,mapOptions:s,onRendererReady:z,onMapDimLayerReady:j,onMapLoadError:B},N)});export default pe;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import 'maplibre-gl/dist/maplibre-gl.css';
|
|
2
|
+
import { Renderer, type SceneDef } from '@expofp/renderer';
|
|
3
|
+
import type { LngLatBoundsLike, StyleSpecification } from 'maplibre-gl';
|
|
4
|
+
import { Map as MaplibreMap } from 'maplibre-gl';
|
|
5
|
+
export declare const MAP_DIM_LAYER_ID = "expofp-map-dim";
|
|
6
|
+
/**
|
|
7
|
+
* Configuration for the map tile source.
|
|
8
|
+
* Abstracted so we can swap between online and offline (PMTiles) later
|
|
9
|
+
* without touching MaplibreWrapper.
|
|
10
|
+
*/
|
|
11
|
+
export interface TileSourceConfig {
|
|
12
|
+
/** Maplibre style URL or inline style JSON object */
|
|
13
|
+
style: string | StyleSpecification;
|
|
14
|
+
}
|
|
15
|
+
export interface CameraPaddingOptions {
|
|
16
|
+
top: number;
|
|
17
|
+
bottom: number;
|
|
18
|
+
left: number;
|
|
19
|
+
right: number;
|
|
20
|
+
}
|
|
21
|
+
/** Geographic configuration derived from fpGeo.properties */
|
|
22
|
+
export interface GeoConfig {
|
|
23
|
+
/** Center of the venue in [lng, lat] */
|
|
24
|
+
center: [number, number];
|
|
25
|
+
/** Map bearing in degrees */
|
|
26
|
+
bearing: number;
|
|
27
|
+
/** Initial zoom level */
|
|
28
|
+
zoom: number;
|
|
29
|
+
/** Optional initial bounds. When present, MapLibre computes the initial zoom. */
|
|
30
|
+
bounds?: LngLatBoundsLike;
|
|
31
|
+
/** Padding used with initial bounds. */
|
|
32
|
+
fitPadding?: CameraPaddingOptions;
|
|
33
|
+
/** Small correction after bounds-based initial fit. */
|
|
34
|
+
zoomAdjustment?: number;
|
|
35
|
+
}
|
|
36
|
+
export interface MapOptions {
|
|
37
|
+
pitch?: number;
|
|
38
|
+
maxPitch?: number;
|
|
39
|
+
minZoom?: number;
|
|
40
|
+
maxZoom?: number;
|
|
41
|
+
maxBounds?: LngLatBoundsLike;
|
|
42
|
+
}
|
|
43
|
+
export interface MaplibreWrapperProps {
|
|
44
|
+
/** The scene definition to render inside the map */
|
|
45
|
+
sceneDef: SceneDef;
|
|
46
|
+
/** Geographic configuration for map positioning and floorplan locking */
|
|
47
|
+
geoConfig: GeoConfig;
|
|
48
|
+
/** Static SVG-to-Mercator transform prepared by the adapter */
|
|
49
|
+
staticTransform: number[];
|
|
50
|
+
/** Tile source configuration (online style URL for now) */
|
|
51
|
+
tileSource: TileSourceConfig;
|
|
52
|
+
/** Map camera constraints and defaults */
|
|
53
|
+
mapOptions?: MapOptions;
|
|
54
|
+
/** Called when the renderer instance is ready for external interaction */
|
|
55
|
+
onRendererReady?: (renderer: Renderer, map: MaplibreMap, sceneDef: SceneDef, requestRepaint: () => void) => void;
|
|
56
|
+
/** Called when the dim overlay layer is available for paint updates. */
|
|
57
|
+
onMapDimLayerReady?: (map: MaplibreMap) => void;
|
|
58
|
+
/** Called when the map style cannot be loaded. */
|
|
59
|
+
onMapLoadError?: (error: unknown) => void;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* A pure, state-agnostic React component that renders a Maplibre map
|
|
63
|
+
* with the ExpoFP floorplan embedded via CustomLayerInterface.
|
|
64
|
+
*
|
|
65
|
+
* This component does NOT import MobX or any application state.
|
|
66
|
+
* All state synchronization is done externally via the onRendererReady callback.
|
|
67
|
+
*/
|
|
68
|
+
export default function MaplibreWrapper({ sceneDef, geoConfig, staticTransform, tileSource, mapOptions, onRendererReady, onMapDimLayerReady, onMapLoadError, }: MaplibreWrapperProps): import("react").JSX.Element;
|
|
69
|
+
//# sourceMappingURL=MaplibreWrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as T}from"react/jsx-runtime";import"maplibre-gl/dist/maplibre-gl.css";import{Renderer as Z}from"@expofp/renderer";import{addProtocol as B,Map as N}from"maplibre-gl";import{Protocol as G}from"pmtiles";import{useEffect as R,useRef as s}from"react";export const MAP_DIM_LAYER_ID="expofp-map-dim";const y="expofp-map-dim-source",U="3d-expofp";let g=null;const Y=["coalesce",["get","name:en"],["get","name_en"],["get","name:latin"],["get","name"]],k={type:"Feature",geometry:{type:"Polygon",coordinates:[[[-180,-85],[180,-85],[180,85],[-180,85],[-180,-85]]]},properties:{}};function S(e){if(!e||typeof e!="object")return!1;const r=e.length;if(typeof r!="number"||r<16)return!1;const o=e[0];return typeof o=="number"&&Number.isFinite(o)}function H(e){if(S(e))return Array.from(e);const o=e?.defaultProjectionData?.mainMatrix;return S(o)?Array.from(o):(console.warn("Maplibre custom layer received an unsupported projection matrix payload.",e),null)}function b(e){return typeof e=="string"?e.includes("name"):Array.isArray(e)?e.some(r=>b(r)):!e||typeof e!="object"?!1:Object.values(e).some(r=>b(r))}function J(e){return e.type!=="symbol"||!e.id||!e.layout?!1:b(e.layout["text-field"])}function V(e){const r=e.getStyle();for(const o of r.layers??[])J(o)&&e.setLayoutProperty(o.id,"text-field",Y)}function W(){if(!g){g=new G;try{B("pmtiles",g.tile)}catch(e){console.warn("Maplibre PMTiles protocol registration failed.",e)}}}export default function X({sceneDef:e,geoConfig:r,staticTransform:o,tileSource:D,mapOptions:E,onRendererReady:x,onMapDimLayerReady:L,onMapLoadError:M}){const f=s(null),P=s(null),c=s(null),h=s(x),_=s(L),j=s(M),O=s({sceneDef:e,geoConfig:r,staticTransform:o,tileSource:D,mapOptions:E});return R(()=>{h.current=x,_.current=L,j.current=M}),R(()=>{if(!f.current)return;const{sceneDef:d,geoConfig:n,staticTransform:I,tileSource:w,mapOptions:u}=O.current;let p=!1;const l={...d};l.rootLayer={...d.rootLayer};const C=d.rootLayer.children;l.rootLayer.children=C.filter(i=>i?.name?.toString().toLowerCase()!=="areamap"),l.background=void 0,l.staticTransform=I,W();const F=n.bounds?{bounds:n.bounds,fitBoundsOptions:{padding:n.fitPadding,bearing:n.bearing}}:{center:n.center,zoom:n.zoom},t=new N({container:f.current,style:w.style,...F,bearing:n.bearing,pitch:u?.pitch??30,maxPitch:u?.maxPitch??70,minZoom:u?.minZoom,maxZoom:u?.maxZoom,maxBounds:u?.maxBounds,canvasContextAttributes:{antialias:!0}});n.zoomAdjustment&&t.jumpTo({zoom:t.getZoom()+n.zoomAdjustment}),P.current=t,t.once("error",i=>{t.isStyleLoaded()||j.current?.(i?.error??i)});const z={id:U,type:"custom",renderingMode:"3d",onAdd(i,m){if(p)return;const a=new Z({canvas:t.getCanvas(),gl:m});if(p){a.dispose();return}a.init(l),c.current=a,h.current?.(a,t,l,()=>t.triggerRepaint())},render(i,m){if(!c.current||c.current.isDisposed)return;const a=H(m??i);a&&c.current.render(a)}},A=()=>{V(t),t.getSource(y)||t.addSource(y,{type:"geojson",data:k}),t.getLayer(MAP_DIM_LAYER_ID)||t.addLayer({id:MAP_DIM_LAYER_ID,type:"fill",source:y,paint:{"fill-color":"#000000","fill-opacity":0,"fill-opacity-transition":{duration:0,delay:0}}}),_.current?.(t),t.addLayer(z)};return t.on("style.load",A),()=>{p=!0,t.off("style.load",A),c.current?.dispose(),c.current=null,t.remove(),P.current=null}},[]),T("div",{ref:f,style:{position:"absolute",top:0,left:0,width:"100%",height:"100%"}})}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Map as MaplibreMap } from 'maplibre-gl';
|
|
2
|
+
import type { RefObject } from 'react';
|
|
3
|
+
import type { GeoConfig } from './utils/geo-config';
|
|
4
|
+
/**
|
|
5
|
+
* Bundles all camera-related MobX reactions: moveToBooths, moveToRect,
|
|
6
|
+
* zoomBy, moveToLocation, and centerMap. Each watches a uiState trigger,
|
|
7
|
+
* moves the camera, and clears the trigger.
|
|
8
|
+
*/
|
|
9
|
+
export declare function useCameraReactions(mapRef: RefObject<MaplibreMap | null>, geoConfig: GeoConfig | null): void;
|
|
10
|
+
//# sourceMappingURL=useCameraReactions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import y from"../../core/Rect";import{svgArea as T}from"../../data/svg";import f,{uiState as c}from"../../store";import{convertLocalToGps as b}from"../../utils/gps";import{useReaction as u}from"../../utils/mobx";import{fitMapToLocalRect as p}from"./utils/geo-config";const i=c;export function useCameraReactions(s,e){u(()=>i.moveToBooths,r=>{const t=s.current;if(!r||!t||!e)return;const o=r.filter(m=>m.rect);if(o.length===0)return;const n=o.map(m=>m.rect),a=y.fromMultiple(n);p(t,a,e),i.moveToBooths=null}),u(()=>i.moveToRect,r=>{const t=s.current;!r||!t||!e||(p(t,r,e),i.moveToRect=null)}),u(()=>i.zoomBy,r=>{const t=s.current;!r||!t||(t.flyTo({zoom:t.getZoom()+(r>1?.5:-.5),animate:!0,duration:500}),i.zoomBy=null)}),u(()=>c.moveToLocation,r=>{const t=s.current,o=f.routeStore.currentPosition;if(!r||!t||!o)return;const{lng:n,lat:a}=o,m=typeof n=="number"&&Number.isFinite(n)&&typeof a=="number"&&Number.isFinite(a);let l;if(m)l=[n,a];else{if(!e)return;l=b(o.x,o.y,e.gpsConfig)}t.flyTo({center:l,animate:!0,duration:1e3}),t.once("moveend",()=>{c.moveToLocation=!1})}),u(()=>c.centerMap,r=>{const t=s.current;if(!r||!t||!e)return;if(!(c.list.type==="search"&&!c.list.text)){const n=f.layerStore.rectangle||T;p(t,n,e,{padding:0})}c.centerMap=!1})}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Map as MaplibreMap } from 'maplibre-gl';
|
|
2
|
+
import type { RefObject } from 'react';
|
|
3
|
+
import type { RendererService } from '../../renderer/RendererService';
|
|
4
|
+
import type { DimmingAnimator } from '../../utils/dimming';
|
|
5
|
+
export interface DimmingControls {
|
|
6
|
+
mapDimAnimatorRef: RefObject<DimmingAnimator | null>;
|
|
7
|
+
venueDimAnimatorRef: RefObject<DimmingAnimator | null>;
|
|
8
|
+
handleMapDimLayerReady: (map: MaplibreMap) => void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Manages scene dimming: creates map and venue dim animators,
|
|
12
|
+
* keeps them in sync with uiState.dimmed via a MobX reaction,
|
|
13
|
+
* and provides a callback for when the map dim layer is ready.
|
|
14
|
+
*/
|
|
15
|
+
export declare function useDimming(mapRef: RefObject<MaplibreMap | null>, rendererService: RendererService): DimmingControls;
|
|
16
|
+
//# sourceMappingURL=useDimming.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useCallback as I,useEffect as c,useRef as o}from"react";import{uiState as l}from"../../store";import{applyVenueDimValue as T,createDimmingAnimator as s,DIM_INTENSITY as p,VENUE_DIM_INTENSITY as V}from"../../utils/dimming";import{useReaction as d}from"../../utils/mobx";import{applyMapDimValue as f}from"./utils/map-helpers";export function useDimming(i,u){const a=o(u);c(()=>{a.current=u},[u]);const e=o(null),r=o(null);c(()=>{const t=s(m=>{f(i.current,m*p)}),n=s(m=>{T(a.current,m*V)});return e.current=t,r.current=n,()=>{t.stop(),n.stop(),e.current=null,r.current=null}},[i]),d(()=>l.dimmed,t=>{e.current?.setTarget(t),r.current?.setTarget(t)});const D=I(t=>{const n=e.current?.getValue()??(l.dimmed?1:0);f(t,n*p)},[]);return{mapDimAnimatorRef:e,venueDimAnimatorRef:r,handleMapDimLayerReady:D}}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Map as MaplibreMap } from 'maplibre-gl';
|
|
2
|
+
import type { RefObject } from 'react';
|
|
3
|
+
import type { RendererService } from '../../renderer/RendererService';
|
|
4
|
+
import type { GeoConfig } from './utils/geo-config';
|
|
5
|
+
/**
|
|
6
|
+
* Keeps the 3D scene layer visibility in sync with LayerStore.
|
|
7
|
+
* When a layer's visibility changes, updates the corresponding LayerDefs
|
|
8
|
+
* and fits the camera to the newly visible floor.
|
|
9
|
+
*/
|
|
10
|
+
export declare function useLayerVisibilitySync(rendererService: RendererService, mapRef: RefObject<MaplibreMap | null>, geoConfig: GeoConfig | null): void;
|
|
11
|
+
//# sourceMappingURL=useLayerVisibilitySync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useRef as m}from"react";import s from"../../store";import{useReaction as p}from"../../utils/mobx";import{fitMapToLocalRect as L}from"./utils/geo-config";import{collectLayerDefsByName as b}from"./utils/layer-defs";export function useLayerVisibilitySync(a,y,u){const t=m(null),f=m(null);p(()=>s.layerStore.layers.map(e=>`${e.name}:${e.visible?1:0}`),()=>{const e=a.scene;if(!e)return;t.current?.rootLayer!==e.rootLayer&&(t.current={rootLayer:e.rootLayer,defsByName:b(e.rootLayer)});const d=t.current.defsByName,n=[];for(const o of s.layerStore.layers){const c=d.get(o.name);if(c?.length)for(const i of c){const l=!o.visible;i.hidden!==l&&(i.hidden=l,n.push(i))}}n.length&&a.update(...n);const r=s.layerStore.layers.find(o=>o.visible&&!o.frozen&&!o.rootParent&&!o.pathway);!r||f.current===r.name||(f.current=r.name,L(y.current,r.viewbox??r.rect,u))})}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Renderer } from '@expofp/renderer';
|
|
2
|
+
import type { RendererService } from '../../renderer/RendererService';
|
|
3
|
+
/**
|
|
4
|
+
* Attaches pointer and navigation event listeners to the renderer.
|
|
5
|
+
* Listeners are set up when the renderer becomes available and
|
|
6
|
+
* cleaned up when it changes or the component unmounts.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useRendererEvents(renderer: Renderer | null, rendererService: RendererService): void;
|
|
9
|
+
//# sourceMappingURL=useRendererEvents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useEffect as g}from"react";import{pickDefaultScene as p}from"../../renderer/engine-core/defs";import l,{uiState as o}from"../../store";import{LayerMode as u}from"../../store/LayerStore";import k from"../Map/booth-by-xy";import{getMarkerFromClick as L}from"../Map/drawing/config/config-markers";import{getBooth as E}from"./utils/layer-defs";const C=o;export function useRendererEvents(t,m){g(()=>{if(!t)return;const v=({data:s})=>{if(o.setKioskModeEnabled)return;const{point:e,defs:r}=p(s),n=k(e.x,e.y),i=E(r[0]);C.hoveredBooth=n||i},d=()=>{o.setKioskModeEnabled||(C.hoveredBooth=null)},f=({data:s})=>{if(!o?.rootElement)return;window.__resett?.(),o.overlayPosition==="bottom"&&o.overlaySize==="full"&&l.showMap();const{point:e,defs:r}=p(s),{x:n,y:i}=e;if(o.onGetCoordsClick){const a=l.layerStore.layers.find(c=>c.visible&&(c.mode===u.TurnedOn||c.mode===u.TurnedOff));o.onGetCoordsClick({x:n,y:i,z:a?.name||null})}if(o.setKioskModeEnabled)return;if(o.onMarkerClick){const a=L(n,i,m.scale);o.onMarkerClick(a)}const y=k(e.x,e.y),b=E(r[0]);l.clickBooth(y||b)},h=()=>window.__resett?.();return t.events.addEventListener("pointer:move",v),t.events.addEventListener("pointer:out",d),t.events.addEventListener("pointer:click",f),t.events.addEventListener("navigation:change",h),()=>{t.events.removeEventListener("pointer:move",v),t.events.removeEventListener("pointer:out",d),t.events.removeEventListener("pointer:click",f),t.events.removeEventListener("navigation:change",h)}},[t,m])}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Renderer } from '@expofp/renderer';
|
|
2
|
+
import type { RendererService } from '../../renderer/RendererService';
|
|
3
|
+
/**
|
|
4
|
+
* Sets up wayfinding and markers when the renderer becomes available,
|
|
5
|
+
* and tears them down when the renderer changes or the component unmounts.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useWayfindingAndMarkers(renderer: Renderer | null, rendererService: RendererService): void;
|
|
8
|
+
//# sourceMappingURL=useWayfindingAndMarkers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{useEffect as a}from"react";import{createWayfinding as i}from"../../wayfinding/createWayfinding";import{configMarkers as m}from"../Map/drawing/config/config-markers";export function useWayfindingAndMarkers(n,f){a(()=>{if(!n)return;const o=i(f),t=m(f);return()=>{o?.(),t?.()}},[n,f])}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { LngLatBoundsLike, Map as MaplibreMap } from 'maplibre-gl';
|
|
2
|
+
import type CoreRect from '../../../core/Rect';
|
|
3
|
+
import type { GeoConfig as MaplibreGeoConfig } from '../MaplibreWrapper';
|
|
4
|
+
import type { TransformGeoConfig } from './solver';
|
|
5
|
+
export interface GeoConfig extends MaplibreGeoConfig {
|
|
6
|
+
gpsConfig: TransformGeoConfig;
|
|
7
|
+
}
|
|
8
|
+
export interface CameraPaddingOptions {
|
|
9
|
+
top: number;
|
|
10
|
+
bottom: number;
|
|
11
|
+
left: number;
|
|
12
|
+
right: number;
|
|
13
|
+
}
|
|
14
|
+
export interface FitMapOptions {
|
|
15
|
+
duration?: number;
|
|
16
|
+
padding?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare const MAP_BOUNDS_PADDING_FACTOR = 3;
|
|
19
|
+
export declare const MAP_BOUNDS_MIN_PADDING_DEGREES = 0.02;
|
|
20
|
+
export declare const INITIAL_FIT_ZOOM_ADJUSTMENT = 0.15;
|
|
21
|
+
export declare function deriveVenueMapBounds(config: TransformGeoConfig): LngLatBoundsLike | undefined;
|
|
22
|
+
export declare function getLocalRectGeoBounds(rect: CoreRect, config: TransformGeoConfig): LngLatBoundsLike;
|
|
23
|
+
export declare function getVisibleRectFitPadding(extraPadding?: number): CameraPaddingOptions;
|
|
24
|
+
/**
|
|
25
|
+
* Derive the geographic configuration from the fpGeo data.
|
|
26
|
+
* Returns null if geo data is not available.
|
|
27
|
+
*/
|
|
28
|
+
export declare function deriveGeoConfig(): GeoConfig | null;
|
|
29
|
+
export declare function fitMapToLocalRect(map: MaplibreMap | null, rect: CoreRect | null, geoConfig: GeoConfig | null, options?: FitMapOptions): void;
|
|
30
|
+
//# sourceMappingURL=geo-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{fpGeo as h}from"../../../data/fpGeo";import{svgArea as s}from"../../../data/svg";import{uiState as M}from"../../../store";import{convertLocalToGps as m}from"../../../utils/gps";export const MAP_BOUNDS_PADDING_FACTOR=3,MAP_BOUNDS_MIN_PADDING_DEGREES=.02,INITIAL_FIT_ZOOM_ADJUSTMENT=.15;export function deriveVenueMapBounds(t){const n=[[s.x1,s.y1],[s.x2,s.y1],[s.x2,s.y2],[s.x1,s.y2]].map(([r,p])=>m(r,p,t));if(!n.every(([r,p])=>Number.isFinite(r)&&Number.isFinite(p)))return;const o=n.map(([r])=>r),i=n.map(([,r])=>r),a=Math.min(...o),e=Math.max(...o),c=Math.min(...i),u=Math.max(...i),x=Math.max((e-a)*MAP_BOUNDS_PADDING_FACTOR,MAP_BOUNDS_MIN_PADDING_DEGREES),f=Math.max((u-c)*MAP_BOUNDS_PADDING_FACTOR,MAP_BOUNDS_MIN_PADDING_DEGREES);return[[a-x,c-f],[e+x,u+f]]}export function getLocalRectGeoBounds(t,n){const o=[m(t.x1,t.y1,n),m(t.x2,t.y1,n),m(t.x2,t.y2,n),m(t.x1,t.y2,n)],i=o.map(([e])=>e),a=o.map(([,e])=>e);return[[Math.min(...i),Math.min(...a)],[Math.max(...i),Math.max(...a)]]}export function getVisibleRectFitPadding(t=0){const n=M.canvasVisibleRectPx,o=M.screenSize;return!n||!o?{top:t,bottom:t,left:t,right:t}:{top:Math.max(0,n.y1)+t,bottom:Math.max(0,o.height-n.y2)+t,left:Math.max(0,n.x1)+t,right:Math.max(0,o.width-n.x2)+t}}export function deriveGeoConfig(){if(!h?.properties?.config)return null;const t=h.properties.config,n=(t.p0.lng+t.p2.lng)/2,o=(t.p0.lat+t.p2.lat)/2;return{center:[n,o],bearing:t.bearing??0,zoom:16,gpsConfig:t}}export function fitMapToLocalRect(t,n,o,i={}){if(!t||!n||!o||n.h===1/0||n.w===1/0||n.h<=0||n.w<=0)return;const a=getLocalRectGeoBounds(n,o.gpsConfig),e=getVisibleRectFitPadding(i.padding??50);t.fitBounds(a,{padding:e,duration:i.duration??1e3,bearing:o.bearing})}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { LayerDef, ShapeDef } from '@expofp/renderer';
|
|
2
|
+
export declare function collectLayerDefsByName(layer: LayerDef, acc?: Map<string, LayerDef[]>): Map<string, LayerDef[]>;
|
|
3
|
+
export declare function getBooth(shapeDef: ShapeDef): import("../../../store/BoothStore").Booth | null | undefined;
|
|
4
|
+
//# sourceMappingURL=layer-defs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{boothStore as t}from"../../../store";export function collectLayerDefsByName(e,n=new Map){if(e.name){const o=n.get(e.name)??[];o.push(e),n.set(e.name,o)}for(const o of e.children??[])o&&"children"in o&&collectLayerDefsByName(o,n);return n}export function getBooth(e){return e?.shape?t.booths.find(n=>n.shapes?.some(o=>o.shape===e.shape)):null}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Map as MaplibreMap } from 'maplibre-gl';
|
|
2
|
+
import type { MapOptions, TileSourceConfig } from '../MaplibreWrapper';
|
|
3
|
+
export declare const DEFAULT_TILE_SOURCE: TileSourceConfig;
|
|
4
|
+
export declare const DEFAULT_MAP_OPTIONS: MapOptions;
|
|
5
|
+
export declare const MAP_2D_OPTIONS: MapOptions;
|
|
6
|
+
export declare function applyMapDimValue(map: MaplibreMap | null, value: number): void;
|
|
7
|
+
export declare function applyMapOptions(map: MaplibreMap | null, mapOptions: MapOptions, animatePitch?: boolean): void;
|
|
8
|
+
export declare function getTileSource(): TileSourceConfig;
|
|
9
|
+
//# sourceMappingURL=map-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import s from"../../../store";import{MAP_DIM_LAYER_ID as c}from"../MaplibreWrapper";export const DEFAULT_TILE_SOURCE={style:"https://basemaps.cartocdn.com/gl/positron-gl-style/style.json"},DEFAULT_MAP_OPTIONS={pitch:30,maxPitch:70,minZoom:14},MAP_2D_OPTIONS={pitch:0,maxPitch:0,minZoom:14};export function applyMapDimValue(t,e){t?.getLayer(c)&&(t.setPaintProperty(c,"fill-opacity",u(e)),t.triggerRepaint())}function u(t){return Math.min(Math.max(t,0),1)}export function applyMapOptions(t,e,i=!1){if(!t)return;t.setMinZoom(e.minZoom??null),t.setMaxZoom(e.maxZoom??null),t.setMaxBounds(e.maxBounds??null);const o=e.pitch,n=e.maxPitch,r=t.getPitch(),l=!!(i&&o!=null&&n!=null&&n<r);n!=null&&!l&&t.setMaxPitch(e.maxPitch),!(o==null||r===o)&&(i?(t.easeTo({pitch:o,duration:300}),l&&t.once("moveend",()=>t.setMaxPitch(n))):t.jumpTo({pitch:o}))}export function getTileSource(){const t=s.fp?.maplibre??window.__efpMaplibre;return t?.style?{style:t.style}:t?.styleUrl?{style:t.styleUrl}:DEFAULT_TILE_SOURCE}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
interface GeoAnchorPoint {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
lat: number;
|
|
5
|
+
lng: number;
|
|
6
|
+
}
|
|
7
|
+
export interface TransformGeoConfig {
|
|
8
|
+
p0: GeoAnchorPoint;
|
|
9
|
+
p1?: GeoAnchorPoint;
|
|
10
|
+
p2: GeoAnchorPoint;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Calculates an affine transformation matrix that maps SVG floorplan
|
|
14
|
+
* coordinates to Mercator coordinates. This matrix is used as the
|
|
15
|
+
* `staticTransform` in the `SceneDef` so the renderer can position
|
|
16
|
+
* the floorplan correctly inside a Maplibre `CustomLayerInterface`.
|
|
17
|
+
*
|
|
18
|
+
* The solver uses 3 anchor points (p0, p1, p2) from the geo config
|
|
19
|
+
* to set up a system of linear equations, then solves via Gaussian
|
|
20
|
+
* elimination with partial pivoting.
|
|
21
|
+
*/
|
|
22
|
+
export declare function calculateTransformMatrix(geoConfig: TransformGeoConfig, units?: string | null): number[];
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=solver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{MercatorCoordinate as A}from"maplibre-gl";const F=1e-12,S=3.28084,b=6371e3;export function calculateTransformMatrix(n,i){const o=n.p1??_(n),s=[n.p0,o,n.p2],r=[],t=[],a=[];for(const h of s){N(h),t.push([h.x,h.y]);const p=A.fromLngLat([h.lng,h.lat],0),d=p.meterInMercatorCoordinateUnits();u(p.x),u(p.y),u(d),r.push(d),a.push([p.x,p.y])}const c=[],e=[];for(let h=0;h<3;h++){const[p,d]=t[h],[L,T]=a[h];c.push([p,d,1,0,0,0]),e.push(L),c.push([0,0,0,p,d,1]),e.push(T)}const l=k(c,e),[f,E,y,w,P,v]=l,R=i?.toLowerCase?.().trim()==="ft"?1/S:1,I=r.reduce((h,p)=>h+p,0)/r.length*R,x=[f,w,0,0,E,P,0,0,0,0,I,0,y,v,0,1];if(!x.every(Number.isFinite))throw new Error("Cannot calculate Maplibre transform: geo anchor points produced a non-finite matrix.");return x}function _(n){const i=n.p2.x-n.p0.x,o=n.p2.y-n.p0.y;if(i===0&&o===0)throw new Error("Cannot calculate Maplibre transform: p0 and p2 have identical SVG coordinates.");const s=n.p0.x-o,r=n.p0.y+i,t=D(n.p0.lat,n.p0.lng,n.p2.lat,n.p2.lng),a=Z(n.p0.lat,n.p0.lng,n.p2.lat,n.p2.lng),[c,e]=j(n.p0.lat,n.p0.lng,t,a+90);return{x:s,y:r,lat:e,lng:c}}function N(n){u(n.x),u(n.y),u(n.lat),u(n.lng)}function u(n){if(!Number.isFinite(n))throw new Error("Cannot calculate Maplibre transform: geo anchor points contain invalid coordinates.")}function M(n){return n*Math.PI/180}function m(n){return n*180/Math.PI}function D(n,i,o,s){const r=M(n),t=M(o),a=M(o-n),c=M(s-i),e=Math.sin(a/2)*Math.sin(a/2)+Math.cos(r)*Math.cos(t)*Math.sin(c/2)*Math.sin(c/2),l=2*Math.atan2(Math.sqrt(e),Math.sqrt(1-e));return b*l}function Z(n,i,o,s){const r=M(n),t=M(o),a=M(s-i),c=Math.sin(a)*Math.cos(t),e=Math.cos(r)*Math.sin(t)-Math.sin(r)*Math.cos(t)*Math.cos(a);return(m(Math.atan2(c,e))+360)%360}function j(n,i,o,s){const r=o/b,t=M(s),a=M(n),c=M(i),e=Math.asin(Math.sin(a)*Math.cos(r)+Math.cos(a)*Math.sin(r)*Math.cos(t)),l=c+Math.atan2(Math.sin(t)*Math.sin(r)*Math.cos(a),Math.cos(r)-Math.sin(a)*Math.sin(e));return[m(l),m(e)]}function k(n,i){const o=n.length,s=n.map((t,a)=>[...t,i[a]]);for(let t=0;t<o;t++){let a=t;for(let c=t+1;c<o;c++)Math.abs(s[c][t])>Math.abs(s[a][t])&&(a=c);if([s[t],s[a]]=[s[a],s[t]],Math.abs(s[t][t])<F)throw new Error("Cannot calculate Maplibre transform: geo anchor points are collinear or invalid.");for(let c=t+1;c<o;c++){const e=s[c][t]/s[t][t];for(let l=t;l<=o;l++)s[c][l]-=e*s[t][l]}}const r=new Array(o);for(let t=o-1;t>=0;t--){r[t]=s[t][o];for(let a=t+1;a<o;a++)r[t]-=s[t][a]*r[a];r[t]/=s[t][t]}return r}
|
|
@@ -3,6 +3,6 @@ interface OverlayContainerProps {
|
|
|
3
3
|
isGDPR: boolean;
|
|
4
4
|
allowConsent?: boolean;
|
|
5
5
|
}
|
|
6
|
-
declare const OverlayContainer: React.
|
|
6
|
+
declare const OverlayContainer: React.FunctionComponent<OverlayContainerProps>;
|
|
7
7
|
export default OverlayContainer;
|
|
8
8
|
//# sourceMappingURL=OverlayContainer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as l}from"react/jsx-runtime";import{observer as a}from"mobx-react-lite";import t from"../ui/OverlayGrip";import{uiState as o}from"../store";import{t as e}from"../utils/i18n";const i=a(()=>{const r=o.overlaySize==="full";return l(t,{isFull:r,onToggle:()=>o.toggleMapOverlay(),ariaLabel:r?e("Collapse overlay"):e("Expand overlay")})});export default i;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { ScrollableRowProps } from "../ui/ScrollableRow";
|
|
3
|
+
type ScrollableRowContainerProps = Omit<ScrollableRowProps, "leftAriaLabel" | "rightAriaLabel" | "isRtl">;
|
|
4
|
+
declare const ScrollableRowContainer: React.FunctionComponent<ScrollableRowContainerProps>;
|
|
5
|
+
export default ScrollableRowContainer;
|
|
6
|
+
//# sourceMappingURL=ScrollableRowContainer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{jsx as t}from"react/jsx-runtime";import{observer as l}from"mobx-react-lite";import e from"../ui/ScrollableRow";import{uiState as i}from"../store";import{t as r}from"../utils/i18n";const a=l(o=>t(e,{...o,isRtl:i.rtl,leftAriaLabel:r("Scroll left"),rightAriaLabel:r("Scroll right")}));export default a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as r,jsxs as a}from"react/jsx-runtime";import{useMemo as i}from"react";import l from"classnames";import{observer as n}from"mobx-react-lite";import
|
|
1
|
+
import{jsx as r,jsxs as a}from"react/jsx-runtime";import{useMemo as i}from"react";import l from"classnames";import{observer as n}from"mobx-react-lite";import e from"../../store";import m from"./SearchButton";import u from"./SearchSubButtons";import f from"../ScrollableRowContainer";import p from"../../data";import{t as c}from"../../utils/i18n";import"./SearchButtons.scss";const d=n(()=>{const{searchButtonsStore:o}=e,s=i(()=>o.searchButtons.filter(t=>t.enabled),[o.searchButtons]);return o.shouldShow?a("div",{className:l("efp-search-buttons",{"is-overlay-full":e.uiState.isOverlayOpen&&e.uiState.overlaySize==="full","is-long-levels":!p.shortLevelName,"efp-semi-transparent":e.uiState.setKioskModeEnabled}),children:[r(f,{ariaLabel:c("Search filters"),scrollAmount:150,showArrowsOnMobile:!1,arrowPosition:"inside",children:s.map(t=>r(m,{...t,isDisabled:e.uiState.setKioskModeEnabled},t.id))}),o.subButtonsEnabled&&r(u,{})]}):null});export default d;
|
|
@@ -5,6 +5,6 @@ export interface ShortcutsToolbarProps {
|
|
|
5
5
|
showFiltersButton?: boolean;
|
|
6
6
|
className?: string;
|
|
7
7
|
}
|
|
8
|
-
declare const ShortcutsToolbar: React.
|
|
8
|
+
declare const ShortcutsToolbar: React.NamedExoticComponent<ShortcutsToolbarProps>;
|
|
9
9
|
export default ShortcutsToolbar;
|
|
10
10
|
//# sourceMappingURL=ShortcutsToolbar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as r,jsxs as c}from"react/jsx-runtime";import{memo as u}from"react";import
|
|
1
|
+
import{jsx as r,jsxs as c}from"react/jsx-runtime";import{memo as u}from"react";import a from"classnames";import{observer as h}from"mobx-react-lite";import n from"../../store";import p from"./ShortcutButton";import f from"./ShortcutsFiltersButton";import S from"../ScrollableRowContainer";import{t as b}from"../../utils/i18n";import"./ShortcutsToolbar.scss";const m=u(h(({interfaceId:o,showFiltersButton:i=!0,className:e})=>{const{shortcutRegistry:t}=n,s=t.getShortcuts(o);return!t.shouldShowShortcuts(o)||s.length===0?null:r("div",{className:a("shortcuts-toolbar",e),children:c(S,{ariaLabel:b("Shortcuts"),className:"shortcuts-toolbar__scrollable",scrollAmount:150,showArrowsOnMobile:!1,arrowPosition:"inside",children:[i&&r(f,{interfaceId:o}),s.map(l=>r(p,{...l,interfaceId:o},l.id))]})})}));m.displayName="ShortcutsToolbar";export default m;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { WayfindingFloorSelectorProps } from "../ui/WayfindingFloorSelector";
|
|
3
|
-
declare const WayfindingFloorSelectorContainer: React.
|
|
3
|
+
declare const WayfindingFloorSelectorContainer: ({ floors, floorSelectionLabel, ...rest }: WayfindingFloorSelectorProps) => React.JSX.Element;
|
|
4
4
|
export default WayfindingFloorSelectorContainer;
|
|
5
5
|
//# sourceMappingURL=WayfindingFloorSelectorContainer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as i}from"react/jsx-runtime";import{observer as s}from"mobx-react-lite";import{t as o}from"../../utils/i18n";import
|
|
1
|
+
import{jsx as i}from"react/jsx-runtime";import{observer as s}from"mobx-react-lite";import{t as o}from"../../utils/i18n";import n from"../../ui/PermissionNotice";export default s(function({isOpen:e,onAllow:t,onCancel:r}){return e?i(n,{title:o("Show your position on the map"),acceptText:o("Allow compass access"),rejectText:o("Not now"),onAccept:t,onReject:r,children:o("To display your current position and orient the map around you, we\u2019ll ask for permission to access your device orientation")}):null});
|
|
@@ -7,7 +7,6 @@ export { default as AlertContainer } from "./AlertContainer";
|
|
|
7
7
|
export { default as Autocomplete } from "./Autocomplete";
|
|
8
8
|
export { BaseFilterModal } from "./BaseFilterModal";
|
|
9
9
|
export { default as Badge } from "../ui/Badge";
|
|
10
|
-
export { default as BookmarkSvg } from "./BookmarkSvg";
|
|
11
10
|
export { default as Bookmarks } from "./Bookmarks";
|
|
12
11
|
export { default as Visited } from "./Visited";
|
|
13
12
|
export { default as Booth } from "./Booth/Booth";
|
|
@@ -36,14 +35,14 @@ export { default as Exhibitor } from "./Exhibitor";
|
|
|
36
35
|
export { default as Filter } from "./Filter";
|
|
37
36
|
export { default as LevelSelector } from "./LevelSelector";
|
|
38
37
|
export { default as Gallery } from "./Gallery/Gallery";
|
|
39
|
-
export { default as HeatmapLegend } from "./
|
|
38
|
+
export { default as HeatmapLegend } from "./HeatmapLegendContainer";
|
|
40
39
|
export { default as HighlightTextContainer } from "./HighlightTextContainer";
|
|
41
40
|
export { default as Language } from "./Language";
|
|
42
41
|
export { default as LanguageRow } from "./LanguageRow";
|
|
43
42
|
export { default as LargeMessage } from "./LargeMessage";
|
|
44
43
|
export { default as Layout } from "./Layout";
|
|
45
44
|
export { default as Spinner } from "../ui/Spinner";
|
|
46
|
-
export { default as LevelBadge } from "./
|
|
45
|
+
export { default as LevelBadge } from "./LevelBadgeContainer";
|
|
47
46
|
export { default as List } from "./List";
|
|
48
47
|
export { default as LogoOverlay } from "./LogoOverlay";
|
|
49
48
|
export { default as MapControls } from "./MapControls";
|
|
@@ -53,7 +52,7 @@ export { default as MobileToggleButton } from "./MobileToggleButton";
|
|
|
53
52
|
export { default as Modal } from "./Modal";
|
|
54
53
|
export { default as MultiSelectGroups } from "./MultiSelectGroups";
|
|
55
54
|
export { default as Overlay } from "./Overlay";
|
|
56
|
-
export { default as OverlayGrip } from "./
|
|
55
|
+
export { default as OverlayGrip } from "./OverlayGripContainer";
|
|
57
56
|
export { default as OverlayParticles } from "./OverlayParticles";
|
|
58
57
|
export { default as Radio } from "../ui/Radio";
|
|
59
58
|
export { default as RebookingNotes } from "./RebookingNotes";
|
|
@@ -76,8 +75,8 @@ export { default as WayfindingTemplate } from "./WayfindingTemplate";
|
|
|
76
75
|
export { default as WayInformation } from "./WayInformation";
|
|
77
76
|
export { default as Ws } from "./Ws";
|
|
78
77
|
export { default as YahRow } from "./YahRow";
|
|
79
|
-
export { default as ScrollableRow } from "./
|
|
80
|
-
export { default as PermissionNotice } from "
|
|
78
|
+
export { default as ScrollableRow } from "./ScrollableRowContainer";
|
|
79
|
+
export { default as PermissionNotice } from "../ui/PermissionNotice";
|
|
81
80
|
export type { SessionsFiltersModalProps } from "./SessionsFiltersModal";
|
|
82
81
|
export type { AlertProps, AlertVariant, AlertSize, AlertPosition } from "../ui/Alert";
|
|
83
82
|
export type { AutocompleteProps, AutocompleteOptionObject } from "./Autocomplete";
|
|
@@ -86,6 +85,8 @@ export type { BadgeProps, BadgeVariant } from "../ui/Badge";
|
|
|
86
85
|
export type { CheckboxProps } from "../ui/Checkbox";
|
|
87
86
|
export type { CookieConsentProps } from "./CookieConsent";
|
|
88
87
|
export type { EntityItemProps, EntityItemType, EntityItemAdditionalInfo } from "./EntityItem";
|
|
88
|
+
export type { HeatmapLegendProps } from "../ui/HeatmapLegend";
|
|
89
|
+
export type { LevelBadgeProps } from "../ui/LevelBadge";
|
|
89
90
|
export type { MapControlsProps, MapControlLayersItem } from "./MapControls";
|
|
90
91
|
export type { MarketMaterialListProps } from "./MarketMaterialList";
|
|
91
92
|
export type { ModalProps } from "./Modal";
|
|
@@ -101,6 +102,6 @@ export type { ToggleButtonProps } from "../ui/ToggleButton";
|
|
|
101
102
|
export type { ToggleSwitchProps } from "../ui/ToggleSwitch";
|
|
102
103
|
export type { WayfindingFloorSelectorProps } from "../ui/WayfindingFloorSelector";
|
|
103
104
|
export type { WayfindingTemplateProps } from "./WayfindingTemplate";
|
|
104
|
-
export type { ScrollableRowProps } from "
|
|
105
|
-
export type { PermissionNoticeProps } from "
|
|
105
|
+
export type { ScrollableRowProps } from "../ui/ScrollableRow";
|
|
106
|
+
export type { PermissionNoticeProps } from "../ui/PermissionNotice";
|
|
106
107
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export{default as SessionsFiltersModal}from"./SessionsFiltersModal";export{default as Sessions}from"./Sessions";export{default as Tours}from"./Tours";export{default as TourPoints}from"./TourPoints";export{default as ToursList}from"./ToursList";export{default as AlertContainer}from"./AlertContainer";export{default as Autocomplete}from"./Autocomplete";export{BaseFilterModal}from"./BaseFilterModal";export{default as Badge}from"../ui/Badge";export{default as
|
|
1
|
+
export{default as SessionsFiltersModal}from"./SessionsFiltersModal";export{default as Sessions}from"./Sessions";export{default as Tours}from"./Tours";export{default as TourPoints}from"./TourPoints";export{default as ToursList}from"./ToursList";export{default as AlertContainer}from"./AlertContainer";export{default as Autocomplete}from"./Autocomplete";export{BaseFilterModal}from"./BaseFilterModal";export{default as Badge}from"../ui/Badge";export{default as Bookmarks}from"./Bookmarks";export{default as Visited}from"./Visited";export{default as Booth}from"./Booth/Booth";export{BoothOnHold}from"./Booth/BoothOnHold";export{BoothReserved}from"./Booth/BoothReserved";export{BoothWithoutExhibitor}from"./Booth/BoothWithoutExhibitor";export{default as Button}from"../ui/Button";export{default as Category}from"./Category";export{CategoryFilterModal}from"./CategoryFilterModal";export{default as Checkbox}from"../ui/Checkbox";export{default as CheckboxButton}from"../ui/CheckboxButton";export{default as CookieConsent}from"./CookieConsent";export{default as Controls}from"./Controls";export{default as Demo}from"./Demo";export{default as EntityItemContainer}from"./EntityItemContainer";export{default as EntityList}from"./EntityList";export{default as EntityListRow}from"./EntityListRow";export{default as ErrorBoundary}from"./ErrorBoundary";export{default as Event}from"./Event";export{default as EventBadge}from"./EventBadge";export{SearchButtons}from"./SearchButtons";export{ShortcutsToolbar}from"./Shortcuts";export{ShortcutButton}from"./Shortcuts";export{ShortcutsFiltersButton}from"./Shortcuts";export{default as Exhibitor}from"./Exhibitor";export{default as Filter}from"./Filter";export{default as LevelSelector}from"./LevelSelector";export{default as Gallery}from"./Gallery/Gallery";export{default as HeatmapLegend}from"./HeatmapLegendContainer";export{default as HighlightTextContainer}from"./HighlightTextContainer";export{default as Language}from"./Language";export{default as LanguageRow}from"./LanguageRow";export{default as LargeMessage}from"./LargeMessage";export{default as Layout}from"./Layout";export{default as Spinner}from"../ui/Spinner";export{default as LevelBadge}from"./LevelBadgeContainer";export{default as List}from"./List";export{default as LogoOverlay}from"./LogoOverlay";export{default as MapControls}from"./MapControls";export{default as MarketMaterialList}from"./MarketMaterialList";export{default as Menu}from"./Menu";export{default as MobileToggleButton}from"./MobileToggleButton";export{default as Modal}from"./Modal";export{default as MultiSelectGroups}from"./MultiSelectGroups";export{default as Overlay}from"./Overlay";export{default as OverlayGrip}from"./OverlayGripContainer";export{default as OverlayParticles}from"./OverlayParticles";export{default as Radio}from"../ui/Radio";export{default as RebookingNotes}from"./RebookingNotes";export{default as RebookingRadioGroup}from"./RebookingRadioGroup";export{default as RouteQR}from"./RouteQR";export{default as Schedule}from"./Schedule";export{default as Search}from"./Search";export{default as SearchBox}from"./SearchBox";export{default as Share}from"./Share";export{default as SidebarActions}from"./SidebarActions";export{default as SimpleRow}from"./SimpleRow";export{useToast}from"./Toast";export{default as ToggleButton}from"../ui/ToggleButton";export{default as ToggleSwitch}from"../ui/ToggleSwitch";export{default as TouchHand}from"../ui/TouchHand";export{default as RoutePlanner}from"./RoutePlanner/RoutePlanner";export{default as Wayfinding}from"./Wayfinding";export{default as WayfindingFloorSelectorContainer}from"./WayfindingFloorSelectorContainer";export{default as WayfindingTemplate}from"./WayfindingTemplate";export{default as WayInformation}from"./WayInformation";export{default as Ws}from"./Ws";export{default as YahRow}from"./YahRow";export{default as ScrollableRow}from"./ScrollableRowContainer";export{default as PermissionNotice}from"../ui/PermissionNotice";
|
package/dist/esm/data/Flags.d.ts
CHANGED
package/dist/esm/data/fpGeo.d.ts
CHANGED
|
@@ -4,8 +4,27 @@ interface ImageData {
|
|
|
4
4
|
data: string;
|
|
5
5
|
points: [][];
|
|
6
6
|
}
|
|
7
|
+
interface GeoAnchorPoint {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
lat: number;
|
|
11
|
+
lng: number;
|
|
12
|
+
}
|
|
13
|
+
interface FpGeoProperties {
|
|
14
|
+
bearing?: number;
|
|
15
|
+
config?: {
|
|
16
|
+
p0: GeoAnchorPoint;
|
|
17
|
+
p1?: GeoAnchorPoint;
|
|
18
|
+
p2: GeoAnchorPoint;
|
|
19
|
+
bearing?: number;
|
|
20
|
+
snapThreshold?: number;
|
|
21
|
+
};
|
|
22
|
+
mpViewbox?: number[];
|
|
23
|
+
useMaplibre?: boolean;
|
|
24
|
+
[key: string]: unknown;
|
|
25
|
+
}
|
|
7
26
|
interface ExtendFeatureCollection extends FeatureCollection {
|
|
8
|
-
properties:
|
|
27
|
+
properties: FpGeoProperties;
|
|
9
28
|
images: ImageData[];
|
|
10
29
|
}
|
|
11
30
|
export declare const fpGeo: ExtendFeatureCollection;
|
|
@@ -16,6 +16,7 @@ export default class FloorPlanLoader implements FloorPlan {
|
|
|
16
16
|
readonly onInit: (fp: FloorPlan) => void;
|
|
17
17
|
readonly disableRuntimeAlerts: boolean;
|
|
18
18
|
readonly viewerMode: boolean;
|
|
19
|
+
readonly maplibre: FloorPlanOptions["maplibre"];
|
|
19
20
|
protected efpStyleLoadHandler: (e: Event) => void;
|
|
20
21
|
protected resolveReady: () => void;
|
|
21
22
|
readonly icons: Map<FloorPlanIcon, HTMLImageElement>;
|