@expofp/floorplan 3.22.0 → 3.23.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 (145) hide show
  1. package/dist/browser/{Button-PkkC8fYi.js → Button-Cu9clsSR.js} +5 -5
  2. package/dist/browser/{CookieConsent-COPAytjc.js → CookieConsent-mvgZy0jC.js} +8 -8
  3. package/dist/browser/{Debug-CWVwWCU0.js → Debug-CnnGHGZJ.js} +10 -10
  4. package/dist/browser/{Demo-yP6tHJE2.js → Demo-DQlgp6cY.js} +10 -10
  5. package/dist/browser/{Free-rILAyXya.js → Free-DgGCDTNd.js} +13 -13
  6. package/dist/browser/{Gallery-DbQ6bxpv.js → GalleryContainer-ixlqlJ9Q.js} +714 -589
  7. package/dist/browser/{GpsLoader-U0qUOF4J.js → GpsLoader-9JLK7S2S.js} +16 -16
  8. package/dist/browser/{KioskStore-D25GX7Yv.js → KioskStore-ZtZBfHyG.js} +34 -34
  9. package/dist/browser/{MaplibreAdapter-CMX6Q9zs.js → MaplibreAdapter-C__Oc26V.js} +1725 -1674
  10. package/dist/browser/{ModalContainer-TVi_WpAy.js → ModalContainer-DsyDwSqY.js} +59 -54
  11. package/dist/browser/{PermissionNotice-SMHSj2qI.js → PermissionNotice-CZ4QlKe_.js} +6 -6
  12. package/dist/browser/{SetKioskMode-BwSFzzos.js → SetKioskMode-Bf4b4bnh.js} +14 -14
  13. package/dist/browser/{ShowKiosk-D0lj2wzz.js → ShowKiosk-BdAccxwG.js} +11 -11
  14. package/dist/browser/{ViewerMenuPanel-9A84e6XT.js → ViewerMenuPanel-_Y9M630H.js} +18 -18
  15. package/dist/browser/{add-debug-secret-listener-CyjybhbR.js → add-debug-secret-listener-DQl3P4ki.js} +1 -1
  16. package/dist/browser/{adopt-global-settings-BhJX0B0D.js → adopt-global-settings-DTFmFw7D.js} +9 -9
  17. package/dist/browser/{boolean-editor-3IdccOj-.js → boolean-editor-DRaZvwNE.js} +9 -9
  18. package/dist/browser/{bootIntercom-CkHVzOj8.js → bootIntercom-Bxi_kVm1.js} +2 -2
  19. package/dist/browser/{booth-by-xy-CQvcHK_A.js → booth-by-xy-RZ4XM07z.js} +331 -331
  20. package/dist/browser/bundle.json +65 -65
  21. package/dist/browser/{classnames-6bU7zOpA.js → classnames-yCHhGUHk.js} +2 -2
  22. package/dist/browser/{client-BkHWS5lm.js → client-dzWvVFIu.js} +4 -4
  23. package/dist/browser/{components-Btgwx55F.js → components-DiWraxYJ.js} +2065 -2018
  24. package/dist/browser/{debug-overlay-D9Gq5tnJ.js → debug-overlay-By2JKe98.js} +10 -10
  25. package/dist/browser/{debug-ui-CclRARRM.js → debug-ui-B7iMFZL2.js} +6 -6
  26. package/dist/browser/{dist-D4vUke_M.js → dist-BJYZuYz5.js} +3 -3
  27. package/dist/browser/{dist-nmYmVc14.js → dist-D0sDuIMU.js} +5 -5
  28. package/dist/browser/{dist-YXQi1KHp.js → dist-XtgimJG-.js} +6 -6
  29. package/dist/browser/{efp-debug-init-BNS4_yDX.js → efp-debug-init-Cm4noHZv.js} +3 -3
  30. package/dist/browser/{enum-editor-YeDXZjkr.js → enum-editor-CmI32f5A.js} +4 -4
  31. package/dist/browser/{es5-CNjSlyOY.js → es5-97nOnIxB.js} +2 -2
  32. package/dist/browser/{event-not-found-BQMzvSOp.js → event-not-found-Gs3WorrR.js} +1 -1
  33. package/dist/browser/{exports-BPkLTIY6.js → exports-BzI9isE4.js} +1 -1
  34. package/dist/browser/{favicon-D09E0ggy.js → favicon-NX_igce1.js} +1 -1
  35. package/dist/browser/{fetch-retry.umd-CyeSNjOO.js → fetch-retry.umd-BdBGrOUm.js} +2 -2
  36. package/dist/browser/{flex-DFe-lnRY.js → flex-D0Cx6ssp.js} +5 -5
  37. package/dist/browser/{floorplan.loader-CtqFPg5v.js → floorplan.loader-BNASIC9N.js} +20 -20
  38. package/dist/browser/{floorplan.ready-mvJLjOT8.js → floorplan.ready-Bdm_nBoS.js} +326 -364
  39. package/dist/browser/{fuse-CH8SDiG4.js → fuse-CArwLmpE.js} +2 -2
  40. package/dist/browser/{i18n-pREdf4o-.js → i18n-DJDkRNUS.js} +2528 -2559
  41. package/dist/browser/index.js +35 -35
  42. package/dist/browser/{index.module-4MYJQyVQ.js → index.module-AN1k6qf9.js} +4 -4
  43. package/dist/browser/{integrateKiosk-BuctRtHM.js → integrateKiosk-BHslPH6W.js} +9 -8
  44. package/dist/browser/{is-webview-Dk7i6iyE.js → is-webview-CpxNA1hf.js} +1 -1
  45. package/dist/browser/{jsx-runtime-BXQ7PX-y.js → jsx-runtime-BTmKWYLh.js} +2 -2
  46. package/dist/browser/{kiosk-record-Dz3E7PjP.js → kiosk-record-Dar5bcb3.js} +1 -1
  47. package/dist/browser/{lib-BfXVjQQV.js → lib-CH0lKOWr.js} +3 -3
  48. package/dist/browser/{loadImage-CUg38cMx.js → loadImage-Cyucj9ZO.js} +4 -4
  49. package/dist/browser/{logDeviceInfo-CgIqRuAY.js → logDeviceInfo-DrWNwkiz.js} +9 -9
  50. package/dist/browser/{main-BzXd5H0A.js → main-DDG4oAN0.js} +1 -1
  51. package/dist/browser/{mobx-BEFSh5R7.js → mobx-CCrzy0oK.js} +4 -4
  52. package/dist/browser/{optional-boolean-editor-DH0Yj5mx.js → optional-boolean-editor-B9ghixUw.js} +3 -3
  53. package/dist/browser/{optional-enum-editor-DdsG6-RD.js → optional-enum-editor-ymdwpZCG.js} +4 -4
  54. package/dist/browser/{optional-string-editor-DdFnggla.js → optional-string-editor-B7GvxUp0.js} +4 -4
  55. package/dist/browser/{particles.min-C6YCIw7u.js → particles.min-DR9RAdSY.js} +2 -2
  56. package/dist/browser/{react-Cq6vsgZS.js → react-Di1u_Olu.js} +2 -2
  57. package/dist/browser/{react-dom-CioKdINL.js → react-dom-DgZLuRw2.js} +3 -3
  58. package/dist/browser/{rolldown-runtime-CEmdmqfC.js → rolldown-runtime-Bq2YTOlP.js} +1 -1
  59. package/dist/browser/{select-BREAzzuP.js → select-1HLg5zVy.js} +10 -10
  60. package/dist/browser/{settings-C17jPyNg.js → settings-CiVCMVtK.js} +2 -2
  61. package/dist/browser/{settings-item-BYt2Yu8n.js → settings-item-BdvpCLdo.js} +6 -6
  62. package/dist/browser/{store-BzaR1IVp.js → store-CYrJjLi8.js} +7153 -7219
  63. package/dist/browser/{string-editor-XaVb33Ez.js → string-editor-OFy8aOQQ.js} +4 -4
  64. package/dist/browser/{text-field-D70wZ5kg.js → text-field-BXXmJXFF.js} +5 -5
  65. package/dist/browser/{theme-BLZVltm4.js → theme-DpPZfgKy.js} +8 -8
  66. package/dist/browser/{ui-DyGGq9Ts.js → ui-CJ0nQkSv.js} +8 -8
  67. package/dist/browser/useRenderTarget-roc5qoAU.js +57 -0
  68. package/dist/esm/components/Bookmarks.js +1 -1
  69. package/dist/esm/components/EntityList.js +1 -1
  70. package/dist/esm/components/Exhibitor.js +1 -1
  71. package/dist/esm/components/GalleryContainer.d.ts +6 -0
  72. package/dist/esm/components/GalleryContainer.js +1 -0
  73. package/dist/esm/components/Kiosk/integrateKiosk.d.ts +8 -2
  74. package/dist/esm/components/Kiosk/integrateKiosk.js +1 -1
  75. package/dist/esm/components/Kiosk/kiosk-mode.d.ts +8 -0
  76. package/dist/esm/components/Kiosk/kiosk-mode.js +1 -0
  77. package/dist/esm/components/Kiosk/kiosk-record.d.ts +5 -1
  78. package/dist/esm/components/Kiosk/kioskUrlParam.d.ts +7 -3
  79. package/dist/esm/components/Kiosk/kioskUrlParam.js +1 -1
  80. package/dist/esm/components/Map/Map.js +1 -1
  81. package/dist/esm/components/Maplibre/MaplibreAdapter.js +1 -1
  82. package/dist/esm/components/Maplibre/useCameraReactions.js +1 -1
  83. package/dist/esm/components/Maplibre/utils/geo-config.d.ts +32 -0
  84. package/dist/esm/components/Maplibre/utils/geo-config.js +1 -1
  85. package/dist/esm/components/OverlayContainer.d.ts +1 -2
  86. package/dist/esm/components/OverlayContainer.js +1 -1
  87. package/dist/esm/components/index.d.ts +1 -3
  88. package/dist/esm/components/index.js +1 -1
  89. package/dist/esm/floorplan.ready.js +1 -1
  90. package/dist/esm/services/multi-slug.d.ts +3 -3
  91. package/dist/esm/services/url-dispatch.d.ts +3 -5
  92. package/dist/esm/services/url-dispatch.js +1 -1
  93. package/dist/esm/store/BookmarksStore.d.ts +1 -4
  94. package/dist/esm/store/BookmarksStore.js +1 -2
  95. package/dist/esm/store/OverlayStore.d.ts +19 -0
  96. package/dist/esm/store/OverlayStore.js +1 -0
  97. package/dist/esm/store/RootStore.d.ts +2 -0
  98. package/dist/esm/store/RootStore.js +1 -1
  99. package/dist/esm/store/UIState.d.ts +8 -1
  100. package/dist/esm/store/UIState.js +1 -1
  101. package/dist/esm/store/index.d.ts +1 -0
  102. package/dist/esm/store/index.js +1 -1
  103. package/dist/esm/store/init/index.js +1 -1
  104. package/dist/esm/store/init/init-booths.d.ts +3 -3
  105. package/dist/esm/store/init/init-booths.js +1 -1
  106. package/dist/esm/store/init/init-ui.js +1 -1
  107. package/dist/esm/utils/customCommands.js +1 -1
  108. package/dist/esm/utils/scene-bounds.d.ts +7 -0
  109. package/dist/esm/utils/scene-bounds.js +1 -1
  110. package/package.json +10 -11
  111. package/dist/browser/useRenderTarget-CMhjhwNe.js +0 -48
  112. package/dist/esm/components/Gallery/Gallery.d.ts +0 -13
  113. package/dist/esm/components/Gallery/Gallery.js +0 -1
  114. package/dist/esm/components/Gallery/GalleryBadges/GalleryBadges.d.ts +0 -8
  115. package/dist/esm/components/Gallery/GalleryBadges/GalleryBadges.js +0 -1
  116. package/dist/esm/components/Gallery/GalleryControls/GalleryControls.d.ts +0 -9
  117. package/dist/esm/components/Gallery/GalleryControls/GalleryControls.js +0 -1
  118. package/dist/esm/components/Gallery/GalleryImg/GalleryImg.d.ts +0 -14
  119. package/dist/esm/components/Gallery/GalleryImg/GalleryImg.js +0 -1
  120. package/dist/esm/components/Gallery/GalleryItem/GalleryItem.d.ts +0 -13
  121. package/dist/esm/components/Gallery/GalleryItem/GalleryItem.js +0 -1
  122. package/dist/esm/components/Gallery/GalleryModal/GalleryModal.d.ts +0 -12
  123. package/dist/esm/components/Gallery/GalleryModal/GalleryModal.js +0 -1
  124. package/dist/esm/components/Gallery/GalleryPreLoader.d.ts +0 -7
  125. package/dist/esm/components/Gallery/GalleryPreLoader.js +0 -1
  126. package/dist/esm/components/Gallery/TransformImg/TransformImg.d.ts +0 -10
  127. package/dist/esm/components/Gallery/TransformImg/TransformImg.js +0 -1
  128. package/dist/esm/components/Overlay.d.ts +0 -23
  129. package/dist/esm/components/Overlay.js +0 -1
  130. package/dist/esm/components/Toast/ToastContainer.d.ts +0 -12
  131. package/dist/esm/components/Toast/ToastContainer.js +0 -1
  132. package/dist/esm/components/Toast/ToastContext.d.ts +0 -2
  133. package/dist/esm/components/Toast/ToastContext.js +0 -1
  134. package/dist/esm/components/Toast/ToastProvider.d.ts +0 -6
  135. package/dist/esm/components/Toast/ToastProvider.js +0 -1
  136. package/dist/esm/components/Toast/index.d.ts +0 -2
  137. package/dist/esm/components/Toast/index.js +0 -1
  138. package/dist/esm/hooks/useDragGesture.d.ts +0 -19
  139. package/dist/esm/hooks/useDragGesture.js +0 -1
  140. package/dist/esm/hooks/useWindowSize.d.ts +0 -5
  141. package/dist/esm/hooks/useWindowSize.js +0 -1
  142. package/dist/esm/store/init/init-bookmarks.d.ts +0 -9
  143. package/dist/esm/store/init/init-bookmarks.js +0 -1
  144. package/dist/esm/utils/useTimeout.d.ts +0 -2
  145. package/dist/esm/utils/useTimeout.js +0 -1
@@ -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.22.0" };
4
+ e.SENTRY_RELEASE = { id: "3.23.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "0a67f4c1-0ef6-428f-92c6-94c57178bf21", e._sentryDebugIdIdentifier = "sentry-dbid-0a67f4c1-0ef6-428f-92c6-94c57178bf21");
7
7
  } catch {}
8
8
  })();
