@expofp/floorplan 3.18.0 → 3.18.1

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 (75) hide show
  1. package/dist/browser/{Button-CR9X3hHB.js → Button-D24xOa4I.js} +5 -5
  2. package/dist/browser/{CookieConsent-BWKzA_Db.js → CookieConsent-BTzsoyoV.js} +7 -7
  3. package/dist/browser/{Debug-CElPDJlB.js → Debug-CqKhUi06.js} +7 -7
  4. package/dist/browser/{Demo-DpzdTNuZ.js → Demo-B3EOY0Xq.js} +9 -9
  5. package/dist/browser/{Free-Dzj0kezR.js → Free-pY7M8m4h.js} +9 -9
  6. package/dist/browser/{Gallery-BFh_yQY4.js → Gallery-A8cqqrTJ.js} +9 -9
  7. package/dist/browser/{GpsLoader-PkypWxTl.js → GpsLoader-DpJhUdzw.js} +22 -22
  8. package/dist/browser/{KioskStore-Cwuze3X_.js → KioskStore-DICU_c9W.js} +5 -5
  9. package/dist/browser/{MaplibreAdapter-CXm_wkcT.js → MaplibreAdapter-DDSPODNR.js} +130 -126
  10. package/dist/browser/{ModalContainer-qMMdrK2w.js → ModalContainer-DnwGQgDt.js} +10 -10
  11. package/dist/browser/{PermissionNotice-zHHL-Tb1.js → PermissionNotice-Gw1lUPnc.js} +6 -6
  12. package/dist/browser/{SetKioskMode-NJzx1LsZ.js → SetKioskMode-mh3piul9.js} +11 -11
  13. package/dist/browser/{ShowKiosk-JTxQ22h-.js → ShowKiosk-zkF-CXr8.js} +11 -11
  14. package/dist/browser/{TouchHand-B1_sEZ0y.js → TouchHand-DWec6Hd2.js} +4 -4
  15. package/dist/browser/{ViewerMenuPanel-CStYkINl.js → ViewerMenuPanel-C_wp1AsD.js} +10 -10
  16. package/dist/browser/{add-debug-secret-listener-CLwgmFlw.js → add-debug-secret-listener-DVLr6HP8.js} +1 -1
  17. package/dist/browser/{adopt-global-settings-DNtTKtHp.js → adopt-global-settings-Btj0VnLn.js} +9 -9
  18. package/dist/browser/{boolean-editor-DU3YVPQz.js → boolean-editor-BpIQdba3.js} +9 -9
  19. package/dist/browser/{bootIntercom-C3p3aQE4.js → bootIntercom-DSg-Cxkq.js} +2 -2
  20. package/dist/browser/{booth-by-xy-DSMmkHYp.js → booth-by-xy-BvNNTs6Q.js} +429 -376
  21. package/dist/browser/bundle.json +66 -66
  22. package/dist/browser/{classnames-DsyabRET.js → classnames-CFZOol_A.js} +2 -2
  23. package/dist/browser/{client-BtftV096.js → client-BSrj7kzz.js} +4 -4
  24. package/dist/browser/{components-BWMM8EM8.js → components-6Db-nRo5.js} +1544 -1540
  25. package/dist/browser/{debug-overlay-D3Y5V71i.js → debug-overlay-Bt6DNp-8.js} +10 -10
  26. package/dist/browser/{debug-ui-DLVYgylj.js → debug-ui-X9kyhrgx.js} +6 -6
  27. package/dist/browser/{dist-CfgFWfr7.js → dist-CSjEqv2k.js} +3 -3
  28. package/dist/browser/{dist-BXb1cx9e.js → dist-H1U2_uEE.js} +5 -5
  29. package/dist/browser/{dist-DDo1tPsx.js → dist-HS_i2V3o.js} +6 -6
  30. package/dist/browser/{efp-debug-init-C07vji2o.js → efp-debug-init-D0_xHeMm.js} +3 -3
  31. package/dist/browser/{enum-editor-CQB7Ql3U.js → enum-editor-Y3eY0GZN.js} +4 -4
  32. package/dist/browser/{es5-ijKSUeQ7.js → es5-Bnh-FuEf.js} +2 -2
  33. package/dist/browser/{event-not-found-BwyzoaLT.js → event-not-found-DaBAYGFy.js} +1 -1
  34. package/dist/browser/{exports-Ci3Y-h6M.js → exports-pRH9fRPj.js} +1 -1
  35. package/dist/browser/{favicon-BGu3h_Jd.js → favicon-eVAPrhqR.js} +1 -1
  36. package/dist/browser/{fetch-retry.umd-DPsRRR-2.js → fetch-retry.umd-CU86oApr.js} +2 -2
  37. package/dist/browser/{flex-pSz169Ur.js → flex-CBHNyrZ4.js} +5 -5
  38. package/dist/browser/{floorplan.loader-C6QTWa65.js → floorplan.loader-C2Uhu9rp.js} +10 -10
  39. package/dist/browser/{floorplan.ready-CAzapBXm.js → floorplan.ready-D1uAmP_v.js} +161 -161
  40. package/dist/browser/{fuse-DtxL2N-V.js → fuse-N8kU4K-S.js} +2 -2
  41. package/dist/browser/{i18n-DVyODyCY.js → i18n-BtP9mFz3.js} +5 -5
  42. package/dist/browser/index.js +14 -14
  43. package/dist/browser/{index.module-Cvt_te8N.js → index.module-BsJ6W9of.js} +4 -4
  44. package/dist/browser/{integrateKiosk-d8rib-aX.js → integrateKiosk-3pSiw3dQ.js} +4 -4
  45. package/dist/browser/{is-webview-DdTBb7TJ.js → is-webview-Cta8T4n3.js} +1 -1
  46. package/dist/browser/{jsx-runtime-DaJp0rHj.js → jsx-runtime-BEbKJk0I.js} +2 -2
  47. package/dist/browser/{kiosk-record-CKAUCVLy.js → kiosk-record-CqwMLWxV.js} +1 -1
  48. package/dist/browser/{lib-DJccgJUD.js → lib-I9l3N_qn.js} +3 -3
  49. package/dist/browser/{loadImage-x0VcWQVd.js → loadImage-Dss1EbV-.js} +4 -4
  50. package/dist/browser/{logDeviceInfo-D0W2-Idq.js → logDeviceInfo-C71JR2gm.js} +9 -9
  51. package/dist/browser/{main-BPkzidEN.js → main-CfBwT8A1.js} +1 -1
  52. package/dist/browser/{mobx-BhywMatw.js → mobx-BczBqzzL.js} +4 -4
  53. package/dist/browser/{optional-boolean-editor-Mcny_JoC.js → optional-boolean-editor-DzQfvreW.js} +3 -3
  54. package/dist/browser/{optional-enum-editor-DNJb-HlW.js → optional-enum-editor-CLMliNto.js} +4 -4
  55. package/dist/browser/{optional-string-editor-mXHbu-td.js → optional-string-editor-_KGdUVEY.js} +4 -4
  56. package/dist/browser/{particles.min-h8plthOJ.js → particles.min-B1MXziWd.js} +2 -2
  57. package/dist/browser/{react-BtNYeFCj.js → react-DGnrgmGu.js} +2 -2
  58. package/dist/browser/{react-dom-Cpzv99hV.js → react-dom-Cw00D2pA.js} +3 -3
  59. package/dist/browser/{rolldown-runtime-DISrh_Iz.js → rolldown-runtime-BwZ60izJ.js} +1 -1
  60. package/dist/browser/{select-CUP0HHGg.js → select-D1YJPbva.js} +10 -10
  61. package/dist/browser/{settings-vwUDDFWG.js → settings-Bi32JyQ7.js} +2 -2
  62. package/dist/browser/{settings-item-EIedbjEy.js → settings-item-SFeXQJg_.js} +6 -6
  63. package/dist/browser/{store-CuOAVnMk.js → store-D3AM4bNd.js} +13 -13
  64. package/dist/browser/{string-editor-B5j-wOvD.js → string-editor-CDi_Yy04.js} +4 -4
  65. package/dist/browser/{text-field-C7hImOEM.js → text-field-BtEculxh.js} +5 -5
  66. package/dist/browser/{theme--eOt90dH.js → theme-DDvtl3pp.js} +8 -8
  67. package/dist/browser/{ui-BbAFe1Un.js → ui-xJEwvFPJ.js} +8 -8
  68. package/dist/browser/{useRenderTarget-tyvk_Tnj.js → useRenderTarget-Cswo9eRB.js} +4 -4
  69. package/dist/esm/components/Map/Map.js +1 -1
  70. package/dist/esm/components/Map/drawing/config/config-all.d.ts +6 -3
  71. package/dist/esm/components/Map/drawing/config/config-all.js +1 -1
  72. package/dist/esm/components/Map/drawing/config/config-booth-badge.d.ts +8 -4
  73. package/dist/esm/components/Map/drawing/config/config-booth-badge.js +1 -1
  74. package/dist/esm/components/Maplibre/MaplibreAdapter.js +1 -1
  75. package/package.json +8 -8
