@expofp/floorplan 3.10.2 → 3.11.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 (72) hide show
  1. package/dist/browser/{Button-Bj5GinNb.js → Button-w3em_lzh.js} +5 -5
  2. package/dist/browser/{CookieConsent-vekYv-WL.js → CookieConsent-DGuzCkb_.js} +7 -7
  3. package/dist/browser/{Debug-B8Z6UAk7.js → Debug-C0bAbDfy.js} +7 -7
  4. package/dist/browser/{Demo-DxKBQPXs.js → Demo-Bjaxry3H.js} +9 -9
  5. package/dist/browser/{Free-xJ581Tn5.js → Free-DYRe3qzH.js} +9 -9
  6. package/dist/browser/{Gallery-BCLvsYMq.js → Gallery-Mh_fak51.js} +9 -9
  7. package/dist/browser/{GpsLoader-D8b4YGWa.js → GpsLoader-BUFe8XAp.js} +9 -9
  8. package/dist/browser/{KioskStore-iac7BFkc.js → KioskStore-CG4obHqM.js} +3 -3
  9. package/dist/browser/{MaplibreAdapter-hBzzKWxy.js → MaplibreAdapter-_7g233g0.js} +12 -12
  10. package/dist/browser/{ModalContainer-CNFkEgVO.js → ModalContainer-q8ktZG4M.js} +10 -10
  11. package/dist/browser/{PermissionNotice-BjNUzq-I.js → PermissionNotice-CZPYZBEq.js} +6 -6
  12. package/dist/browser/{SetKioskMode-rZPgTzX2.js → SetKioskMode-Bstomyjg.js} +8 -8
  13. package/dist/browser/{ShowKiosk-C0-HDdLS.js → ShowKiosk-CSSaeauJ.js} +10 -10
  14. package/dist/browser/{TouchHand-BpAIvJuD.js → TouchHand-DKlAqQxo.js} +4 -4
  15. package/dist/browser/{ViewerMenuPanel-B8HWceZY.js → ViewerMenuPanel-CDZU9m-C.js} +9 -9
  16. package/dist/browser/{add-debug-secret-listener-DrG0zrQz.js → add-debug-secret-listener-CpUZyE-i.js} +1 -1
  17. package/dist/browser/{boolean-editor-CksHtQqy.js → boolean-editor-BXtJr0-a.js} +9 -9
  18. package/dist/browser/{bootIntercom-DIY2vGKD.js → bootIntercom-BdpTIgRq.js} +2 -2
  19. package/dist/browser/{booth-by-xy-CB4TcAKe.js → booth-by-xy-Cvr_M6ay.js} +121 -108
  20. package/dist/browser/{browser-BJI7T84p.js → browser-D0zb6N8t.js} +2 -2
  21. package/dist/browser/bundle.json +61 -61
  22. package/dist/browser/{classnames-DY5QZHM2.js → classnames-njarKVkv.js} +2 -2
  23. package/dist/browser/{client-BKj8O-3N.js → client-DO32NX2U.js} +4 -4
  24. package/dist/browser/{components-C9T4gWSC.js → components-Ag3tOxoq.js} +38 -38
  25. package/dist/browser/{debug-overlay-oxl07sGQ.js → debug-overlay-BDntWcO3.js} +10 -10
  26. package/dist/browser/{debug-ui-vcgITEra.js → debug-ui-eQiNXjgN.js} +6 -6
  27. package/dist/browser/{dist-DQ-MzacE.js → dist-B-HOjLa3.js} +3 -3
  28. package/dist/browser/{dist-B6a_6LWa.js → dist-BPabiv1-.js} +6 -6
  29. package/dist/browser/{dist-BD71uIJa.js → dist-CICgVS_K.js} +5 -5
  30. package/dist/browser/{efp-debug-init-DeppnUIb.js → efp-debug-init-DJV2mEAv.js} +2 -2
  31. package/dist/browser/{enum-editor-CeBF-egH.js → enum-editor-CR96q1IA.js} +11 -11
  32. package/dist/browser/{es5-DyEOE9h8.js → es5-DKJycZ_9.js} +2 -2
  33. package/dist/browser/{event-not-found--rNrnsfb.js → event-not-found-qCBr__j7.js} +1 -1
  34. package/dist/browser/{exports-CQRMT27z.js → exports-DEfrHp-m.js} +1 -1
  35. package/dist/browser/{favicon-Y_DfJIgc.js → favicon-Ds8_0IKZ.js} +1 -1
  36. package/dist/browser/{fetch-retry.umd-mDEk7YNi.js → fetch-retry.umd-DA_h-YbX.js} +2 -2
  37. package/dist/browser/{flex-gMXInosq.js → flex-De82Cl1E.js} +5 -5
  38. package/dist/browser/{floorplan.loader-CKHHfoqW.js → floorplan.loader-B5OmVKte.js} +11 -11
  39. package/dist/browser/{floorplan.ready-Dk5rTB4-.js → floorplan.ready-DR3pBgxB.js} +12 -12
  40. package/dist/browser/{fuse-C0XgkQam.js → fuse-dk3wBn-g.js} +2 -2
  41. package/dist/browser/{i18n-DDp2WKLS.js → i18n-CmTA9oOx.js} +4 -4
  42. package/dist/browser/index.js +12 -12
  43. package/dist/browser/{index.module-DJ1o-lSs.js → index.module-QD1fDWFR.js} +4 -4
  44. package/dist/browser/{is-webview-DSeLj16c.js → is-webview-CoF8JIKV.js} +1 -1
  45. package/dist/browser/{jsx-runtime-4SB5tKoZ.js → jsx-runtime-BerzwYzE.js} +2 -2
  46. package/dist/browser/{lib-CNsibyKE.js → lib-Q551A5uv.js} +4 -4
  47. package/dist/browser/{loadImage-m5qxmKm8.js → loadImage-DMj35sJO.js} +4 -4
  48. package/dist/browser/{logDeviceInfo-DJbQFFfl.js → logDeviceInfo-DRvCCtTx.js} +9 -9
  49. package/dist/browser/{main-Ci70zd7U.js → main-BizUl9-0.js} +1 -1
  50. package/dist/browser/{mobx-85FEI3nE.js → mobx-TeCP8VzM.js} +4 -4
  51. package/dist/browser/{particles.min-Cjclve40.js → particles.min-DG9oSZrY.js} +2 -2
  52. package/dist/browser/{prop-types-O5uO9swn.js → prop-types-vg_ebZbt.js} +2 -2
  53. package/dist/browser/{react-938H1sny.js → react-Du8DS_tM.js} +2 -2
  54. package/dist/browser/{react-dom-BB5-5CwA.js → react-dom-B7g3b-V3.js} +3 -3
  55. package/dist/browser/{reset-all-settings-C3UGYA7h.js → reset-all-settings-Cd_BUK-W.js} +7 -7
  56. package/dist/browser/{rolldown-runtime-D_bOcK0P.js → rolldown-runtime-DvCIlsWE.js} +1 -1
  57. package/dist/browser/{settings-CuvIoKLw.js → settings-DInlzLHA.js} +2 -2
  58. package/dist/browser/{settings-item-jhTAtSrk.js → settings-item-Nqsx-eMu.js} +6 -6
  59. package/dist/browser/{store-g-LcmXc-.js → store-Bp8hCuMJ.js} +12 -12
  60. package/dist/browser/{string-editor-CjVQpF6U.js → string-editor-BwD_WLY1.js} +7 -7
  61. package/dist/browser/{theme-DxKuEQUA.js → theme-D0j6GDvn.js} +8 -8
  62. package/dist/browser/{ui-BMAImlSF.js → ui-Ci4hN3Oq.js} +8 -8
  63. package/dist/browser/{useRenderTarget-DL0u3FKy.js → useRenderTarget-w66c2Pzm.js} +4 -4
  64. package/dist/esm/components/Map/booth-by-xy.d.ts +2 -2
  65. package/dist/esm/components/Map/booth-by-xy.js +1 -1
  66. package/dist/esm/components/Map/drawing/config/config-booth-badge-eligibility.d.ts +28 -0
  67. package/dist/esm/components/Map/drawing/config/config-booth-badge-eligibility.js +1 -0
  68. package/dist/esm/components/Map/drawing/config/config-booth-badge.js +1 -1
  69. package/dist/esm/components/Maplibre/useRendererEvents.js +1 -1
  70. package/dist/esm/data/Flags.d.ts +4 -0
  71. package/dist/esm/store/RootStore.d.ts +1 -1
  72. package/package.json +4 -4