9
- import { t as e } from "./jsx-runtime-BXQ7PX-y.js";
10
- import { t } from "./settings-item-BYt2Yu8n.js";
11
- import { t as n } from "./text-field-D70wZ5kg.js";
9
+ import { t as e } from "./jsx-runtime-BTmKWYLh.js";
10
+ import { t } from "./settings-item-BdvpCLdo.js";
11
+ import { t as n } from "./text-field-BXXmJXFF.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.22.0" };
4
+ e.SENTRY_RELEASE = { id: "3.23.1" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "9c5a0877-c176-4e2d-b51c-123d50ab2b3c", e._sentryDebugIdIdentifier = "sentry-dbid-9c5a0877-c176-4e2d-b51c-123d50ab2b3c");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-CEmdmqfC.js";
10
- import { t } from "./react-Cq6vsgZS.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-DFe-lnRY.js";
12
- import { t as l } from "./classnames-6bU7zOpA.js";
9
+ import { r as e } from "./rolldown-runtime-Bq2YTOlP.js";
10
+ import { t } from "./react-Di1u_Olu.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-D0Cx6ssp.js";
12
+ import { t as l } from "./classnames-yCHhGUHk.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.22.0" };
4
+ e.SENTRY_RELEASE = { id: "3.23.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-CEmdmqfC.js";
10
- import { t } from "./react-Cq6vsgZS.js";
11
- import { t as n } from "./jsx-runtime-BXQ7PX-y.js";
12
- import { t as r } from "./react-dom-CioKdINL.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-DFe-lnRY.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-YXQi1KHp.js";
15
- import { t as y } from "./classnames-6bU7zOpA.js";
9
+ import { r as e } from "./rolldown-runtime-Bq2YTOlP.js";
10
+ import { t } from "./react-Di1u_Olu.js";
11
+ import { t as n } from "./jsx-runtime-BTmKWYLh.js";
12
+ import { t as r } from "./react-dom-DgZLuRw2.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-D0Cx6ssp.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-XtgimJG-.js";
15
+ import { t as y } from "./classnames-yCHhGUHk.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.22.0" };
4
+ e.SENTRY_RELEASE = { id: "3.23.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-CEmdmqfC.js";
10
- import { a as t, i as n, s as r } from "./efp-debug-init-BNS4_yDX.js";
11
- import { a as i, i as a } from "./adopt-global-settings-BhJX0B0D.js";
12
- import { t as o } from "./jsx-runtime-BXQ7PX-y.js";
13
- import "./settings-C17jPyNg.js";
14
- import { t as s } from "./add-debug-secret-listener-CyjybhbR.js";
9
+ import { r as e } from "./rolldown-runtime-Bq2YTOlP.js";
10
+ import { a as t, i as n, s as r } from "./efp-debug-init-Cm4noHZv.js";
11
+ import { a as i, i as a } from "./adopt-global-settings-DTFmFw7D.js";
12
+ import { t as o } from "./jsx-runtime-BTmKWYLh.js";
13
+ import "./settings-CiVCMVtK.js";
14
+ import { t as s } from "./add-debug-secret-listener-DQl3P4ki.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-CclRARRM.js"), { createRoot: i } = await import("./client-BkHWS5lm.js").then((t) => /* @__PURE__ */ e(t.default, 1)), a = document.createElement("div");
29
+ let { DebugUi: n } = await import("./debug-ui-B7iMFZL2.js"), { createRoot: i } = await import("./client-dzWvVFIu.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
@@ -0,0 +1,57 @@
1
+ (function() {
2
+ try {
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.23.1" };
5
+ var t = new e.Error().stack;
6
+ t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "7407e64e-4c4e-4bfb-b2ef-80063ad22998", e._sentryDebugIdIdentifier = "sentry-dbid-7407e64e-4c4e-4bfb-b2ef-80063ad22998");
7
+ } catch {}
8
+ })();
9
+ import { r as e } from "./rolldown-runtime-Bq2YTOlP.js";
10
+ import { t } from "./react-Di1u_Olu.js";
11
+ import { l as n } from "./store-CYrJjLi8.js";
12
+ //#region ../ui/src/shared/activeElement.ts
13
+ var r = (e) => !!e && "activeElement" in e;
14
+ function i(e) {
15
+ var t;
16
+ let n = e == null ? void 0 : e.getRootNode(), i = r(n) ? n.activeElement : document.activeElement;
17
+ for (; !(i == null || (t = i.shadowRoot) == null) && t.activeElement;) i = i.shadowRoot.activeElement;
18
+ return i;
19
+ }
20
+ //#endregion
21
+ //#region src/utils/getRenderTargetFromRoot.ts
22
+ var a = /* @__PURE__ */ e(t(), 1);
23
+ function o(e) {
24
+ var t;
25
+ if (!e) return console.error("[getRenderTargetFromRoot] rootElement is null"), null;
26
+ let n = e.firstElementChild;
27
+ if (n && n.shadowRoot) {
28
+ let e = n.shadowRoot.querySelector("#efp-layout");
29
+ if (e) return e;
30
+ }
31
+ return ((t = e.querySelector) == null ? void 0 : t.call(e, "#efp-layout")) || (console.error("[getRenderTargetFromRoot] rootElement is null"), null);
32
+ }
33
+ //#endregion
34
+ //#region src/utils/useRenderTarget.ts
35
+ var s = () => {
36
+ let [e, t] = (0, a.useState)(() => o(n.rootElement));
37
+ return (0, a.useEffect)(() => {
38
+ var e, r;
39
+ if (typeof window > "u" || !n.rootElement) return;
40
+ let i = !1, a = null, s = () => {
41
+ let e = o(n.rootElement);
42
+ return e && !i ? (t((t) => t === e ? t : e), !0) : !1;
43
+ };
44
+ if (s()) return;
45
+ let c = (e = (r = n.rootElement.firstElementChild) == null ? void 0 : r.shadowRoot) == null ? n.rootElement : e;
46
+ return a = new MutationObserver(() => {
47
+ s() && a && a.disconnect();
48
+ }), a.observe(c, {
49
+ childList: !0,
50
+ subtree: !0
51
+ }), () => {
52
+ i = !0, a && a.disconnect();
53
+ };
54
+ }, [n.rootElement]), e;
55
+ };
56
+ //#endregion
57
+ export { i as n, s as t };
@@ -1 +1 @@
1
- import{Fragment as a,jsx as o,jsxs as m}from"react/jsx-runtime";import{useObserver as e}from"mobx-react-lite";import{useRef as n}from"react";import i from"../data";import r,{uiState as s}from"../store";import k from"../tools/settings";import{EntityList as l}from"./";import f from"./SidebarActionsContainer";function u(){return e(()=>r.bookmarksStore.hasBookmarks?o(f,{className:"efp-sidebar-actions--bookmarks",showDirections:!1,showBookmark:!1,showRoutePlanner:k.wayfinding&&r.bookmarksStore.hasRoutableBookmarks,showShare:!0,onClickRoutePlanner:()=>r.routePlannerStore.launchFromBookmarks(),onClickShare:()=>r.bookmarksStore.share()}):null)}function c(){const t=n();return e(()=>m(a,{children:[o(u,{}),o(l,{updatedScrollableRef:t})]}))}export default()=>e(()=>!i.hideBookmarks&&!s.details&&s.list.type==="bookmarks"&&o(c,{}));
1
+ import{Fragment as a,jsx as o,jsxs as n}from"react/jsx-runtime";import{useObserver as r}from"mobx-react-lite";import{useRef as i}from"react";import m from"../data";import e,{uiState as t}from"../store";import l from"../tools/settings";import{EntityList as f}from"./";import u from"./SidebarActionsContainer";function k(){return r(()=>!l.wayfinding||!e.bookmarksStore.hasRoutableBookmarks?null:o(u,{className:"efp-sidebar-actions--bookmarks",showDirections:!1,showBookmark:!1,showRoutePlanner:!0,showShare:!1,onClickRoutePlanner:()=>e.routePlannerStore.launchFromBookmarks()}))}function c(){const s=i(null);return r(()=>n(a,{children:[o(k,{}),o(f,{updatedScrollableRef:s})]}))}export default()=>r(()=>!m.hideBookmarks&&!t.details&&t.list.type==="bookmarks"&&o(c,{}));
@@ -1 +1 @@
1
- import{jsx as c}from"react/jsx-runtime";import"./EntityList.scss";import{Spinner as x}from"@expofp/ui";import{observer as v}from"mobx-react-lite";import{lazy as C,Suspense as T,useCallback as L,useContext as E,useEffect as w,useRef as R}from"react";import e,{uiState as t}from"../store";import P from"../tools/settings";import{t as I}from"../utils/i18n";import O from"./EntityListRow";import{OverlayScrollContext as H}from"./Overlay";const S=()=>import("react-virtuoso").then(r=>({default:r.Virtuoso})).catch(()=>new Promise(r=>setTimeout(()=>r(S()),3e3))),V=C(S),_=["ipia2025"],z=({updatedScrollableRef:r,updateScroll:m})=>{const f=E(H),a=R(null),b=t.getListScrollItemId(t.list.type),g=_.includes(P.EXPO);w(()=>{const n=t.getListScrollTop(t.list.type),l=t.getListScrollItemId(t.list.type);(n>0||l)&&setTimeout(()=>{if(a.current){if(l){const o=t.listItems.findIndex(s=>s?.id?.toString()===l.toString());if(o!==-1){a.current.scrollToIndex({index:o,align:"center",behavior:"auto"});return}}n>0&&a.current.scrollTo({top:n,behavior:"auto"})}},100)},[t.list.type]);const u=t.showRouteInstantly,y=L((n,l)=>{const o=parseInt(l,10);switch(t.setListScrollItemId(t.list?.type,o),a.current?a.current.getState(s=>{const h=s?.scrollTop||0;t.setListScrollTop(t.list?.type,h)}):r.current&&t.setListScrollTop(t.list?.type,r.current.scrollTop||0),n){case"exhibitor":const s=e.exhibitorStore.exhibitors.find(i=>i.id===o);u?e.routeStore.clickRoute(null,e.routeStore.tempToBooth||s.booths[0]):e.clickExhibitor(s);break;case"booth":const h=e.boothStore.booths.find(i=>i.id===o);u?e.routeStore.clickRoute(null,h):e.clickBoothInList2(h);break;case"category":e.clickCategory(e.categoryStore.categories.find(i=>i.id===o));break;case"event":const p=e.eventStore.eventItems.find(i=>i.id===o);if(p){const i=e.boothStore.booths.find(d=>d.id===p.boothId);u&&i?e.routeStore.clickRoute(null,i):e.selectEventItem(p,!0)}break;case"speaker":{const i=e.speakerStore.speakers.find(d=>d.id===o);i&&e.selectSpeaker(i,!0);break}}},[u,r]),k=()=>c("div",{className:"list-empty",children:t.list.type==="search"?I("Oops, nothing found"):I("No items to show")});return f===null||t.setKioskModeEnabled?null:t.listItems.length?c("div",{style:{height:"100%",cursor:"pointer",resize:"both",minHeight:100},children:c(T,{fallback:c(x,{active:!0,isCenter:!0}),children:c(V,{ref:a,className:"list-virtual",style:{minHeight:t.listItems.length?"1px":0},data:t.listItems,itemContent:(n,l)=>{const o=l;if(!o)return null;const s=b?.toString()===o.id?.toString();return c(O,{item:o,index:n,current:s,compactDetails:g,onClick:y},o.id)},itemsRendered:()=>m&&setTimeout(m),totalListHeightChanged:()=>m&&m(),customScrollParent:f,totalCount:t.listItems.length,overscan:20,increaseViewportBy:200,initialItemCount:Math.min(t.listScrollIndex+30,t.listItems.length)})})}):c(k,{})};export default v(z);
1
+ import{jsx as c}from"react/jsx-runtime";import"./EntityList.scss";import{OverlayScrollContext as x,Spinner as v}from"@expofp/ui";import{observer as C}from"mobx-react-lite";import{lazy as T,Suspense as L,useCallback as E,useContext as w,useEffect as R,useRef as P}from"react";import e,{uiState as t}from"../store";import O from"../tools/settings";import{t as I}from"../utils/i18n";import H from"./EntityListRow";const S=()=>import("react-virtuoso").then(r=>({default:r.Virtuoso})).catch(()=>new Promise(r=>setTimeout(()=>r(S()),3e3))),V=T(S),_=["ipia2025"],z=({updatedScrollableRef:r,updateScroll:m})=>{const f=w(x),a=P(null),b=t.getListScrollItemId(t.list.type),g=_.includes(O.EXPO);R(()=>{const n=t.getListScrollTop(t.list.type),l=t.getListScrollItemId(t.list.type);(n>0||l)&&setTimeout(()=>{if(a.current){if(l){const o=t.listItems.findIndex(s=>s?.id?.toString()===l.toString());if(o!==-1){a.current.scrollToIndex({index:o,align:"center",behavior:"auto"});return}}n>0&&a.current.scrollTo({top:n,behavior:"auto"})}},100)},[t.list.type]);const u=t.showRouteInstantly,y=E((n,l)=>{const o=parseInt(l,10);switch(t.setListScrollItemId(t.list?.type,o),a.current?a.current.getState(s=>{const h=s?.scrollTop||0;t.setListScrollTop(t.list?.type,h)}):r.current&&t.setListScrollTop(t.list?.type,r.current.scrollTop||0),n){case"exhibitor":const s=e.exhibitorStore.exhibitors.find(i=>i.id===o);u?e.routeStore.clickRoute(null,e.routeStore.tempToBooth||s.booths[0]):e.clickExhibitor(s);break;case"booth":const h=e.boothStore.booths.find(i=>i.id===o);u?e.routeStore.clickRoute(null,h):e.clickBoothInList2(h);break;case"category":e.clickCategory(e.categoryStore.categories.find(i=>i.id===o));break;case"event":const d=e.eventStore.eventItems.find(i=>i.id===o);if(d){const i=e.boothStore.booths.find(p=>p.id===d.boothId);u&&i?e.routeStore.clickRoute(null,i):e.selectEventItem(d,!0)}break;case"speaker":{const i=e.speakerStore.speakers.find(p=>p.id===o);i&&e.selectSpeaker(i,!0);break}}},[u,r]),k=()=>c("div",{className:"list-empty",children:t.list.type==="search"?I("Oops, nothing found"):I("No items to show")});return f===null||t.setKioskModeEnabled?null:t.listItems.length?c("div",{style:{height:"100%",cursor:"pointer",resize:"both",minHeight:100},children:c(L,{fallback:c(v,{active:!0,isCenter:!0}),children:c(V,{ref:a,className:"list-virtual",style:{minHeight:t.listItems.length?"1px":0},data:t.listItems,itemContent:(n,l)=>{const o=l;if(!o)return null;const s=b?.toString()===o.id?.toString();return c(H,{item:o,index:n,current:s,compactDetails:g,onClick:y},o.id)},itemsRendered:()=>m&&setTimeout(m),totalListHeightChanged:()=>m&&m(),customScrollParent:f,totalCount:t.listItems.length,overscan:20,increaseViewportBy:200,initialItemCount:Math.min(t.listScrollIndex+30,t.listItems.length)})})}):c(k,{})};export default C(z);
@@ -1 +1 @@
1
- import{Fragment as N,jsx as i,jsxs as n}from"react/jsx-runtime";import"./Exhibitor.scss";import{Button as R}from"@expofp/ui";import g from"classnames";import{observer as Q,useLocalStore as Z,useObserver as T}from"mobx-react-lite";import ee,{Suspense as D,useEffect as ie,useRef as C,useState as I}from"react";import{Transition as te}from"react-transition-group";import p from"../data";import a,{uiState as o}from"../store";import{RegularBooth as oe}from"../store/BoothStore";import{GaEventActions as d,sendEventToGa as O}from"../tools/gtag";import re from"../tools/logger";import y from"../tools/settings";import{t as h}from"../utils/i18n";import ne from"../utils/is-mobile";import{useReaction as ae}from"../utils/mobx";import se from"../utils/useHeatmapOverlay";import le from"./AlertContainer";import ce from"./DownloadListContainer";import U from"./ErrorBoundary";import de from"./RebookingNotesContainer";import he from"./RebookingRadioGroupContainer";import me from"./Schedule";import ue from"./ShowMoreButtonContainer";import be from"./SidebarActionsContainer";import{getDescription as ke}from"./utils/getDescription";const G=ee.lazy(()=>import("./Gallery/Gallery")),ge=Q(function(){const S=C(null),r=Z(()=>({collapsed:!0,updateOverlayContent:null,get exhibitor(){return o.selectedExhibitor},get websiteTrimmed(){return this.exhibitor.website?this.exhibitor.website.replace(/^(http(s?):\/\/)([^/]+)(\/)?$/i,"$3"):""},get anySocial(){return o.kiosk?!1:!!["facebook","instagram","linkedin","twitter","googlePlus","xing","youtube"].find(e=>this.exhibitor[e])},get anyAddress(){return!!["address","address2","phone1","website","email"].find(e=>this.exhibitor[e])},get anyMedia(){return!!this.exhibitor.videoUrl||!!(this.exhibitor.gallery&&this.exhibitor.gallery.length)},get anyButtons(){return!!(this.exhibitor.customButtonTitle||this.exhibitor.customButton2Title||this.exhibitor.customButton3Title)},get disableCollapse(){return!this.anySocial&&!this.anyAddress&&!this.anyMedia&&!this.anyButtons||o.overlayPosition==="left"&&(this.exhibitor.description||"").length<800},get showEdit(){return!!(p.sendLoginLinkUrl&&this.sendLinkEmail)},get sendLinkEmail(){return this.exhibitor.privateEmail||this.exhibitor.email}})),{heatmapBar:A}=se(r.exhibitor),[w,z]=I(!1),[f,M]=I(!1),x=C(null);ie(()=>((()=>{if(x.current){const c=x.current.offsetHeight;z(c>300)}})(),()=>{a.exhibitorStore.rebookingStateChangeRequested=!1}),[]),ae(()=>r.exhibitor,()=>{S.current&&(S.current.parentElement.scrollTop=0),r.collapsed=!0});function _(e,c){if(u(c),o.kiosk)return e.preventDefault()}function H(e,c,m){O(d.ClickCustomButton,r.exhibitor.name);const b={externalId:r.exhibitor.externalId,buttonNumber:e,buttonUrl:c,preventDefault:m.preventDefault.bind(m)};o.onExhibitorCustomButtonClick&&o.onExhibitorCustomButtonClick(b)}function u(e){O(e,r.exhibitor.name)}const B=C(),V={entering:{opacity:1},entered:{opacity:1},exiting:{opacity:0},exited:{opacity:0}},E=150;return T(()=>{const e=r.exhibitor,c=p.isRebooking?(()=>{const t=new Set;for(const s of e.booths)s instanceof oe&&s.size&&t.add(s.size);const l=Array.from(t);return n("div",{children:[l.length>0&&i("div",{className:"booth__infos",style:{padding:"0 15px",marginBottom:"1rem"},children:n("div",{className:"booth__info",children:[i("div",{className:"booth__info-icon",children:i("i",{className:"icon-size"})}),n("div",{className:"booth__info-body",children:[i("div",{className:"booth__info-title",children:h("Size")}),i("div",{className:"booth__info-val",children:l.join(", ")})]})]})}),i(he,{value:e.rebookingState.toString(),onChange:s=>a.exhibitorStore.setRebookingState(e,parseInt(s),e.rebookingNote)}),i(de,{value:e.rebookingNote||"",onSave:s=>a.exhibitorStore.setRebookingState(e,e.rebookingState,s)},e.id),i(te,{in:a.exhibitorStore.rebookingStateChangeRequested,nodeRef:B,timeout:E,appear:!0,enter:!0,exit:!0,mountOnEnter:!0,unmountOnExit:!0,children:s=>i("div",{ref:B,style:{position:"fixed",bottom:"1rem",left:"1rem",zIndex:9999,transition:`opacity ${E}ms ease-in-out`,opacity:0,...V[s]},children:i(le,{title:a.exhibitorStore.rebookingStateSaved?h("Changes saved"):h("Oops! Something went wrong"),variant:a.exhibitorStore.rebookingStateSaved?"success":"error",inline:!0,closable:!0,onClose:()=>{a.exhibitorStore.rebookingStateChangeRequested=!1}})})})]})})():null,m=g({exhibitor:!0,"is-featured":e.featured,bookmarked:e.bookmarked,[o.responsiveClass]:!0}),b=()=>{r.collapsed=!1,setTimeout(r.updateOverlayContent)};function k(t,l,s){return!t||!l||o.kiosk||o.previewMode?null:i("div",{className:"exhibitor-custom-button",children:i(R,{link:l,inline:!0,onClick:v=>{H(s,l,v)},target:"_blank",children:t})},s)}const X=({exhibitor:t})=>{const s=[k(t.customButtonTitle,t.customButtonUrl,1),k(t.customButton2Title,t.customButton2Url,2),k(t.customButton3Title,t.customButton3Url,3)].filter(Boolean);return s.length===0?null:i("div",{className:"exhibitor-custom-buttons",children:s})};function K(){return!p.hideShareButton&&!o.kiosk&&window.location.host.endsWith(".expofp.com")&&y.EXPO!=="globalaltsmiami2024"}function L(){r.updateOverlayContent()}const W=()=>{a.routeStore.clickRoute(null,a.routeStore.tempToBooth||e.booths[0]),a.routeStore.currentRouteExhibitor=e},J=t=>/^\d+$/.test(t),Y=t=>p.shortLevelName?t.layer?.shortName:t.layer?.description;return n("div",{className:m,"aria-label":h("Details"),children:[n("div",{className:"exhibitor__header",children:[n("div",{className:"exhibitor__header-name",children:[i("div",{className:"exhibitor__header-icon",children:i("i",{className:"icon-exhibitor-solid"})}),i("span",{dir:"auto",children:e.name}),A]}),i("button",{type:"button",onClick:()=>a.searchStore.handleBackAction(),className:"exhibitor__header-close",children:i("i",{className:"icon-close"})})]}),c||n(N,{children:[i("div",{className:"exhibitor__buttons",children:!o.isGuidedToursActive&&i(be,{showBookmark:!o.disableBookmarked&&!p.hideBookmarks&&!o.kiosk,showDirections:e.booths.length>0&&y.wayfinding,inBookmark:e.bookmarked,showShare:K(),showVisited:!o.kiosk,visited:e.visited,onClickBookmark:F,onClickShare:P,onClickDirections:W,onClickVisited:$})}),e.leadingImageUrl?i("div",{className:"exhibitor__leading-image-container exhibitor-slider",children:e.leadingImageLinkUrl?i("a",{href:e.leadingImageLinkUrl,target:"_blank",rel:"noopener noreferrer",children:i("img",{src:e.leadingImageUrl,className:"exhibitor__leading-image",alt:"",crossOrigin:"anonymous"})}):i(U,{children:i(D,{fallback:null,children:i(G,{className:o.responsiveClass,onOpenGallery:()=>a.openGallery(),onCloseGallery:()=>a.closeGallery(),onImageLoadHeightUpdate:L,leading:!0,images:[e.leadingImageUrl]})})})}):null,n("div",{className:g("exhibitor__details",{"details-hidden":o.kiosk&&w&&!f}),ref:x,children:[n("div",{className:g("exhibitor-categories",{"is-links-disabled":o.isGuidedToursActive}),children:[e.featured&&i("div",{className:"exhibitor-featured",children:h("Featured")}),e.booths.map(t=>{const l=Y(t),s=v=>{v.preventDefault(),a.toggleMapOverlay(),a.selectBooth(t)};return n("a",{href:`?${t.slug}`,onClick:s,className:"exhibitor-categories__booth",children:[i("div",{className:"exhibitor-categories__booth-name",children:t.name}),l&&n("div",{className:"exhibitor-categories__booth-level",children:[J(l)?h("Level")+" ":"",l]})]},t.id)}),e.categories.map(t=>i("a",{href:"?"+encodeURIComponent(t.slug),onClick:l=>{l.preventDefault(),j(t)},className:t.sponsorship?"exhibitor-categories__sponsorship":"exhibitor-categories__cat",children:t.name},t.id))]}),e.description||e.logo?.url?n("div",{className:g("exhibitor-description",{collapsed:r.collapsed&&!r.disableCollapse}),children:[e.logo?.url?i("div",{className:g("exhibitor-description__logo",{"exhibitor-description__logo--left":!e.description}),children:i("img",{src:e.logo.url,alt:e.name,crossOrigin:"anonymous"})}):null,e.description?i("span",{className:"exhibitor-description__content",dir:"auto",dangerouslySetInnerHTML:{__html:ke(e.description)},onClick:b}):null]}):null,(!!e.schedule?.length||!!e.booths[0]?.schedule.length)&&i(me,{events:[...e.schedule||e.booths[0]?.schedule||[]].sort((t,l)=>new Date(t.startDate).getTime()-new Date(l.startDate).getTime())}),!o.kiosk&&e.videoUrl&&navigator.onLine&&i("div",{className:"exhibitor-video",children:i("iframe",{src:e.videoUrl,"data-allow":"encrypted-media; autoplay; fullscreen",title:h("Exhibitor Video"),allowFullScreen:!0})}),e.gallery&&i("div",{className:"exhibitor-slider",onClick:()=>u(d.ViewGallery),children:i(U,{children:i(D,{fallback:null,children:i(G,{className:o.responsiveClass,onOpenGallery:()=>a.openGallery(),onCloseGallery:()=>a.closeGallery(),onImageLoadHeightUpdate:L,images:e.gallery})})})}),!o.kiosk&&e.marketMaterials&&n(N,{children:[i("div",{className:"exhibitor-sep"}),i(ce,{list:e.marketMaterials})]}),r.showEdit&&i("div",{className:"exhibitor-sep"}),!o.kiosk&&r.showEdit&&i("div",{className:"exhibitor-edit",children:i(R,{size:"sm",variant:"secondary",onClick:q,children:h("Edit")})}),r.anyAddress&&n("div",{className:"exhibitor-meta",children:[!!(e.address||e.address2)&&n("div",{className:"exhibitor-meta__item",children:[i("div",{className:"exhibitor-meta__icon",children:i("i",{className:"icon-marker-pin-solid"})}),n("div",{className:"exhibitor-meta__content",children:[e.address,!!e.address2&&i("div",{children:e.address2}),!!(e.city||e.state||e.zip)&&n("div",{children:[e.city,!!(e.city&&e.state)&&i("span",{children:" "}),e.state,!!(e.state&&e.zip)&&i("span",{children:"\xA0"})," ",e.zip]}),!!e.country&&i("div",{children:e.country})]})]}),!!e.phone1&&n("div",{className:"exhibitor-meta__item",children:[i("div",{className:"exhibitor-meta__icon",children:i("i",{className:"icon-phone-solid"})}),i("div",{className:"exhibitor-meta__content",children:i("a",{dir:"ltr",href:"tel:"+e.phone1,className:"exhibitor-meta__link",onClick:t=>_(t,d.ClickPhone),children:e.phone1})})]}),!!e.website&&n("div",{className:"exhibitor-meta__item",children:[i("div",{className:"exhibitor-meta__icon",children:i("i",{className:"icon-globe-solid"})}),i("div",{className:"exhibitor-meta__content",children:i("a",{href:e.website,target:"_blank",rel:"noopener noreferrer",className:"exhibitor-meta__link",onClick:t=>_(t,d.ClickWebsite),children:r.websiteTrimmed})})]}),!!e.email&&n("div",{className:"exhibitor-meta__item",children:[i("div",{className:"exhibitor-meta__icon",children:i("i",{className:"icon-mail-at-solid"})}),i("div",{className:"exhibitor-meta__content",children:i("a",{href:"mailto:"+e.email,target:"_blank",rel:"noopener noreferrer",className:"exhibitor-meta__link",onClick:t=>_(t,d.ClickEmail),children:e.email})})]}),r.anySocial&&n("div",{className:"exhibitor-meta__socials",children:[i("a",{href:e.facebook,className:"exhibitor-meta__social",onClick:()=>u(d.ClickFacebook),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-facebook"})}),i("a",{href:e.instagram,className:"exhibitor-meta__social",onClick:()=>u(d.ClickInstagaram),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-instagram"})}),i("a",{href:e.linkedin,className:"exhibitor-meta__social",onClick:()=>u(d.ClickLinkedin),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-linkedin"})}),i("a",{href:e.twitter,className:"exhibitor-meta__social",onClick:()=>u(d.ClickTwitter),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-twitter-x"})}),i("a",{href:e.xing,className:"exhibitor-meta__social",onClick:()=>u(d.ClickXing),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-xing"})}),i("a",{href:e.youtube,className:"exhibitor-meta__social",onClick:()=>u(d.ClickYoutube),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-youtube"})})]})]}),i(X,{exhibitor:e})]}),o.kiosk&&w&&i(ue,{className:g("exhibitor__show-more",{"is-sticky":f}),expanded:f,onClick:()=>M(t=>!t)})]})]})});function P(){const e=window.navigator,c={title:o.selectedExhibitor.name,url:window.location.href};ne&&e?.canShare&&e.canShare(c)?e.share(c):a.toggleModal("share")}function j(e){a.clickCategory(e)}function q(e){if(o.kiosk)return e.preventDefault();e.target.blur();const c=r.sendLinkEmail;if(!window.confirm(h("Send login instructions to {{email}} to edit profile?",{email:c}))||y.EXPO==="expo")return;const m=new XMLHttpRequest;m.open("POST",p.sendLoginLinkUrl),m.setRequestHeader("Content-Type","application/json");function b(){alert(h("Error sending login instructions"))}m.onload=function(k){if(this.status!==200){b();return}alert(h("A link to edit profile was sent to {{email}}",{email:c}))},m.onerror=function(k){re.error("Error",k),b()},m.send(JSON.stringify({id:r.exhibitor.id}))}function F(){r.exhibitor.bookmarked=!r.exhibitor.bookmarked,o.onBookmarkClick&&o.onBookmarkClick({name:r.exhibitor.name,bookmarked:r.exhibitor.bookmarked,externalId:r.exhibitor.externalId})}function $(){r.exhibitor.visited=!r.exhibitor.visited,o.onVisitedClick&&o.onVisitedClick({name:r.exhibitor.name,visited:r.exhibitor.visited,externalId:r.exhibitor.externalId})}});export default()=>T(()=>i(N,{children:!o.menu&&o.selectedExhibitor?i(ge,{}):null}));
1
+ import{Fragment as N,jsx as i,jsxs as n}from"react/jsx-runtime";import"./Exhibitor.scss";import{Button as R}from"@expofp/ui";import g from"classnames";import{observer as Q,useLocalStore as Z,useObserver as T}from"mobx-react-lite";import ee,{Suspense as D,useEffect as ie,useRef as C,useState as I}from"react";import{Transition as te}from"react-transition-group";import p from"../data";import a,{uiState as o}from"../store";import{RegularBooth as oe}from"../store/BoothStore";import{GaEventActions as d,sendEventToGa as O}from"../tools/gtag";import re from"../tools/logger";import y from"../tools/settings";import{t as h}from"../utils/i18n";import ne from"../utils/is-mobile";import{useReaction as ae}from"../utils/mobx";import se from"../utils/useHeatmapOverlay";import le from"./AlertContainer";import ce from"./DownloadListContainer";import U from"./ErrorBoundary";import de from"./RebookingNotesContainer";import he from"./RebookingRadioGroupContainer";import me from"./Schedule";import ue from"./ShowMoreButtonContainer";import be from"./SidebarActionsContainer";import{getDescription as ke}from"./utils/getDescription";const G=ee.lazy(()=>import("./GalleryContainer")),ge=Q(function(){const S=C(null),r=Z(()=>({collapsed:!0,updateOverlayContent:null,get exhibitor(){return o.selectedExhibitor},get websiteTrimmed(){return this.exhibitor.website?this.exhibitor.website.replace(/^(http(s?):\/\/)([^/]+)(\/)?$/i,"$3"):""},get anySocial(){return o.kiosk?!1:!!["facebook","instagram","linkedin","twitter","googlePlus","xing","youtube"].find(e=>this.exhibitor[e])},get anyAddress(){return!!["address","address2","phone1","website","email"].find(e=>this.exhibitor[e])},get anyMedia(){return!!this.exhibitor.videoUrl||!!(this.exhibitor.gallery&&this.exhibitor.gallery.length)},get anyButtons(){return!!(this.exhibitor.customButtonTitle||this.exhibitor.customButton2Title||this.exhibitor.customButton3Title)},get disableCollapse(){return!this.anySocial&&!this.anyAddress&&!this.anyMedia&&!this.anyButtons||o.overlayPosition==="left"&&(this.exhibitor.description||"").length<800},get showEdit(){return!!(p.sendLoginLinkUrl&&this.sendLinkEmail)},get sendLinkEmail(){return this.exhibitor.privateEmail||this.exhibitor.email}})),{heatmapBar:A}=se(r.exhibitor),[w,z]=I(!1),[f,M]=I(!1),x=C(null);ie(()=>((()=>{if(x.current){const c=x.current.offsetHeight;z(c>300)}})(),()=>{a.exhibitorStore.rebookingStateChangeRequested=!1}),[]),ae(()=>r.exhibitor,()=>{S.current&&(S.current.parentElement.scrollTop=0),r.collapsed=!0});function _(e,c){if(u(c),o.kiosk)return e.preventDefault()}function H(e,c,m){O(d.ClickCustomButton,r.exhibitor.name);const b={externalId:r.exhibitor.externalId,buttonNumber:e,buttonUrl:c,preventDefault:m.preventDefault.bind(m)};o.onExhibitorCustomButtonClick&&o.onExhibitorCustomButtonClick(b)}function u(e){O(e,r.exhibitor.name)}const B=C(),V={entering:{opacity:1},entered:{opacity:1},exiting:{opacity:0},exited:{opacity:0}},E=150;return T(()=>{const e=r.exhibitor,c=p.isRebooking?(()=>{const t=new Set;for(const s of e.booths)s instanceof oe&&s.size&&t.add(s.size);const l=Array.from(t);return n("div",{children:[l.length>0&&i("div",{className:"booth__infos",style:{padding:"0 15px",marginBottom:"1rem"},children:n("div",{className:"booth__info",children:[i("div",{className:"booth__info-icon",children:i("i",{className:"icon-size"})}),n("div",{className:"booth__info-body",children:[i("div",{className:"booth__info-title",children:h("Size")}),i("div",{className:"booth__info-val",children:l.join(", ")})]})]})}),i(he,{value:e.rebookingState.toString(),onChange:s=>a.exhibitorStore.setRebookingState(e,parseInt(s),e.rebookingNote)}),i(de,{value:e.rebookingNote||"",onSave:s=>a.exhibitorStore.setRebookingState(e,e.rebookingState,s)},e.id),i(te,{in:a.exhibitorStore.rebookingStateChangeRequested,nodeRef:B,timeout:E,appear:!0,enter:!0,exit:!0,mountOnEnter:!0,unmountOnExit:!0,children:s=>i("div",{ref:B,style:{position:"fixed",bottom:"1rem",left:"1rem",zIndex:9999,transition:`opacity ${E}ms ease-in-out`,opacity:0,...V[s]},children:i(le,{title:a.exhibitorStore.rebookingStateSaved?h("Changes saved"):h("Oops! Something went wrong"),variant:a.exhibitorStore.rebookingStateSaved?"success":"error",inline:!0,closable:!0,onClose:()=>{a.exhibitorStore.rebookingStateChangeRequested=!1}})})})]})})():null,m=g({exhibitor:!0,"is-featured":e.featured,bookmarked:e.bookmarked,[o.responsiveClass]:!0}),b=()=>{r.collapsed=!1,setTimeout(r.updateOverlayContent)};function k(t,l,s){return!t||!l||o.kiosk||o.previewMode?null:i("div",{className:"exhibitor-custom-button",children:i(R,{link:l,inline:!0,onClick:v=>{H(s,l,v)},target:"_blank",children:t})},s)}const X=({exhibitor:t})=>{const s=[k(t.customButtonTitle,t.customButtonUrl,1),k(t.customButton2Title,t.customButton2Url,2),k(t.customButton3Title,t.customButton3Url,3)].filter(Boolean);return s.length===0?null:i("div",{className:"exhibitor-custom-buttons",children:s})};function K(){return!p.hideShareButton&&!o.kiosk&&window.location.host.endsWith(".expofp.com")&&y.EXPO!=="globalaltsmiami2024"}function L(){r.updateOverlayContent()}const W=()=>{a.routeStore.clickRoute(null,a.routeStore.tempToBooth||e.booths[0]),a.routeStore.currentRouteExhibitor=e},J=t=>/^\d+$/.test(t),Y=t=>p.shortLevelName?t.layer?.shortName:t.layer?.description;return n("div",{className:m,"aria-label":h("Details"),children:[n("div",{className:"exhibitor__header",children:[n("div",{className:"exhibitor__header-name",children:[i("div",{className:"exhibitor__header-icon",children:i("i",{className:"icon-exhibitor-solid"})}),i("span",{dir:"auto",children:e.name}),A]}),i("button",{type:"button",onClick:()=>a.searchStore.handleBackAction(),className:"exhibitor__header-close",children:i("i",{className:"icon-close"})})]}),c||n(N,{children:[i("div",{className:"exhibitor__buttons",children:!o.isGuidedToursActive&&i(be,{showBookmark:!o.disableBookmarked&&!p.hideBookmarks&&!o.kiosk,showDirections:e.booths.length>0&&y.wayfinding,inBookmark:e.bookmarked,showShare:K(),showVisited:!o.kiosk,visited:e.visited,onClickBookmark:F,onClickShare:P,onClickDirections:W,onClickVisited:$})}),e.leadingImageUrl?i("div",{className:"exhibitor__leading-image-container exhibitor-slider",children:e.leadingImageLinkUrl?i("a",{href:e.leadingImageLinkUrl,target:"_blank",rel:"noopener noreferrer",children:i("img",{src:e.leadingImageUrl,className:"exhibitor__leading-image",alt:"",crossOrigin:"anonymous"})}):i(U,{children:i(D,{fallback:null,children:i(G,{className:o.responsiveClass,onOpenGallery:()=>a.openGallery(),onCloseGallery:()=>a.closeGallery(),onImageLoadHeightUpdate:L,leading:!0,images:[e.leadingImageUrl]})})})}):null,n("div",{className:g("exhibitor__details",{"details-hidden":o.kiosk&&w&&!f}),ref:x,children:[n("div",{className:g("exhibitor-categories",{"is-links-disabled":o.isGuidedToursActive}),children:[e.featured&&i("div",{className:"exhibitor-featured",children:h("Featured")}),e.booths.map(t=>{const l=Y(t),s=v=>{v.preventDefault(),a.toggleMapOverlay(),a.selectBooth(t)};return n("a",{href:`?${t.slug}`,onClick:s,className:"exhibitor-categories__booth",children:[i("div",{className:"exhibitor-categories__booth-name",children:t.name}),l&&n("div",{className:"exhibitor-categories__booth-level",children:[J(l)?h("Level")+" ":"",l]})]},t.id)}),e.categories.map(t=>i("a",{href:"?"+encodeURIComponent(t.slug),onClick:l=>{l.preventDefault(),j(t)},className:t.sponsorship?"exhibitor-categories__sponsorship":"exhibitor-categories__cat",children:t.name},t.id))]}),e.description||e.logo?.url?n("div",{className:g("exhibitor-description",{collapsed:r.collapsed&&!r.disableCollapse}),children:[e.logo?.url?i("div",{className:g("exhibitor-description__logo",{"exhibitor-description__logo--left":!e.description}),children:i("img",{src:e.logo.url,alt:e.name,crossOrigin:"anonymous"})}):null,e.description?i("span",{className:"exhibitor-description__content",dir:"auto",dangerouslySetInnerHTML:{__html:ke(e.description)},onClick:b}):null]}):null,(!!e.schedule?.length||!!e.booths[0]?.schedule.length)&&i(me,{events:[...e.schedule||e.booths[0]?.schedule||[]].sort((t,l)=>new Date(t.startDate).getTime()-new Date(l.startDate).getTime())}),!o.kiosk&&e.videoUrl&&navigator.onLine&&i("div",{className:"exhibitor-video",children:i("iframe",{src:e.videoUrl,"data-allow":"encrypted-media; autoplay; fullscreen",title:h("Exhibitor Video"),allowFullScreen:!0})}),e.gallery&&i("div",{className:"exhibitor-slider",onClick:()=>u(d.ViewGallery),children:i(U,{children:i(D,{fallback:null,children:i(G,{className:o.responsiveClass,onOpenGallery:()=>a.openGallery(),onCloseGallery:()=>a.closeGallery(),onImageLoadHeightUpdate:L,images:e.gallery})})})}),!o.kiosk&&e.marketMaterials&&n(N,{children:[i("div",{className:"exhibitor-sep"}),i(ce,{list:e.marketMaterials})]}),r.showEdit&&i("div",{className:"exhibitor-sep"}),!o.kiosk&&r.showEdit&&i("div",{className:"exhibitor-edit",children:i(R,{size:"sm",variant:"secondary",onClick:q,children:h("Edit")})}),r.anyAddress&&n("div",{className:"exhibitor-meta",children:[!!(e.address||e.address2)&&n("div",{className:"exhibitor-meta__item",children:[i("div",{className:"exhibitor-meta__icon",children:i("i",{className:"icon-marker-pin-solid"})}),n("div",{className:"exhibitor-meta__content",children:[e.address,!!e.address2&&i("div",{children:e.address2}),!!(e.city||e.state||e.zip)&&n("div",{children:[e.city,!!(e.city&&e.state)&&i("span",{children:" "}),e.state,!!(e.state&&e.zip)&&i("span",{children:"\xA0"})," ",e.zip]}),!!e.country&&i("div",{children:e.country})]})]}),!!e.phone1&&n("div",{className:"exhibitor-meta__item",children:[i("div",{className:"exhibitor-meta__icon",children:i("i",{className:"icon-phone-solid"})}),i("div",{className:"exhibitor-meta__content",children:i("a",{dir:"ltr",href:"tel:"+e.phone1,className:"exhibitor-meta__link",onClick:t=>_(t,d.ClickPhone),children:e.phone1})})]}),!!e.website&&n("div",{className:"exhibitor-meta__item",children:[i("div",{className:"exhibitor-meta__icon",children:i("i",{className:"icon-globe-solid"})}),i("div",{className:"exhibitor-meta__content",children:i("a",{href:e.website,target:"_blank",rel:"noopener noreferrer",className:"exhibitor-meta__link",onClick:t=>_(t,d.ClickWebsite),children:r.websiteTrimmed})})]}),!!e.email&&n("div",{className:"exhibitor-meta__item",children:[i("div",{className:"exhibitor-meta__icon",children:i("i",{className:"icon-mail-at-solid"})}),i("div",{className:"exhibitor-meta__content",children:i("a",{href:"mailto:"+e.email,target:"_blank",rel:"noopener noreferrer",className:"exhibitor-meta__link",onClick:t=>_(t,d.ClickEmail),children:e.email})})]}),r.anySocial&&n("div",{className:"exhibitor-meta__socials",children:[i("a",{href:e.facebook,className:"exhibitor-meta__social",onClick:()=>u(d.ClickFacebook),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-facebook"})}),i("a",{href:e.instagram,className:"exhibitor-meta__social",onClick:()=>u(d.ClickInstagaram),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-instagram"})}),i("a",{href:e.linkedin,className:"exhibitor-meta__social",onClick:()=>u(d.ClickLinkedin),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-linkedin"})}),i("a",{href:e.twitter,className:"exhibitor-meta__social",onClick:()=>u(d.ClickTwitter),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-twitter-x"})}),i("a",{href:e.xing,className:"exhibitor-meta__social",onClick:()=>u(d.ClickXing),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-xing"})}),i("a",{href:e.youtube,className:"exhibitor-meta__social",onClick:()=>u(d.ClickYoutube),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-youtube"})})]})]}),i(X,{exhibitor:e})]}),o.kiosk&&w&&i(ue,{className:g("exhibitor__show-more",{"is-sticky":f}),expanded:f,onClick:()=>M(t=>!t)})]})]})});function P(){const e=window.navigator,c={title:o.selectedExhibitor.name,url:window.location.href};ne&&e?.canShare&&e.canShare(c)?e.share(c):a.toggleModal("share")}function j(e){a.clickCategory(e)}function q(e){if(o.kiosk)return e.preventDefault();e.target.blur();const c=r.sendLinkEmail;if(!window.confirm(h("Send login instructions to {{email}} to edit profile?",{email:c}))||y.EXPO==="expo")return;const m=new XMLHttpRequest;m.open("POST",p.sendLoginLinkUrl),m.setRequestHeader("Content-Type","application/json");function b(){alert(h("Error sending login instructions"))}m.onload=function(k){if(this.status!==200){b();return}alert(h("A link to edit profile was sent to {{email}}",{email:c}))},m.onerror=function(k){re.error("Error",k),b()},m.send(JSON.stringify({id:r.exhibitor.id}))}function F(){r.exhibitor.bookmarked=!r.exhibitor.bookmarked,o.onBookmarkClick&&o.onBookmarkClick({name:r.exhibitor.name,bookmarked:r.exhibitor.bookmarked,externalId:r.exhibitor.externalId})}function $(){r.exhibitor.visited=!r.exhibitor.visited,o.onVisitedClick&&o.onVisitedClick({name:r.exhibitor.name,visited:r.exhibitor.visited,externalId:r.exhibitor.externalId})}});export default()=>T(()=>i(N,{children:!o.menu&&o.selectedExhibitor?i(ge,{}):null}));
@@ -0,0 +1,6 @@
1
+ import { type GalleryProps } from '@expofp/ui';
2
+ declare const GalleryContainer: import("react").FunctionComponent<Omit<GalleryProps, "closeLabel" | "fullscreenLabel" | "images" | "itemLabel" | "nextSlideLabel" | "onSlideActivate" | "prevSlideLabel" | "renderTarget" | "zoomInLabel" | "zoomOutLabel"> & {
3
+ images: string[];
4
+ }>;
5
+ export default GalleryContainer;
6
+ //# sourceMappingURL=GalleryContainer.d.ts.map
@@ -0,0 +1 @@
1
+ import{jsx as p}from"react/jsx-runtime";import{Gallery as u}from"@expofp/ui";import{observer as v}from"mobx-react-lite";import{useCallback as x,useState as L}from"react";import{t as n}from"../utils/i18n";import{loadImage as b}from"../utils/loadImage";import{useRenderTarget as S}from"../utils/useRenderTarget";const h=o=>{const e=o.split("/"),r=e[e.length-1];return r.includes("original-")||(e[e.length-1]="original-"+r),e.join("/")},m=new Map,C=o=>{const e=m.get(o);if(e)return e;const r=h(o),i=r===o?Promise.resolve(o):b(r).then(l=>l?r:o);return m.set(o,i),i},I=v(o=>{const{images:e,...r}=o,i=S(),[l,d]=L({}),g=x(t=>{const s=e[t];s&&C(s).then(a=>{a!==s&&d(c=>c[s]===a?c:{...c,[s]:a})})},[e]),f=e.map(t=>({thumbnailUrl:t,fullUrl:l[t]??t}));return p(u,{...r,images:f,closeLabel:n("Close"),zoomInLabel:n("Zoom In"),zoomOutLabel:n("Zoom Out"),nextSlideLabel:n("Next slide"),prevSlideLabel:n("Prev slide"),fullscreenLabel:n("View fullscreen"),itemLabel:t=>n("View image {{index}}",{index:t+1}),renderTarget:i,onSlideActivate:g})});export default I;
@@ -1,4 +1,10 @@
1
1
  import { type Kiosk } from './SetKiosk';
