@expofp/floorplan 3.39.0 → 3.39.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 (79) hide show
  1. package/dist/browser/{Button-bdODDPNw.js → Button-DDJ9HcfI.js} +5 -5
  2. package/dist/browser/{CookieConsent-DNrAwMNi.js → CookieConsent-CJSQYYJ0.js} +7 -7
  3. package/dist/browser/{Debug-BIX5rNWa.js → Debug-Bt5IRvUt.js} +7 -7
  4. package/dist/browser/{DebugTools-DWIya7Bp.js → DebugTools-C-4QnINH.js} +26 -26
  5. package/dist/browser/{Demo-BjyJN4Lb.js → Demo-ClW-lszE.js} +9 -9
  6. package/dist/browser/{Free-GA2gE4iv.js → Free-CPuBAHN9.js} +9 -9
  7. package/dist/browser/{GalleryContainer-BEiygMFs.js → GalleryContainer-CIasK5mL.js} +10 -10
  8. package/dist/browser/{GpsLoader-DamQfmE8.js → GpsLoader-DiArANLO.js} +17 -17
  9. package/dist/browser/{KioskStore-unhS5B1M.js → KioskStore-BZ4HwD9A.js} +5 -5
  10. package/dist/browser/{MaplibreAdapter-BuFz6p4l.js → MaplibreAdapter-BdbdSizH.js} +102 -102
  11. package/dist/browser/{ModalContainer-BSOaylBJ.js → ModalContainer-BuH30fJN.js} +10 -10
  12. package/dist/browser/{PermissionNotice-QoBvgTxq.js → PermissionNotice-DMOhs0fQ.js} +6 -6
  13. package/dist/browser/{SetKioskMode-CY8Px_y2.js → SetKioskMode-BUUQxMDT.js} +12 -12
  14. package/dist/browser/{ShowKiosk-BdIb4cjA.js → ShowKiosk-CGkQXtiC.js} +10 -10
  15. package/dist/browser/{ViewerMenuPanel-CfEoeUSF.js → ViewerMenuPanel-C0hwkh7I.js} +9 -9
  16. package/dist/browser/{add-debug-secret-listener-DcRkKb16.js → add-debug-secret-listener-DibnDryN.js} +1 -1
  17. package/dist/browser/{adopt-global-settings-BQr2uaJi.js → adopt-global-settings-BscL85ma.js} +9 -9
  18. package/dist/browser/{boolean-editor-CO1l1mG2.js → boolean-editor-CLJh2knL.js} +9 -9
  19. package/dist/browser/{bootIntercom-BF8W6edz.js → bootIntercom-C-YBp0xT.js} +2 -2
  20. package/dist/browser/bundle.json +71 -71
  21. package/dist/browser/{camera-events-BM2DRKiu.js → camera-events-CQZgwih3.js} +1 -1
  22. package/dist/browser/{classnames-zBYgq48f.js → classnames-4Iik8FC_.js} +2 -2
  23. package/dist/browser/{client-kHcAahev.js → client-BtPJvi_3.js} +5 -5
  24. package/dist/browser/{components-DAabWR_p.js → components-DMOhc6ZZ.js} +753 -716
  25. package/dist/browser/{debug-context-DoIsRKLN.js → debug-context-CxXzVYRx.js} +7 -7
  26. package/dist/browser/{debug-overlay-Cldouqb1.js → debug-overlay-BJZ16esR.js} +10 -10
  27. package/dist/browser/{debug-ui-BMvP-d9w.js → debug-ui-CX2sgttZ.js} +6 -6
  28. package/dist/browser/{dimming-Big09HME.js → dimming-3R7UOgr9.js} +82 -82
  29. package/dist/browser/{dist-Da-W2paU.js → dist--cp6ZHYH.js} +5 -5
  30. package/dist/browser/{dist-BqsLBiXn.js → dist-DeeoO3mx.js} +6 -6
  31. package/dist/browser/{dist-DUkTj21m.js → dist-DoBzJWpA.js} +3 -3
  32. package/dist/browser/{efp-debug-init-Br53YSLH.js → efp-debug-init-DfQX41Dz.js} +3 -3
  33. package/dist/browser/{enum-editor-BF0tTe81.js → enum-editor-BByQoeky.js} +4 -4
  34. package/dist/browser/{es5-DLwEWAqt.js → es5-CP2UUc_5.js} +2 -2
  35. package/dist/browser/{event-head-D7Uj7byv.js → event-head-BXpNerID.js} +1 -1
  36. package/dist/browser/{event-not-found-CANnIJrZ.js → event-not-found-Bx82hQuX.js} +3 -3
  37. package/dist/browser/{exports-KRrUY3Z1.js → exports-gWa75nmY.js} +1 -1
  38. package/dist/browser/{favicon-Bze7lfTk.js → favicon-DNdj7aFi.js} +1 -1
  39. package/dist/browser/{fetch-retry.umd-D6rdaNIF.js → fetch-retry.umd-Df7tkVK1.js} +2 -2
  40. package/dist/browser/{flex-_QSLGHt0.js → flex-uig6hZkZ.js} +5 -5
  41. package/dist/browser/{floorplan.loader-CvNH6Qc4.js → floorplan.loader-DNLxyDic.js} +10 -10
  42. package/dist/browser/{floorplan.ready-HPblmUxV.js → floorplan.ready-C_lm766s.js} +16 -16
  43. package/dist/browser/{fuse-9EzVEd12.js → fuse-Didw830W.js} +2 -2
  44. package/dist/browser/{i18n-DsPOygSI.js → i18n-BVE2kS7w.js} +5 -5
  45. package/dist/browser/index.js +16 -16
  46. package/dist/browser/{index.module-BnkEmOmv.js → index.module-CVo9wrU4.js} +4 -4
  47. package/dist/browser/{integrateKiosk-DlUC2piv.js → integrateKiosk-bnGUsf7Q.js} +4 -4
  48. package/dist/browser/{is-own-domain-Db2dg_LE.js → is-own-domain-B64uVROp.js} +1 -1
  49. package/dist/browser/{is-webview-CKWDUFMW.js → is-webview-BoQ3VPRe.js} +1 -1
  50. package/dist/browser/{jsx-runtime-BxX9Q763.js → jsx-runtime-BGutO_I9.js} +2 -2
  51. package/dist/browser/{kiosk-record-BDPzvIrP.js → kiosk-record-Bcyr4YeZ.js} +1 -1
  52. package/dist/browser/{lib-BuATiAoM.js → lib-CW4ROgrI.js} +3 -3
  53. package/dist/browser/{loadImage-BvSruq1k.js → loadImage-B-6VhOfG.js} +4 -4
  54. package/dist/browser/{logDeviceInfo-Cu3Vy9La.js → logDeviceInfo-DLgu-6-l.js} +9 -9
  55. package/dist/browser/{mobx-C6ZnBiyR.js → mobx-B9XSgx3-.js} +4 -4
  56. package/dist/browser/{optional-boolean-editor-D4LT9fSN.js → optional-boolean-editor-ESbhCoDb.js} +3 -3
  57. package/dist/browser/{optional-enum-editor-Cxn6rM4t.js → optional-enum-editor-_RF_OVcS.js} +4 -4
  58. package/dist/browser/{optional-string-editor-CTUOwnCm.js → optional-string-editor-C6h-x0BL.js} +4 -4
  59. package/dist/browser/{particles.min-dLuHpqHJ.js → particles.min-Dccc8fgr.js} +2 -2
  60. package/dist/browser/{react-8e9Lx7_L.js → react-CM7l092i.js} +2 -2
  61. package/dist/browser/{react-dom-DVm8zF94.js → react-dom-DV2t60Bu.js} +3 -3
  62. package/dist/browser/{rolldown-runtime-CgLujcqt.js → rolldown-runtime-BOCG9HEF.js} +1 -1
  63. package/dist/browser/{scheduler-BviKXQIp.js → scheduler-CYuaS4GW.js} +2 -2
  64. package/dist/browser/{select-DqlFRrKq.js → select-Ck7Yfj4n.js} +10 -10
  65. package/dist/browser/{settings-DYHQnr2h.js → settings-BEwEIUKe.js} +2 -2
  66. package/dist/browser/{settings-item-C7c9AnkF.js → settings-item-BMVccHn4.js} +6 -6
  67. package/dist/browser/{store-CrXKrvfj.js → store-CARxK2Ft.js} +5554 -5514
  68. package/dist/browser/{string-editor-DziXqaWJ.js → string-editor-DvchTir6.js} +4 -4
  69. package/dist/browser/{text-field-Dh7Ux2mR.js → text-field-B93LMty4.js} +5 -5
  70. package/dist/browser/{theme-me78t_PC.js → theme-FqSzizhT.js} +8 -8
  71. package/dist/browser/{ui-yPy4UNxE.js → ui-1b_AyBgX.js} +8 -8
  72. package/dist/browser/{useRenderTarget-Cm9xuQ0_.js → useRenderTarget-Z7iVu1Bc.js} +4 -4
  73. package/dist/browser/{viewport-rjH0BXVJ.js → viewport-CN0fRYhD.js} +2 -2
  74. package/dist/esm/components/Map/drawing/config/config-booth-labels-special.js +2 -2
  75. package/dist/esm/components/Map/drawing/config/config-booth-labels.js +1 -1
  76. package/dist/esm/components/Map/drawing/config/config-booths.d.ts +1 -1
  77. package/dist/esm/components/Map/drawing/config/config-booths.js +1 -1
  78. package/dist/esm/components/Wayfinding.js +1 -1
  79. package/package.json +11 -11