@@ -2,21 +2,21 @@ function __vite_inject_css__(css, id, forceLightDom){ if (typeof document==='un
2
2
  (function() {
3
3
  try {
4
4
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
5
- e.SENTRY_RELEASE = { id: "3.10.2" };
5
+ e.SENTRY_RELEASE = { id: "3.11.1" };
6
6
  var t = new e.Error().stack;
7
7
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "f176669a-8951-4582-b22d-96a9f0116ee1", e._sentryDebugIdIdentifier = "sentry-dbid-f176669a-8951-4582-b22d-96a9f0116ee1");
8
8
  } catch {}
9
9
  })();
10
- import { r as e, t } from "./rolldown-runtime-D_bOcK0P.js";
11
- import { t as n } from "./react-938H1sny.js";
12
- import { i as r } from "./reset-all-settings-C3UGYA7h.js";
13
- import { t as i } from "./jsx-runtime-4SB5tKoZ.js";
14
- import { _ as a, a as o, c as s, d as c, f as l, g as u, h as d, i as f, l as p, m, n as h, p as g, r as _, t as v, u as y } from "./loadImage-m5qxmKm8.js";
15
- import { t as b } from "./browser-BJI7T84p.js";
16
- import { B as x, C as S, G as C, H as w, L as T, M as E, Q as D, R as O, U as k, W as A, X as ee, Y as te, Z as ne, _ as j, a as re, at as ie, c as ae, d as M, et as oe, f as se, h as ce, it as le, j as ue, k as de, l as fe, lt as N, m as P, n as pe, o as me, ot as he, p as ge, q as _e, r as ve, rt as ye, s as F, t as be, v as xe, y as Se, z as I } from "./i18n-DDp2WKLS.js";
17
- import { t as Ce } from "./is-webview-DSeLj16c.js";
18
- import { t as we } from "./classnames-DY5QZHM2.js";
19
- import { t as Te } from "./Button-Bj5GinNb.js";
10
+ import { r as e, t } from "./rolldown-runtime-DvCIlsWE.js";
11
+ import { t as n } from "./react-Du8DS_tM.js";
12
+ import { i as r } from "./reset-all-settings-Cd_BUK-W.js";
13
+ import { t as i } from "./jsx-runtime-BerzwYzE.js";
14
+ import { _ as a, a as o, c as s, d as c, f as l, g as u, h as d, i as f, l as p, m, n as h, p as g, r as _, t as v, u as y } from "./loadImage-DMj35sJO.js";
15
+ import { t as b } from "./browser-D0zb6N8t.js";
16
+ import { B as x, C as S, G as C, H as w, L as T, M as E, Q as D, R as O, U as k, W as A, X as ee, Y as te, Z as ne, _ as j, a as re, at as ie, c as ae, d as M, et as oe, f as se, h as ce, it as le, j as ue, k as de, l as fe, lt as N, m as P, n as pe, o as me, ot as he, p as ge, q as _e, r as ve, rt as ye, s as F, t as be, v as xe, y as Se, z as I } from "./i18n-CmTA9oOx.js";
17
+ import { t as Ce } from "./is-webview-CoF8JIKV.js";
18
+ import { t as we } from "./classnames-njarKVkv.js";
19
+ import { t as Te } from "./Button-w3em_lzh.js";
20
20
  //#endregion
21
21
  //#region src/tools/settings.ts
22
22
  var Ee = /* @__PURE__ */ e((/* @__PURE__ */ t(((e, t) => {
@@ -36798,7 +36798,7 @@ var sB = (rB = class {
36798
36798
  }
36799
36799
  async buildEngine() {
36800
36800
  try {
36801
- let { default: e } = await import("./fuse-C0XgkQam.js").then((e) => e.n);
36801
+ let { default: e } = await import("./fuse-dk3wBn-g.js").then((e) => e.n);
36802
36802
  Se(() => {
36803
36803
  this.engine = new e([], {
36804
36804
  keys: this.keys,
@@ -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.10.2" };
4
+ e.SENTRY_RELEASE = { id: "3.11.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "da8db9a3-7430-483e-912d-7db8503a8231", e._sentryDebugIdIdentifier = "sentry-dbid-da8db9a3-7430-483e-912d-7db8503a8231");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-D_bOcK0P.js";
10
- import { t } from "./react-938H1sny.js";
11
- import { t as n } from "./jsx-runtime-4SB5tKoZ.js";
12
- import { t as r } from "./classnames-DY5QZHM2.js";
13
- import { D as i, i as a, l as o, n as s, s as c, u as l, y as u } from "./flex-gMXInosq.js";
14
- import { t as d } from "./settings-item-jhTAtSrk.js";
9
+ import { r as e } from "./rolldown-runtime-DvCIlsWE.js";
10
+ import { t } from "./react-Du8DS_tM.js";
11
+ import { t as n } from "./jsx-runtime-BerzwYzE.js";
12
+ import { t as r } from "./classnames-njarKVkv.js";
13
+ import { D as i, i as a, l as o, n as s, s as c, u as l, y as u } from "./flex-De82Cl1E.js";
14
+ import { t as d } from "./settings-item-Nqsx-eMu.js";
15
15
  //#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._925f851475345a9e5e368d312bb98178/node_modules/@radix-ui/themes/dist/esm/components/text-field.props.js
16
16
  var f = {
17
17
  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.10.2" };
4
+ e.SENTRY_RELEASE = { id: "3.11.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "79b39fdf-323b-4b9d-ac58-c9e7d1f5b025", e._sentryDebugIdIdentifier = "sentry-dbid-79b39fdf-323b-4b9d-ac58-c9e7d1f5b025");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-D_bOcK0P.js";
10
- import { t } from "./react-938H1sny.js";
11
- import { t as n } from "./jsx-runtime-4SB5tKoZ.js";
12
- import { t as r } from "./react-dom-BB5-5CwA.js";
13
- import { t as i } from "./classnames-DY5QZHM2.js";
14
- import { a, c as o, i as s, n as c, o as l, r as u, t as d } from "./dist-B6a_6LWa.js";
15
- import { C as f, E as p, O as m, T as h, _ as g, o as _, v, w as y } from "./flex-gMXInosq.js";
9
+ import { r as e } from "./rolldown-runtime-DvCIlsWE.js";
10
+ import { t } from "./react-Du8DS_tM.js";
11
+ import { t as n } from "./jsx-runtime-BerzwYzE.js";
12
+ import { t as r } from "./react-dom-B7g3b-V3.js";
13
+ import { t as i } from "./classnames-njarKVkv.js";
14
+ import { a, c as o, i as s, n as c, o as l, r as u, t as d } from "./dist-BPabiv1-.js";
15
+ import { C as f, E as p, O as m, T as h, _ as g, o as _, v, w as y } from "./flex-De82Cl1E.js";
16
16
  //#region ../../node_modules/.pnpm/@radix-ui+react-id@1.1.1_@types+react@19.2.17_react@19.2.7/node_modules/@radix-ui/react-id/dist/index.mjs
17
17
  var b = n(), x = /* @__PURE__ */ e(t(), 1), S = x.useId || (() => void 0), C = 0;
18
18
  function w(e) {
@@ -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.10.2" };
4
+ e.SENTRY_RELEASE = { id: "3.11.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "43912113-9328-4069-8890-5091c8745c34", e._sentryDebugIdIdentifier = "sentry-dbid-43912113-9328-4069-8890-5091c8745c34");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-D_bOcK0P.js";
10
- import { a as t, r as n } from "./reset-all-settings-C3UGYA7h.js";
11
- import { t as r } from "./jsx-runtime-4SB5tKoZ.js";
12
- import "./settings-CuvIoKLw.js";
13
- import { t as i } from "./browser-BJI7T84p.js";
14
- import { t as a } from "./add-debug-secret-listener-DrG0zrQz.js";
9
+ import { r as e } from "./rolldown-runtime-DvCIlsWE.js";
10
+ import { a as t, r as n } from "./reset-all-settings-Cd_BUK-W.js";
11
+ import { t as r } from "./jsx-runtime-BerzwYzE.js";
12
+ import "./settings-DInlzLHA.js";
13
+ import { t as i } from "./browser-D0zb6N8t.js";
14
+ import { t as a } from "./add-debug-secret-listener-CpUZyE-i.js";
15
15
  //#region ../debug/src/lib/ui/render-debug-ui.tsx
16
16
  var o = /* @__PURE__ */ e(i(), 1), s = r(), c = !1;
17
17
  function l() {
@@ -26,7 +26,7 @@ function l() {
26
26
  }
27
27
  });
28
28
  let i = async (t) => {
29
- let { DebugUi: n } = await import("./debug-ui-vcgITEra.js"), { createRoot: i } = await import("./client-BKj8O-3N.js").then((t) => /* @__PURE__ */ e(t.default, 1)), a = document.createElement("div");
29
+ let { DebugUi: n } = await import("./debug-ui-eQiNXjgN.js"), { createRoot: i } = await import("./client-DO32NX2U.js").then((t) => /* @__PURE__ */ e(t.default, 1)), a = document.createElement("div");
30
30
  document.body.appendChild(a), i(a).render(/* @__PURE__ */ (0, s.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.10.2" };
4
+ e.SENTRY_RELEASE = { id: "3.11.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "d4febe97-784c-4cf8-93f1-f2e3b29f8347", e._sentryDebugIdIdentifier = "sentry-dbid-d4febe97-784c-4cf8-93f1-f2e3b29f8347");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-D_bOcK0P.js";
10
- import { t } from "./react-938H1sny.js";
11
- import { s as n } from "./store-g-LcmXc-.js";
9
+ import { r as e } from "./rolldown-runtime-DvCIlsWE.js";
10
+ import { t } from "./react-Du8DS_tM.js";
11
+ import { s as n } from "./store-Bp8hCuMJ.js";
12
12
  //#region src/utils/getRenderTargetFromRoot.ts
13
13
  var r = /* @__PURE__ */ e(t(), 1);
14
14
  function i(e) {
@@ -1,3 +1,3 @@
1
- import { Booth } from '../../store/BoothStore';
2
- export default function getBoothIdFromClientXy(x: number, y: number): Booth;
1
+ import type { Booth } from '../../store/BoothStore';
2
+ export default function getBoothIdFromClientXy(clientX: number, clientY: number): Booth | null;
3
3
  //# sourceMappingURL=booth-by-xy.d.ts.map
@@ -1 +1 @@
1
- import{Box as m,degToRad as M,Polygon as x}from"@expofp/geometry";import{reaction as P}from"mobx";import{getTrianglesFromFpPaths as v}from"../../data/svg";import{boothStore as w,layersStore as g}from"../../store";import{LayersMode as R}from"../../store/LayerStore";import S from"../../tools/logger";function T(o){const r=o.center.x,n=o.center.y,s=o.size.width,i=o.size.height;return new m(r-i/2,n-s/2,i,s)}let p=new Map,u=[],y=[],d=[],a=new Map,h;function B(){const o=w.booths.filter(t=>t.visible&&t.rect&&t.rect.size.width>0&&t.rect.size.height>0);if(p=new Map,u=[],d=[],h=null,a=new Map,!o.length)return;y=o.filter(t=>t.paths);let r=m.fromUnion(...o.map(t=>t.rect));for(const t of o){let e=t.rect;Math.abs(t.rotate)===M(90)&&(e=T(e)),u.push(e),p.set(e,t)}const n=2,s=Math.ceil(r.size.width/n),i=Math.ceil(r.size.height/n);for(let t=0;t<n;t++)for(let e=0;e<n;e++){const l=r.min.x+t*s,f=r.min.y+e*i,c=new m(l,f,s,i);d.push(c);const b=u.filter(z=>c.intersects(z));a.set(c,b)}S.log("hover segmentToRects",a)}P(()=>[w.booths,g.loaded,g.visible],()=>B());function F(o,r){const n={x:o,y:r};let s;h&&h.containsPoint(n)?s=h:s=d.find(t=>t.containsPoint(n)),s&&(h=s);const i=a.get(s);if(i){const t=i.filter(e=>e.containsPoint(n));if(t.length){let e;t.length>1?e=t.sort((f,c)=>f.size.width-c.size.width)[0]:e=t[0];let l=p.get(e);return l.visible?l:null}}for(const t of y)for(const e of t.paths)for(const l of v(e.index,g.mode!==R.Default?t.layer.name:"")){const f=l.map(c=>({x:c[0],y:c[1]}));if(x.fromConvexRing(f).containsPoint(n))return t.visible?t:null}return null}export default function C(o,r){return F(o,r)}
1
+ import{Box as d,Polygon as v,Rect as z}from"@expofp/geometry";import{reaction as I}from"mobx";import{getTrianglesFromFpPaths as X}from"../../data/svg";import{boothStore as b,layersStore as x}from"../../store";import{LayersMode as A}from"../../store/LayerStore";import F from"../../tools/logger";let y=[],u=new Map,g=null,w=[];function S(){const l=b.booths.filter(t=>t.visible&&t.rect&&t.rect.size.width>0&&t.rect.size.height>0);if(y=[],g=null,u=new Map,w=l.filter(t=>t.paths),!l.length)return;const c=[];let s=1/0,n=1/0,f=-1/0,e=-1/0;for(const t of l){const a=t.rotate?new z(t.rect.center,t.rect.size,t.rotate):null,o=a?a.bounds:t.rect;c.push({booth:t,shape:a??t.rect,bounds:o}),o.min.x<s&&(s=o.min.x),o.min.y<n&&(n=o.min.y),o.max.x>f&&(f=o.max.x),o.max.y>e&&(e=o.max.y)}const i=d.fromMinMax({x:s,y:n},{x:f,y:e}),r=2,m=Math.ceil(i.size.width/r),h=Math.ceil(i.size.height/r);for(let t=0;t<r;t++)for(let a=0;a<r;a++){const o=i.min.x+t*m,M=i.min.y+a*h,p=new d(o,M,m,h);y.push(p),u.set(p,c.filter(P=>p.intersects(P.bounds)))}F.log("hover segmentToHitAreas",u)}I(()=>[b.booths,x.loaded,x.visible],()=>S());function B(l,c){const s={x:l,y:c};let n;g&&g.containsPoint(s)?n=g:n=y.find(e=>e.containsPoint(s)),n&&(g=n);const f=n?u.get(n):void 0;if(f){const e=f.filter(i=>i.booth.visible&&i.shape.containsPoint(s));if(e.length)return(e.length>1?e.sort((r,m)=>r.booth.rect.area-m.booth.rect.area)[0]:e[0]).booth}for(const e of w)if(e.visible)for(const i of e.paths)for(const r of X(i.index,x.mode!==A.Default?e.layer.name:"")){const m=r.map(h=>({x:h[0],y:h[1]}));if(v.fromConvexRing(m).containsPoint(s))return e}return null}export default function C(l,c){return B(l,c)}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Pure eligibility predicate for booth number badges.
3
+ *
4
+ * Extracted from `configBoothsBadges` so the decision can be unit-tested in
5
+ * isolation (no canvas/mobx/renderer side effects). A booth gets a badge when
6
+ * badges aren't globally hidden, it has exhibitors, and it has no visible
7
+ * number — either because it's `noLabels` or because a logo-in-booth covers
8
+ * the label.
9
+ *
10
+ * This logic regressed once after the MapLibre refactor (logo-in-booth booths
11
+ * not authored as `noLabels` lost their badges), so it is covered by a table.
12
+ */
13
+ export interface BoothBadgeEligibility {
14
+ /** Data flag: hide the number on booths that have an exhibitor. */
15
+ hideExhibitorBoothNumber?: boolean;
16
+ /** `flags.hideBoothBadges`: opt-out for all booth badges. */
17
+ hideBoothBadges?: boolean;
18
+ /** UI state: logos-in-booth are currently hidden. */
19
+ hideLogoInBooth: boolean;
20
+ /** Booth is authored without labels. */
21
+ noLabels: boolean;
22
+ /** Booth has at least one exhibitor. */
23
+ hasExhibitors: boolean;
24
+ /** Booth has at least one exhibitor with a visible logo-in-booth. */
25
+ hasLogoInBooth: boolean;
26
+ }
27
+ export declare function isBoothBadgeEligible(b: BoothBadgeEligibility): boolean;
28
+ //# sourceMappingURL=config-booth-badge-eligibility.d.ts.map
@@ -0,0 +1 @@
1
+ export function isBoothBadgeEligible(o){return o.hideExhibitorBoothNumber||o.hideBoothBadges||!o.hasExhibitors?!1:o.noLabels||!o.hideLogoInBooth&&o.hasLogoInBooth}
@@ -1 +1 @@
1
- import{Box as Z,pointRotate as $,Polygon as Y,Rect as j}from"@expofp/geometry";import q from"color";import{reaction as H}from"mobx";import{SEPARATOR as S}from"../../../../constants";import J from"../../../../data";import{getTrianglesFromFpPaths as K}from"../../../../data/svg";import{createShapeDef as Q,createTextDef as V,createTextDefLines as tt,rectToRenderer as b}from"../../../../renderer";import{boothStore as nt,uiState as et}from"../../../../store";import{RegularBooth as ot}from"../../../../store/BoothStore";import w from"../../../../tools/settings";import{getContrastTextColor as it}from"../../../../utils/getContrastTextColor";import{getFont as rt}from"./canvases";import{getBadgeFontWeight as st,getFontUrlByWeight as ct}from"./config-booth-labels";const at=.5,lt=.3,F=15,ft=24,O=30,dt=12,ut=12,U=.8,k=document.createElement("canvas").getContext("2d");function gt(n){return n.length<=F?n:n.slice(0,F-1)+"\u2026"}function z(n){if(!n.paths?.length)return[];const t=n.layer?.name||"",o=[];for(const e of n.paths)for(const i of K(e.index,t))o.push(i);return o}function mt(n){const t=z(n);return t.length?Z.fromPoints(t.flat().map(([o,e])=>({x:o,y:e}))):null}function ht(n){const t=[],o=[];for(const e of n){const i=t.length;t.push({x:e[0][0],y:e[0][1]}),t.push({x:e[1][0],y:e[1][1]}),t.push({x:e[2][0],y:e[2][1]}),o.push([i,i+1,i+2])}return new Y(t,o)}function T(n,t,o){return o.containsPoint({x:n,y:t})}function pt(n,t,o,e,i,c,s){if(!n.length||!T(o,e,t))return s;let f=0,h=s;const p=10;for(let x=0;x<p;x++){const g=(f+h)/2,a=i*g,u=c*g;T(o+a,e,t)&&T(o,e+u,t)&&T(o+a,e+u,t)?f=g:h=g}return f}function xt(n){return mt(n)??n.rect}function Bt(n,t,o,e,i){const c=xt(n);if(t.length){const h=new Set;let p=null,x=1/0;for(const g of t)for(const a of g){const u=`${a[0]},${a[1]}`;if(h.has(u))continue;h.add(u);const m=a[0]+e,A=a[1]+e;if(T(m,A,o)){const y=m-c.min.x+(A-c.min.y);y<x&&(x=y,p={x:m,y:A})}}if(p)return p}const s=n.rect.min.x+e,f=n.rect.min.y+e;return i?$({x:s,y:f},i,n.rect.center):{x:s,y:f}}function R(n){return n&&n!=="none"?n:void 0}function At(n){const t=R(n.borderColor)||R(w.boothBorderColor)||w.colors.booths.default;return n.paths?.length>1&&R(n.paths[n.paths.length-1].color)||t}export function createBoothBadge(n,t){const o=gt(t.title||t.name),e=At(t),i=it(q(e).hex()),c=window.devicePixelRatio||1,s=st(),f=rt(O,s);k.font=f;const h=k.measureText(o).width,p=Math.ceil(h+dt*2),x=O+ut*2,g=(t.borderWidth||nt.borderWidth)/2,a=p*U,u=x*U,m=t.rotate??0,A=t.rect.size.width,y=t.rect.size.height,L=Math.min(A>0?A*at/a:1/0,y>0?y*lt/u:1/0),E=z(t),P=ht(E),{x:_,y:I}=Bt(t,E,P,g,m),C=pt(E,P,_,I,a,u,L),D=(r,B)=>{const N=r/2,X=B/2,v=$({x:_+N,y:I+X},m,{x:_,y:I});return new j(v,{x:r,y:B},m)},G=r=>{const B=Math.min(r,C);return D(a*B,u*B)},M=ct(s,n.fontUrls),d=Q(D(1,1),e);d.hidden=!0,d.dim=t.skipDim?!1:void 0;const l=V(tt([[o],[]],i,0,[M,M]),D(1,1),[0,0],{horizontal:"center",vertical:"center"});l.hidden=!0,l.dim=t.skipDim?!1:void 0;const W=()=>!!(t.layer&&!t.layer.visible);return H(()=>t.skipDim,r=>{d.dim=r?!1:void 0,l.dim=r?!1:void 0,n.update(d,l)}),H(()=>t.layer?.visible??!0,r=>{d.hidden=!r,l.hidden=!r,n.update(d,l)}),n.onPtScale(`badge-bg-${t.id}`,r=>(d.shape=b(G(r)),d.hidden=W(),d)),n.onPtScale(`badge-text-${t.id}`,r=>{const B=Math.min(r,C);return l.lines[0].fontSize=ft/c*B,l.bounds=b(G(r)),l.hidden=W(),l}),{bg:d,text:l}}export function configBoothsBadges(n,t,o){if(J.hideExhibitorBoothNumber)return null;const e=[],i=[];for(const c of o)if(c instanceof ot&&c.noLabels&&!et.hideLogoInBooth&&c.exhibitors.some(s=>s.logoInBooth&&s.logo)){const{bg:s,text:f}=createBoothBadge(n,c);e.push(s),i.push(f)}return e.length?{name:`${t}${S}badges`,children:[{name:`${t}${S}badgeBgs`,children:e},{name:`${t}${S}badgeTexts`,children:i}]}:null}
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.flags?.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 +1 @@
1
- import{useEffect as g}from"react";import{pickDefaultScene as p}from"../../renderer/engine-core/defs";import l,{uiState as o}from"../../store";import{LayerMode as u}from"../../store/LayerStore";import k from"../Map/booth-by-xy";import{getMarkerFromClick as L}from"../Map/drawing/config/config-markers";import{getBooth as E}from"./utils/layer-defs";const C=o;export function useRendererEvents(t,m){g(()=>{if(!t)return;const v=({data:s})=>{if(o.setKioskModeEnabled)return;const{point:e,defs:r}=p(s),n=k(e.x,e.y),i=E(r[0]);C.hoveredBooth=n||i},d=()=>{o.setKioskModeEnabled||(C.hoveredBooth=null)},f=({data:s})=>{if(!o?.rootElement)return;window.__resett?.(),o.overlayPosition==="bottom"&&o.overlaySize==="full"&&l.showMap();const{point:e,defs:r}=p(s),{x:n,y:i}=e;if(o.onGetCoordsClick){const a=l.layerStore.layers.find(c=>c.visible&&(c.mode===u.TurnedOn||c.mode===u.TurnedOff));o.onGetCoordsClick({x:n,y:i,z:a?.name||null})}if(o.setKioskModeEnabled)return;if(o.onMarkerClick){const a=L(n,i,m.scale);o.onMarkerClick(a)}const y=k(e.x,e.y),b=E(r[0]);l.clickBooth(y||b)},h=()=>window.__resett?.();return t.events.addEventListener("pointer:move",v),t.events.addEventListener("pointer:out",d),t.events.addEventListener("pointer:click",f),t.events.addEventListener("navigation:change",h),()=>{t.events.removeEventListener("pointer:move",v),t.events.removeEventListener("pointer:out",d),t.events.removeEventListener("pointer:click",f),t.events.removeEventListener("navigation:change",h)}},[t,m])}
1
+ import{useEffect as g}from"react";import{pickDefaultScene as h}from"../../renderer/engine-core/defs";import c,{uiState as o}from"../../store";import{LayerMode as p}from"../../store/LayerStore";import k from"../Map/booth-by-xy";import{getMarkerFromClick as L}from"../Map/drawing/config/config-markers";import{getBooth as E}from"./utils/layer-defs";const C=o;export function useRendererEvents(t,m){g(()=>{if(!t)return;const v=({data:s})=>{if(o.setKioskModeEnabled)return;const{point:e,defs:r}=h(s),n=k(e.x,e.y),i=E(r[0]);C.hoveredBooth=n||i||null},d=()=>{o.setKioskModeEnabled||(C.hoveredBooth=null)},f=({data:s})=>{if(!o?.rootElement)return;window.__resett?.(),o.overlayPosition==="bottom"&&o.overlaySize==="full"&&c.showMap();const{point:e,defs:r}=h(s),{x:n,y:i}=e;if(o.onGetCoordsClick){const l=c.layerStore.layers.find(a=>a.visible&&(a.mode===p.TurnedOn||a.mode===p.TurnedOff));o.onGetCoordsClick({x:n,y:i,z:l?.name||null})}if(o.setKioskModeEnabled)return;if(o.onMarkerClick){const l=L(n,i,m.scale);o.onMarkerClick(l)}const y=k(e.x,e.y),b=E(r[0]);c.clickBooth(y||b||null)},u=()=>window.__resett?.();return t.events.addEventListener("pointer:move",v),t.events.addEventListener("pointer:out",d),t.events.addEventListener("pointer:click",f),t.events.addEventListener("navigation:change",u),()=>{t.events.removeEventListener("pointer:move",v),t.events.removeEventListener("pointer:out",d),t.events.removeEventListener("pointer:click",f),t.events.removeEventListener("navigation:change",u)}},[t,m])}
@@ -7,6 +7,10 @@ export interface FloorPlanFlags {
7
7
  * Custom `setkiosk` phrase.
8
8
  */
9
9
  customSetKiosk?: string;
10
+ /**
11
+ * Hide booth number badges.
12
+ */
13
+ hideBoothBadges?: boolean;
10
14
  /**
11
15
  * Enable live bus/transport routing on the floor plan.
12
16
  *
@@ -72,7 +72,7 @@ export default class RootStore {
72
72
  clickSeminars(): void;
73
73
  clickBoothInList(booth: Booth): void;
74
74
  clickBoothInList2(booth: Booth): void;
75
- clickBooth(booth: Booth): void;
75
+ clickBooth(booth: Booth | null): void;
76
76
  clickExhibitor2(exhibitor: Exhibitor): void;
77
77
  clickExhibitor(exhibitor: Exhibitor): void;
78
78
  showMap(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expofp/floorplan",
3
- "version": "3.10.2",
3
+ "version": "3.11.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/expofp/efp-app.git",
@@ -72,9 +72,9 @@
72
72
  "tslib": "^2.3.0",
73
73
  "uuid": "^9.0.1",
74
74
  "zod": "4.3.5",
75
- "@expofp/debug": "3.10.2",
76
- "@expofp/geometry": "3.10.2",
77
- "@expofp/resolve": "3.10.2"
75
+ "@expofp/debug": "3.11.1",
76
+ "@expofp/geometry": "3.11.1",
77
+ "@expofp/resolve": "3.11.1"
78
78
  },
79
79
  "devDependencies": {
80
80
  "@babel/plugin-proposal-decorators": "^8.0.2",