2
- export declare function integrateKioskIntoMap(kiosk: Kiosk, enableKioskMode: boolean): void;
3
- export declare function integrateKioskIntoWf(kiosk: Kiosk): void;
2
+ /**
3
+ * Apply a kiosk anchor to the map. Two callers with different inputs: the
4
+ * device's own kiosk (saved locally or from `config.kiosk`) carries the full
5
+ * shape including its home framing, while a QR-shared route hands over the
6
+ * position alone (`kiosk_x/y/z`) — hence every framing field is optional here.
7
+ */
8
+ export declare function integrateKioskIntoMap(kiosk: Partial<Kiosk>, enableKioskMode: boolean): void;
9
+ export declare function integrateKioskIntoWf(kiosk: Partial<Kiosk>): void;
4
10
  //# sourceMappingURL=integrateKiosk.d.ts.map
@@ -1 +1 @@
1
- import{runInAction as n,when as a}from"mobx";import e from"../../store";import{getPtScaleZoomRatio as i}from"./kiosk-record";export function integrateKioskIntoMap(t,o){t&&n(()=>{if(e.uiState.setKioskData(t),e.uiState.kiosk=o,e.maplibreStore.showMaplibre)return;e.uiState.setMapSettings({centerxy:`${t.mapCenterX},${t.mapCenterY}`,z:t.z??void 0,bearing:t.mapRollDegrees});const r=i(t);r!==void 0&&e.uiState.changeZoom(r)})}export function integrateKioskIntoWf(t){t&&(t.z!=null&&e.fp.activateFloor({name:t.z.toString()}),a(()=>!!e.uiState.selectedRoute,()=>{const o=e.uiState.selectedRoute;o?.to&&!o.from&&e.routeStore.selectRoute(o,!1,!0)}))}
1
+ import{runInAction as a,when as i}from"mobx";import e from"../../store";import{getPtScaleZoomRatio as u}from"./kiosk-record";export function integrateKioskIntoMap(t,n){t&&a(()=>{if(e.uiState.setKioskData(t),e.uiState.kiosk=n,e.maplibreStore.showMaplibre)return;const o=t.mapCenterX!=null&&t.mapCenterY!=null;e.uiState.setMapSettings({centerxy:o?`${t.mapCenterX},${t.mapCenterY}`:"",z:t.z??void 0,bearing:t.mapRollDegrees});const r=u(t);r!==void 0&&e.uiState.changeZoom(r)})}export function integrateKioskIntoWf(t){t&&(t.z!=null&&e.fp.activateFloor({name:t.z.toString()}),i(()=>!!e.uiState.selectedRoute,()=>{const n=e.uiState.selectedRoute;n?.to&&!n.from&&e.routeStore.selectRoute(n,!1,!0)}))}
@@ -0,0 +1,8 @@
1
+ import type UIState from '../../store/UIState';
2
+ /**
3
+ * Toggle kiosk mode — the single meaning of `kiosk=1` / `kiosk=0` from either
4
+ * channel (the `?kiosk=` URL param, the typed search-box command). Exit also
5
+ * resets the per-device UI scale; init-ui's reaction persists the choice.
6
+ */
7
+ export declare function applyKioskMode(uiState: UIState, enabled: boolean): void;
8
+ //# sourceMappingURL=kiosk-mode.d.ts.map
@@ -0,0 +1 @@
1
+ export function applyKioskMode(o,i){o.kiosk=i,i||o.resetUIScale()}
@@ -14,6 +14,10 @@ export declare function toFiniteNumber(value: number | null | undefined): number
14
14
  * to the one the kiosk was saved at, or undefined when the record does not