@@ -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.39.0" };
4
+ e.SENTRY_RELEASE = { id: "3.39.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "8f241b7f-d106-4e96-a6a2-b96a0f9abf69", e._sentryDebugIdIdentifier = "sentry-dbid-8f241b7f-d106-4e96-a6a2-b96a0f9abf69");
7
7
  } catch {}
8
8
  })();
9
- import { t as e } from "./jsx-runtime-BxX9Q763.js";
10
- import { t } from "./settings-item-C7c9AnkF.js";
11
- import { t as n } from "./text-field-Dh7Ux2mR.js";
9
+ import { t as e } from "./jsx-runtime-BGutO_I9.js";
10
+ import { t } from "./settings-item-BMVccHn4.js";
11
+ import { t as n } from "./text-field-B93LMty4.js";
12
12
  //#region ../debug/src/lib/ui/string-editor.tsx
13
13
  var r = e(), i = (e) => {
14
14
  var i;
@@ -1,15 +1,15 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.39.0" };
4
+ e.SENTRY_RELEASE = { id: "3.39.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "e13f8c4e-8995-47cd-802d-392fd9bdf13a", e._sentryDebugIdIdentifier = "sentry-dbid-e13f8c4e-8995-47cd-802d-392fd9bdf13a");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-CgLujcqt.js";
10
- import { t } from "./react-8e9Lx7_L.js";
11
- import { D as n, i as r, l as i, n as a, s as o, u as s, y as c } from "./flex-_QSLGHt0.js";
12
- import { t as l } from "./classnames-zBYgq48f.js";
9
+ import { r as e } from "./rolldown-runtime-BOCG9HEF.js";
10
+ import { t } from "./react-CM7l092i.js";
11
+ import { D as n, i as r, l as i, n as a, s as o, u as s, y as c } from "./flex-uig6hZkZ.js";
12
+ import { t as l } from "./classnames-4Iik8FC_.js";
13
13
  //#region ../../node_modules/.pnpm/@radix-ui+themes@3.3.0_@types+react-dom@19.2.3_@types+react@19.2.17__@types+react@19.2._5ea800d4e947acedb1fa1275f1697b17/node_modules/@radix-ui/themes/dist/esm/components/text-field.props.js
14
14
  var u = /* @__PURE__ */ e(t()), d = /* @__PURE__ */ e(l()), f = {
15
15
  size: {
@@ -1,18 +1,18 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.39.0" };
4
+ e.SENTRY_RELEASE = { id: "3.39.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "5b26ff7f-61de-4d09-8508-a74b71b94f98", e._sentryDebugIdIdentifier = "sentry-dbid-5b26ff7f-61de-4d09-8508-a74b71b94f98");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-CgLujcqt.js";
10
- import { t } from "./react-8e9Lx7_L.js";
11
- import { t as n } from "./jsx-runtime-BxX9Q763.js";
12
- import { t as r } from "./react-dom-DVm8zF94.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-_QSLGHt0.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-BqsLBiXn.js";
15
- import { t as y } from "./classnames-zBYgq48f.js";
9
+ import { r as e } from "./rolldown-runtime-BOCG9HEF.js";
10
+ import { t } from "./react-CM7l092i.js";
11
+ import { t as n } from "./jsx-runtime-BGutO_I9.js";
12
+ import { t as r } from "./react-dom-DV2t60Bu.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-uig6hZkZ.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-DeeoO3mx.js";
15
+ import { t as y } from "./classnames-4Iik8FC_.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.39.0" };
4
+ e.SENTRY_RELEASE = { id: "3.39.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "80a4f49f-d869-4a38-b1c0-c3cfd645ceec", e._sentryDebugIdIdentifier = "sentry-dbid-80a4f49f-d869-4a38-b1c0-c3cfd645ceec");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-CgLujcqt.js";
10
- import { a as t, i as n, s as r } from "./efp-debug-init-Br53YSLH.js";
11
- import { a as i, i as a } from "./adopt-global-settings-BQr2uaJi.js";
12
- import { t as o } from "./jsx-runtime-BxX9Q763.js";
13
- import "./settings-DYHQnr2h.js";
14
- import { t as s } from "./add-debug-secret-listener-DcRkKb16.js";
9
+ import { r as e } from "./rolldown-runtime-BOCG9HEF.js";
10
+ import { a as t, i as n, s as r } from "./efp-debug-init-DfQX41Dz.js";
11
+ import { a as i, i as a } from "./adopt-global-settings-BscL85ma.js";
12
+ import { t as o } from "./jsx-runtime-BGutO_I9.js";
13
+ import "./settings-BEwEIUKe.js";
14
+ import { t as s } from "./add-debug-secret-listener-DibnDryN.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-BMvP-d9w.js"), { createRoot: i } = await import("./client-kHcAahev.js").then((t) => /* @__PURE__ */ e(t.t(), 1)), a = document.createElement("div");
29
+ let { DebugUi: n } = await import("./debug-ui-CX2sgttZ.js"), { createRoot: i } = await import("./client-BtPJvi_3.js").then((t) => /* @__PURE__ */ e(t.t(), 1)), a = document.createElement("div");
30
30
  document.body.appendChild(a), i(a).render(/* @__PURE__ */ (0, l.jsx)(n, {
31
31
  useDebugButtonState: r.useState,
32
32
  open: t
@@ -1,14 +1,14 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.39.0" };
4
+ e.SENTRY_RELEASE = { id: "3.39.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "44feeb02-c84e-4fb1-b2f8-984c7d50f58d", e._sentryDebugIdIdentifier = "sentry-dbid-44feeb02-c84e-4fb1-b2f8-984c7d50f58d");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-CgLujcqt.js";
10
- import { t } from "./react-8e9Lx7_L.js";
11
- import { l as n } from "./store-CrXKrvfj.js";
9
+ import { r as e } from "./rolldown-runtime-BOCG9HEF.js";
10
+ import { t } from "./react-CM7l092i.js";
11
+ import { l as n } from "./store-CARxK2Ft.js";
12
12
  //#region ../ui/src/shared/activeElement.ts
13
13
  var r = (e) => !!e && "activeElement" in e;
14
14
  function i(e) {
@@ -1,12 +1,12 @@
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.39.0" };
4
+ e.SENTRY_RELEASE = { id: "3.39.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "233b3b22-a917-48c8-8f7e-f558b0dbd9d8", e._sentryDebugIdIdentifier = "sentry-dbid-233b3b22-a917-48c8-8f7e-f558b0dbd9d8");
7
7
  } catch {}
8
8
  })();
9
- import { c as e, vt as t } from "./store-CrXKrvfj.js";
9
+ import { c as e, vt as t } from "./store-CARxK2Ft.js";
10
10
  //#region src/components/Map/viewport.ts
11
11
  function n(e) {
12
12
  return {
@@ -1,2 +1,2 @@
1
- import{Rect as m}from"@expofp/geometry";import{update as L}from"@expofp/renderer";import{reaction as b}from"mobx";import{FONT_WEIGHT_PRIMARY_BOOTH as g,FONT_WEIGHT_PRIMARY_SPECIAL as y}from"../../../../constants";import{createTextDef as D}from"../../../../engine/defs";import{loadCustomFontsUrls as F}from"../../../../engine/fonts";import{getQuarterTurns as x,getRollValue as R,rotateRectByQuarters as S,rotateTextDefByQuarters as T,shouldFlip as v}from"../../../../engine/update-def";import{heatmapStore as B,layersStore as I,uiState as l}from"../../../../store";import{SpecialBooth as w}from"../../../../store/BoothStore";import z from"../../../../tools/settings";import{getFont as M}from"./canvases";import{BoothLabelDrawer as O,getFontUrlByWeight as k,getMinZoomFactorForDot as C,isDirectionsMode as P}from"./config-booth-labels";import{LABEL_MARGIN_FRACTION as f}from"./label-inset.js";import _ from"./TextFitter";const c=new Map;function A(i){let t=c.get(i);if(!t){const s=[18,16,14,12,10,7].map(o=>o*i),e=14*i;t=new _(M,s,e),c.set(i,t),setTimeout(()=>c.delete(i),5e3)}return t}export default function N(i){if(!(!(i instanceof w)||i.noLabels))return new V(i)}class V extends O{constructor(t){super(t),this.steps=[],this.text="";const s=this.booth.rect,e=Number(getComputedStyle(document.body).getPropertyValue(y))||Number(getComputedStyle(document.body).getPropertyValue(g))||500,o=k(e,F()),h=s.expand({x:-(s.size.width*f+this.padding),y:-(s.size.height*f+this.padding)});this.setText(),this.canvasRect=new m(h.center,h.size,t.rotate,t.elevation),this.setFactors(this.text),this.labelIsVertical=Math.abs(Math.abs(t.rotate)-Math.PI/2)<.01,this.fontSizes=[this.steps,[]],this.minZoomDotVisible=C(this.steps.map(a=>a.scaleFactor)),this.shapeLabel=D([{text:this.text,color:t.labelColor||z.boothLabelColor,fontUrl:o,fontSize:0}],new m(h.center,h.size,t.rotate,t.elevation),[this.padding,this.padding],{horizontal:"center",text:"center",vertical:"center"}),this.shapeLabel.onScale=({pixelSize:a})=>this.layOutLabel(a),this.getShapeDot(),b(()=>[this.booth.skipDim,l.selectedRoute,I.layersLoaded],()=>{const a=P();this.shapeLabel.dim=a||this.booth.skipDim?0:void 0,this.shapeDot.dim=a||this.booth.skipDim?0:void 0,L(this.shapeLabel,this.shapeDot)}),b(()=>l.mapSettings,({roll:a})=>{R(a??0)&&(this.shapeLabel.onRoll=({roll:p,pixelSize:d})=>{const r=this.shapeLabel.bounds.rotation;if(this.labelIsVertical)return v(p,r)?(this.shapeLabel.bounds.rotate(-2*r,this.shapeLabel.bounds),[this.shapeLabel,this.shapeDot]):void 0;const n=x(p,r);if(n===0)return;const{size:u}=this.canvasRect;return this.shapeLabel=T(this.shapeLabel,n),u.x!==u.y&&!this.shapeLabel.hidden&&(this.canvasRect=S(this.canvasRect,n),this.setFactors(this.text),this.layOutLabel(d),this.layOutDot(d)),[this.shapeLabel,this.shapeDot]})},{fireImmediately:!0})}getShape(){return[this.shapeLabel,this.shapeDot]}layOutLabel(t){const s=this.steps.find(e=>e.scaleFactor<1/t);return s?(this.shapeLabel.lines[0].fontSize=s.value*t,this.shapeLabel.lines[0].text=s.lines.join(`
2
- `),this.shapeLabel.padding=[this.paddingScaled[0]*t+this.padding,this.paddingScaled[1]*t+this.padding],[this.shapeLabel]):(this.shapeLabel.lines[0].fontSize=0,[this.shapeLabel])}layOutDot(t){const s=this.steps.find(h=>h.scaleFactor<1/t),e=this.shapeDot.bounds,o=this.shapeDot.source;return e.scale({x:o.width*t/e.size.x,y:o.height*t/e.size.y},e.center,e),this.shapeDot.hidden=!!s,[this.shapeDot]}setFactors(t){this.steps=A(devicePixelRatio).getStepsForRect(t,this.canvasRect.size.x,this.canvasRect.size.y)}setText(){const t=this.booth.title||this.booth.name,e=`Clicks: ${B.getTotalClicksByBooth(this.booth)}`;this.text=l.heatmap?`${t} - ${e}`:t}}
1
+ import{Rect as u}from"@expofp/geometry";import{update as L}from"@expofp/renderer";import{reaction as m}from"mobx";import{FONT_WEIGHT_PRIMARY_BOOTH as g,FONT_WEIGHT_PRIMARY_SPECIAL as y}from"../../../../constants";import{createTextDef as F}from"../../../../engine/defs";import{loadCustomFontsUrls as D}from"../../../../engine/fonts";import{getQuarterTurns as x,getRollValue as R,rotateRectByQuarters as S,rotateTextDefByQuarters as T,shouldFlip as v}from"../../../../engine/update-def";import{heatmapStore as B,layersStore as I,uiState as b}from"../../../../store";import{SpecialBooth as w}from"../../../../store/BoothStore";import z from"../../../../tools/settings";import{getFont as O}from"./canvases";import{BoothLabelDrawer as C,getFontUrlByWeight as M,getMinZoomFactorForDot as P}from"./config-booth-labels";import{LABEL_MARGIN_FRACTION as f}from"./label-inset.js";import _ from"./TextFitter";const l=new Map;function A(i){let t=l.get(i);if(!t){const s=[18,16,14,12,10,7].map(o=>o*i),e=14*i;t=new _(O,s,e),l.set(i,t),setTimeout(()=>l.delete(i),5e3)}return t}export default function N(i){if(!(!(i instanceof w)||i.noLabels))return new V(i)}class V extends C{constructor(t){super(t),this.steps=[],this.text="";const s=this.booth.rect,e=Number(getComputedStyle(document.body).getPropertyValue(y))||Number(getComputedStyle(document.body).getPropertyValue(g))||500,o=M(e,D()),r=s.expand({x:-(s.size.width*f+this.padding),y:-(s.size.height*f+this.padding)});this.setText(),this.canvasRect=new u(r.center,r.size,t.rotate,t.elevation),this.setFactors(this.text),this.labelIsVertical=Math.abs(Math.abs(t.rotate)-Math.PI/2)<.01,this.fontSizes=[this.steps,[]],this.minZoomDotVisible=P(this.steps.map(a=>a.scaleFactor)),this.shapeLabel=F([{text:this.text,color:t.labelColor||z.boothLabelColor,fontUrl:o,fontSize:0}],new u(r.center,r.size,t.rotate,t.elevation),[this.padding,this.padding],{horizontal:"center",text:"center",vertical:"center"}),this.shapeLabel.onScale=({pixelSize:a})=>this.layOutLabel(a),this.getShapeDot(),m(()=>I.layersLoaded&&this.booth.skipDim===!0,a=>{this.shapeLabel.dim=a?0:void 0,this.shapeDot.dim=a?0:void 0,L(this.shapeLabel,this.shapeDot)}),m(()=>b.mapSettings,({roll:a})=>{R(a??0)&&(this.shapeLabel.onRoll=({roll:c,pixelSize:p})=>{const h=this.shapeLabel.bounds.rotation;if(this.labelIsVertical)return v(c,h)?(this.shapeLabel.bounds.rotate(-2*h,this.shapeLabel.bounds),[this.shapeLabel,this.shapeDot]):void 0;const n=x(c,h);if(n===0)return;const{size:d}=this.canvasRect;return this.shapeLabel=T(this.shapeLabel,n),d.x!==d.y&&!this.shapeLabel.hidden&&(this.canvasRect=S(this.canvasRect,n),this.setFactors(this.text),this.layOutLabel(p),this.layOutDot(p)),[this.shapeLabel,this.shapeDot]})},{fireImmediately:!0})}getShape(){return[this.shapeLabel,this.shapeDot]}layOutLabel(t){const s=this.steps.find(e=>e.scaleFactor<1/t);return s?(this.shapeLabel.lines[0].fontSize=s.value*t,this.shapeLabel.lines[0].text=s.lines.join(`
2
+ `),this.shapeLabel.padding=[this.paddingScaled[0]*t+this.padding,this.paddingScaled[1]*t+this.padding],[this.shapeLabel]):(this.shapeLabel.lines[0].fontSize=0,[this.shapeLabel])}layOutDot(t){const s=this.steps.find(r=>r.scaleFactor<1/t),e=this.shapeDot.bounds,o=this.shapeDot.source;return e.scale({x:o.width*t/e.size.x,y:o.height*t/e.size.y},e.center,e),this.shapeDot.hidden=!!s,[this.shapeDot]}setFactors(t){this.steps=A(devicePixelRatio).getStepsForRect(t,this.canvasRect.size.x,this.canvasRect.size.y)}setText(){const t=this.booth.title||this.booth.name,e=`Clicks: ${B.getTotalClicksByBooth(this.booth)}`;this.text=b.heatmap?`${t} - ${e}`:t}}
@@ -1 +1 @@
1
- import{Rect as B}from"@expofp/geometry";import{update as U}from"@expofp/renderer";import{reaction as M}from"mobx";import{FONT_WEIGHT_PRIMARY_BOOTH as V,FONT_WEIGHT_PRIMARY_EXHIBITOR as Z,FONT_WEIGHT_SECONDARY_BOOTH as X,FONT_WEIGHT_SECONDARY_EXHIBITOR as G}from"../../../../constants";import c from"../../../../data";import{createShapeDot as k,createTextDef as Y,createTextDefLines as Q}from"../../../../engine/defs";import{DEFAULT_FONT_LIGHT_URL as $,DEFAULT_FONT_URL as W,loadCustomFontsUrls as q}from"../../../../engine/fonts";import{getQuarterTurns as j,getRollValue as J,rotateRectByQuarters as K,rotateTextDefByQuarters as tt,updateLinesScale as et}from"../../../../engine/update-def";import{boothStore as it,layersStore as _,uiState as m}from"../../../../store";import{RegularBooth as st,SpecialBooth as ot}from"../../../../store/BoothStore";import v from"../../../../tools/settings";import{t as S}from"../../../../utils/i18n";import nt from"../../../../utils/is-mobile";import at from"../../../../utils/is-webview";import{isArabicText as rt}from"../../../../utils/rtl";import{BoothDrawerBaseWithoutPainter as ht}from"./BoothDrawerBase";import{getFont as I}from"./canvases";import{getLabelBorderInset as lt}from"./label-inset.js";let z=v.boothLabelColor;v.EXPO==="tqs2021"&&(z="#000");const x=nt||at,F=n=>n.replace(" ","").substring(0,4).replace(/[0-9]/g,"3").replace(/[A-Z]/gi,"A"),P=document.createElement("canvas").getContext("2d");export default function ct(n){if(!(!(n instanceof st)||n.noLabels))return new BoothLabelDrawer(n)}export function getMinZoomFactorForDot(n){return Array.isArray(n)&&n.length>0?Math.max(...n.map(t=>t)):typeof n=="number"?n:-0}export const isDirectionsMode=()=>!!(m.selectedRoute?.from&&m.selectedRoute?.to);export function getFontUrlByWeight(n,t=[],e="normal"){return[...t,{weight:500,url:W,style:"normal"},{weight:300,url:$,style:"normal"}].find(s=>+s.weight===n&&s.style===e)?.url||W}function b(n,t){return Number(getComputedStyle(document.body).getPropertyValue(n))||t}export function getBoothLabelWeights(){return{main:b(V,500),details:b(X,300)}}export function getExhibitorLabelWeights(){return{main:b(Z,500),details:b(G,300)}}export function getBadgeFontWeight(){return getExhibitorLabelWeights().details}const y="Details";export class BoothLabelDrawer extends ht{constructor(t){super(t),this.minZoomDotVisible=0,this.maxZoomDotVisible=0,this.exh=[],this.shapeLabel=void 0,this.shapeDot=void 0,this.fontSizes=[[],[]],this.lines=[[],[]],this.fontUrls=["",""],this.canvasRect=new B(t.rect.center,t.rect.size,t.rotate,t.elevation),this.paddingScaled=[4,4],this.padding=lt(t.borderWidth||it.borderWidth,t.rect.size),this.topLeftAlignment={horizontal:m.rtl?"right":"left",vertical:"top"},this.centerAlignment={horizontal:"center",vertical:"center"},this.prefixes=x?[{fontSize:7,name:"XS",short:!0},{fontSize:10,name:"S",short:!0},{fontSize:16,name:y,short:!1}]:[{fontSize:7,name:"XS",short:!0},{fontSize:10,name:"S",short:!0},{fontSize:12,name:"M",short:!0},{fontSize:14,name:"L",short:!0},{fontSize:18,name:y,short:!1}],!(t instanceof ot)&&(this.exh=c.hideExhibitors?[]:c.onlyFeaturedExhibitors?t.exhibitors.filter(e=>e.featured):t.exhibitors,x&&this.optimizationLevel()>=3&&(this.prefixes=this.prefixes.filter(e=>e.name!=="S")),this.createLines(),this.calculateFontSizeFactors(),this.shapeLabel=Y(Q(this.lines,this.booth.labelColor||z,0,this.fontUrls),new B(this.booth.rect.center,this.booth.rect.size,this.booth.rotate,this.booth.elevation),[...this.paddingScaled],{horizontal:"left",vertical:"top"}),this.shapeLabel.onScale=({pixelSize:e})=>this.layOutLabel(e),this.getShapeDot(),M(()=>[this.booth.skipDim,m.selectedRoute,_.layersLoaded],()=>{if(!_.layersLoaded)return;const e=isDirectionsMode();this.shapeLabel.dim=e||this.booth.skipDim?0:void 0,this.shapeDot.dim=e||this.booth.skipDim?0:void 0,U(this.shapeLabel,this.shapeDot)}),M(()=>m.mapSettings,({roll:e})=>{J(e??0)&&(this.shapeLabel.onRoll=({roll:i,pixelSize:a})=>{const s=j(i,this.shapeLabel.bounds.rotation);if(s===0)return;const{size:r}=this.canvasRect;return this.shapeLabel=tt(this.shapeLabel,s),!this.shapeLabel.hidden&&!this.exh.length&&r.x!==r.y&&(this.canvasRect=K(this.canvasRect,s),this.calculateFontSizeFactors(),this.layOutLabel(a),this.layOutDot(a)),[this.shapeLabel,this.shapeDot]})},{fireImmediately:!0}))}getShape(){return[this.shapeLabel,this.shapeDot]}layOutLabel(t){const e=this.lines[1]??[],i=this.fontSizes[1]??[];if(v.EXPO!=="wineparis2026"){const s=this.exh.length?this.topLeftAlignment:e.length?t<i[i.length-1].scaleFactor?this.topLeftAlignment:this.centerAlignment:this.topLeftAlignment;this.shapeLabel.alignment=s}return et(this.shapeLabel.lines,t,this.fontSizes)?(this.shapeLabel.padding[0]=this.paddingScaled[0]*t+this.padding,this.shapeLabel.padding[1]=this.paddingScaled[1]*t+this.padding,[this.shapeLabel]):[]}layOutDot(t){const e=t>=this.minZoomDotVisible&&t<=this.maxZoomDotVisible;if(!e&&this.shapeDot.hidden)return[];const i=this.shapeDot.bounds,a=this.shapeDot.source;return i.scale({x:a.width*t/i.size.x,y:a.height*t/i.size.y},i.center,i),this.shapeDot.hidden=!e,[this.shapeDot]}getShapeDot(){this.shapeDot=k(this.canvasRect,this.booth.labelColor||z),this.shapeDot.hidden=!0,this.shapeDot.onScale=({pixelSize:e})=>this.layOutDot(e);const t=this.shapeDot.source;this.maxZoomDotVisible=Math.min(this.canvasRect.size.x/t.width,this.canvasRect.size.y/t.height)}createLines(){const t=this.booth,e=[],i=[],a=x&&this.optimizationLevel()>=3?1:3;if(this.exh.length){const s=t.exhibitors.filter(o=>o.order===0),r=t.exhibitors.filter(o=>o.order);if(s.length>0)e.push(...s.map(o=>o.name));else if(c.onlyFeaturedExhibitors)e.push(...t.exhibitors.filter(o=>o.featured).map(o=>o.name));else if(r.length>0){e.push(...r.map(u=>u.name));const o=t.exhibitors.filter(u=>u.order===void 0);o.length>0&&e.push(S("and {{moreCount}} more",{moreCount:o.length}))}else t.exhibitors.length>a?e.push(`${t.exhibitors.length} ${c.exhibitorTermPlural}`):e.push(...t.exhibitors.map(o=>o.name));i.push(t.title||t.name)}else{const s=!!t.exhibitors.length;e.push(t.title||t.name),t.onHold?i.push(S("On Hold")):t.reserved?i.push(S("Reserved")):s||i.push(...t.exhibitors.map(r=>r.name).sort((r,o)=>r>o?1:-1)),t.size&&i.push(t.size.indexOf("/")>-1?t.size.substring(0,t.size.indexOf("/")).trim():t.size),t.price&&t.price!=="0"&&!m.previewMode&&i.push(t.price)}m.rtl&&e.forEach((s,r)=>{(s.endsWith(".")||s.endsWith("!")||s.endsWith("?"))&&(e[r]=e[r]+"\u200F"),rt(s)&&(e[r]=e[r]+" ")}),this.lines=[e,i]}calculateFontSizeFactors(){const t=this.lines[0];let e;const i=this.canvasRect,a=[],s=[],r=this.prefixes.slice(0,this.exh.length?this.prefixes.length:this.prefixes.length-1),{main:o,details:u}=this.exh.length?getExhibitorLabelWeights():getBoothLabelWeights();for(const{fontSize:l,short:p}of r){const d=l*devicePixelRatio,L=.9*l*devicePixelRatio,f=I(d,o),T=I(L,u),O=c.hideExhibitorBoothNumber||p;let w,A,D,g;if(this.exh.length)e=p?[]:this.lines[1],D=Math.max(...t.map(h=>this.measureText(h,f).width),...e.map(h=>this.measureText(h,T).width)),w=Math.max(...t.map(h=>this.exh.length?this.measureText(F(h),f).width:this.measureText(F(h),f).width+3+3),...e.map(h=>this.measureText(F(h),T).width)),g=d*t.length+L*e.length+devicePixelRatio*(t.length+e.length)+3,A=O?g/t.length:null;else{const h=t[0].replace(/[0-9]/g,"3").replace(/[A-Z]/g,"A"),H=4;D=this.measureText(h,f).width+3+3,g=d+H}const C=i.size.x/(w||D),N=i.size.y/(A||g),E=Math.min(C,N);a.push({scaleFactor:E,value:d,lines:[]}),O||s.push({scaleFactor:E,value:L,lines:[]})}if(!this.exh.length){const l=a[a.length-1],p=this.prefixes.find(d=>d.name===y);p&&(a.push({scaleFactor:l.scaleFactor/1.8,value:p.fontSize*devicePixelRatio,lines:[]}),s.push({scaleFactor:l.scaleFactor/1.8,value:p.fontSize*(x?1:.9)*devicePixelRatio,lines:[]}))}const R=q();this.fontUrls=[getFontUrlByWeight(o,R),getFontUrlByWeight(u,R)],this.minZoomDotVisible=getMinZoomFactorForDot(a.map(l=>l.scaleFactor)),this.fontSizes=[a,s]}calcArea(t,e){return Math.floor(Math.max(0,t)*Math.max(0,e)/1e3)}optimizationLevel(){return Math.min(c.viewOptimizationLevel?c.viewOptimizationLevel:Math.floor(this.calcArea(this.canvasRect.size.x,this.canvasRect.size.y)/5e3),3)}measureText(t,e){return P.font=e,P.measureText(t)}}
1
+ import{Rect as B}from"@expofp/geometry";import{update as H}from"@expofp/renderer";import{reaction as M}from"mobx";import{FONT_WEIGHT_PRIMARY_BOOTH as U,FONT_WEIGHT_PRIMARY_EXHIBITOR as V,FONT_WEIGHT_SECONDARY_BOOTH as Z,FONT_WEIGHT_SECONDARY_EXHIBITOR as X}from"../../../../constants";import c from"../../../../data";import{createShapeDot as G,createTextDef as Y,createTextDefLines as Q}from"../../../../engine/defs";import{DEFAULT_FONT_LIGHT_URL as $,DEFAULT_FONT_URL as W,loadCustomFontsUrls as q}from"../../../../engine/fonts";import{getQuarterTurns as j,getRollValue as k,rotateRectByQuarters as J,rotateTextDefByQuarters as K,updateLinesScale as tt}from"../../../../engine/update-def";import{boothStore as et,layersStore as it,uiState as f}from"../../../../store";import{RegularBooth as st,SpecialBooth as ot}from"../../../../store/BoothStore";import D from"../../../../tools/settings";import{t as S}from"../../../../utils/i18n";import nt from"../../../../utils/is-mobile";import at from"../../../../utils/is-webview";import{isArabicText as rt}from"../../../../utils/rtl";import{BoothDrawerBaseWithoutPainter as ht}from"./BoothDrawerBase";import{getFont as _}from"./canvases";import{getLabelBorderInset as lt}from"./label-inset.js";let z=D.boothLabelColor;D.EXPO==="tqs2021"&&(z="#000");const x=nt||at,F=n=>n.replace(" ","").substring(0,4).replace(/[0-9]/g,"3").replace(/[A-Z]/gi,"A"),I=document.createElement("canvas").getContext("2d");export default function ct(n){if(!(!(n instanceof st)||n.noLabels))return new BoothLabelDrawer(n)}export function getMinZoomFactorForDot(n){return Array.isArray(n)&&n.length>0?Math.max(...n.map(t=>t)):typeof n=="number"?n:-0}export const isDirectionsMode=()=>!!(f.selectedRoute?.from&&f.selectedRoute?.to);export function getFontUrlByWeight(n,t=[],e="normal"){return[...t,{weight:500,url:W,style:"normal"},{weight:300,url:$,style:"normal"}].find(s=>+s.weight===n&&s.style===e)?.url||W}function b(n,t){return Number(getComputedStyle(document.body).getPropertyValue(n))||t}export function getBoothLabelWeights(){return{main:b(U,500),details:b(Z,300)}}export function getExhibitorLabelWeights(){return{main:b(V,500),details:b(X,300)}}export function getBadgeFontWeight(){return getExhibitorLabelWeights().details}const y="Details";export class BoothLabelDrawer extends ht{constructor(t){super(t),this.minZoomDotVisible=0,this.maxZoomDotVisible=0,this.exh=[],this.shapeLabel=void 0,this.shapeDot=void 0,this.fontSizes=[[],[]],this.lines=[[],[]],this.fontUrls=["",""],this.canvasRect=new B(t.rect.center,t.rect.size,t.rotate,t.elevation),this.paddingScaled=[4,4],this.padding=lt(t.borderWidth||et.borderWidth,t.rect.size),this.topLeftAlignment={horizontal:f.rtl?"right":"left",vertical:"top"},this.centerAlignment={horizontal:"center",vertical:"center"},this.prefixes=x?[{fontSize:7,name:"XS",short:!0},{fontSize:10,name:"S",short:!0},{fontSize:16,name:y,short:!1}]:[{fontSize:7,name:"XS",short:!0},{fontSize:10,name:"S",short:!0},{fontSize:12,name:"M",short:!0},{fontSize:14,name:"L",short:!0},{fontSize:18,name:y,short:!1}],!(t instanceof ot)&&(this.exh=c.hideExhibitors?[]:c.onlyFeaturedExhibitors?t.exhibitors.filter(e=>e.featured):t.exhibitors,x&&this.optimizationLevel()>=3&&(this.prefixes=this.prefixes.filter(e=>e.name!=="S")),this.createLines(),this.calculateFontSizeFactors(),this.shapeLabel=Y(Q(this.lines,this.booth.labelColor||z,0,this.fontUrls),new B(this.booth.rect.center,this.booth.rect.size,this.booth.rotate,this.booth.elevation),[...this.paddingScaled],{horizontal:"left",vertical:"top"}),this.shapeLabel.onScale=({pixelSize:e})=>this.layOutLabel(e),this.getShapeDot(),M(()=>it.layersLoaded&&this.booth.skipDim===!0,e=>{this.shapeLabel.dim=e?0:void 0,this.shapeDot.dim=e?0:void 0,H(this.shapeLabel,this.shapeDot)}),M(()=>f.mapSettings,({roll:e})=>{k(e??0)&&(this.shapeLabel.onRoll=({roll:i,pixelSize:a})=>{const s=j(i,this.shapeLabel.bounds.rotation);if(s===0)return;const{size:r}=this.canvasRect;return this.shapeLabel=K(this.shapeLabel,s),!this.shapeLabel.hidden&&!this.exh.length&&r.x!==r.y&&(this.canvasRect=J(this.canvasRect,s),this.calculateFontSizeFactors(),this.layOutLabel(a),this.layOutDot(a)),[this.shapeLabel,this.shapeDot]})},{fireImmediately:!0}))}getShape(){return[this.shapeLabel,this.shapeDot]}layOutLabel(t){const e=this.lines[1]??[],i=this.fontSizes[1]??[];if(D.EXPO!=="wineparis2026"){const s=this.exh.length?this.topLeftAlignment:e.length?t<i[i.length-1].scaleFactor?this.topLeftAlignment:this.centerAlignment:this.topLeftAlignment;this.shapeLabel.alignment=s}return tt(this.shapeLabel.lines,t,this.fontSizes)?(this.shapeLabel.padding[0]=this.paddingScaled[0]*t+this.padding,this.shapeLabel.padding[1]=this.paddingScaled[1]*t+this.padding,[this.shapeLabel]):[]}layOutDot(t){const e=t>=this.minZoomDotVisible&&t<=this.maxZoomDotVisible;if(!e&&this.shapeDot.hidden)return[];const i=this.shapeDot.bounds,a=this.shapeDot.source;return i.scale({x:a.width*t/i.size.x,y:a.height*t/i.size.y},i.center,i),this.shapeDot.hidden=!e,[this.shapeDot]}getShapeDot(){this.shapeDot=G(this.canvasRect,this.booth.labelColor||z),this.shapeDot.hidden=!0,this.shapeDot.onScale=({pixelSize:e})=>this.layOutDot(e);const t=this.shapeDot.source;this.maxZoomDotVisible=Math.min(this.canvasRect.size.x/t.width,this.canvasRect.size.y/t.height)}createLines(){const t=this.booth,e=[],i=[],a=x&&this.optimizationLevel()>=3?1:3;if(this.exh.length){const s=t.exhibitors.filter(o=>o.order===0),r=t.exhibitors.filter(o=>o.order);if(s.length>0)e.push(...s.map(o=>o.name));else if(c.onlyFeaturedExhibitors)e.push(...t.exhibitors.filter(o=>o.featured).map(o=>o.name));else if(r.length>0){e.push(...r.map(m=>m.name));const o=t.exhibitors.filter(m=>m.order===void 0);o.length>0&&e.push(S("and {{moreCount}} more",{moreCount:o.length}))}else t.exhibitors.length>a?e.push(`${t.exhibitors.length} ${c.exhibitorTermPlural}`):e.push(...t.exhibitors.map(o=>o.name));i.push(t.title||t.name)}else{const s=!!t.exhibitors.length;e.push(t.title||t.name),t.onHold?i.push(S("On Hold")):t.reserved?i.push(S("Reserved")):s||i.push(...t.exhibitors.map(r=>r.name).sort((r,o)=>r>o?1:-1)),t.size&&i.push(t.size.indexOf("/")>-1?t.size.substring(0,t.size.indexOf("/")).trim():t.size),t.price&&t.price!=="0"&&!f.previewMode&&i.push(t.price)}f.rtl&&e.forEach((s,r)=>{(s.endsWith(".")||s.endsWith("!")||s.endsWith("?"))&&(e[r]=e[r]+"\u200F"),rt(s)&&(e[r]=e[r]+" ")}),this.lines=[e,i]}calculateFontSizeFactors(){const t=this.lines[0];let e;const i=this.canvasRect,a=[],s=[],r=this.prefixes.slice(0,this.exh.length?this.prefixes.length:this.prefixes.length-1),{main:o,details:m}=this.exh.length?getExhibitorLabelWeights():getBoothLabelWeights();for(const{fontSize:l,short:u}of r){const p=l*devicePixelRatio,L=.9*l*devicePixelRatio,d=_(p,o),T=_(L,m),O=c.hideExhibitorBoothNumber||u;let w,A,v,g;if(this.exh.length)e=u?[]:this.lines[1],v=Math.max(...t.map(h=>this.measureText(h,d).width),...e.map(h=>this.measureText(h,T).width)),w=Math.max(...t.map(h=>this.exh.length?this.measureText(F(h),d).width:this.measureText(F(h),d).width+3+3),...e.map(h=>this.measureText(F(h),T).width)),g=p*t.length+L*e.length+devicePixelRatio*(t.length+e.length)+3,A=O?g/t.length:null;else{const h=t[0].replace(/[0-9]/g,"3").replace(/[A-Z]/g,"A"),N=4;v=this.measureText(h,d).width+3+3,g=p+N}const P=i.size.x/(w||v),C=i.size.y/(A||g),E=Math.min(P,C);a.push({scaleFactor:E,value:p,lines:[]}),O||s.push({scaleFactor:E,value:L,lines:[]})}if(!this.exh.length){const l=a[a.length-1],u=this.prefixes.find(p=>p.name===y);u&&(a.push({scaleFactor:l.scaleFactor/1.8,value:u.fontSize*devicePixelRatio,lines:[]}),s.push({scaleFactor:l.scaleFactor/1.8,value:u.fontSize*(x?1:.9)*devicePixelRatio,lines:[]}))}const R=q();this.fontUrls=[getFontUrlByWeight(o,R),getFontUrlByWeight(m,R)],this.minZoomDotVisible=getMinZoomFactorForDot(a.map(l=>l.scaleFactor)),this.fontSizes=[a,s]}calcArea(t,e){return Math.floor(Math.max(0,t)*Math.max(0,e)/1e3)}optimizationLevel(){return Math.min(c.viewOptimizationLevel?c.viewOptimizationLevel:Math.floor(this.calcArea(this.canvasRect.size.x,this.canvasRect.size.y)/5e3),3)}measureText(t,e){return I.font=e,I.measureText(t)}}
@@ -1,4 +1,4 @@
1
- import type { LayerDef } from '@expofp/renderer';
1
+ import { type LayerDef } from '@expofp/renderer';
2
2
  import type { Booth } from '../../../../store/BoothStore';
3
3
  export declare const BOOTHS_CHUNK_SIZE = 350;
4
4
  export default function configBooths(layerID: string, booths: Booth[]): LayerDef;
@@ -1 +1 @@
1
- import{Rect as A}from"@expofp/geometry";import C from"debug";import{SEPARATOR as I}from"../../../../constants";import{createImageDef as E}from"../../../../engine/defs";import{flipImageDef as T,isInnerInsideOuter as U,rotateImageDef as _}from"../../../../engine/utils/rotation";import{boothStore as y,uiState as z}from"../../../../store";import K from"../../../../tools/settings";import{loadBlobsInBatchesById as M}from"../../../../utils/loadImagesInBatches";import{clearHoveredBooth as Z,hoverBooth as j,rememberBoothShapes as q,selectBooth as F}from"../../pointer";import{createLogoPreparer as G}from"./booth-logos";import J from"./config-booth-bg";import Q from"./config-booth-bookmark";import V from"./config-booth-border";import X from"./config-booth-labels";import Y from"./config-booth-labels-special";import{registerLayerImages as oo}from"./layer-images";import{createBoothImg as eo,getImageLayerName as to,mapBoothsLogos as ro}from"./loadBoothsImages";const k=C("efp:booth-logos");export const BOOTHS_CHUNK_SIZE=350;export default function no($,D){return(l=>{const i=$,d=[],m=[],p=[],g=[],b=[],u=to(i),B={name:u,children:[]};for(const o of l){const s=J(o)?.getShape();s&&(d.push(...s),q(o,s));const a=X(o)?.getShape();a&&m.push(...a);const c=Y(o)?.getShape();if(c&&p.push(...c),!K.borderless){const e=V(o)?.getShape();e&&g.push(e)}const h=Q(o)?.getShape();h&&b.push(h)}const R=m.filter(o=>o.lines),x=p.filter(o=>o.lines),O=m.filter(o=>o.source),P=p.filter(o=>o.source);if(!z.hideLogoInBooth){const o=ro(l);oo(u,async()=>{const s=await M(o,BOOTHS_CHUNK_SIZE),a=[],c=G(),h=await Promise.all([...s].map(async([e,t])=>{const n=y.boothById.get(e);return[e,n,n?await c(n,t):null]}));for(const[e,t,n]of h){if(!t){k("dropped a logo: no booth has id %s",e);continue}if(!n){k("dropped the logo of booth %s: the image could not be read",e);continue}const{blob:w,aspectRatio:v}=n,{bounds:H}=eo(t,v),r=E(w,H),N=t.borderWidth||y.borderWidth,S=t.rect.expand(-N),W=new A(S.center,S.size,t.rotate);r.onRoll=U(r.bounds,W)?({roll:f})=>_(r,f)?[r]:void 0:({roll:f})=>T(r,f)?[r]:void 0,t.shapes.push(r),a.push(r)}return{layer:B,children:a}})}let L=[];if(l.length){const o=i+I;L=[{name:`${o}boothBackground`,children:d,onPointerMove:j,onPointerOut:Z,onClick:F},{name:`${o}labels`,children:R},{name:`${o}specialLabels`,children:x},{name:`${o}dots`,children:O},{name:`${o}specialDots`,children:P},B,{name:`${o}boothsBookmark`,children:b},{name:`${i}${I}boothBorder`,children:g}]}return{name:i,children:L}})(D)}
1
+ import{Rect as C}from"@expofp/geometry";import{update as E}from"@expofp/renderer";import G from"debug";import{reaction as M}from"mobx";import{SEPARATOR as s}from"../../../../constants";import{createImageDef as T}from"../../../../engine/defs";import{flipImageDef as U,isInnerInsideOuter as _,rotateImageDef as z}from"../../../../engine/utils/rotation";import{boothStore as $,layersStore as K,uiState as Z}from"../../../../store";import j from"../../../../tools/settings";import{loadBlobsInBatchesById as q}from"../../../../utils/loadImagesInBatches";import{clearHoveredBooth as F,hoverBooth as J,rememberBoothShapes as Q,selectBooth as V}from"../../pointer";import{createLogoPreparer as X}from"./booth-logos";import Y from"./config-booth-bg";import oo from"./config-booth-bookmark";import eo from"./config-booth-border";import to,{isDirectionsMode as ro}from"./config-booth-labels";import no from"./config-booth-labels-special";import{registerLayerImages as so}from"./layer-images";import{createBoothImg as ao,getImageLayerName as io,mapBoothsLogos as co}from"./loadBoothsImages";const k=G("efp:booth-logos");export const BOOTHS_CHUNK_SIZE=350;export default function lo(D,R){return(h=>{const e=D,g=[],p=[],d=[],u=[],B=[],L=io(e),S={name:L,children:[]};for(const o of h){const i=Y(o)?.getShape();i&&(g.push(...i),Q(o,i));const c=to(o)?.getShape();c&&p.push(...c);const l=no(o)?.getShape();if(l&&d.push(...l),!j.borderless){const t=eo(o)?.getShape();t&&u.push(t)}const m=oo(o)?.getShape();m&&B.push(m)}const x=p.filter(o=>o.lines),O=d.filter(o=>o.lines),P=p.filter(o=>o.source),w=d.filter(o=>o.source);if(!Z.hideLogoInBooth){const o=co(h);so(L,async()=>{const i=await q(o,BOOTHS_CHUNK_SIZE),c=[],l=X(),m=await Promise.all([...i].map(async([t,r])=>{const a=$.boothById.get(t);return[t,a,a?await l(a,r):null]}));for(const[t,r,a]of m){if(!r){k("dropped a logo: no booth has id %s",t);continue}if(!a){k("dropped the logo of booth %s: the image could not be read",t);continue}const{blob:v,aspectRatio:H}=a,{bounds:N}=ao(r,H),n=T(v,N),W=r.borderWidth||$.borderWidth,I=r.rect.expand(-W),A=new C(I.center,I.size,r.rotate);n.onRoll=_(n.bounds,A)?({roll:b})=>z(n,b)?[n]:void 0:({roll:b})=>U(n,b)?[n]:void 0,r.shapes.push(n),c.push(n)}return{layer:S,children:c}})}const f={name:`${e}${s}labelGroup`,children:[{name:`${e}${s}labels`,children:x},{name:`${e}${s}specialLabels`,children:O},{name:`${e}${s}dots`,children:P},{name:`${e}${s}specialDots`,children:w}]};M(()=>K.layersLoaded&&ro(),o=>{f.dim=o?0:void 0,E(f)},{fireImmediately:!0});let y=[];if(h.length){const o=e+s;y=[{name:`${o}boothBackground`,children:g,onPointerMove:J,onPointerOut:F,onClick:V},f,S,{name:`${o}boothsBookmark`,children:B},{name:`${e}${s}boothBorder`,children:u}]}return{name:e,children:y}})(R)}
@@ -1 +1 @@
1
- import{jsx as y,jsxs as H}from"react/jsx-runtime";import"./Wayfinding.scss";import T from"classnames";import{useObserver as L}from"mobx-react-lite";import{useEffect as R,useMemo as B,useRef as Q,useState as F}from"react";import{DEFAULT_UNITS as X}from"../constants";import q from"../data";import{getLayerSvg as G}from"../data/svg";import l,{boothStore as I,exhibitorStore as k,uiState as e}from"../store";import{BoothBase as S,RegularBooth as D}from"../store/BoothStore";import{Route as v}from"../store/RouteStore";import P from"../tools/settings";import{calcSpeed as J}from"../utils/calcSpeed";import{calcTravelTime as Y}from"../utils/calcTravelTime";import{t as w}from"../utils/i18n";import{CURRENT_POSITION_POINT_ID as A,KIOSK_ANCHOR_POINT_ID as Z}from"../wayfinding/adapters";import ee from"./EntityList";import te from"./WayfindingTemplate";function oe(){const M=Q(null),b=B(()=>{const o=l.routeStore.pathLayers;return o.map((i,c)=>{const u=o[c+1],a=i.layer?.basePriority??0,r=u?.layer?.basePriority??0,d=u?r<a?"up":"down":void 0;return{id:i.id,name:i.layer?.shortName,description:i.layer?.description,directionToNext:d}})},[l.routeStore.pathLayers]),[C,E]=F(),[g,_]=F({}),N=o=>{o&&_(i=>({...i,[o.value]:o}))};R(()=>{C||E(b[0])},[l.routeStore.pathLayers,b]),R(()=>{const o=b.find(i=>i.description?.toLowerCase()===l.routeStore.currentRouteLayer?.description?.toLowerCase());o&&E(o)},[l.routeStore.currentRouteLayer,b]),R(()=>{const o=e.selectedRoute;if(!o){e.setIsMultiPointRoute(!1);return}const c=(o.waypoints?.length||0)>0;e.setIsMultiPointRoute(c)},[e.selectedRoute]);const W=()=>{const{from:o,to:i}=e.selectedRoute;return!!(o&&i)},U=()=>e.overlaySize==="full",V=()=>!!(W()&&!U()),O=()=>{const o=e.selectedRoute;return o?(o.waypoints?.length||0)>0?"multi":"simple":"none"};R(()=>{O()==="multi"&&e.selectedRoute},[e.selectedRoute]);const x=B(()=>{const o=[],i=I.booths,c=i.filter(r=>r instanceof D),u=i.filter(r=>!(r instanceof D));let a=[];return k.exhibitors.forEach(r=>{o.push(...r.booths.map(d=>d.id)),a.push(...r.booths.map(d=>({value:d.id.toString(),label:r.name+" - "+d.fullName,exhibitorId:r.id})))}),u.filter(r=>o.indexOf(r.id)===-1).forEach(r=>{a.push({value:r.id.toString(),label:r.fullName})}),a=a.sort((r,d)=>r.label.localeCompare(d.label,void 0,{sensitivity:"base"})),c.filter(r=>o.indexOf(r.id)===-1).forEach(r=>{a.push({value:r.id.toString(),label:r.fullName})}),a},[k.exhibitors.length,I.booths.length]);return R(()=>{const o=e.selectedRoute?.to?.id?.toString(),i=l.routeStore.currentRouteExhibitor;if(!i)return;const c=x.find(u=>u.value===o&&u.exhibitorId===i.id);l.routeStore.currentRouteExhibitor=null,N(c)},[l.routeStore.currentRouteExhibitor,e.selectedRoute?.to?.id,x]),L(()=>{if(O()==="multi")return H("div",{className:T("main-wayfinding",{hidden:e.kiosk&&e.selectedRoute?.from&&e.selectedRoute?.to}),children:[e.routeDescription&&y("div",{className:"efp-wayfinding-description",children:e.routeDescription}),y(ee,{updatedScrollableRef:M})]});const i=e.selectedRoute?.from&&!(e.selectedRoute.from instanceof S)?e.selectedRoute.from:null,c=e.selectedRoute?.to&&!(e.selectedRoute.to instanceof S)?e.selectedRoute.to:null,u=[];i&&u.push({value:i.id,label:i.name}),c&&c.id!==i?.id&&u.push({value:c.id,label:c.name}),u.push(...x);const a=(t,s=!0)=>{const n=t?.value;if(n===A||n===Z)return;const f=I.booths.find(h=>h.id.toString()===n)??null,{from:m,to:p}=e.selectedRoute;N(t),s?l.routeStore.selectRoute(new v(f,p)):l.routeStore.selectRoute(new v(m,f))},r=t=>{const s=[],n=G().getAttribute("units")||X,f=Y(t,J(n));let m=new Date;m.setMinutes(m.getMinutes()+f/60);const p=m.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});return s.push({title:w("Travel time"),text:f<60?"< 1 min":`~ ${Math.round(f/60)} min`},{title:w("Distance"),text:Math.round(t)+` ${n}`},{title:w("Est arrival"),text:p}),s},d=()=>{const{from:t,to:s}=e.selectedRoute;t?.id!==A&&l.routeStore.selectRoute(new v(s,t))},j=e.selectedRoute?.from&&e.selectedRoute?.to&&!l.routeStore.routeLines.length;function K(){const t=e.selectedRoute?.from?.id?.toString(),s=t?g[t]:void 0;return u.find(n=>s?n.value===s.value&&n.label===s.label:n.value===t)}function $(){const t=e.selectedRoute?.to?.id?.toString(),s=t?g[t]:void 0;return u.find(n=>s?n.value===s.value&&n.label===s.label:n.value===t)}const z=!!(!q.hideWayInformation&&P.EXPO!=="bloomberg"&&e.selectedRoute?.from&&e.selectedRoute?.to);return y("div",{className:T("main-wayfinding",{hidden:e.kiosk&&e.selectedRoute?.from&&e.selectedRoute?.to}),children:y(te,{showForm:!V(),showInfo:z,floors:b,currentFloor:C,onClickFloor:t=>{const s=l.routeStore.pathLayers.find(n=>n.id===t.id);s?.layer&&l.layerStore.updateVisibility(s.layer,!0)},routeFound:!j,options:u,getOptionKey:t=>`${t.value}-${t.exhibitorId??""}`,fromValue:K(),toValue:$(),onChangeFrom:t=>a(t,!0),onChangeTo:t=>a(t,!1),onSwitch:d,infoItems:r(l.routeStore.routeDistance),infoAccessible:l.routeStore.onlyAccessible,showAccessible:l.routeStore.showAccessible,onAccessibleCheck:t=>l.routeStore.setOnlyAccessible(t),onClickInfo:()=>l.showOverlay(),routeUrl:e.routeQRCodeUrl,isKiosk:e.kiosk,showDetailsIcon:e.showRouteInstantly,onDetailsIconClick:()=>{const{from:t,to:s}=e.selectedRoute||{},n=(s instanceof S?s:null)??(t instanceof S?t:null);if(n){const f=n.id.toString(),m=g[f]??u.find(h=>h.value===f),p=m?.exhibitorId!=null?n.exhibitors.find(h=>h.id===m.exhibitorId):n.exhibitors.find(h=>m?.label.includes(h.name));e.details=p||n}}})})})}function re(){return L(()=>P.wayfinding&&!e.menu&&e.selectedRoute&&e.list.type!=="route-planner"&&y(oe,{}))}export default re;
1
+ import{jsx as y,jsxs as H}from"react/jsx-runtime";import"./Wayfinding.scss";import L from"classnames";import{useObserver as O}from"mobx-react-lite";import{useEffect as R,useMemo as B,useRef as Q,useState as F}from"react";import{DEFAULT_UNITS as X}from"../constants";import q from"../data";import{getLayerSvg as G}from"../data/svg";import l,{boothStore as w,exhibitorStore as k,uiState as e}from"../store";import{BoothBase as S,RegularBooth as D}from"../store/BoothStore";import{Route as I}from"../store/RouteStore";import P from"../tools/settings";import{calcSpeed as J}from"../utils/calcSpeed";import{calcTravelTime as Y}from"../utils/calcTravelTime";import{t as v}from"../utils/i18n";import{CURRENT_POSITION_POINT_ID as A,KIOSK_ANCHOR_POINT_ID as Z}from"../wayfinding/adapters";import ee from"./EntityList";import te from"./WayfindingTemplate";function oe(){const M=Q(null),b=B(()=>{const o=l.routeStore.pathLayers;return o.map((i,c)=>{const u=o[c+1],a=i.layer?.basePriority??0,r=u?.layer?.basePriority??0,d=u?r<a?"up":"down":void 0;return{id:i.id,name:i.layer?.shortName,description:i.layer?.description,directionToNext:d}})},[l.routeStore.pathLayers]),[C,E]=F(),[g,_]=F({}),N=o=>{o&&_(i=>({...i,[o.value]:o}))};R(()=>{C||E(b[0])},[l.routeStore.pathLayers,b]),R(()=>{const o=b.find(i=>i.description?.toLowerCase()===l.routeStore.currentRouteLayer?.description?.toLowerCase());o&&E(o)},[l.routeStore.currentRouteLayer,b]),R(()=>{const o=e.selectedRoute;if(!o){e.setIsMultiPointRoute(!1);return}const c=(o.waypoints?.length||0)>0;e.setIsMultiPointRoute(c)},[e.selectedRoute]);const W=()=>{const{from:o,to:i}=e.selectedRoute;return!!(o&&i)},U=()=>e.overlaySize==="full",V=()=>!!(W()&&!U()),T=()=>{const o=e.selectedRoute;return o?(o.waypoints?.length||0)>0?"multi":"simple":"none"};R(()=>{T()==="multi"&&e.selectedRoute},[e.selectedRoute]);const x=B(()=>{const o=new Set,i=w.booths,c=i.filter(r=>r instanceof D),u=i.filter(r=>!(r instanceof D));let a=[];return k.exhibitors.forEach(r=>{for(const d of r.booths)o.add(d.id);a.push(...r.booths.map(d=>({value:d.id.toString(),label:r.name+" - "+d.fullName,exhibitorId:r.id})))}),u.filter(r=>!o.has(r.id)).forEach(r=>{a.push({value:r.id.toString(),label:r.fullName})}),a=a.sort((r,d)=>r.label.localeCompare(d.label,void 0,{sensitivity:"base"})),c.filter(r=>!o.has(r.id)).forEach(r=>{a.push({value:r.id.toString(),label:r.fullName})}),a},[k.exhibitors.length,w.booths.length]);return R(()=>{const o=e.selectedRoute?.to?.id?.toString(),i=l.routeStore.currentRouteExhibitor;if(!i)return;const c=x.find(u=>u.value===o&&u.exhibitorId===i.id);l.routeStore.currentRouteExhibitor=null,N(c)},[l.routeStore.currentRouteExhibitor,e.selectedRoute?.to?.id,x]),O(()=>{if(T()==="multi")return H("div",{className:L("main-wayfinding",{hidden:e.kiosk&&e.selectedRoute?.from&&e.selectedRoute?.to}),children:[e.routeDescription&&y("div",{className:"efp-wayfinding-description",children:e.routeDescription}),y(ee,{updatedScrollableRef:M})]});const i=e.selectedRoute?.from&&!(e.selectedRoute.from instanceof S)?e.selectedRoute.from:null,c=e.selectedRoute?.to&&!(e.selectedRoute.to instanceof S)?e.selectedRoute.to:null,u=[];i&&u.push({value:i.id,label:i.name}),c&&c.id!==i?.id&&u.push({value:c.id,label:c.name}),u.push(...x);const a=(t,s=!0)=>{const n=t?.value;if(n===A||n===Z)return;const f=w.booths.find(h=>h.id.toString()===n)??null,{from:m,to:p}=e.selectedRoute;N(t),s?l.routeStore.selectRoute(new I(f,p)):l.routeStore.selectRoute(new I(m,f))},r=t=>{const s=[],n=G().getAttribute("units")||X,f=Y(t,J(n));let m=new Date;m.setMinutes(m.getMinutes()+f/60);const p=m.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});return s.push({title:v("Travel time"),text:f<60?"< 1 min":`~ ${Math.round(f/60)} min`},{title:v("Distance"),text:Math.round(t)+` ${n}`},{title:v("Est arrival"),text:p}),s},d=()=>{const{from:t,to:s}=e.selectedRoute;t?.id!==A&&l.routeStore.selectRoute(new I(s,t))},j=e.selectedRoute?.from&&e.selectedRoute?.to&&!l.routeStore.routeLines.length;function K(){const t=e.selectedRoute?.from?.id?.toString(),s=t?g[t]:void 0;return u.find(n=>s?n.value===s.value&&n.label===s.label:n.value===t)}function $(){const t=e.selectedRoute?.to?.id?.toString(),s=t?g[t]:void 0;return u.find(n=>s?n.value===s.value&&n.label===s.label:n.value===t)}const z=!!(!q.hideWayInformation&&P.EXPO!=="bloomberg"&&e.selectedRoute?.from&&e.selectedRoute?.to);return y("div",{className:L("main-wayfinding",{hidden:e.kiosk&&e.selectedRoute?.from&&e.selectedRoute?.to}),children:y(te,{showForm:!V(),showInfo:z,floors:b,currentFloor:C,onClickFloor:t=>{const s=l.routeStore.pathLayers.find(n=>n.id===t.id);s?.layer&&l.layerStore.updateVisibility(s.layer,!0)},routeFound:!j,options:u,getOptionKey:t=>`${t.value}-${t.exhibitorId??""}`,fromValue:K(),toValue:$(),onChangeFrom:t=>a(t,!0),onChangeTo:t=>a(t,!1),onSwitch:d,infoItems:r(l.routeStore.routeDistance),infoAccessible:l.routeStore.onlyAccessible,showAccessible:l.routeStore.showAccessible,onAccessibleCheck:t=>l.routeStore.setOnlyAccessible(t),onClickInfo:()=>l.showOverlay(),routeUrl:e.routeQRCodeUrl,isKiosk:e.kiosk,showDetailsIcon:e.showRouteInstantly,onDetailsIconClick:()=>{const{from:t,to:s}=e.selectedRoute||{},n=(s instanceof S?s:null)??(t instanceof S?t:null);if(n){const f=n.id.toString(),m=g[f]??u.find(h=>h.value===f),p=m?.exhibitorId!=null?n.exhibitors.find(h=>h.id===m.exhibitorId):n.exhibitors.find(h=>m?.label.includes(h.name));e.details=p||n}}})})})}function re(){return O(()=>P.wayfinding&&!e.menu&&e.selectedRoute&&e.list.type!=="route-planner"&&y(oe,{}))}export default re;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expofp/floorplan",
3
- "version": "3.39.0",
3
+ "version": "3.39.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/expofp/efp-app.git",
@@ -62,22 +62,22 @@
62
62
  "pmtiles": "^4.4.1",
63
63
  "react-qr-code": "^2.0.9",
64
64
  "react-transition-group": "^4.4.5",
65
- "react-virtuoso": "^4.12.6",
65
+ "react-virtuoso": "^4.18.7",
66
66
  "resize-observer": "^1.0.4",
67
67
  "slugify": "1.6.6",
68
68
  "stats-gl": "^3.6.0",
69
69
  "tslib": "^2.3.0",
70
70
  "uuid": "^9.0.1",
71
71
  "zod": "4.4.3",
72
- "@expofp/config": "3.39.0",
73
- "@expofp/debug": "3.39.0",
74
- "@expofp/geometry": "3.39.0",
75
- "@expofp/renderer": "3.39.0",
76
- "@expofp/resolve": "3.39.0",
77
- "@expofp/schema": "3.39.0",
78
- "@expofp/ui": "3.39.0",
79
- "@expofp/utils": "3.39.0",
80
- "@expofp/wayfinding": "3.39.0"
72
+ "@expofp/config": "3.39.1",
73
+ "@expofp/debug": "3.39.1",
74
+ "@expofp/geometry": "3.39.1",
75
+ "@expofp/renderer": "3.39.1",
76
+ "@expofp/resolve": "3.39.1",
77
+ "@expofp/schema": "3.39.1",
78
+ "@expofp/ui": "3.39.1",
79
+ "@expofp/utils": "3.39.1",
80
+ "@expofp/wayfinding": "3.39.1"
81
81
  },
82
82
  "devDependencies": {
83
83
  "@babel/plugin-proposal-decorators": "^8.0.2",