@@ -1,18 +1,18 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.18.0" };
4
+ e.SENTRY_RELEASE = { id: "3.18.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "f658045a-5be7-4ea4-a4b2-ddea9ab9caf3", e._sentryDebugIdIdentifier = "sentry-dbid-f658045a-5be7-4ea4-a4b2-ddea9ab9caf3");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-DISrh_Iz.js";
10
- import { t } from "./react-BtNYeFCj.js";
11
- import { t as n } from "./jsx-runtime-DaJp0rHj.js";
12
- import { t as r } from "./react-dom-Cpzv99hV.js";
13
- import { C as i, E as a, O as o, T as s, _ as c, o as l, v as u, w as d } from "./flex-pSz169Ur.js";
14
- import { c as f, i as p, n as m, o as h, r as g, s as _, t as v } from "./dist-DDo1tPsx.js";
15
- import { t as y } from "./classnames-DsyabRET.js";
9
+ import { r as e } from "./rolldown-runtime-BwZ60izJ.js";
10
+ import { t } from "./react-DGnrgmGu.js";
11
+ import { t as n } from "./jsx-runtime-BEbKJk0I.js";
12
+ import { t as r } from "./react-dom-Cw00D2pA.js";
13
+ import { C as i, E as a, O as o, T as s, _ as c, o as l, v as u, w as d } from "./flex-CBHNyrZ4.js";
14
+ import { c as f, i as p, n as m, o as h, r as g, s as _, t as v } from "./dist-HS_i2V3o.js";
15
+ import { t as y } from "./classnames-CFZOol_A.js";
16
16
  //#region ../../node_modules/.pnpm/@radix-ui+react-visually-hidden@1.2.3_@types+react-dom@19.2.3_@types+react@19.2.17__@ty_cffccd7838985066e8e1d993b5cb6017/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs
17
17
  var b = /* @__PURE__ */ e(r(), 1), x = /* @__PURE__ */ e(t(), 1), S = n(), C = Object.freeze({
18
18
  position: "absolute",
@@ -1,17 +1,17 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.18.0" };
4
+ e.SENTRY_RELEASE = { id: "3.18.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "3c34ab8b-5d65-4c06-8595-6ed371acabc5", e._sentryDebugIdIdentifier = "sentry-dbid-3c34ab8b-5d65-4c06-8595-6ed371acabc5");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-DISrh_Iz.js";
10
- import { a as t, i as n, s as r } from "./efp-debug-init-C07vji2o.js";
11
- import { a as i, i as a } from "./adopt-global-settings-DNtTKtHp.js";
12
- import { t as o } from "./jsx-runtime-DaJp0rHj.js";
13
- import "./settings-vwUDDFWG.js";
14
- import { t as s } from "./add-debug-secret-listener-CLwgmFlw.js";
9
+ import { r as e } from "./rolldown-runtime-BwZ60izJ.js";
10
+ import { a as t, i as n, s as r } from "./efp-debug-init-D0_xHeMm.js";
11
+ import { a as i, i as a } from "./adopt-global-settings-Btj0VnLn.js";
12
+ import { t as o } from "./jsx-runtime-BEbKJk0I.js";
13
+ import "./settings-Bi32JyQ7.js";
14
+ import { t as s } from "./add-debug-secret-listener-DVLr6HP8.js";
15
15
  //#region ../debug/src/lib/ui/render-debug-ui.tsx
16
16
  var c = /* @__PURE__ */ e(r(), 1), l = o(), u = !1;
17
17
  function d() {
@@ -26,7 +26,7 @@ function d() {
26
26
  }
27
27
  });
28
28
  let o = async (t) => {
29
- let { DebugUi: n } = await import("./debug-ui-DLVYgylj.js"), { createRoot: i } = await import("./client-BtftV096.js").then((t) => /* @__PURE__ */ e(t.default, 1)), a = document.createElement("div");
29
+ let { DebugUi: n } = await import("./debug-ui-X9kyhrgx.js"), { createRoot: i } = await import("./client-BSrj7kzz.js").then((t) => /* @__PURE__ */ e(t.default, 1)), a = document.createElement("div");
30
30
  document.body.appendChild(a), i(a).render(/* @__PURE__ */ (0, l.jsx)(n, {
31
31
  useDebugButtonState: r.useState,
32
32
  open: t
@@ -1,14 +1,14 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.18.0" };
4
+ e.SENTRY_RELEASE = { id: "3.18.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "a7e05aea-745e-4a4b-ba82-432527d9c312", e._sentryDebugIdIdentifier = "sentry-dbid-a7e05aea-745e-4a4b-ba82-432527d9c312");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-DISrh_Iz.js";
10
- import { t } from "./react-BtNYeFCj.js";
11
- import { c as n } from "./store-CuOAVnMk.js";
9
+ import { r as e } from "./rolldown-runtime-BwZ60izJ.js";
10
+ import { t } from "./react-DGnrgmGu.js";
11
+ import { c as n } from "./store-D3AM4bNd.js";
12
12
  //#region src/utils/getRenderTargetFromRoot.ts
13
13
  var r = /* @__PURE__ */ e(t(), 1);
14
14
  function i(e) {
@@ -1 +1 @@
1
- import{Fragment as oe,jsx as C,jsxs as N}from"react/jsx-runtime";import{Box as k}from"@expofp/geometry";import te from"classnames";import re from"color";import{observable as ne,reaction as ie}from"mobx";import{useObserver as ae}from"mobx-react-lite";import{useEffect as se,useMemo as le,useRef as S,useState as me}from"react";import{DEBUG_STORAGE_KEY as O}from"../../constants";import ce from"../../data";import{fpGeo as fe}from"../../data/fpGeo";import{svgArea as X}from"../../data/svg";import{boxToRenderer as L,createSceneDef as de,mapRollSetting as U}from"../../renderer";import{pickDefaultScene as A,pickDefaultScenePoint as ue}from"../../renderer/engine-core/defs";import a,{boothStore as pe,layersStore as h,uiState as o}from"../../store";import{BoothBase as j}from"../../store/BoothStore";import{Category as he}from"../../store/CategoryStore";import{Exhibitor as Z}from"../../store/ExhibitorStore";import{LayerMode as R}from"../../store/LayerStore";import{CurrentPosition as ve,Route as ye}from"../../store/RouteStore";import B from"../../tools/logger";import p from"../../tools/settings";import be from"../../ui/Draggable";import{areLayersEnabled as ge}from"../../utils/areLayersEnabled";import{applyVenueDimValue as we,createDimmingAnimator as Se}from"../../utils/dimming";import{convertGpsToLocal as Re}from"../../utils/gps";import y from"../../utils/is-debug";import{isPathwayLayer as $}from"../../utils/is-pathway-layer";import{useReaction as d}from"../../utils/mobx";import{createWayfinding as xe}from"../../wayfinding";import K from"./booth-by-xy";import Te from"./drawing/config/config-all";import{configMarkers as Ce,getMarkerFromClick as ke}from"./drawing/config/config-markers";import{loadLayersImages as Le}from"./drawing/config/loadBoothsImages";import{useBuildRoute as Be}from"./traffic/useBuildRoute";import{useManageTraffic as Ee}from"./traffic/useManageTraffic";const V=Number.isFinite(p.maxZoom);export default function Me(){let E={};const W="#ebebeb",v=S(),b=le(()=>ne({moving:!1,prevLevel:a.layerStore.layers.find(e=>!e.frozen&&e.visible)}),[]),l=a.rendererService,x=S(Se(e=>we(l,e)));let s;const g=S(null),M=S(null);let P=null,z=null,I=!1;function _(){h.layers.forEach(e=>{e.configured=!1,e.children=[],e.loaded=!1})}const[H,q]=me(()=>typeof window<"u"&&window.localStorage?localStorage.getItem(O)!=="false":!0);d(()=>a.routeStore.currentRouteLayer,()=>{if(!l.scene||b.prevLevel===a.routeStore.currentRouteLayer)return;const e=l.scene.rootLayer.children.filter(t=>a.layerStore.floors.some(n=>t.name.includes(n.name)));let r=a.routeStore.currentRouteLayer.name;if(!e.find(t=>t.name===r))return;const i=e?.map(t=>(t.name===r&&(t.hidden=!1),t.name===b.prevLevel?.name&&(t.hidden=!0),t));b.prevLevel=a.routeStore.currentRouteLayer,l.update(...i)}),d(()=>o.centerMap,()=>{!o.centerMap||a.maplibreStore.showMaplibre||(s.controls.resetCamera({zoom:!!(o.list.type==="search"&&o.list.text)}),o.centerMap=!1)}),se(()=>{if(!v.current)return;async function e(){_(),h.layersLoaded=!1;let r={};try{if(y){const t=document.createElement("canvas").getContext("webgl2"),n=t&&t.getExtension("EXT_disjoint_timer_query_webgl2"),m=(await import("stats-gl")).default,f=new m({trackGPU:n,horizontal:!0}),u=M.current;if(!u)throw new Error("memoryInfoPanel not found.");f.dom.style.position="relative",u.style.width=`${90*(n?3:2)}px`,u.style.height="48px",u.appendChild(f.dom),r={stats:f,memoryInfoPanel:u}}}catch(i){console.error(i)}s=l.create({canvas:v.current,ui:r}),g.current=s,ie(()=>o.canvasVisibleRectPx,(i,t)=>{i&&(s.visibleRect=L(i)),t.dispose()},{fireImmediately:!0}),Te(l).then(i=>{if(I||g.current!==s)return;y&&console.log("Renderer settings",s);const t=re(p.backgroundColor==="none"?W:p.backgroundColor).string();E=de(i,X,t),l.start(E),x.current.setTarget(o.dimmed,{immediate:!0}),U(s,a.fp.enableRotation?1:0),V&&s.viewport.setMaxZoom(p.maxZoom),h.layersLoaded=!0,a.fp.onFpConfigured&&a.fp?.onFpConfigured(),P=xe(l,a),z=Ce(l),Le(l)}),s.events.addEventListener("pointer:move",({data:i})=>{if(o.setKioskModeEnabled)return;const{point:t,defs:n}=A(i),c=K(t.x,t.y),m=D(n[0]);o.hoveredBooth=c||m}),s.events.addEventListener("pointer:out",()=>{o.setKioskModeEnabled||(o.hoveredBooth=null)}),s.events.addEventListener("pointer:click",({data:i})=>{if(!o?.rootElement)return;window.__resett&&window.__resett(),o.overlayPosition==="bottom"&&o.overlaySize==="full"&&a.showMap();const{point:t,defs:n}=A(i),{x:c,y:m}=t;if(o.onGetCoordsClick){const w=a.layerStore.layers.find(T=>T.visible&&(T.mode===R.TurnedOn||T.mode===R.TurnedOff));o.onGetCoordsClick({x:c,y:m,z:w?.name||null})}if(o.setKioskModeEnabled)return;if(o.onMarkerClick){const w=ke(c,m,l.scale);y&&console.log("marker",w),o.onMarkerClick(w)}const f=K(t.x,t.y),u=D(n[0]);y&&console.log("boothIdFromClientXy",f,"boothByShape",u,"pointer:click point",t),a.clickBooth(f||u)}),s.events.addEventListener("navigation:change",()=>window.__resett&&window.__resett())}return e(),a.fp.getCenterCoordinates=Q,()=>J()},[]);function J(){I=!0,x.current.stop(),P?.(),z?.(),_(),h.layersLoaded=!1,l.disposeIfCurrent(g.current),g.current=null}function Q(){const e=v.current;if(!v.current)throw new Error("Canvas not ready");const r=ue(s.viewport.canvasToSvg({x:e.clientWidth/2,y:e.clientHeight/2})),t=a.layerStore.visible.find(n=>n.mode===R.TurnedOff||n.mode===R.TurnedOn)?.name||null;return{...r,z:t}}function D(e){return!e||!e.shape?null:pe.booths.find(r=>r.shapes?.find(i=>i.shape==e.shape))}d(()=>o.zoomBy,()=>{if(!o.zoomBy||a.maplibreStore.showMaplibre)return;const e=o.zoomBy;s.controls.zoomBy(e),o.zoomBy=null}),d(()=>o.dimmed,e=>{x.current.setTarget(e)}),d(()=>o.details,()=>{if(!o.onDetails)return;if(!o.details){o.onDetails(null);return}var e=o.details;if(p.EXPO==="wineparis"&&(e instanceof Z&&(e=e.booths[0]),!e))return;let r=null,i=[];e instanceof Z?(r="exhibitor",i=e.booths.map(n=>n.name).sort((n,c)=>n==a.routeStore.tempToBooth?.name?-1:c==a.routeStore.tempToBooth?.name?1:0)):e instanceof j?(r="booth",i=[e.name]):e instanceof ye?(r="route",i=[e.from?.name,e.to?.name].filter(n=>!!n)):e instanceof he&&(r="category",i=e.exhibitors.map(n=>n.booths.map(c=>c.name)).flat());var t={type:r,name:e?.name,id:e?.id,externalId:e?.externalId,boothsNames:i};o.onDetails({...t,...r==="route"?{routeInfo:a.routeStore.routeInfo}:{}})}),d(()=>o.canvasVisibleRectPx,e=>{l.renderer&&(l.renderer.visibleRect=L(e))},{fireImmediately:!0}),d(()=>o.moveToRect,()=>{!o.moveToRect||a.maplibreStore.showMaplibre||(o.moveToRect&&o.moveToRect.size.height!==1/0&&o.moveToRect.size.width!==1/0&&o.moveToRect.size.height>0&&o.moveToRect.size.width>0&&G(o.moveToRect),o.moveToRect=null)}),d(()=>o.rollReset,e=>{e&&(s.controls.resetCamera({roll:!0}),o.rollReset=!1)}),d(()=>o.moveToBooths,()=>{if(B.log("this.moveToBooths",o.moveToBooths),!o.moveToBooths||a.maplibreStore.showMaplibre)return;B.log("watched moveToBooths",o.moveToBooths);const e=o.moveToBooths.filter(r=>r.rect).map(r=>r.rect);e.length!==0&&(G(k.fromUnion(...e)),o.moveToBooths=null)}),d(()=>o.mapSettings,({zoomtime:e,center:r,centerxy:i,bearing:t,roll:n,z:c})=>{if(!(a.maplibreStore.showMaplibre||!l.renderer))try{e&&e!==o.defaultMapSettings.zoomtime&&l.renderer.controls.configure({zoomTime:e/1e3}),a.fp.enableRotation&&U(s,n);let m;if(r){const f=r.split(",").map(Number),u=new ve(void 0,void 0,void 0,void 0,f[0],f[1]);m=Re(u,fe.properties.config)}else if(i){const f=i.split(",").map(Number);m={x:f[0],y:f[1]}}c&&a.fp.activateFloor({name:c}),(m?.x||m?.y)&&l.renderer.controls.panTo(m.x,m.y),Number.isFinite(t)&&l.renderer.controls.rollTo(t)}catch(m){B.error("Error in mapSettings reaction",m)}}),Be({enabled:h.layersLoaded&&o.buildRoute,rendererService:l});const F="routes-api.expofp.com",Y=ce.busRoutes??!1;Ee({permission:h.layersLoaded&&Y,rendererService:l,dataJsonUrl:`https://${F}/v1/routes?expo=${p.EXPO}`,websocketUrl:`wss://${F}/locations?expo=${p.EXPO}`}),d(()=>a.layerStore.visible,e=>{if(!l.scene)return;const r=e.filter(n=>$(n.name)),t=l.scene.rootLayer.children.filter(n=>$(n.name));t.forEach(n=>{n.hidden=!r.find(c=>c.name===n.name)}),l.update(...t)});function G(e){let r=e;const i=ee(e,X),t=o.selectedRoute?.from,n=t instanceof j?t.layer?.name:t?.layer;o.kioskData&&(!ge()||n===a.routeStore.currentRouteLayer?.name)&&(r=k.fromUnion(e,new k(o.kioskData.x,o.kioskData.y,1,1)));const c=L(r),m={paddingPercent:i,maxZoom:V?void 0:10};if(o.shouldShiftMapRect){s.visibleRect.min={...s.visibleRect.min,x:s.visibleRect.min.x+o.overlayWidthPx},s.visibleRect=s.visibleRect;try{s.controls.zoomTo(c,m)}finally{s.visibleRect.min={...s.visibleRect.min,x:s.visibleRect.min.x-o.overlayWidthPx}}}else s.controls.zoomTo(c,m)}function ee(e,r){return!e||!r?0:(e.area/r.area>.1?15:25)/100}return ae(()=>N(oe,{children:[C("canvas",{style:{width:"100%",height:"100%"},ref:v,className:te({map:!0,moving:b.moving,hidden:a.maplibreStore.showMaplibre}),children:"ExpoFP.com"}),y&&H&&N(be,{className:"debug-fps",children:[C("div",{ref:M}),C("button",{onClick:()=>{typeof window<"u"&&window.localStorage&&localStorage.setItem(O,"false"),q(!1)},style:{padding:"4px 8px",fontSize:"11px",cursor:"pointer",backgroundColor:"#333",color:"#fff",border:"1px solid #555",width:"100%"},children:"Hide debug"})]})]}))}
1
+ import{Fragment as te,jsx as C,jsxs as O}from"react/jsx-runtime";import{Box as k}from"@expofp/geometry";import re from"classnames";import ne from"color";import{observable as ie,reaction as ae}from"mobx";import{useObserver as se}from"mobx-react-lite";import{useEffect as le,useMemo as me,useRef as S,useState as ce}from"react";import{DEBUG_STORAGE_KEY as X}from"../../constants";import fe from"../../data";import{fpGeo as de}from"../../data/fpGeo";import{svgArea as U}from"../../data/svg";import{boxToRenderer as L,createSceneDef as ue,mapRollSetting as j}from"../../renderer";import{pickDefaultScene as A,pickDefaultScenePoint as pe}from"../../renderer/engine-core/defs";import a,{boothStore as he,layersStore as h,uiState as o}from"../../store";import{BoothBase as Z}from"../../store/BoothStore";import{Category as ve}from"../../store/CategoryStore";import{Exhibitor as $}from"../../store/ExhibitorStore";import{LayerMode as R}from"../../store/LayerStore";import{CurrentPosition as ye,Route as be}from"../../store/RouteStore";import B from"../../tools/logger";import p from"../../tools/settings";import ge from"../../ui/Draggable";import{areLayersEnabled as we}from"../../utils/areLayersEnabled";import{applyVenueDimValue as Se,createDimmingAnimator as Re}from"../../utils/dimming";import{convertGpsToLocal as xe}from"../../utils/gps";import y from"../../utils/is-debug";import{isPathwayLayer as K}from"../../utils/is-pathway-layer";import{useReaction as d}from"../../utils/mobx";import{createWayfinding as Te}from"../../wayfinding";import V from"./booth-by-xy";import Ce from"./drawing/config/config-all";import{configMarkers as ke,getMarkerFromClick as Le}from"./drawing/config/config-markers";import{loadLayersImages as Be}from"./drawing/config/loadBoothsImages";import{useBuildRoute as Ee}from"./traffic/useBuildRoute";import{useManageTraffic as Me}from"./traffic/useManageTraffic";const W=Number.isFinite(p.maxZoom);export default function Pe(){let E={};const H="#ebebeb",v=S(),b=me(()=>ie({moving:!1,prevLevel:a.layerStore.layers.find(e=>!e.frozen&&e.visible)}),[]),l=a.rendererService,x=S(Re(e=>Se(l,e)));let s;const g=S(null),M=S(null);let P=null,z=null,I=null,_=!1;function D(){h.layers.forEach(e=>{e.configured=!1,e.children=[],e.loaded=!1})}const[q,J]=ce(()=>typeof window<"u"&&window.localStorage?localStorage.getItem(X)!=="false":!0);d(()=>a.routeStore.currentRouteLayer,()=>{if(!l.scene||b.prevLevel===a.routeStore.currentRouteLayer)return;const e=l.scene.rootLayer.children.filter(t=>a.layerStore.floors.some(r=>t.name.includes(r.name)));let n=a.routeStore.currentRouteLayer.name;if(!e.find(t=>t.name===n))return;const i=e?.map(t=>(t.name===n&&(t.hidden=!1),t.name===b.prevLevel?.name&&(t.hidden=!0),t));b.prevLevel=a.routeStore.currentRouteLayer,l.update(...i)}),d(()=>o.centerMap,()=>{!o.centerMap||a.maplibreStore.showMaplibre||(s.controls.resetCamera({zoom:!!(o.list.type==="search"&&o.list.text)}),o.centerMap=!1)}),le(()=>{if(!v.current)return;async function e(){D(),h.layersLoaded=!1;let n={};try{if(y){const t=document.createElement("canvas").getContext("webgl2"),r=t&&t.getExtension("EXT_disjoint_timer_query_webgl2"),m=(await import("stats-gl")).default,f=new m({trackGPU:r,horizontal:!0}),u=M.current;if(!u)throw new Error("memoryInfoPanel not found.");f.dom.style.position="relative",u.style.width=`${90*(r?3:2)}px`,u.style.height="48px",u.appendChild(f.dom),n={stats:f,memoryInfoPanel:u}}}catch(i){console.error(i)}s=l.create({canvas:v.current,ui:n}),g.current=s,ae(()=>o.canvasVisibleRectPx,(i,t)=>{i&&(s.visibleRect=L(i)),t.dispose()},{fireImmediately:!0}),Ce(l).then(({layers:i,cleanup:t})=>{if(_||g.current!==s){t();return}I=t,y&&console.log("Renderer settings",s);const r=ne(p.backgroundColor==="none"?H:p.backgroundColor).string();E=ue(i,U,r),l.start(E),x.current.setTarget(o.dimmed,{immediate:!0}),j(s,a.fp.enableRotation?1:0),W&&s.viewport.setMaxZoom(p.maxZoom),h.layersLoaded=!0,a.fp.onFpConfigured&&a.fp?.onFpConfigured(),P=Te(l,a),z=ke(l),Be(l)}),s.events.addEventListener("pointer:move",({data:i})=>{if(o.setKioskModeEnabled)return;const{point:t,defs:r}=A(i),c=V(t.x,t.y),m=F(r[0]);o.hoveredBooth=c||m}),s.events.addEventListener("pointer:out",()=>{o.setKioskModeEnabled||(o.hoveredBooth=null)}),s.events.addEventListener("pointer:click",({data:i})=>{if(!o?.rootElement)return;window.__resett&&window.__resett(),o.overlayPosition==="bottom"&&o.overlaySize==="full"&&a.showMap();const{point:t,defs:r}=A(i),{x:c,y:m}=t;if(o.onGetCoordsClick){const w=a.layerStore.layers.find(T=>T.visible&&(T.mode===R.TurnedOn||T.mode===R.TurnedOff));o.onGetCoordsClick({x:c,y:m,z:w?.name||null})}if(o.setKioskModeEnabled)return;if(o.onMarkerClick){const w=Le(c,m,l.scale);y&&console.log("marker",w),o.onMarkerClick(w)}const f=V(t.x,t.y),u=F(r[0]);y&&console.log("boothIdFromClientXy",f,"boothByShape",u,"pointer:click point",t),a.clickBooth(f||u)}),s.events.addEventListener("navigation:change",()=>window.__resett&&window.__resett())}return e(),a.fp.getCenterCoordinates=Y,()=>Q()},[]);function Q(){_=!0,x.current.stop(),P?.(),z?.(),I?.(),D(),h.layersLoaded=!1,l.disposeIfCurrent(g.current),g.current=null}function Y(){const e=v.current;if(!v.current)throw new Error("Canvas not ready");const n=pe(s.viewport.canvasToSvg({x:e.clientWidth/2,y:e.clientHeight/2})),t=a.layerStore.visible.find(r=>r.mode===R.TurnedOff||r.mode===R.TurnedOn)?.name||null;return{...n,z:t}}function F(e){return!e||!e.shape?null:he.booths.find(n=>n.shapes?.find(i=>i.shape==e.shape))}d(()=>o.zoomBy,()=>{if(!o.zoomBy||a.maplibreStore.showMaplibre)return;const e=o.zoomBy;s.controls.zoomBy(e),o.zoomBy=null}),d(()=>o.dimmed,e=>{x.current.setTarget(e)}),d(()=>o.details,()=>{if(!o.onDetails)return;if(!o.details){o.onDetails(null);return}var e=o.details;if(p.EXPO==="wineparis"&&(e instanceof $&&(e=e.booths[0]),!e))return;let n=null,i=[];e instanceof $?(n="exhibitor",i=e.booths.map(r=>r.name).sort((r,c)=>r==a.routeStore.tempToBooth?.name?-1:c==a.routeStore.tempToBooth?.name?1:0)):e instanceof Z?(n="booth",i=[e.name]):e instanceof be?(n="route",i=[e.from?.name,e.to?.name].filter(r=>!!r)):e instanceof ve&&(n="category",i=e.exhibitors.map(r=>r.booths.map(c=>c.name)).flat());var t={type:n,name:e?.name,id:e?.id,externalId:e?.externalId,boothsNames:i};o.onDetails({...t,...n==="route"?{routeInfo:a.routeStore.routeInfo}:{}})}),d(()=>o.canvasVisibleRectPx,e=>{l.renderer&&(l.renderer.visibleRect=L(e))},{fireImmediately:!0}),d(()=>o.moveToRect,()=>{!o.moveToRect||a.maplibreStore.showMaplibre||(o.moveToRect&&o.moveToRect.size.height!==1/0&&o.moveToRect.size.width!==1/0&&o.moveToRect.size.height>0&&o.moveToRect.size.width>0&&N(o.moveToRect),o.moveToRect=null)}),d(()=>o.rollReset,e=>{e&&(s.controls.resetCamera({roll:!0}),o.rollReset=!1)}),d(()=>o.moveToBooths,()=>{if(B.log("this.moveToBooths",o.moveToBooths),!o.moveToBooths||a.maplibreStore.showMaplibre)return;B.log("watched moveToBooths",o.moveToBooths);const e=o.moveToBooths.filter(n=>n.rect).map(n=>n.rect);e.length!==0&&(N(k.fromUnion(...e)),o.moveToBooths=null)}),d(()=>o.mapSettings,({zoomtime:e,center:n,centerxy:i,bearing:t,roll:r,z:c})=>{if(!(a.maplibreStore.showMaplibre||!l.renderer))try{e&&e!==o.defaultMapSettings.zoomtime&&l.renderer.controls.configure({zoomTime:e/1e3}),a.fp.enableRotation&&j(s,r);let m;if(n){const f=n.split(",").map(Number),u=new ye(void 0,void 0,void 0,void 0,f[0],f[1]);m=xe(u,de.properties.config)}else if(i){const f=i.split(",").map(Number);m={x:f[0],y:f[1]}}c&&a.fp.activateFloor({name:c}),(m?.x||m?.y)&&l.renderer.controls.panTo(m.x,m.y),Number.isFinite(t)&&l.renderer.controls.rollTo(t)}catch(m){B.error("Error in mapSettings reaction",m)}}),Ee({enabled:h.layersLoaded&&o.buildRoute,rendererService:l});const G="routes-api.expofp.com",ee=fe.busRoutes??!1;Me({permission:h.layersLoaded&&ee,rendererService:l,dataJsonUrl:`https://${G}/v1/routes?expo=${p.EXPO}`,websocketUrl:`wss://${G}/locations?expo=${p.EXPO}`}),d(()=>a.layerStore.visible,e=>{if(!l.scene)return;const n=e.filter(r=>K(r.name)),t=l.scene.rootLayer.children.filter(r=>K(r.name));t.forEach(r=>{r.hidden=!n.find(c=>c.name===r.name)}),l.update(...t)});function N(e){let n=e;const i=oe(e,U),t=o.selectedRoute?.from,r=t instanceof Z?t.layer?.name:t?.layer;o.kioskData&&(!we()||r===a.routeStore.currentRouteLayer?.name)&&(n=k.fromUnion(e,new k(o.kioskData.x,o.kioskData.y,1,1)));const c=L(n),m={paddingPercent:i,maxZoom:W?void 0:10};if(o.shouldShiftMapRect){s.visibleRect.min={...s.visibleRect.min,x:s.visibleRect.min.x+o.overlayWidthPx},s.visibleRect=s.visibleRect;try{s.controls.zoomTo(c,m)}finally{s.visibleRect.min={...s.visibleRect.min,x:s.visibleRect.min.x-o.overlayWidthPx}}}else s.controls.zoomTo(c,m)}function oe(e,n){return!e||!n?0:(e.area/n.area>.1?15:25)/100}return se(()=>O(te,{children:[C("canvas",{style:{width:"100%",height:"100%"},ref:v,className:re({map:!0,moving:b.moving,hidden:a.maplibreStore.showMaplibre}),children:"ExpoFP.com"}),y&&q&&O(ge,{className:"debug-fps",children:[C("div",{ref:M}),C("button",{onClick:()=>{typeof window<"u"&&window.localStorage&&localStorage.setItem(X,"false"),J(!1)},style:{padding:"4px 8px",fontSize:"11px",cursor:"pointer",backgroundColor:"#333",color:"#fff",border:"1px solid #555",width:"100%"},children:"Hide debug"})]})]}))}
@@ -1,4 +1,7 @@
1
- import { LayerDef } from '@expofp/renderer';
2
- import { RendererService } from '../../../../renderer';
3
- export default function configAll(rendererService: RendererService): Promise<LayerDef[]>;
1
+ import { type LayerDef } from '@expofp/renderer';
2
+ import { type RendererService } from '../../../../renderer';
3
+ export default function configAll(rendererService: RendererService): Promise<{
4
+ layers: LayerDef[];
5
+ cleanup: () => void;
6
+ }>;
4
7
  //# sourceMappingURL=config-all.d.ts.map
@@ -1 +1 @@
1
- import{createLayerDef as r}from"../../../../renderer";import L from"../../../../store";import{isPathwayLayer as p}from"../../../../utils/is-pathway-layer";import{WF_CURRENT_POSITION_LAYER_NAME as d,WF_LINES_ANIMATED_LAYER_NAME as N,WF_LINES_LAYER_NAME as R,WF_POINTS_LAYER_NAME as u,WF_TRAIL_LAYER_NAME as h}from"../../../../wayfinding/layers";import{createTrafficLayers as M}from"../../traffic/trafficLayers";import{configBoothsBadges as w}from"./config-booth-badge";import I from"./config-load-layer";import{MARKER_LAYER_NAME as P}from"./config-markers";export default function T(f){let{layers:t,defaultLayer:n}=L.layerStore;if(n){const o=[].concat(t),e=t.find(i=>i===n),s=t.indexOf(e);o.splice(s,1),t=[e].concat(o)}const _=t.filter(o=>!o.rootParent).map(o=>I(o,f));return Promise.all(_).then(o=>{const e=r(u,[],{dim:!1,interactive:!0}),s=r(R,[],{dim:!1}),i=r(P,[]),y=r(h,[],{dim:!1}),A=r(N,[],{dim:!1}),E=r(d,[],{dim:!1}),m=[],c=[];for(const a of o.flat())p(a.name)?(a.dim=!1,c.push(a)):m.push(a);const l=w(f,"root",L.boothStore.booths);return[...m,...l?[l]:[],...c,...M(),i,y,s,A,e,E]})}
1
+ import{createLayerDef as r}from"../../../../renderer";import i from"../../../../store";import{isPathwayLayer as d}from"../../../../utils/is-pathway-layer";import{WF_CURRENT_POSITION_LAYER_NAME as u,WF_LINES_ANIMATED_LAYER_NAME as N,WF_LINES_LAYER_NAME as R,WF_POINTS_LAYER_NAME as h,WF_TRAIL_LAYER_NAME as M}from"../../../../wayfinding/layers";import{createTrafficLayers as w}from"../../traffic/trafficLayers";import{configBoothsBadges as I}from"./config-booth-badge";import P from"./config-load-layer";import{MARKER_LAYER_NAME as T}from"./config-markers";export default function S(n){const{defaultLayer:a}=i.layerStore;let{layers:o}=i.layerStore;if(a){const e=[...o],s=o.indexOf(a);e.splice(s,1),o=[a,...e]}const L=o.filter(e=>!e.rootParent).map(e=>P(e,n));return Promise.all(L).then(e=>{const s=r(h,[],{dim:!1,interactive:!0}),c=r(R,[],{dim:!1}),y=r(T,[]),p=r(M,[],{dim:!1}),_=r(N,[],{dim:!1}),A=r(u,[],{dim:!1}),f=[],l=[];for(const t of e.flat())d(t.name)?(t.dim=!1,l.push(t)):f.push(t);const{layer:m,cleanup:E}=I(n,"root",i.boothStore.booths);return{layers:[...f,...m?[m]:[],...l,...w(),y,p,c,_,s,A],cleanup:E}})}
@@ -1,9 +1,13 @@
1
- import { LayerDef, ShapeDef, TextDef } from '@expofp/renderer';
2
- import { RendererService } from '../../../../renderer';
3
- import { Booth, RegularBooth } from '../../../../store/BoothStore';
1
+ import { type LayerDef, type ShapeDef, type TextDef } from '@expofp/renderer';
2
+ import { type RendererService } from '../../../../renderer';
3
+ import { type Booth, RegularBooth } from '../../../../store/BoothStore';
4
4
  export declare function createBoothBadge(rendererService: RendererService, booth: RegularBooth): {
5
5
  bg: ShapeDef;
6
6
  text: TextDef;
7
+ dispose: () => void;
8
+ };
9
+ export declare function configBoothsBadges(rendererService: RendererService, layerName: string, booths: Booth[]): {
10
+ layer: LayerDef | null;
11
+ cleanup: () => void;
7
12
  };
8
- export declare function configBoothsBadges(rendererService: RendererService, layerName: string, booths: Booth[]): LayerDef | null;
9
13
  //# sourceMappingURL=config-booth-badge.d.ts.map
@@ -1 +1 @@
1
- import{Box as Y,pointRotate as W,Polygon as j,Rect as q}from"@expofp/geometry";import J from"color";import{reaction as $}from"mobx";import{SEPARATOR as S}from"../../../../constants";import H from"../../../../data";import{getTrianglesFromFpPaths as K}from"../../../../data/svg";import{createShapeDef as Q,createTextDef as V,createTextDefLines as tt,rectToRenderer as w}from"../../../../renderer";import{boothStore as et,uiState as nt}from"../../../../store";import{RegularBooth as ot}from"../../../../store/BoothStore";import F from"../../../../tools/settings";import{getContrastTextColor as it}from"../../../../utils/getContrastTextColor";import{getFont as st}from"./canvases";import{isBoothBadgeEligible as rt}from"./config-booth-badge-eligibility";import{getBadgeFontWeight as ct,getFontUrlByWeight as at}from"./config-booth-labels";const lt=.5,dt=.3,L=15,ft=24,O=30,gt=12,ut=12,U=.8,k=document.createElement("canvas").getContext("2d");function ht(e){return e.length<=L?e:e.slice(0,L-1)+"\u2026"}function z(e){if(!e.paths?.length)return[];const t=e.layer?.name||"",o=[];for(const n of e.paths)for(const i of K(n.index,t))o.push(i);return o}function mt(e){const t=z(e);return t.length?Y.fromPoints(t.flat().map(([o,n])=>({x:o,y:n}))):null}function Bt(e){const t=[],o=[];for(const n of e){const i=t.length;t.push({x:n[0][0],y:n[0][1]}),t.push({x:n[1][0],y:n[1][1]}),t.push({x:n[2][0],y:n[2][1]}),o.push([i,i+1,i+2])}return new j(t,o)}function y(e,t,o){return o.containsPoint({x:e,y:t})}function xt(e,t,o,n,i,c,r){if(!e.length||!y(o,n,t))return r;let d=0,m=r;const B=10;for(let x=0;x<B;x++){const u=(d+m)/2,a=i*u,g=c*u;y(o+a,n,t)&&y(o,n+g,t)&&y(o+a,n+g,t)?d=u:m=u}return d}function pt(e){return mt(e)??e.rect}function At(e,t,o,n,i){const c=pt(e);if(t.length){const m=new Set;let B=null,x=1/0;for(const u of t)for(const a of u){const g=`${a[0]},${a[1]}`;if(m.has(g))continue;m.add(g);const h=a[0]+n,A=a[1]+n;if(y(h,A,o)){const E=h-c.min.x+(A-c.min.y);E<x&&(x=E,B={x:h,y:A})}}if(B)return B}const r=e.rect.min.x+n,d=e.rect.min.y+n;return i?W({x:r,y:d},i,e.rect.center):{x:r,y:d}}function R(e){return e&&e!=="none"?e:void 0}function Et(e){const t=R(e.borderColor)||R(F.boothBorderColor)||F.colors.booths.default;return e.paths?.length>1&&R(e.paths[e.paths.length-1].color)||t}export function createBoothBadge(e,t){const o=ht(t.title||t.name),n=Et(t),i=it(J(n).hex()),c=window.devicePixelRatio||1,r=ct(),d=st(O,r);k.font=d;const m=k.measureText(o).width,B=Math.ceil(m+gt*2),x=O+ut*2,u=(t.borderWidth||et.borderWidth)/2,a=B*U,g=x*U,h=t.rotate??0,A=t.rect.size.width,E=t.rect.size.height,N=Math.min(A>0?A*lt/a:1/0,E>0?E*dt/g:1/0),T=z(t),P=Bt(T),{x:I,y:_}=At(t,T,P,u,h),b=xt(T,P,I,_,a,g,N),D=(s,p)=>{const X=s/2,v=p/2,Z=W({x:I+X,y:_+v},h,{x:I,y:_});return new q(Z,{x:s,y:p},h)},C=s=>{const p=Math.min(s,b);return D(a*p,g*p)},G=at(r,e.fontUrls),f=Q(D(1,1),n);f.hidden=!0,f.dim=t.skipDim?!1:void 0;const l=V(tt([[o],[]],i,0,[G,G]),D(1,1),[0,0],{horizontal:"center",vertical:"center"});l.hidden=!0,l.dim=t.skipDim?!1:void 0;const M=()=>!!(t.layer&&!t.layer.visible);return $(()=>t.skipDim,s=>{f.dim=s?!1:void 0,l.dim=s?!1:void 0,e.update(f,l)}),$(()=>t.layer?.visible??!0,s=>{f.hidden=!s,l.hidden=!s,e.update(f,l)}),e.onPtScale(`badge-bg-${t.id}`,s=>(f.shape=w(C(s)),f.hidden=M(),f)),e.onPtScale(`badge-text-${t.id}`,s=>{const p=Math.min(s,b);return l.lines[0].fontSize=ft/c*p,l.bounds=w(C(s)),l.hidden=M(),l}),{bg:f,text:l}}export function configBoothsBadges(e,t,o){const n=[],i=[];for(const c of o)if(c instanceof ot&&rt({hideExhibitorBoothNumber:H.hideExhibitorBoothNumber,hideBoothBadges:H.hideBoothBadges,hideLogoInBooth:nt.hideLogoInBooth,noLabels:c.noLabels,hasExhibitors:c.exhibitors.length>0,hasLogoInBooth:c.exhibitors.some(r=>r.logoInBooth&&r.logo)})){const{bg:r,text:d}=createBoothBadge(e,c);n.push(r),i.push(d)}return n.length?{name:`${t}${S}badges`,children:[{name:`${t}${S}badgeBgs`,children:n},{name:`${t}${S}badgeTexts`,children:i}]}:null}
1
+ import{Box as v,pointRotate as S,Polygon as tt,Rect as nt}from"@expofp/geometry";import et from"color";import{reaction as W}from"mobx";import{SEPARATOR as $}from"../../../../constants";import N from"../../../../data";import{getTrianglesFromFpPaths as ot}from"../../../../data/svg";import{createShapeDef as st,createTextDef as it,createTextDefLines as rt,getRollValue as ct,getRotation as at,rectToRenderer as X}from"../../../../renderer";import{boothStore as lt,uiState as Z}from"../../../../store";import{RegularBooth as dt}from"../../../../store/BoothStore";import V from"../../../../tools/settings";import{getContrastTextColor as ft}from"../../../../utils/getContrastTextColor";import{getFont as ut}from"./canvases";import{isBoothBadgeEligible as gt}from"./config-booth-badge-eligibility";import{getBadgeFontWeight as ht,getFontUrlByWeight as mt}from"./config-booth-labels";const pt=.5,xt=.3,j=15,Bt=24,q=30,yt=12,At=12,J=.8,K=document.createElement("canvas").getContext("2d");function Et(t){return t.length<=j?t:t.slice(0,j-1)+"\u2026"}function Q(t){if(!t.paths?.length)return[];const n=t.layer?.name||"",s=[];for(const e of t.paths)for(const i of ot(e.index,n))s.push(i);return s}function Tt(t){const n=Q(t);return n.length?v.fromPoints(n.flat().map(([s,e])=>({x:s,y:e}))):null}function It(t){const n=[],s=[];for(const e of t){const i=n.length;n.push({x:e[0][0],y:e[0][1]}),n.push({x:e[1][0],y:e[1][1]}),n.push({x:e[2][0],y:e[2][1]}),s.push([i,i+1,i+2])}return new tt(n,s)}function H(t,n,s){return s.containsPoint({x:t,y:n})}function Rt(t,n,s,e,i,u,l,r){if(!t.length||!H(s,e,n))return l;const c={x:s,y:e};let d=0,B=l;const R=10;for(let p=0;p<R;p++){const g=(d+B)/2,I=i*g,x=u*g;[S({x:s+I,y:e},r,c),S({x:s,y:e+x},r,c),S({x:s+I,y:e+x},r,c)].every(y=>H(y.x,y.y,n))?d=g:B=g}return d}function _t(t){return Tt(t)??t.rect}function Dt(t,n,s,e,i,u){if(n.length){const d=_t(t),B={x:i>0?d.min.x:d.max.x,y:u>0?d.min.y:d.max.y},R=new Set;let p=null,g=1/0;for(const I of n)for(const x of I){const _=`${x[0]},${x[1]}`;if(R.has(_))continue;R.add(_);const A=x[0]+e*i,y=x[1]+e*u;if(H(A,y,s)){const E=Math.abs(A-B.x)+Math.abs(y-B.y);E<g&&(g=E,p={x:A,y})}}if(p)return p}const l=i>0?t.rect.min.x+e:t.rect.max.x-e,r=u>0?t.rect.min.y+e:t.rect.max.y-e,c=t.rotate??0;return c?S({x:l,y:r},c,t.rect.center):{x:l,y:r}}function F(t){return t&&t!=="none"?t:void 0}function St(t){const n=F(t.borderColor)||F(V.boothBorderColor)||V.colors.booths.default;return t.paths?.length>1&&F(t.paths[t.paths.length-1].color)||n}export function createBoothBadge(t,n){const s=Et(n.title||n.name),e=St(n),i=ft(et(e).hex()),u=window.devicePixelRatio||1,l=ht(),r=ut(q,l);K.font=r;const c=K.measureText(s).width,d=Math.ceil(c+yt*2),B=q+At*2,R=(n.borderWidth||lt.borderWidth)/2,p=d*J,g=B*J,I=n.rect.size.width,x=n.rect.size.height,_=o=>{const a=o?x:I,m=o?I:x;return Math.min(a>0?a*pt/p:1/0,m>0?m*xt/g:1/0)},A=Q(n),y=It(A);let E=n.rotate??0,T=0,P,C,M;const L=()=>{const m=Dt(n,A,y,R,T===0||T===3?1:-1,T===0||T===1?1:-1);P=m.x,C=m.y;const G=_(T===1||T===3);M=Rt(A,y,P,C,p,g,G,E)};L();const b=(o,a)=>{const m=o/2,G=a/2,Y=S({x:P+m,y:C+G},E,{x:P,y:C});return new nt(Y,{x:o,y:a},E)},O=o=>{const a=Math.min(o,M);return b(p*a,g*a)},w=mt(l,t.fontUrls),h=st(b(1,1),e);h.hidden=!0,h.dim=n.skipDim?!1:void 0;const f=it(rt([[s],[]],i,0,[w,w]),b(1,1),[0,0],{horizontal:"center",vertical:"center"});f.hidden=!0,f.dim=n.skipDim?!1:void 0;const U=()=>!!(n.layer&&!n.layer.visible),D=[];D.push(W(()=>n.skipDim,o=>{h.dim=o?!1:void 0,f.dim=o?!1:void 0,t.update(h,f)})),D.push(W(()=>n.layer?.visible??!0,o=>{h.hidden=!o,f.hidden=!o,t.update(h,f)}));const k=o=>{h.shape=X(O(o)),h.hidden=U()},z=o=>{const a=Math.min(o,M);f.lines[0].fontSize=Bt/u*a,f.bounds=X(O(o)),f.hidden=U()};return t.onPtScale(`badge-bg-${n.id}`,o=>(k(o),h)),t.onPtScale(`badge-text-${n.id}`,o=>(z(o),f)),D.push(W(()=>Z.mapSettings,({roll:o})=>{ct(o??0)&&t.onRoll(`badge-roll-${n.id}`,a=>{const m=at(a,E);m!==void 0&&(E+=m,T=(T+(m>0?1:3))%4,L(),k(t.scale),z(t.scale),t.update(h,f))})},{fireImmediately:!0})),{bg:h,text:f,dispose:()=>{D.forEach(o=>o()),D.length=0}}}export function configBoothsBadges(t,n,s){const e=[],i=[],u=[];for(const r of s)if(r instanceof dt&&gt({hideExhibitorBoothNumber:N.hideExhibitorBoothNumber,hideBoothBadges:N.hideBoothBadges,hideLogoInBooth:Z.hideLogoInBooth,noLabels:r.noLabels,hasExhibitors:r.exhibitors.length>0,hasLogoInBooth:r.exhibitors.some(c=>c.logoInBooth&&c.logo)})){const{bg:c,text:d,dispose:B}=createBoothBadge(t,r);e.push(c),i.push(d),u.push(B)}const l=()=>{u.forEach(r=>r()),u.length=0};return e.length?{layer:{name:`${n}${$}badges`,children:[{name:`${n}${$}badgeBgs`,children:e},{name:`${n}${$}badgeTexts`,children:i}]},cleanup:l}:{layer:null,cleanup:l}}
@@ -1 +1 @@
1
- import{jsx as W}from"react/jsx-runtime";import{degToRad as I}from"@expofp/geometry";import Z from"color";import{runInAction as H}from"mobx";import{observer as Q}from"mobx-react-lite";import{useCallback as k,useEffect as z,useMemo as m,useRef as p,useState as F}from"react";import Y from"../../data";import{getLayerSvg as q,svgArea as L,svgAreaExplicit as ee}from"../../data/svg";import{createSceneDef as re}from"../../renderer";import a,{uiState as y}from"../../store";import D from"../../tools/settings";import{resolveVenueFitRect as te}from"../../utils/scene-bounds";import oe from"../Map/drawing/config/config-all";import{loadLayersImages as ne}from"../Map/drawing/config/loadBoothsImages";import{useBuildRoute as ae}from"../Map/traffic/useBuildRoute";import{useManageTraffic as ie}from"../Map/traffic/useManageTraffic";import se from"./MaplibreWrapper";import{useCameraReactions as ce}from"./useCameraReactions";import{useDimming as le}from"./useDimming";import{useKioskIdleEvents as ue}from"./useKioskIdleEvents";import{useLayerVisibilitySync as fe}from"./useLayerVisibilitySync";import{useRendererEvents as me}from"./useRendererEvents";import{useWayfindingAndMarkers as pe}from"./useWayfindingAndMarkers";import{deriveGeoConfig as de,getLocalRectGeoBounds as ge,getVisibleRectFitPadding as be,INITIAL_FIT_ZOOM_ADJUSTMENT as Re}from"./utils/geo-config";import{applyMapOptions as $,DEFAULT_MAP_OPTIONS as ye,getTileSource as Se,MAP_2D_OPTIONS as Ae}from"./utils/map-helpers";import{calculateTransformMatrix as Ce}from"./utils/solver";const B="routes-api.expofp.com",he=800;function Me(e,c,n){return{getCameraState:()=>{const t=e.getCenter();return{lng:t.lng,lat:t.lat,zoom:e.getZoom(),bearing:e.getBearing(),pitch:e.getPitch()}},applyCameraState:t=>{e.easeTo({center:[t.lng,t.lat],zoom:t.zoom,bearing:t.bearing??c,pitch:t.pitch??n(),duration:he,essential:!0})},resetPitch:()=>{const t=n();e.getPitch()!==t&&e.jumpTo({pitch:t})}}}function j(){H(()=>{a.layerStore.layers.forEach(e=>{e.configured=!1,e.children=[],e.loaded=!1}),a.layerStore.layersLoaded=!1})}function w(e,c){const n=[];for(const t of e.rollRegistry.invoke(c))Array.isArray(t)?n.push(...t):n.push(t);n.length&&e.update(...n)}function De(e){const c=Math.abs(e[0]??0),n=Math.hypot(e[0]??0,e[1]??0);return c<=0||n<=0?1:c/n}const ve=Q(function({viewMode:c}){const[n,t]=F(null),[v,O]=F(null),o=a.rendererService,T=p(null),u=p(null),S=p(null),x=p(null),A=p(null),r=m(()=>de(),[]),_=m(()=>{const{rect:s}=te({layerViewbox:a.layerStore.viewboxRectangle,explicitArea:ee?L:null,layerRectangle:a.layerStore.rectangle,sceneDef:n,svgArea:L});return s},[n]),d=m(()=>r?{center:r.center,bearing:r.bearing,zoom:r.zoom,bounds:ge(_,r.gpsConfig),fitPadding:be(0),zoomAdjustment:Re}:null,[r,_]),g=m(()=>r?Ce(r.gpsConfig,q()?.getAttribute("units")):null,[r]),b=m(()=>({...c==="map2d"?Ae:ye}),[c]),P=p(b),N=m(()=>Se(),[]),{mapDimAnimatorRef:C,venueDimAnimatorRef:h,handleMapDimLayerReady:U}=le(u,o);z(()=>{if(!r)return;let s=!1;j();const i=oe(o).then(l=>{if(s)return;const f=Z(D.backgroundColor==="none"?"#ebebeb":D.backgroundColor).string(),M=re(l,L,f);t(M)}).catch(l=>{s||console.warn("Maplibre scene configuration failed.",l)}),E=C.current,R=h.current;return()=>{s=!0,j();const l=T.current;i.finally(()=>o.disposeIfCurrent(l)),S.current?.(),S.current=null,A.current&&(a.maplibreStore.clearCameraPortIfCurrent(A.current),A.current=null),T.current=null,u.current=null,x.current=null,O(null),E?.stop(),R?.stop(),y.sceneDefReady=!1}},[r,C,o,h]);const V=k((s,i,E,R)=>{T.current=s,u.current=i,x.current=R,O(s),o.attach(s,E,R,g?De(g):1),$(i,P.current);const l=Me(i,r?.bearing??i.getBearing(),()=>P.current.pitch??0);A.current=l,a.maplibreStore.setCameraPort(l),C.current?.setTarget(y.dimmed,{immediate:!0}),h.current?.setTarget(y.dimmed,{immediate:!0}),S.current?.();const f=()=>{const K=i.getBearing()-(r?.bearing??0);w(o,I(K))};i.on("rotate",f),i.on("rotateend",f),S.current=()=>{i.off("rotate",f),i.off("rotateend",f)},ne(o);const M=o.ptScaleRegistry.invoke(o.scale||1);M.length&&o.update(...M),w(o,I(i.getBearing()-(r?.bearing??0))),a.layerStore.layersLoaded=!0,a.fp.onFpConfigured&&a.fp.onFpConfigured(),y.sceneDefReady=!0,R()},[o,C,g,h,r]);z(()=>{P.current=b,$(u.current,b,!0)},[b]),me(v,o),ue(v,u),pe(v,o),fe(o,u,r),ce(u,r,n),ae({enabled:a.layerStore.layersLoaded&&y.buildRoute,rendererService:o});const G=Y.busRoutes??!1;ie({permission:a.layerStore.layersLoaded&&G,rendererService:o,dataJsonUrl:`https://${B}/v1/routes?expo=${D.EXPO}`,websocketUrl:`wss://${B}/locations?expo=${D.EXPO}`});const X=k(s=>{console.warn("Maplibre map failed to load; falling back to floorplan mode.",s),a.maplibreStore.deactivateMaplibre()},[]);if(!r||!d||!g||!n)return null;const J=`${d.center.join(",")}:${d.bearing}:${d.zoom}`;return W(se,{sceneDef:n,geoConfig:d,staticTransform:g,tileSource:N,mapOptions:b,onRendererReady:V,onMapDimLayerReady:U,onMapLoadError:X},J)});export default ve;
1
+ import{jsx as Z}from"react/jsx-runtime";import{degToRad as z}from"@expofp/geometry";import H from"color";import{runInAction as Q}from"mobx";import{observer as Y}from"mobx-react-lite";import{useCallback as F,useEffect as $,useMemo as p,useRef as m,useState as B}from"react";import q from"../../data";import{getLayerSvg as ee,svgArea as x,svgAreaExplicit as re}from"../../data/svg";import{createSceneDef as te}from"../../renderer";import a,{uiState as y}from"../../store";import D from"../../tools/settings";import{resolveVenueFitRect as oe}from"../../utils/scene-bounds";import ne from"../Map/drawing/config/config-all";import{loadLayersImages as ae}from"../Map/drawing/config/loadBoothsImages";import{useBuildRoute as ie}from"../Map/traffic/useBuildRoute";import{useManageTraffic as ce}from"../Map/traffic/useManageTraffic";import se from"./MaplibreWrapper";import{useCameraReactions as le}from"./useCameraReactions";import{useDimming as ue}from"./useDimming";import{useKioskIdleEvents as fe}from"./useKioskIdleEvents";import{useLayerVisibilitySync as me}from"./useLayerVisibilitySync";import{useRendererEvents as pe}from"./useRendererEvents";import{useWayfindingAndMarkers as de}from"./useWayfindingAndMarkers";import{deriveGeoConfig as ge,getLocalRectGeoBounds as Re,getVisibleRectFitPadding as be,INITIAL_FIT_ZOOM_ADJUSTMENT as ye}from"./utils/geo-config";import{applyMapOptions as j,DEFAULT_MAP_OPTIONS as Se,getTileSource as he,MAP_2D_OPTIONS as Ae}from"./utils/map-helpers";import{calculateTransformMatrix as Ce}from"./utils/solver";const w="routes-api.expofp.com",Me=800;function De(e,s,n){return{getCameraState:()=>{const t=e.getCenter();return{lng:t.lng,lat:t.lat,zoom:e.getZoom(),bearing:e.getBearing(),pitch:e.getPitch()}},applyCameraState:t=>{e.easeTo({center:[t.lng,t.lat],zoom:t.zoom,bearing:t.bearing??s,pitch:t.pitch??n(),duration:Me,essential:!0})},resetPitch:()=>{const t=n();e.getPitch()!==t&&e.jumpTo({pitch:t})}}}function N(){Q(()=>{a.layerStore.layers.forEach(e=>{e.configured=!1,e.children=[],e.loaded=!1}),a.layerStore.layersLoaded=!1})}function U(e,s){const n=[];for(const t of e.rollRegistry.invoke(s))Array.isArray(t)?n.push(...t):n.push(t);n.length&&e.update(...n)}function ve(e){const s=Math.abs(e[0]??0),n=Math.hypot(e[0]??0,e[1]??0);return s<=0||n<=0?1:s/n}const Te=Y(function({viewMode:s}){const[n,t]=B(null),[v,_]=B(null),o=a.rendererService,T=m(null),u=m(null),S=m(null),P=m(null),I=m(null),h=m(null),r=p(()=>ge(),[]),k=p(()=>{const{rect:c}=oe({layerViewbox:a.layerStore.viewboxRectangle,explicitArea:re?x:null,layerRectangle:a.layerStore.rectangle,sceneDef:n,svgArea:x});return c},[n]),d=p(()=>r?{center:r.center,bearing:r.bearing,zoom:r.zoom,bounds:Re(k,r.gpsConfig),fitPadding:be(0),zoomAdjustment:ye}:null,[r,k]),g=p(()=>r?Ce(r.gpsConfig,ee()?.getAttribute("units")):null,[r]),R=p(()=>({...s==="map2d"?Ae:Se}),[s]),E=m(R),V=p(()=>he(),[]),{mapDimAnimatorRef:A,venueDimAnimatorRef:C,handleMapDimLayerReady:G}=ue(u,o);$(()=>{if(!r)return;let c=!1;N();const i=ne(o).then(({layers:l,cleanup:f})=>{if(c){f();return}P.current=f;const M=H(D.backgroundColor==="none"?"#ebebeb":D.backgroundColor).string(),O=te(l,x,M);t(O)}).catch(l=>{c||console.warn("Maplibre scene configuration failed.",l)}),L=A.current,b=C.current;return()=>{c=!0,N();const l=T.current;i.finally(()=>o.disposeIfCurrent(l)),S.current?.(),S.current=null,P.current?.(),P.current=null,h.current&&(a.maplibreStore.clearCameraPortIfCurrent(h.current),h.current=null),T.current=null,u.current=null,I.current=null,_(null),L?.stop(),b?.stop(),y.sceneDefReady=!1}},[r,A,o,C]);const X=F((c,i,L,b)=>{T.current=c,u.current=i,I.current=b,_(c),o.attach(c,L,b,g?ve(g):1),j(i,E.current);const l=De(i,r?.bearing??i.getBearing(),()=>E.current.pitch??0);h.current=l,a.maplibreStore.setCameraPort(l),A.current?.setTarget(y.dimmed,{immediate:!0}),C.current?.setTarget(y.dimmed,{immediate:!0}),S.current?.();const f=()=>{const O=i.getBearing()-(r?.bearing??0);U(o,z(O))};i.on("rotate",f),i.on("rotateend",f),S.current=()=>{i.off("rotate",f),i.off("rotateend",f)},ae(o);const M=o.ptScaleRegistry.invoke(o.scale||1);M.length&&o.update(...M),U(o,z(i.getBearing()-(r?.bearing??0))),a.layerStore.layersLoaded=!0,a.fp.onFpConfigured&&a.fp.onFpConfigured(),y.sceneDefReady=!0,b()},[o,A,g,C,r]);$(()=>{E.current=R,j(u.current,R,!0)},[R]),pe(v,o),fe(v,u),de(v,o),me(o,u,r),le(u,r,n),ie({enabled:a.layerStore.layersLoaded&&y.buildRoute,rendererService:o});const J=q.busRoutes??!1;ce({permission:a.layerStore.layersLoaded&&J,rendererService:o,dataJsonUrl:`https://${w}/v1/routes?expo=${D.EXPO}`,websocketUrl:`wss://${w}/locations?expo=${D.EXPO}`});const K=F(c=>{console.warn("Maplibre map failed to load; falling back to floorplan mode.",c),a.maplibreStore.deactivateMaplibre()},[]);if(!r||!d||!g||!n)return null;const W=`${d.center.join(",")}:${d.bearing}:${d.zoom}`;return Z(se,{sceneDef:n,geoConfig:d,staticTransform:g,tileSource:V,mapOptions:R,onRendererReady:X,onMapDimLayerReady:G,onMapLoadError:K},W)});export default Te;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expofp/floorplan",
3
- "version": "3.18.0",
3
+ "version": "3.18.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/expofp/efp-app.git",
@@ -72,13 +72,13 @@
72
72
  "tslib": "^2.3.0",
73
73
  "uuid": "^9.0.1",
74
74
  "zod": "4.4.3",
75
- "@expofp/config": "3.18.0",
76
- "@expofp/geometry": "3.18.0",
77
- "@expofp/resolve": "3.18.0",
78
- "@expofp/utils": "3.18.0",
79
- "@expofp/schema": "3.18.0",
80
- "@expofp/debug": "3.18.0",
81
- "@expofp/wayfinding": "3.18.0"
75
+ "@expofp/config": "3.18.1",
76
+ "@expofp/debug": "3.18.1",
77
+ "@expofp/geometry": "3.18.1",
78
+ "@expofp/resolve": "3.18.1",
79
+ "@expofp/schema": "3.18.1",
80
+ "@expofp/wayfinding": "3.18.1",
81
+ "@expofp/utils": "3.18.1"
82
82
  },
83
83
  "devDependencies": {
84
84
  "@babel/plugin-proposal-decorators": "^8.0.2",