15
15
  * carry both. Restoring the home framing and integrating the kiosk at load both
16
16
  * need it, and both need the same guard.
17
+ *
18
+ * `Partial` rather than `Kiosk`: a QR-shared route hands over the anchor
19
+ * position alone, with no framing at all — the guard above is what that case
20
+ * lands in.
17
21
  */
18
- export declare function getPtScaleZoomRatio(kiosk: Kiosk | null | undefined): number | undefined;
22
+ export declare function getPtScaleZoomRatio(kiosk: Partial<Kiosk> | null | undefined): number | undefined;
19
23
  //# sourceMappingURL=kiosk-record.d.ts.map
@@ -1,4 +1,8 @@
1
- import { Kiosk } from './SetKiosk';
2
- export declare function collectKioskUrlParams(searchParams: URLSearchParams): Kiosk;
3
- export declare function setKioskUrlParams(searchParams: URLSearchParams, kioskData: Kiosk, onlyParameters?: string[]): void;
1
+ import { type Kiosk } from './SetKiosk';
2
+ /** The anchor keys, in the order both halves speak them. */
3
+ declare const ANCHOR_KEYS: readonly ['x', 'y', 'z'];
4
+ type KioskAnchor = Partial<Pick<Kiosk, (typeof ANCHOR_KEYS)[number]>>;
5
+ export declare function collectKioskUrlParams(searchParams: URLSearchParams): KioskAnchor;
6
+ export declare function setKioskUrlParams(searchParams: URLSearchParams, kioskData: KioskAnchor): void;
7
+ export {};
4
8
  //# sourceMappingURL=kioskUrlParam.d.ts.map
@@ -1 +1 @@
1
- import{getKioskUrlParamKey as s}from"./SetKiosk";export function collectKioskUrlParams(o){const t={};try{const e=n=>{const l=parseFloat(n);return Number.isNaN(l)?null:l},r={x:e,y:e,z:n=>n,heading:e,lat:e,lng:e,iconSizePercent:e,uiScale:e,mapRollDegrees:e,mapInitialPtScale:e,mapPtScale:e,mapCenterX:e,mapCenterY:e,mapPitch:e};for(const n in r){const l=s(n),c=r[n](o.get(l));c!=null&&(t[n]=c)}}catch(e){console.error("collectKioskUrlParams",e)}finally{return t}}export function setKioskUrlParams(o,t,e){try{if(!t)return;for(const r of Object.keys(t))t[r]==null||e?.length&&!e.includes(r)||o.set(s(r),typeof t[r]=="number"?t[r].toFixed(2):`${t[r]}`)}catch(r){console.error("setKioskUrlParams",r)}}
1
+ import{getKioskUrlParamKey as e}from"./SetKiosk";const i=["x","y","z"];export function collectKioskUrlParams(r){const t={},o=u(r,"x");o!==null&&(t.x=o);const n=u(r,"y");n!==null&&(t.y=n);const l=r.get(e("z"));return l!==null&&(t.z=l),t}export function setKioskUrlParams(r,t){if(t)for(const o of i){const n=t[o];n!=null&&r.set(e(o),typeof n=="number"?n.toFixed(2):`${n}`)}}function u(r,t){const o=r.get(e(t));if(o===null)return null;const n=parseFloat(o);return Number.isNaN(n)?null:n}
@@ -1 +1 @@
1
- import{Fragment as ne,jsx as k,jsxs as U}from"react/jsx-runtime";import{Box as L}from"@expofp/geometry";import{Draggable as ie}from"@expofp/ui";import ae from"classnames";import se from"color";import{observable as le,reaction as me}from"mobx";import{useObserver as ce}from"mobx-react-lite";import{useEffect as fe,useMemo as de,useRef as x,useState as ue}from"react";import{DEBUG_STORAGE_KEY as Z}from"../../constants";import pe from"../../data";import{fpGeo as he}from"../../data/fpGeo";import{svgArea as j}from"../../data/svg";import{boxToRenderer as B,createSceneDef as ye,mapRollSetting as A}from"../../renderer";import{pickDefaultScene as $,pickDefaultScenePoint as ve}from"../../renderer/engine-core/defs";import i,{boothStore as ge,layersStore as y,uiState as o}from"../../store";import{BoothBase as K}from"../../store/BoothStore";import{Category as be}from"../../store/CategoryStore";import{Exhibitor as V}from"../../store/ExhibitorStore";import{LayerMode as R}from"../../store/LayerStore";import{Route as Se}from"../../store/RouteStore";import E from"../../tools/logger";import h from"../../tools/settings";import{areLayersEnabled as we}from"../../utils/areLayersEnabled";import{parseNumberPair as W}from"../../utils/camera-map-settings";import{applyVenueDimValue as xe,createDimmingAnimator as Re}from"../../utils/dimming";import{convertGpsToLocal as Te}from"../../utils/gps";import v from"../../utils/is-debug";import{isPathwayLayer as H}from"../../utils/is-pathway-layer";import{useReaction as d}from"../../utils/mobx";import{createWayfinding as Ce}from"../../wayfinding";import q from"./booth-by-xy";import ke from"./drawing/config/config-all";import{configMarkers as Le,getMarkerFromClick as Be}from"./drawing/config/config-markers";import{loadLayersImages as Ee}from"./drawing/config/loadBoothsImages";import{useBuildRoute as Me}from"./traffic/useBuildRoute";import{useManageTraffic as Pe}from"./traffic/useManageTraffic";const M=Number.isFinite(h.maxZoom)?h.maxZoom:void 0,ze=M!==void 0;export default function Ie(){let P={};const J="#ebebeb",g=x(null),b=de(()=>le({moving:!1,prevLevel:i.layerStore.layers.find(e=>!e.frozen&&e.visible)}),[]),a=i.rendererService,T=x(Re(e=>xe(a,e)));let l;const S=x(null),z=x(null);let I=null,_=null,D=null,F=!1;function G(){y.layers.forEach(e=>{e.configured=!1,e.children=[],e.loaded=!1})}const[Q,Y]=ue(()=>typeof window<"u"&&window.localStorage?localStorage.getItem(Z)!=="false":!0);d(()=>i.routeStore.currentRouteLayer,()=>{if(!a.scene||b.prevLevel===i.routeStore.currentRouteLayer)return;const e=a.scene.rootLayer.children.filter(r=>i.layerStore.floors.some(t=>r.name.includes(t.name))),n=i.routeStore.currentRouteLayer.name;if(!e.find(r=>r.name===n))return;const m=e?.map(r=>(r.name===n&&(r.hidden=!1),r.name===b.prevLevel?.name&&(r.hidden=!0),r));b.prevLevel=i.routeStore.currentRouteLayer,a.update(...m)}),d(()=>o.centerMap,()=>{!o.centerMap||i.maplibreStore.showMaplibre||(l.controls.resetCamera({zoom:!!(o.list.type==="search"&&o.list.text)}),o.centerMap=!1)}),fe(()=>{if(!g.current)return;async function e(){const n=g.current;if(!n)return;G(),y.layersLoaded=!1;let m={};try{if(v){const t=document.createElement("canvas").getContext("webgl2"),c=t&&t.getExtension("EXT_disjoint_timer_query_webgl2"),s=(await import("stats-gl")).default,u=new s({trackGPU:c,horizontal:!0}),p=z.current;if(!p)throw new Error("memoryInfoPanel not found.");u.dom.style.position="relative",p.style.width=`${90*(c?3:2)}px`,p.style.height="48px",p.appendChild(u.dom),m={stats:u,memoryInfoPanel:p}}}catch(r){console.error(r)}l=a.create({canvas:n,ui:m}),S.current=l,me(()=>o.canvasVisibleRectPx,(r,t)=>{r&&(l.visibleRect=B(r)),t.dispose()},{fireImmediately:!0}),ke(a).then(({layers:r,cleanup:t})=>{if(F||S.current!==l){t();return}D=t,v&&console.log("Renderer settings",l);const c=se(h.backgroundColor==="none"?J:h.backgroundColor).string();P=ye(r,j,c),a.start(P),T.current.setTarget(o.dimmed,{immediate:!0}),A(l,i.fp.enableRotation?1:0),M!==void 0&&l.viewport.setMaxZoom(M),y.layersLoaded=!0,i.fp.onFpConfigured&&i.fp?.onFpConfigured(),I=Ce(a,i),_=Le(a),Ee(a)}),l.events.addEventListener("pointer:move",({data:r})=>{if(o.setKioskModeEnabled)return;const{point:t,defs:c}=$(r),f=q(t.x,t.y),s=N(c[0]);o.hoveredBooth=f||s}),l.events.addEventListener("pointer:out",()=>{o.setKioskModeEnabled||(o.hoveredBooth=null)}),l.events.addEventListener("pointer:click",({data:r})=>{if(!o?.rootElement)return;window.__resett&&window.__resett(),o.overlayPosition==="bottom"&&o.overlaySize==="full"&&i.showMap();const{point:t,defs:c}=$(r),{x:f,y:s}=t;if(o.onGetCoordsClick){const w=i.layerStore.layers.find(C=>C.visible&&(C.mode===R.TurnedOn||C.mode===R.TurnedOff));o.onGetCoordsClick({x:f,y:s,z:w?.name||null})}if(o.setKioskModeEnabled)return;if(o.onMarkerClick){const w=Be(f,s,a.scale);v&&console.log("marker",w),o.onMarkerClick(w)}const u=q(t.x,t.y),p=N(c[0]);v&&console.log("boothIdFromClientXy",u,"boothByShape",p,"pointer:click point",t),i.clickBooth(u||p)}),l.events.addEventListener("navigation:change",()=>window.__resett&&window.__resett())}return e(),i.fp.getCenterCoordinates=oe,()=>ee()},[]);function ee(){F=!0,T.current.stop(),I?.(),_?.(),D?.(),G(),y.layersLoaded=!1,a.disposeIfCurrent(S.current),S.current=null}function oe(){const e=g.current;if(!e)throw new Error("Canvas not ready");const n=ve(l.viewport.canvasToSvg({x:e.clientWidth/2,y:e.clientHeight/2})),r=i.layerStore.visible.find(t=>t.mode===R.TurnedOff||t.mode===R.TurnedOn)?.name||null;return{...n,z:r}}function N(e){return!e||!e.shape?null:ge.booths.find(n=>n.shapes?.find(m=>m.shape==e.shape))??null}d(()=>o.zoomBy,()=>{if(!o.zoomBy||i.maplibreStore.showMaplibre)return;const e=o.zoomBy;l.controls.zoomBy(e),o.zoomBy=null}),d(()=>o.dimmed,e=>{T.current.setTarget(e)}),d(()=>o.details,()=>{if(!o.onDetails)return;if(!o.details){o.onDetails(null);return}let e=o.details;if(h.EXPO==="wineparis"&&(e instanceof V&&(e=e.booths[0]),!e))return;let n=null,m=[];e instanceof V?(n="exhibitor",m=e.booths.map(t=>t.name).sort((t,c)=>t==i.routeStore.tempToBooth?.name?-1:c==i.routeStore.tempToBooth?.name?1:0)):e instanceof K?(n="booth",m=[e.name]):e instanceof Se?(n="route",m=[e.from?.name,e.to?.name].filter(t=>!!t)):e instanceof be&&(n="category",m=e.exhibitors.map(t=>t.booths.map(c=>c.name)).flat());const r={type:n,name:e?.name,id:e?.id,externalId:e?.externalId,boothsNames:m};o.onDetails({...r,...n==="route"?{routeInfo:i.routeStore.routeInfo??void 0}:{}})}),d(()=>o.canvasVisibleRectPx,e=>{a.renderer&&(a.renderer.visibleRect=B(e))},{fireImmediately:!0}),d(()=>o.moveToRect,()=>{!o.moveToRect||i.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&&X(o.moveToRect),o.moveToRect=null)}),d(()=>o.rollReset,e=>{e&&(l.controls.resetCamera({roll:!0}),o.rollReset=!1)}),d(()=>o.moveToBooths,()=>{if(E.log("this.moveToBooths",o.moveToBooths),!o.moveToBooths||i.maplibreStore.showMaplibre)return;E.log("watched moveToBooths",o.moveToBooths);const e=o.moveToBooths.filter(n=>n.rect).map(n=>n.rect);e.length!==0&&(X(L.fromUnion(...e)),o.moveToBooths=null)}),d(()=>o.mapSettings,({zoomtime:e,center:n,centerxy:m,bearing:r,roll:t,z:c})=>{if(!(i.maplibreStore.showMaplibre||!a.renderer))try{e&&e!==o.defaultMapSettings.zoomtime&&a.renderer.controls.configure({zoomTime:e/1e3}),i.fp.enableRotation&&A(l,t??0);let f;if(n){const s=W(n),u=he?.properties.config;if(!u)throw new Error("Map center given in GPS, but the plan has no GPS config");s&&(f=Te({lat:s[0],lng:s[1]},u)??void 0)}else if(m){const s=W(m);s&&(f={x:s[0],y:s[1]})}c&&i.fp.activateFloor({name:c}),f&&a.renderer.controls.panTo(f.x,f.y),typeof r=="number"&&Number.isFinite(r)&&a.renderer.controls.rollTo(r)}catch(f){E.error("Error in mapSettings reaction",f)}}),Me({enabled:y.layersLoaded&&o.buildRoute,rendererService:a});const O="routes-api.expofp.com",te=pe.busRoutes??!1;Pe({permission:y.layersLoaded&&te,rendererService:a,dataJsonUrl:`https://${O}/v1/routes?expo=${h.EXPO}`,websocketUrl:`wss://${O}/locations?expo=${h.EXPO}`}),d(()=>i.layerStore.visible,e=>{if(!a.scene)return;const n=e.filter(t=>H(t.name)),r=a.scene.rootLayer.children.filter(t=>H(t.name));r.forEach(t=>{t.hidden=!n.find(c=>c.name===t.name)}),a.update(...r)});function X(e){let n=e;const m=re(e,j),r=o.selectedRoute?.from,t=r instanceof K?r.layer?.name:r?.layer;o.kioskData&&(!we()||t===i.routeStore.currentRouteLayer?.name)&&(n=L.fromUnion(e,new L(o.kioskData.x,o.kioskData.y,1,1)));const c=B(n),f={paddingPercent:m,maxZoom:ze?void 0:10},s=l.visibleRect;if(o.shouldShiftMapRect&&s){s.min={...s.min,x:s.min.x+o.overlayWidthPx},l.visibleRect=s;try{l.controls.zoomTo(c,f)}finally{s.min={...s.min,x:s.min.x-o.overlayWidthPx}}}else l.controls.zoomTo(c,f)}function re(e,n){return!e||!n?0:(e.area/n.area>.1?15:25)/100}return ce(()=>U(ne,{children:[k("canvas",{style:{width:"100%",height:"100%"},ref:g,className:ae({map:!0,moving:b.moving,hidden:i.maplibreStore.showMaplibre}),children:"ExpoFP.com"}),v&&Q&&U(ie,{className:"debug-fps",children:[k("div",{ref:z}),k("button",{onClick:()=>{typeof window<"u"&&window.localStorage&&localStorage.setItem(Z,"false"),Y(!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 ne,jsx as k,jsxs as U}from"react/jsx-runtime";import{Box as L}from"@expofp/geometry";import{Draggable as ie}from"@expofp/ui";import ae from"classnames";import se from"color";import{observable as le,reaction as me}from"mobx";import{useObserver as ce}from"mobx-react-lite";import{useEffect as fe,useMemo as de,useRef as x,useState as ue}from"react";import{DEBUG_STORAGE_KEY as Z}from"../../constants";import pe from"../../data";import{fpGeo as he}from"../../data/fpGeo";import{svgArea as j}from"../../data/svg";import{boxToRenderer as B,createSceneDef as ve,mapRollSetting as A}from"../../renderer";import{pickDefaultScene as $,pickDefaultScenePoint as ye}from"../../renderer/engine-core/defs";import i,{boothStore as ge,layersStore as v,uiState as o}from"../../store";import{BoothBase as K}from"../../store/BoothStore";import{Category as be}from"../../store/CategoryStore";import{Exhibitor as V}from"../../store/ExhibitorStore";import{LayerMode as R}from"../../store/LayerStore";import{Route as Se}from"../../store/RouteStore";import E from"../../tools/logger";import h from"../../tools/settings";import{areLayersEnabled as we}from"../../utils/areLayersEnabled";import{parseNumberPair as W}from"../../utils/camera-map-settings";import{applyVenueDimValue as xe,createDimmingAnimator as Re}from"../../utils/dimming";import{convertGpsToLocal as Te}from"../../utils/gps";import y from"../../utils/is-debug";import{isPathwayLayer as H}from"../../utils/is-pathway-layer";import{useReaction as u}from"../../utils/mobx";import{createWayfinding as Ce}from"../../wayfinding";import q from"./booth-by-xy";import ke from"./drawing/config/config-all";import{configMarkers as Le,getMarkerFromClick as Be}from"./drawing/config/config-markers";import{loadLayersImages as Ee}from"./drawing/config/loadBoothsImages";import{useBuildRoute as Me}from"./traffic/useBuildRoute";import{useManageTraffic as Pe}from"./traffic/useManageTraffic";const M=Number.isFinite(h.maxZoom)?h.maxZoom:void 0,ze=M!==void 0;export default function Ie(){let P={};const J="#ebebeb",g=x(null),b=de(()=>le({moving:!1,prevLevel:i.layerStore.layers.find(e=>!e.frozen&&e.visible)}),[]),a=i.rendererService,T=x(Re(e=>xe(a,e)));let l;const S=x(null),z=x(null);let I=null,_=null,D=null,F=!1;function G(){v.layers.forEach(e=>{e.configured=!1,e.children=[],e.loaded=!1})}const[Q,Y]=ue(()=>typeof window<"u"&&window.localStorage?localStorage.getItem(Z)!=="false":!0);u(()=>i.routeStore.currentRouteLayer,()=>{if(!a.scene||b.prevLevel===i.routeStore.currentRouteLayer)return;const e=a.scene.rootLayer.children.filter(r=>i.layerStore.floors.some(t=>r.name.includes(t.name))),n=i.routeStore.currentRouteLayer.name;if(!e.find(r=>r.name===n))return;const s=e?.map(r=>(r.name===n&&(r.hidden=!1),r.name===b.prevLevel?.name&&(r.hidden=!0),r));b.prevLevel=i.routeStore.currentRouteLayer,a.update(...s)}),u(()=>o.centerMap,()=>{!o.centerMap||i.maplibreStore.showMaplibre||(l.controls.resetCamera({zoom:!!(o.list.type==="search"&&o.list.text)}),o.centerMap=!1)}),fe(()=>{if(!g.current)return;async function e(){const n=g.current;if(!n)return;G(),v.layersLoaded=!1;let s={};try{if(y){const t=document.createElement("canvas").getContext("webgl2"),m=t&&t.getExtension("EXT_disjoint_timer_query_webgl2"),f=(await import("stats-gl")).default,c=new f({trackGPU:m,horizontal:!0}),p=z.current;if(!p)throw new Error("memoryInfoPanel not found.");c.dom.style.position="relative",p.style.width=`${90*(m?3:2)}px`,p.style.height="48px",p.appendChild(c.dom),s={stats:c,memoryInfoPanel:p}}}catch(r){console.error(r)}l=a.create({canvas:n,ui:s}),S.current=l,me(()=>o.canvasVisibleRectPx,(r,t)=>{r&&(l.visibleRect=B(r)),t.dispose()},{fireImmediately:!0}),ke(a).then(({layers:r,cleanup:t})=>{if(F||S.current!==l){t();return}D=t,y&&console.log("Renderer settings",l);const m=se(h.backgroundColor==="none"?J:h.backgroundColor).string();P=ve(r,j,m),a.start(P),T.current.setTarget(o.dimmed,{immediate:!0}),A(l,i.fp.enableRotation?1:0),M!==void 0&&l.viewport.setMaxZoom(M),v.layersLoaded=!0,i.fp.onFpConfigured&&i.fp?.onFpConfigured(),I=Ce(a,i),_=Le(a),Ee(a)}),l.events.addEventListener("pointer:move",({data:r})=>{if(o.setKioskModeEnabled)return;const{point:t,defs:m}=$(r),d=q(t.x,t.y),f=N(m[0]);o.hoveredBooth=d||f}),l.events.addEventListener("pointer:out",()=>{o.setKioskModeEnabled||(o.hoveredBooth=null)}),l.events.addEventListener("pointer:click",({data:r})=>{if(!o?.rootElement)return;window.__resett&&window.__resett(),o.overlayPosition==="bottom"&&o.overlaySize==="full"&&i.showMap();const{point:t,defs:m}=$(r),{x:d,y:f}=t;if(o.onGetCoordsClick){const w=i.layerStore.layers.find(C=>C.visible&&(C.mode===R.TurnedOn||C.mode===R.TurnedOff));o.onGetCoordsClick({x:d,y:f,z:w?.name||null})}if(o.setKioskModeEnabled)return;if(o.onMarkerClick){const w=Be(d,f,a.scale);y&&console.log("marker",w),o.onMarkerClick(w)}const c=q(t.x,t.y),p=N(m[0]);y&&console.log("boothIdFromClientXy",c,"boothByShape",p,"pointer:click point",t),i.clickBooth(c||p)}),l.events.addEventListener("navigation:change",()=>window.__resett&&window.__resett())}return e(),i.fp.getCenterCoordinates=oe,()=>ee()},[]);function ee(){F=!0,T.current.stop(),I?.(),_?.(),D?.(),G(),v.layersLoaded=!1,a.disposeIfCurrent(S.current),S.current=null}function oe(){const e=g.current;if(!e)throw new Error("Canvas not ready");const n=ye(l.viewport.canvasToSvg({x:e.clientWidth/2,y:e.clientHeight/2})),r=i.layerStore.visible.find(t=>t.mode===R.TurnedOff||t.mode===R.TurnedOn)?.name||null;return{...n,z:r}}function N(e){return!e||!e.shape?null:ge.booths.find(n=>n.shapes?.find(s=>s.shape==e.shape))??null}u(()=>o.zoomBy,()=>{if(!o.zoomBy||i.maplibreStore.showMaplibre)return;const e=o.zoomBy;l.controls.zoomBy(e),o.zoomBy=null}),u(()=>o.dimmed,e=>{T.current.setTarget(e)}),u(()=>o.details,()=>{if(!o.onDetails)return;if(!o.details){o.onDetails(null);return}let e=o.details;if(h.EXPO==="wineparis"&&(e instanceof V&&(e=e.booths[0]),!e))return;let n=null,s=[];e instanceof V?(n="exhibitor",s=e.booths.map(t=>t.name).sort((t,m)=>t==i.routeStore.tempToBooth?.name?-1:m==i.routeStore.tempToBooth?.name?1:0)):e instanceof K?(n="booth",s=[e.name]):e instanceof Se?(n="route",s=[e.from?.name,e.to?.name].filter(t=>!!t)):e instanceof be&&(n="category",s=e.exhibitors.map(t=>t.booths.map(m=>m.name)).flat());const r={type:n,name:e?.name,id:e?.id,externalId:e?.externalId,boothsNames:s};o.onDetails({...r,...n==="route"?{routeInfo:i.routeStore.routeInfo??void 0}:{}})}),u(()=>o.canvasVisibleRectPx,e=>{a.renderer&&(a.renderer.visibleRect=B(e))},{fireImmediately:!0}),u(()=>o.moveToRect,()=>{!o.moveToRect||i.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&&X(o.moveToRect,o.moveToRectPaddingPercent),o.moveToRect=null,o.moveToRectPaddingPercent=null)}),u(()=>o.rollReset,e=>{e&&(l.controls.resetCamera({roll:!0}),o.rollReset=!1)}),u(()=>o.moveToBooths,()=>{if(E.log("this.moveToBooths",o.moveToBooths),!o.moveToBooths||i.maplibreStore.showMaplibre)return;E.log("watched moveToBooths",o.moveToBooths);const e=o.moveToBooths.filter(n=>n.rect).map(n=>n.rect);e.length!==0&&(X(L.fromUnion(...e)),o.moveToBooths=null)}),u(()=>o.mapSettings,({zoomtime:e,center:n,centerxy:s,bearing:r,roll:t,z:m})=>{if(!(i.maplibreStore.showMaplibre||!a.renderer))try{e&&e!==o.defaultMapSettings.zoomtime&&a.renderer.controls.configure({zoomTime:e/1e3}),i.fp.enableRotation&&A(l,t??0);let d;if(n){const f=W(n),c=he?.properties.config;if(!c)throw new Error("Map center given in GPS, but the plan has no GPS config");f&&(d=Te({lat:f[0],lng:f[1]},c)??void 0)}else if(s){const f=W(s);f&&(d={x:f[0],y:f[1]})}m&&i.fp.activateFloor({name:m}),d&&a.renderer.controls.panTo(d.x,d.y),typeof r=="number"&&Number.isFinite(r)&&a.renderer.controls.rollTo(r)}catch(d){E.error("Error in mapSettings reaction",d)}}),Me({enabled:v.layersLoaded&&o.buildRoute,rendererService:a});const O="routes-api.expofp.com",te=pe.busRoutes??!1;Pe({permission:v.layersLoaded&&te,rendererService:a,dataJsonUrl:`https://${O}/v1/routes?expo=${h.EXPO}`,websocketUrl:`wss://${O}/locations?expo=${h.EXPO}`}),u(()=>i.layerStore.visible,e=>{if(!a.scene)return;const n=e.filter(t=>H(t.name)),r=a.scene.rootLayer.children.filter(t=>H(t.name));r.forEach(t=>{t.hidden=!n.find(m=>m.name===t.name)}),a.update(...r)});function X(e,n){let s=e;const r=n??re(e,j),t=o.selectedRoute?.from,m=t instanceof K?t.layer?.name:t?.layer;o.kioskData&&(!we()||m===i.routeStore.currentRouteLayer?.name)&&(s=L.fromUnion(e,new L(o.kioskData.x,o.kioskData.y,1,1)));const d=B(s),f={paddingPercent:r,maxZoom:ze?void 0:10},c=l.visibleRect;if(o.shouldShiftMapRect&&c){c.min={...c.min,x:c.min.x+o.overlayWidthPx},l.visibleRect=c;try{l.controls.zoomTo(d,f)}finally{c.min={...c.min,x:c.min.x-o.overlayWidthPx}}}else l.controls.zoomTo(d,f)}function re(e,n){return!e||!n?0:(e.area/n.area>.1?15:25)/100}return ce(()=>U(ne,{children:[k("canvas",{style:{width:"100%",height:"100%"},ref:g,className:ae({map:!0,moving:b.moving,hidden:i.maplibreStore.showMaplibre}),children:"ExpoFP.com"}),y&&Q&&U(ie,{className:"debug-fps",children:[k("div",{ref:z}),k("button",{onClick:()=>{typeof window<"u"&&window.localStorage&&localStorage.setItem(Z,"false"),Y(!1)},style:{padding:"4px 8px",fontSize:"11px",cursor:"pointer",backgroundColor:"#333",color:"#fff",border:"1px solid #555",width:"100%"},children:"Hide debug"})]})]}))}
@@ -1 +1 @@
1
- import{jsx as H}from"react/jsx-runtime";import{degToRad as F}from"@expofp/geometry";import Q from"color";import{runInAction as Y}from"mobx";import{observer as q}from"mobx-react-lite";import{useCallback as $,useEffect as B,useMemo as p,useRef as m,useState as j}from"react";import ee from"../../data";import{getLayerSvg as re,svgArea as E,svgAreaExplicit as te}from"../../data/svg";import{createSceneDef as oe}from"../../renderer";import a,{uiState as L}from"../../store";import A from"../../tools/settings";import{resolveVenueFitRect as ne}from"../../utils/scene-bounds";import ae from"../Map/drawing/config/config-all";import{loadLayersImages as ie}from"../Map/drawing/config/loadBoothsImages";import{useBuildRoute as ce}from"../Map/traffic/useBuildRoute";import{useManageTraffic as le}from"../Map/traffic/useManageTraffic";import se from"./MaplibreWrapper";import{useCameraReactions as ue}from"./useCameraReactions";import{useDimming as fe}from"./useDimming";import{useKioskIdleEvents as me}from"./useKioskIdleEvents";import{useLayerVisibilitySync as pe}from"./useLayerVisibilitySync";import{usePoiMarkers as de}from"./usePoiMarkers";import{useRendererEvents as ge}from"./useRendererEvents";import{useWayfindingAndMarkers as Re}from"./useWayfindingAndMarkers";import{deriveGeoConfig as be,getLocalRectGeoBounds as ye,getVisibleRectFitPadding as Se,INITIAL_FIT_ZOOM_ADJUSTMENT as Me}from"./utils/geo-config";import{applyMapOptions as w,DEFAULT_MAP_OPTIONS as he,getTileSource as Ae,MAP_2D_OPTIONS as Ce}from"./utils/map-helpers";import{calculateTransformMatrix as De}from"./utils/solver";const N="routes-api.expofp.com",ve=800;function Pe(e,l,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??l,pitch:t.pitch??n(),duration:ve,essential:!0})},resetPitch:()=>{const t=n();e.getPitch()!==t&&e.jumpTo({pitch:t})}}}function U(){a.poiMarkerStore.clear(),Y(()=>{a.layerStore.layers.forEach(e=>{e.configured=!1,e.children=[],e.loaded=!1}),a.layerStore.layersLoaded=!1})}function V(e,l){const n=[];for(const t of e.rollRegistry.invoke(l))Array.isArray(t)?n.push(...t):n.push(t);n.length&&e.update(...n)}function Te(e){const l=Math.abs(e[0]??0),n=Math.hypot(e[0]??0,e[1]??0);return l<=0||n<=0?1:l/n}const Ee=q(function({viewMode:l}){const[n,t]=j(null),[y,O]=j(null),o=a.rendererService,C=m(null),s=m(null),S=m(null),D=m(null),x=m(null),M=m(null),r=p(()=>be(),[]),_=p(()=>{const{rect:c}=ne({layerViewbox:a.layerStore.viewboxRectangle,explicitArea:te?E:null,layerRectangle:a.layerStore.rectangle,sceneDef:n,svgArea:E});return c},[n]),d=p(()=>r?{center:r.center,bearing:r.bearing,zoom:r.zoom,bounds:ye(_,r.gpsConfig),fitPadding:Se(0),zoomAdjustment:Me}:null,[r,_]),g=p(()=>r?De(r.gpsConfig,re()?.getAttribute("units")):null,[r]),R=p(()=>({...l==="map2d"?Ce:he}),[l]),v=m(R),G=p(()=>Ae(),[]),{mapDimAnimatorRef:k,venueDimAnimatorRef:I,applyDimmingTarget:z,handleMapDimLayerReady:X}=fe(s,o);B(()=>{if(!r)return;let c=!1;U();const i=ae(o).then(({layers:u,cleanup:f})=>{if(c){f();return}D.current=f;const h=Q(A.backgroundColor==="none"?"#ebebeb":A.backgroundColor).string(),T=oe(u,E,h);t(T)}).catch(u=>{c||console.warn("Maplibre scene configuration failed.",u)}),P=k.current,b=I.current;return()=>{c=!0,U();const u=C.current;i.finally(()=>o.disposeIfCurrent(u)),S.current?.(),S.current=null,D.current?.(),D.current=null,M.current&&(a.maplibreStore.clearCameraPortIfCurrent(M.current),M.current=null),C.current=null,s.current=null,x.current=null,O(null),P?.stop(),b?.stop(),L.sceneDefReady=!1}},[r,k,o,I]);const J=$((c,i,P,b)=>{C.current=c,s.current=i,x.current=b,O(c),o.attach(c,P,b,g?Te(g):1),w(i,v.current);const u=Pe(i,r?.bearing??i.getBearing(),()=>v.current.pitch??0);M.current=u,a.maplibreStore.setCameraPort(u),z({immediate:!0}),S.current?.();const f=()=>{const T=i.getBearing()-(r?.bearing??0);V(o,F(T))};i.on("rotate",f),i.on("rotateend",f),S.current=()=>{i.off("rotate",f),i.off("rotateend",f)},ie(o);const h=o.ptScaleRegistry.invoke(o.scale||1);h.length&&o.update(...h),V(o,F(i.getBearing()-(r?.bearing??0))),a.layerStore.layersLoaded=!0,a.fp.onFpConfigured&&a.fp.onFpConfigured(),L.sceneDefReady=!0,b()},[o,z,g,r]);B(()=>{v.current=R,w(s.current,R,!0)},[R]),ge(y,o),me(y,s),Re(y,o),de(y,s,r),pe(o,s,r),ue(s,r,n),ce({enabled:a.layerStore.layersLoaded&&L.buildRoute,rendererService:o});const K=ee.busRoutes??!1;le({permission:a.layerStore.layersLoaded&&K,rendererService:o,dataJsonUrl:`https://${N}/v1/routes?expo=${A.EXPO}`,websocketUrl:`wss://${N}/locations?expo=${A.EXPO}`});const W=$(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 Z=`${d.center.join(",")}:${d.bearing}:${d.zoom}`;return H(se,{sceneDef:n,geoConfig:d,staticTransform:g,tileSource:G,mapOptions:R,onRendererReady:J,onMapDimLayerReady:X,onMapLoadError:W},Z)});export default Ee;
1
+ import{jsx as Q}from"react/jsx-runtime";import{degToRad as w}from"@expofp/geometry";import Y from"color";import{runInAction as q}from"mobx";import{observer as ee}from"mobx-react-lite";import{useCallback as $,useEffect as B,useMemo as d,useRef as g,useState as j}from"react";import re from"../../data";import{getLayerSvg as te,svgArea as P,svgAreaExplicit as oe}from"../../data/svg";import{createSceneDef as ne}from"../../renderer";import c,{uiState as s}from"../../store";import v from"../../tools/settings";import{fitRectIsFraming as ie,getVenueFitMarginPercent as ae,resolveVenueFitRect as ce}from"../../utils/scene-bounds";import se from"../Map/drawing/config/config-all";import{loadLayersImages as le}from"../Map/drawing/config/loadBoothsImages";import{useBuildRoute as ue}from"../Map/traffic/useBuildRoute";import{useManageTraffic as fe}from"../Map/traffic/useManageTraffic";import me from"./MaplibreWrapper";import{useCameraReactions as pe}from"./useCameraReactions";import{useDimming as ge}from"./useDimming";import{useKioskIdleEvents as de}from"./useKioskIdleEvents";import{useLayerVisibilitySync as be}from"./useLayerVisibilitySync";import{usePoiMarkers as Re}from"./usePoiMarkers";import{useRendererEvents as Se}from"./useRendererEvents";import{useWayfindingAndMarkers as he}from"./useWayfindingAndMarkers";import{cameraForLocalRect as ye,deriveGeoConfig as Ce,getLocalRectGeoBounds as Me,getVisibleRectFitPadding as Ae,INITIAL_FIT_ZOOM_ADJUSTMENT as De}from"./utils/geo-config";import{applyMapOptions as N,DEFAULT_MAP_OPTIONS as Pe,getTileSource as ve,MAP_2D_OPTIONS as Te}from"./utils/map-helpers";import{calculateTransformMatrix as ze}from"./utils/solver";const U="routes-api.expofp.com",Le=800;function Ee(r,l,i){return{getCameraState:()=>{const o=r.getCenter();return{lng:o.lng,lat:o.lat,zoom:r.getZoom(),bearing:r.getBearing(),pitch:r.getPitch()}},applyCameraState:o=>{r.easeTo({center:[o.lng,o.lat],zoom:o.zoom,bearing:o.bearing??l,pitch:o.pitch??i(),duration:Le,essential:!0})},resetPitch:()=>{const o=i();r.getPitch()!==o&&r.jumpTo({pitch:o})}}}function V(){c.poiMarkerStore.clear(),q(()=>{c.layerStore.layers.forEach(r=>{r.configured=!1,r.children=[],r.loaded=!1}),c.layerStore.layersLoaded=!1})}function G(r,l){const i=[];for(const o of r.rollRegistry.invoke(l))Array.isArray(o)?i.push(...o):i.push(o);i.length&&r.update(...i)}function Oe(r){const l=Math.abs(r[0]??0),i=Math.hypot(r[0]??0,r[1]??0);return l<=0||i<=0?1:l/i}const xe=ee(function({viewMode:l}){const[i,o]=j(null),[y,x]=j(null),n=c.rendererService,T=g(null),u=g(null),C=g(null),z=g(null),I=g(null),M=g(null),e=d(()=>Ce(),[]),L=d(()=>ce({layerViewbox:c.layerStore.viewboxRectangle,explicitArea:oe?P:null,layerRectangle:c.layerStore.rectangle,sceneDef:i,svgArea:P}),[i]),A=L.rect,b=d(()=>{if(!e)return null;const a=ie(L.source)?0:ae(A,P),t=Ae(0);a&&s.screenSize&&(t.left+=s.screenSize.width*a,t.right+=s.screenSize.width*a,t.top+=s.screenSize.height*a,t.bottom+=s.screenSize.height*a);const m=s.screenSize?ye(A,e.gpsConfig,e.bearing,{width:s.screenSize.width,height:s.screenSize.height},t):null;return m?{center:m.center,bearing:e.bearing,zoom:m.zoom}:{center:e.center,bearing:e.bearing,zoom:e.zoom,bounds:Me(A,e.gpsConfig),fitPadding:t,zoomAdjustment:De}},[e,L,A]),R=d(()=>e?ze(e.gpsConfig,te()?.getAttribute("units")):null,[e]),S=d(()=>({...l==="map2d"?Te:Pe}),[l]),E=g(S),X=d(()=>ve(),[]),{mapDimAnimatorRef:_,venueDimAnimatorRef:k,applyDimmingTarget:F,handleMapDimLayerReady:J}=ge(u,n);B(()=>{if(!e)return;let a=!1;V();const t=se(n).then(({layers:f,cleanup:p})=>{if(a){p();return}z.current=p;const D=Y(v.backgroundColor==="none"?"#ebebeb":v.backgroundColor).string(),O=ne(f,P,D);o(O)}).catch(f=>{a||console.warn("Maplibre scene configuration failed.",f)}),m=_.current,h=k.current;return()=>{a=!0,V();const f=T.current;t.finally(()=>n.disposeIfCurrent(f)),C.current?.(),C.current=null,z.current?.(),z.current=null,M.current&&(c.maplibreStore.clearCameraPortIfCurrent(M.current),M.current=null),T.current=null,u.current=null,I.current=null,x(null),m?.stop(),h?.stop(),s.sceneDefReady=!1}},[e,_,n,k]);const K=$((a,t,m,h)=>{T.current=a,u.current=t,I.current=h,x(a),n.attach(a,m,h,R?Oe(R):1),N(t,E.current);const f=Ee(t,e?.bearing??t.getBearing(),()=>E.current.pitch??0);M.current=f,c.maplibreStore.setCameraPort(f),F({immediate:!0}),C.current?.();const p=()=>{const O=t.getBearing()-(e?.bearing??0);G(n,w(O))};t.on("rotate",p),t.on("rotateend",p),C.current=()=>{t.off("rotate",p),t.off("rotateend",p)},le(n);const D=n.ptScaleRegistry.invoke(n.scale||1);D.length&&n.update(...D),G(n,w(t.getBearing()-(e?.bearing??0))),c.layerStore.layersLoaded=!0,c.fp.onFpConfigured&&c.fp.onFpConfigured(),s.sceneDefReady=!0,h()},[n,F,R,e]);B(()=>{E.current=S,N(u.current,S,!0)},[S]),Se(y,n),de(y,u),he(y,n),Re(y,u,e),be(n,u,e),pe(u,e,i),ue({enabled:c.layerStore.layersLoaded&&s.buildRoute,rendererService:n});const W=re.busRoutes??!1;fe({permission:c.layerStore.layersLoaded&&W,rendererService:n,dataJsonUrl:`https://${U}/v1/routes?expo=${v.EXPO}`,websocketUrl:`wss://${U}/locations?expo=${v.EXPO}`});const Z=$(a=>{console.warn("Maplibre map failed to load; falling back to floorplan mode.",a),c.maplibreStore.deactivateMaplibre()},[]);if(!e||!b||!R||!i)return null;const H=`${b.center.join(",")}:${b.bearing}:${b.zoom}`;return Q(me,{sceneDef:i,geoConfig:b,staticTransform:R,tileSource:X,mapOptions:S,onRendererReady:K,onMapDimLayerReady:J,onMapLoadError:Z},H)});export default xe;
@@ -1 +1 @@
1
- import{Box as b}from"@expofp/geometry";import{svgArea as f,svgAreaExplicit as T}from"../../data/svg";import m,{uiState as a}from"../../store";import{convertLocalToGps as h}from"../../utils/gps";import{useReaction as u}from"../../utils/mobx";import{expandRectByPercent as v,getVenueFitMarginPercent as x,resolveVenueFitRect as M}from"../../utils/scene-bounds";import{fitMapToLocalRect as d,getVisibleRectFitPadding as O,isLngLatInVisibleViewport as S}from"./utils/geo-config";const s=a,L=15,P=24;function B(e){return v(e,x(e,f))}function I(e,r){return Math.min(Math.max(r,e.getMinZoom()),e.getMaxZoom())}function R(e,r,l){if(l.length!==1)return!1;const o=l[0]?.id,t=m.poiMarkerStore.markers.find(c=>c.boothId===o);if(!t)return!1;const n=h(t.center.x,t.center.y,r.gpsConfig),i=O(P);return S(e,n,i)||e.easeTo({center:n,zoom:I(e,L),bearing:r.bearing,duration:500,essential:!0}),!0}export function useCameraReactions(e,r,l){u(()=>s.moveToBooths,o=>{const t=e.current;if(!o||!t||!r)return;const n=o.filter(c=>c.rect);if(n.length===0)return;if(R(t,r,n)){s.moveToBooths=null;return}const i=b.fromUnion(...n.map(c=>c.rect));d(t,B(i),r),s.moveToBooths=null}),u(()=>s.moveToRect,o=>{const t=e.current;!o||!t||!r||(d(t,o,r),s.moveToRect=null)}),u(()=>s.zoomBy,o=>{const t=e.current;!o||!t||(t.flyTo({zoom:t.getZoom()+(o>1?.5:-.5),animate:!0,duration:500}),s.zoomBy=null)}),u(()=>a.moveToLocation,o=>{const t=e.current,n=m.routeStore.currentPosition;if(!o||!t||!n)return;const{lng:i,lat:c}=n,y=typeof i=="number"&&Number.isFinite(i)&&typeof c=="number"&&Number.isFinite(c);let p;if(y)p=[i,c];else{if(!r)return;p=h(n.x,n.y,r.gpsConfig)}t.flyTo({center:p,animate:!0,duration:1e3}),t.once("moveend",()=>{a.moveToLocation=!1})}),u(()=>a.centerMap,o=>{const t=e.current;if(!o||!t||!r)return;if(!(a.list.type==="search"&&!a.list.text)){const{rect:i}=M({layerViewbox:m.layerStore.viewboxRectangle,explicitArea:T?f:null,layerRectangle:m.layerStore.rectangle,sceneDef:l,svgArea:f});d(t,i,r)}a.centerMap=!1})}
1
+ import{Box as T}from"@expofp/geometry";import{svgArea as f,svgAreaExplicit as v}from"../../data/svg";import m,{uiState as s}from"../../store";import{convertLocalToGps as h}from"../../utils/gps";import{useReaction as u}from"../../utils/mobx";import{expandRectByPercent as P,getVenueFitMarginPercent as b,resolveVenueFitRect as x}from"../../utils/scene-bounds";import{fitMapToLocalRect as d,getVisibleRectFitPadding as M,isLngLatInVisibleViewport as O}from"./utils/geo-config";const a=s,g=15,R=24;function S(e){return P(e,b(e,f))}function L(e,r){return Math.min(Math.max(r,e.getMinZoom()),e.getMaxZoom())}function B(e,r,l){if(l.length!==1)return!1;const n=l[0]?.id,t=m.poiMarkerStore.markers.find(c=>c.boothId===n);if(!t)return!1;const o=h(t.center.x,t.center.y,r.gpsConfig),i=M(R);return O(e,o,i)||e.easeTo({center:o,zoom:L(e,g),bearing:r.bearing,duration:500,essential:!0}),!0}export function useCameraReactions(e,r,l){u(()=>a.moveToBooths,n=>{const t=e.current;if(!n||!t||!r)return;const o=n.filter(c=>c.rect);if(o.length===0)return;if(B(t,r,o)){a.moveToBooths=null;return}const i=T.fromUnion(...o.map(c=>c.rect));d(t,S(i),r),a.moveToBooths=null}),u(()=>a.moveToRect,n=>{const t=e.current;!n||!t||!r||(d(t,n,r,{paddingPercent:a.moveToRectPaddingPercent}),a.moveToRect=null,a.moveToRectPaddingPercent=null)}),u(()=>a.zoomBy,n=>{const t=e.current;!n||!t||(t.flyTo({zoom:t.getZoom()+(n>1?.5:-.5),animate:!0,duration:500}),a.zoomBy=null)}),u(()=>s.moveToLocation,n=>{const t=e.current,o=m.routeStore.currentPosition;if(!n||!t||!o)return;const{lng:i,lat:c}=o,y=typeof i=="number"&&Number.isFinite(i)&&typeof c=="number"&&Number.isFinite(c);let p;if(y)p=[i,c];else{if(!r)return;p=h(o.x,o.y,r.gpsConfig)}t.flyTo({center:p,animate:!0,duration:1e3}),t.once("moveend",()=>{s.moveToLocation=!1})}),u(()=>s.centerMap,n=>{const t=e.current;if(!n||!t||!r)return;if(!(s.list.type==="search"&&!s.list.text)){const{rect:i}=x({layerViewbox:m.layerStore.viewboxRectangle,explicitArea:v?f:null,layerRectangle:m.layerStore.rectangle,sceneDef:l,svgArea:f});d(t,i,r)}s.centerMap=!1})}
@@ -13,13 +13,45 @@ export interface CameraPaddingOptions {
13
13
  }
14
14
  export interface FitMapOptions {
15
15
  duration?: number;
16
+ /** Breathing room around the rect, in CSS pixels per side. */
16
17
  padding?: number;
18
+ /**
19
+ * Breathing room as a fraction of the canvas per side, overriding `padding`
20
+ * when set — the form Fit-to-screen speaks, so the legacy renderer and the map
21
+ * pad a venue fit by the same proportion rather than by the same pixel count.
22
+ */
23
+ paddingPercent?: number | null;
17
24
  }
18
25
  export declare const MAP_BOUNDS_PADDING_FACTOR = 3;
19
26
  export declare const MAP_BOUNDS_MIN_PADDING_DEGREES = 0.02;
20
27
  export declare const INITIAL_FIT_ZOOM_ADJUSTMENT = 0.15;
21
28
  export declare function deriveVenueMapBounds(config: TransformGeoConfig): LngLatBoundsLike | undefined;
22
29
  export declare function getLocalRectGeoBounds(rect: Box, config: TransformGeoConfig): LngLatBoundsLike;
30
+ /** Viewport a camera has to frame a rect inside, in CSS pixels. */
31
+ export interface ViewportPx {
32
+ width: number;
33
+ height: number;
34
+ }
35
+ /**
36
+ * The camera that frames a plan-local rect exactly, with the map rotated to the
37
+ * plan's bearing.
38
+ *
39
+ * Deliberately *not* `map.cameraForBounds`. A `LngLatBounds` is north-aligned,
40
+ * so a rect on a rotated plan can only reach MapLibre as its geographic AABB —
41
+ * and `cameraForBounds` then fits the AABB's north-west→south-east *diagonal*
42
+ * re-rotated into the bearing-aligned frame, a box with no relation to the rect
43
+ * once the bearing is not a multiple of 90°. At a -48.8° bearing a 1159x814
44
+ * plan rect reaches the fit as roughly 45x597, so the vertical constraint wins
45
+ * and the camera lands ~1.27 zoom levels (2.4x) too far out. Rotating the
46
+ * rect's own four corners before measuring is the whole fix.
47
+ *
48
+ * Returns null when the rect, the projection or the viewport can't produce a
49
+ * camera; callers keep their current framing in that case.
50
+ */
51
+ export declare function cameraForLocalRect(rect: Box, config: TransformGeoConfig, bearing: number, viewport: ViewportPx, padding: CameraPaddingOptions): {
52
+ center: [number, number];
53
+ zoom: number;
54
+ } | null;
23
55
  export declare function getVisibleRectFitPadding(extraPadding?: number): CameraPaddingOptions;
24
56
  /** Whether a lng/lat projects inside the visible viewport, inset by `padding`. */
25
57
  export declare function isLngLatInVisibleViewport(map: MaplibreMap, lngLat: [number, number], padding: CameraPaddingOptions): boolean;
@@ -1 +1 @@
1
- import{LngLatBounds as R}from"maplibre-gl";import{fpGeo as T}from"../../../data/fpGeo";import{svgArea as c}from"../../../data/svg";import{uiState as d}from"../../../store";import{convertLocalToGps as f}from"../../../utils/gps";import{planBearing as v}from"../../../utils/planBearing";export const MAP_BOUNDS_PADDING_FACTOR=3,MAP_BOUNDS_MIN_PADDING_DEGREES=.02,INITIAL_FIT_ZOOM_ADJUSTMENT=.15;const p=1.42,M=.35,z=.9,D=.85,E=8,A=.05;export function deriveVenueMapBounds(t){const n=[[c.min.x,c.min.y],[c.max.x,c.min.y],[c.max.x,c.max.y],[c.min.x,c.max.y]].map(([a,m])=>f(a,m,t));if(!n.every(([a,m])=>Number.isFinite(a)&&Number.isFinite(m)))return;const e=n.map(([a])=>a),o=n.map(([,a])=>a),i=Math.min(...e),r=Math.max(...e),s=Math.min(...o),u=Math.max(...o),x=Math.max((r-i)*MAP_BOUNDS_PADDING_FACTOR,MAP_BOUNDS_MIN_PADDING_DEGREES),h=Math.max((u-s)*MAP_BOUNDS_PADDING_FACTOR,MAP_BOUNDS_MIN_PADDING_DEGREES);return[[i-x,s-h],[r+x,u+h]]}function _(t,n,e,o){const i=Math.min(t.getZoom(),n),r=(e-i)*Math.min(1,o/p);return i+r>=t.getMinZoom()-A}function I(t,n,e){if(_(t,n,e,p))return p;if(!_(t,n,e,M))return null;let o=M,i=p;for(let r=0;r<E;r++){const s=(o+i)/2;_(t,n,e,s)?o=s:i=s}return o}export function getLocalRectGeoBounds(t,n){const e=[f(t.min.x,t.min.y,n),f(t.max.x,t.min.y,n),f(t.max.x,t.max.y,n),f(t.min.x,t.max.y,n)],o=e.map(([r])=>r),i=e.map(([,r])=>r);return[[Math.min(...o),Math.min(...i)],[Math.max(...o),Math.max(...i)]]}export function getVisibleRectFitPadding(t=0){const n=d.canvasVisibleRectPx,e=d.screenSize;return!n||!e?{top:t,bottom:t,left:t,right:t}:{top:Math.max(0,n.min.y)+t,bottom:Math.max(0,e.height-n.max.y)+t,left:Math.max(0,n.min.x)+t,right:Math.max(0,e.width-n.max.x)+t}}export function isLngLatInVisibleViewport(t,n,e){const o=t.project(n),i=t.getCanvas();return o.x>=e.left&&o.x<=i.clientWidth-e.right&&o.y>=e.top&&o.y<=i.clientHeight-e.bottom}export function deriveGeoConfig(){if(!T?.properties?.config)return null;const t=T.properties.config,n=(t.p0.lng+t.p2.lng)/2,e=(t.p0.lat+t.p2.lat)/2,o=v(t.p0,t.p2),i=Number.isFinite(o)?o:t.bearing??0;return{center:[n,e],bearing:i,zoom:16,gpsConfig:t}}export function fitMapToLocalRect(t,n,e,o={}){if(!t||!n||!e||n.size.height===1/0||n.size.width===1/0||n.size.height<=0||n.size.width<=0)return;const i=getLocalRectGeoBounds(n,e.gpsConfig),r=getVisibleRectFitPadding(o.padding??50),s=t.cameraForBounds(i,{padding:r,bearing:e.bearing});if(!s?.center||typeof s.zoom!="number"){t.fitBounds(i,{padding:r,bearing:e.bearing,essential:!0});return}const u=t.project(t.getCenter()),x=t.project(s.center),h=Math.max(t.getCanvas().clientWidth,t.getCanvas().clientHeight,1),a=Math.hypot(x.x-u.x,x.y-u.y)/h,m=Math.abs(t.getZoom()-s.zoom),y=o.duration??Math.min(2800,500+a*450+m*150),l={center:s.center,zoom:s.zoom,bearing:e.bearing,duration:y,essential:!0};if(a<=1.2&&m<=1.5){t.easeTo(l);return}const L=t.getBounds().extend(R.convert(i)),g=t.cameraForBounds(L,{padding:r,bearing:e.bearing});if(!g?.center||typeof g.zoom!="number"||g.zoom>=t.getZoom()-.2){t.easeTo(l);return}const b=I(t,s.zoom,g.zoom);if(b!==null){const O=Math.max(M,b*z),F=Math.round(y*D);t.flyTo({...l,curve:O,duration:F});return}t.easeTo(l)}
1
+ import{LngLatBounds as D,MercatorCoordinate as E}from"maplibre-gl";import{fpGeo as I}from"../../../data/fpGeo";import{svgArea as x}from"../../../data/svg";import{uiState as z}from"../../../store";import{convertLocalToGps as u}from"../../../utils/gps";import{planBearing as N}from"../../../utils/planBearing";export const MAP_BOUNDS_PADDING_FACTOR=3,MAP_BOUNDS_MIN_PADDING_DEGREES=.02,INITIAL_FIT_ZOOM_ADJUSTMENT=.15;const T=1.42,F=.35,S=.9,A=.85,P=8,B=.05;export function deriveVenueMapBounds(t){const n=[[x.min.x,x.min.y],[x.max.x,x.min.y],[x.max.x,x.max.y],[x.min.x,x.max.y]].map(([c,l])=>u(c,l,t));if(!n.every(([c,l])=>Number.isFinite(c)&&Number.isFinite(l)))return;const e=n.map(([c])=>c),o=n.map(([,c])=>c),i=Math.min(...e),r=Math.max(...e),s=Math.min(...o),a=Math.max(...o),m=Math.max((r-i)*MAP_BOUNDS_PADDING_FACTOR,MAP_BOUNDS_MIN_PADDING_DEGREES),h=Math.max((a-s)*MAP_BOUNDS_PADDING_FACTOR,MAP_BOUNDS_MIN_PADDING_DEGREES);return[[i-m,s-h],[r+m,a+h]]}function O(t,n,e,o){const i=Math.min(t.getZoom(),n),r=(e-i)*Math.min(1,o/T);return i+r>=t.getMinZoom()-B}function w(t,n,e){if(O(t,n,e,T))return T;if(!O(t,n,e,F))return null;let o=F,i=T;for(let r=0;r<P;r++){const s=(o+i)/2;O(t,n,e,s)?o=s:i=s}return o}export function getLocalRectGeoBounds(t,n){const e=[u(t.min.x,t.min.y,n),u(t.max.x,t.min.y,n),u(t.max.x,t.max.y,n),u(t.min.x,t.max.y,n)],o=e.map(([r])=>r),i=e.map(([,r])=>r);return[[Math.min(...o),Math.min(...i)],[Math.max(...o),Math.max(...i)]]}const R=512;export function cameraForLocalRect(t,n,e,o,i){const r=[u(t.min.x,t.min.y,n),u(t.max.x,t.min.y,n),u(t.max.x,t.max.y,n),u(t.min.x,t.max.y,n)].map(([M,p])=>E.fromLngLat({lng:M,lat:p}));if(!r.every(({x:M,y:p})=>Number.isFinite(M)&&Number.isFinite(p)))return null;const s=-e*Math.PI/180,a=Math.cos(s),m=Math.sin(s),h=r.map(({x:M,y:p})=>M*a-p*m),c=r.map(({x:M,y:p})=>M*m+p*a),l=Math.max(...h)-Math.min(...h),y=Math.max(...c)-Math.min(...c);if(l<=0||y<=0)return null;const b=o.width-i.left-i.right,f=o.height-i.top-i.bottom;if(b<=0||f<=0)return null;const d=Math.min(b/(l*R),f/(y*R));if(!(d>0))return null;const g=R*d,L=(Math.min(...h)+Math.max(...h))/2-(i.left-i.right)/2/g,_=(Math.min(...c)+Math.max(...c))/2-(i.top-i.bottom)/2/g,{lng:v,lat:C}=new E(L*a+_*m,-L*m+_*a).toLngLat();return{center:[v,C],zoom:Math.log2(d)}}function U(t,n){return{top:t.top+n.top,bottom:t.bottom+n.bottom,left:t.left+n.left,right:t.right+n.right}}export function getVisibleRectFitPadding(t=0){const n=z.canvasVisibleRectPx,e=z.screenSize;return!n||!e?{top:t,bottom:t,left:t,right:t}:{top:Math.max(0,n.min.y)+t,bottom:Math.max(0,e.height-n.max.y)+t,left:Math.max(0,n.min.x)+t,right:Math.max(0,e.width-n.max.x)+t}}export function isLngLatInVisibleViewport(t,n,e){const o=t.project(n),i=t.getCanvas();return o.x>=e.left&&o.x<=i.clientWidth-e.right&&o.y>=e.top&&o.y<=i.clientHeight-e.bottom}export function deriveGeoConfig(){if(!I?.properties?.config)return null;const t=I.properties.config,n=(t.p0.lng+t.p2.lng)/2,e=(t.p0.lat+t.p2.lat)/2,o=N(t.p0,t.p2),i=Number.isFinite(o)?o:t.bearing??0;return{center:[n,e],bearing:i,zoom:16,gpsConfig:t}}export function fitMapToLocalRect(t,n,e,o={}){if(!t||!n||!e||n.size.height===1/0||n.size.width===1/0||n.size.height<=0||n.size.width<=0)return;const i=getLocalRectGeoBounds(n,e.gpsConfig),r=t.getCanvas(),s=o.paddingPercent==null?getVisibleRectFitPadding(o.padding??50):U(getVisibleRectFitPadding(0),{top:r.clientHeight*o.paddingPercent,bottom:r.clientHeight*o.paddingPercent,left:r.clientWidth*o.paddingPercent,right:r.clientWidth*o.paddingPercent}),a=cameraForLocalRect(n,e.gpsConfig,e.bearing,{width:r.clientWidth,height:r.clientHeight},s);if(!a){t.fitBounds(i,{padding:s,bearing:e.bearing,essential:!0});return}const m=t.project(t.getCenter()),h=t.project(a.center),c=Math.max(t.getCanvas().clientWidth,t.getCanvas().clientHeight,1),l=Math.hypot(h.x-m.x,h.y-m.y)/c,y=Math.abs(t.getZoom()-a.zoom),b=o.duration??Math.min(2800,500+l*450+y*150),f={center:a.center,zoom:a.zoom,bearing:e.bearing,duration:b,essential:!0};if(l<=1.2&&y<=1.5){t.easeTo(f);return}const d=t.getBounds().extend(D.convert(i)),g=t.cameraForBounds(d,{padding:s,bearing:e.bearing});if(!g?.center||typeof g.zoom!="number"||g.zoom>=t.getZoom()-.2){t.easeTo(f);return}const L=w(t,a.zoom,g.zoom);if(L!==null){const _=Math.max(F,L*S),v=Math.round(b*A);t.flyTo({...f,curve:_,duration:v});return}t.easeTo(f)}
@@ -1,9 +1,8 @@
1
1
  import { type Consent } from '@expofp/config';
2
- import React from 'react';
3
2
  interface OverlayContainerProps {
4
3
  isGDPR: boolean;
5
4
  consent: Consent;
6
5
  }
7
- declare const OverlayContainer: React.FunctionComponent<OverlayContainerProps>;
6
+ declare const OverlayContainer: import("react").FunctionComponent<OverlayContainerProps>;
8
7
  export default OverlayContainer;
9
8
  //# sourceMappingURL=OverlayContainer.d.ts.map
@@ -1 +1 @@
1
- import{jsx as o,jsxs as S}from"react/jsx-runtime";import h from"classnames";import{observer as g}from"mobx-react-lite";import{useCallback as l,useMemo as a}from"react";import k from"../data";import{uiState as e}from"../store";import z from"./Bookmarks";import C from"./Booth/Booth";import O from"./Category";import b from"./Event";import x from"./Exhibitor";import M from"./Filter";import R from"./Language";import P from"./Menu";import A from"./Overlay";import E from"./RoutePlanner/RoutePlanner";import j from"./Search";import F from"./Sessions";import w from"./Speaker";import B from"./Speakers";import I from"./TourPoints";import _ from"./Tours";import K from"./Visited";import L from"./Wayfinding";const T={full:"full",medium:"medium",small:"medium"},D=r=>T[r],N=()=>e.list.type==="search"||k.isRebooking&&e.list.type==="exhibitors",U=r=>r?7:e.details?3:N()?9:3,V=g(({isGDPR:r,consent:m})=>{const n=l(t=>{e.desiredOverlaySize=t},[]),c=l(t=>{e.setOverlayScrolled(t)},[]),f=D(e.overlaySize),d=e.selectedRoute?.from&&e.selectedRoute?.to,p=U(!!d),u=e.fullSizeOffset,v=a(()=>[e.list.type,e.details],[e.list.type,e.details]),y=a(()=>{const t={"-backdrop":e.canvasStarted&&e.shouldUseBackdrop&&!e.dimmed&&!e.galleryActive,"-no-transition":e.dimmed,"-gallery-active":e.galleryActive,collapsed:e.overlayCollapsed,kiosk:e.kiosk,start:e.overlayPosition==="left",bottom:e.overlayPosition!=="left",[e.overlaySize]:!0},i=h(t),s=e.overlayInterfaceClasses.join(" ");return s?`${i} ${s}`:i},[e.canvasStarted,e.shouldUseBackdrop,e.dimmed,e.galleryActive,e.overlayCollapsed,e.kiosk,e.inIdle,e.setKioskModeEnabled,e.overlayPosition,e.overlaySize,e.overlayInterfaceClasses]);return S(A,{open:e.isOverlayOpen,size:f,particles:e.isFeaturedExhibitorActive,className:y,mediumSizeMultiplier:p,fullSizeOffset:u,disableDrag:e.viewerMode&&e.menu,forceFull:e.viewerMode&&e.menu,scrollResetKey:v,onChangeSize:n,onScrollStateChange:c,children:[o(P,{isGDPR:r,consent:m}),o(j,{}),o(x,{}),o(C,{}),o(z,{}),o(K,{}),o(R,{}),o(O,{}),o(L,{}),o(M,{}),o(F,{showFilters:!0}),o(B,{showFilters:!0}),o(_,{}),o(I,{}),o(E,{}),o(b,{}),o(w,{})]})});export default V;
1
+ import{jsx as o,jsxs as v}from"react/jsx-runtime";import{Overlay as y}from"@expofp/ui";import S from"classnames";import{observer as h}from"mobx-react-lite";import{useCallback as l,useMemo as a}from"react";import{overlayStore as m,uiState as e}from"../store";import{t as k}from"../utils/i18n";import C from"./Bookmarks";import g from"./Booth/Booth";import z from"./Category";import b from"./Event";import O from"./Exhibitor";import x from"./Filter";import M from"./Language";import P from"./Menu";import A from"./OverlayParticles";import w from"./RoutePlanner/RoutePlanner";import E from"./Search";import _ from"./Sessions";import j from"./Speaker";import F from"./Speakers";import R from"./TourPoints";import B from"./Tours";import I from"./Visited";import K from"./Wayfinding";const L={full:"full",medium:"medium",small:"medium"},N=t=>L[t],T=h(({isGDPR:t,consent:n})=>{const c=l(r=>{e.desiredOverlaySize=r},[]),d=l(r=>{e.setOverlayScrolled(r)},[]),p=N(e.overlaySize),f=a(()=>[e.list.type,e.details],[e.list.type,e.details]),u=a(()=>{const r={"-backdrop":e.canvasStarted&&e.shouldUseBackdrop&&!e.dimmed&&!e.galleryActive,"-no-transition":e.dimmed,"-gallery-active":e.galleryActive,collapsed:e.overlayCollapsed,kiosk:e.kiosk,start:e.overlayPosition==="left",bottom:e.overlayPosition!=="left",[e.overlaySize]:!0},i=S(r),s=e.overlayInterfaceClasses.join(" ");return s?`${i} ${s}`:i},[e.canvasStarted,e.shouldUseBackdrop,e.dimmed,e.galleryActive,e.overlayCollapsed,e.kiosk,e.inIdle,e.setKioskModeEnabled,e.overlayPosition,e.overlaySize,e.overlayInterfaceClasses]);return v(y,{open:e.isOverlayOpen,size:p,particles:e.isFeaturedExhibitorActive?o(A,{}):null,className:u,mediumSizeMultiplier:m.mediumSizeMultiplier,fullSizeOffset:m.fullSizeOffset,disableDrag:e.viewerMode&&e.menu,forceFull:e.viewerMode&&e.menu,scrollResetKey:f,noContentLabel:k("No content"),onChangeSize:c,onScrollStateChange:d,onScrollActivity:()=>window.__resett?.(),children:[o(P,{isGDPR:t,consent:n}),o(E,{}),o(O,{}),o(g,{}),o(C,{}),o(I,{}),o(M,{}),o(z,{}),o(K,{}),o(x,{}),o(_,{showFilters:!0}),o(F,{showFilters:!0}),o(B,{}),o(R,{}),o(w,{}),o(b,{}),o(j,{})]})});export default T;