@expofp/floorplan 3.1.3 → 3.1.4

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 (107) hide show
  1. package/dist/browser/{CookieConsent-CgshNiUW.js → CookieConsent-A4g2GEnB.js} +2299 -2293
  2. package/dist/browser/{Debug-CAQ2Y1Zh.js → Debug-okM_H6zB.js} +7 -7
  3. package/dist/browser/{Demo-B1d7LKVa.js → Demo-3Yx1xi6F.js} +11 -11
  4. package/dist/browser/{Free-CDTSlJEY.js → Free-Iqh_45NP.js} +11 -11
  5. package/dist/browser/{Gallery-DvPKgsZC.js → Gallery-CMu4jjUa.js} +16 -16
  6. package/dist/browser/{GpsLoader-0QPi71oF.js → GpsLoader-xmUlSf3T.js} +27 -27
  7. package/dist/browser/{KioskStore-IG8a9NKE.js → KioskStore-DomUDeuw.js} +39 -39
  8. package/dist/browser/{Mapbox-BqYgZ149.js → Mapbox-D3-e_F58.js} +14 -14
  9. package/dist/browser/SetKioskMode-BOvxWaGI.js +54 -0
  10. package/dist/browser/ShowKiosk-xp1WbCm-.js +26 -0
  11. package/dist/browser/{ThreeComponent-CUD9Ymxj.js → ThreeComponent-C7dPjvKl.js} +219 -219
  12. package/dist/browser/{TouchHand-CAu_2Z0K.js → TouchHand-QzRQPyEl.js} +4 -4
  13. package/dist/browser/{ViewerMenuPanel-DduX02M1.js → ViewerMenuPanel-lREjYMl2.js} +20 -20
  14. package/dist/browser/{add-debug-secret-listener-Cvu8GQbJ.js → add-debug-secret-listener-s_Acfb_j.js} +1 -1
  15. package/dist/browser/{boolean-editor-DqNwtjhT.js → boolean-editor-BN7VDvLb.js} +6 -6
  16. package/dist/browser/{bootIntercom-QkbBgNhv.js → bootIntercom-BsKv9v5g.js} +1 -1
  17. package/dist/browser/bundle.json +44 -44
  18. package/dist/browser/{chunk-DQBx2y0u.js → chunk-CilcQ-DK.js} +1 -1
  19. package/dist/browser/{classnames-DDIn8LQy.js → classnames-BG0vlDcj.js} +2 -2
  20. package/dist/browser/{client-VF4zA-sh.js → client-CfMi8siJ.js} +4 -4
  21. package/dist/browser/{data-CFvjGzVc.js → data-a-dtD_1P.js} +49 -49
  22. package/dist/browser/{debug-overlay-DDbMN2nu.js → debug-overlay-CoH7X4al.js} +8 -8
  23. package/dist/browser/{debug-ui-Cbdmlsqq.js → debug-ui-DouD3wg5.js} +6 -6
  24. package/dist/browser/{dist-B0ttNa_v.js → dist-CzsjAsAg.js} +5 -5
  25. package/dist/browser/{exports-BQ_HyGqM.js → exports-BWEh5Wje.js} +1 -1
  26. package/dist/browser/{favicon-C65AD9b8.js → favicon-CmG6QFs2.js} +1 -1
  27. package/dist/browser/{fetch-retry.umd-COwLXJwf.js → fetch-retry.umd-B_g_JELw.js} +2 -2
  28. package/dist/browser/{flex-vY_BeCRt.js → flex-BQA_6ztI.js} +6 -6
  29. package/dist/browser/{floorplan.loader-CvD9t0Bs.js → floorplan.loader-CrKDeH3d.js} +9 -9
  30. package/dist/browser/{floorplan.ready-CtadyRAs.js → floorplan.ready-xulLyTpM.js} +15 -15
  31. package/dist/browser/{fuse-DGPiyXlj.js → fuse-Cxy73jl3.js} +2 -2
  32. package/dist/browser/index.js +11 -11
  33. package/dist/browser/{is-debug-Cb7eGksV.js → is-debug-BMJczZcU.js} +2 -2
  34. package/dist/browser/{jsx-runtime-BuRUOsV1.js → jsx-runtime-DDrJF8xL.js} +2 -2
  35. package/dist/browser/{lib-Cvfv2IMm.js → lib-B1mH8TSv.js} +4 -4
  36. package/dist/browser/locales/ar.json +55 -15
  37. package/dist/browser/locales/de.json +55 -15
  38. package/dist/browser/locales/es.json +55 -15
  39. package/dist/browser/locales/fr.json +55 -15
  40. package/dist/browser/locales/he.json +55 -15
  41. package/dist/browser/locales/it.json +55 -15
  42. package/dist/browser/locales/kk.json +55 -15
  43. package/dist/browser/locales/ko.json +55 -15
  44. package/dist/browser/locales/mn.json +55 -15
  45. package/dist/browser/locales/nl.json +55 -15
  46. package/dist/browser/locales/pl.json +55 -15
  47. package/dist/browser/locales/pt.json +55 -15
  48. package/dist/browser/locales/ru.json +59 -19
  49. package/dist/browser/locales/sv.json +55 -15
  50. package/dist/browser/locales/th.json +55 -15
  51. package/dist/browser/locales/tr.json +55 -15
  52. package/dist/browser/locales/uk.json +55 -15
  53. package/dist/browser/locales/vi.json +55 -15
  54. package/dist/browser/locales/zh.json +55 -15
  55. package/dist/browser/{main-DJGo4g--.js → main-CTfIntH-.js} +1 -1
  56. package/dist/browser/{mobx-CWmFk5Q_.js → mobx-CNTM25Oc.js} +4 -4
  57. package/dist/browser/{particles.min-BZysM5Tg.js → particles.min-DHOz1yro.js} +2 -2
  58. package/dist/browser/{prop-types-DyiMgNwl.js → prop-types-B-y83www.js} +2 -2
  59. package/dist/browser/{react-cBEAwEeA.js → react-VoeHpohi.js} +2 -2
  60. package/dist/browser/{react-dom-D_5039DL.js → react-dom-CN7XBo22.js} +3 -3
  61. package/dist/browser/{reset-all-settings-VjH78fi3.js → reset-all-settings-x3j4rKGC.js} +1 -1
  62. package/dist/browser/{settings-D595OjcR.js → settings-DYv1eHiY.js} +6 -6
  63. package/dist/browser/{src-DWVoS2GS.js → src-CdV1RTUv.js} +4 -4
  64. package/dist/browser/{store-Bj7lyE8j.js → store-BkBqfYWF.js} +3799 -3341
  65. package/dist/browser/{ui-Di53DAaR.js → ui-DqL_r_LU.js} +6 -6
  66. package/dist/esm/components/Alert.js +1 -1
  67. package/dist/esm/components/Autocomplete.js +1 -1
  68. package/dist/esm/components/BaseFilterModal.js +1 -1
  69. package/dist/esm/components/EntityItem.js +1 -1
  70. package/dist/esm/components/EntityList.js +1 -1
  71. package/dist/esm/components/EventBadge.js +1 -1
  72. package/dist/esm/components/Exhibitor.js +1 -1
  73. package/dist/esm/components/HeatmapLegend.js +1 -1
  74. package/dist/esm/components/Kiosk/KioskStore.d.ts +3 -2
  75. package/dist/esm/components/Kiosk/KioskStore.js +1 -1
  76. package/dist/esm/components/Kiosk/SetKiosk/FormInput/RangeInput.js +1 -1
  77. package/dist/esm/components/Kiosk/SetKiosk/SetKioskComponent.js +1 -1
  78. package/dist/esm/components/Kiosk/SetKiosk/SetKioskForm.js +1 -1
  79. package/dist/esm/components/Kiosk/SetKioskMode.js +1 -1
  80. package/dist/esm/components/LanguageRow.js +1 -1
  81. package/dist/esm/components/LevelBadge.js +1 -1
  82. package/dist/esm/components/LevelSelector.js +1 -1
  83. package/dist/esm/components/LogoOverlay.js +1 -1
  84. package/dist/esm/components/Map/Map.js +1 -1
  85. package/dist/esm/components/Map/drawing/config/config-wf.js +1 -1
  86. package/dist/esm/components/Map/traffic/useBuildRoute.js +4 -4
  87. package/dist/esm/components/Map/traffic/useManageTraffic.js +1 -1
  88. package/dist/esm/components/Map/visibleArea.d.ts +3 -3
  89. package/dist/esm/components/Map/visibleArea.js +1 -1
  90. package/dist/esm/components/MarketMaterialList.js +1 -1
  91. package/dist/esm/components/Overlay.js +1 -1
  92. package/dist/esm/components/OverlayGrip.d.ts +0 -1
  93. package/dist/esm/components/OverlayGrip.js +1 -1
  94. package/dist/esm/components/Share.js +1 -1
  95. package/dist/esm/components/Shortcuts/ShortcutButton.js +1 -1
  96. package/dist/esm/components/Shortcuts/ShortcutsFiltersButton.js +1 -1
  97. package/dist/esm/components/ViewerMenuPanel.js +1 -1
  98. package/dist/esm/components/WayInformation.js +1 -1
  99. package/dist/esm/components/WayfindingFloorSelector.js +1 -1
  100. package/dist/esm/renderer/RendererService.js +1 -1
  101. package/dist/esm/renderer/engine-core/defs.d.ts +7 -1
  102. package/dist/esm/renderer/engine-core/defs.js +3 -3
  103. package/dist/esm/store/SearchStore.js +1 -1
  104. package/dist/esm/store/init/init-ui.js +1 -1
  105. package/package.json +4 -4
  106. package/dist/browser/SetKioskMode-CuhPjOeV.js +0 -49
  107. package/dist/browser/ShowKiosk-Vv7rWwfr.js +0 -26
@@ -1,22 +1,22 @@
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.1.3" };
4
+ e.SENTRY_RELEASE = { id: "3.1.4" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "366e3673-c350-4f8b-b0f3-9cc93894014c", e._sentryDebugIdIdentifier = "sentry-dbid-366e3673-c350-4f8b-b0f3-9cc93894014c");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./chunk-DQBx2y0u.js";
10
- import { t } from "./jsx-runtime-BuRUOsV1.js";
11
- import { t as n } from "./settings-D595OjcR.js";
12
- import { t as r } from "./add-debug-secret-listener-Cvu8GQbJ.js";
9
+ import { r as e } from "./chunk-CilcQ-DK.js";
10
+ import { t } from "./jsx-runtime-DDrJF8xL.js";
11
+ import { t as n } from "./settings-DYv1eHiY.js";
12
+ import { t as r } from "./add-debug-secret-listener-s_Acfb_j.js";
13
13
  //#region ../debug/src/lib/ui/render-debug-ui.tsx
14
14
  var i = t(), a = !1;
15
15
  function o() {
16
16
  if (a) return;
17
17
  a = !0;
18
18
  let t = n("Show Debug Button Overlay"), o = async (n) => {
19
- let { DebugUi: r } = await import("./debug-ui-Cbdmlsqq.js"), { createRoot: a } = await import("./client-VF4zA-sh.js").then((t) => /* @__PURE__ */ e(t.default, 1)), o = document.createElement("div");
19
+ let { DebugUi: r } = await import("./debug-ui-DouD3wg5.js"), { createRoot: a } = await import("./client-CfMi8siJ.js").then((t) => /* @__PURE__ */ e(t.default, 1)), o = document.createElement("div");
20
20
  document.body.appendChild(o), a(o).render(/* @__PURE__ */ (0, i.jsx)(r, {
21
21
  useDebugButtonState: t.useState,
22
22
  open: n
@@ -1 +1 @@
1
- import{jsx as r,jsxs as a}from"react/jsx-runtime";import t from"classnames";import"./Alert.scss";const p=({children:i,position:s,variant:e="info",inline:c=!1,showIcon:o=!0,size:n="md",closable:d=!1,title:l,onClose:f})=>{const m=()=>{switch(e){case"error":return"icon-close-solid";case"success":return"icon-checkmark-solid";case"warning":return"icon-warning-solid";default:return"icon-info-solid"}};return a("div",{className:t("efp-alert",`efp-alert--${e} efp-alert--${n}`,{isInline:c,[`efp-alert--${s}`]:s}),role:e==="error"||e==="warning"?"alert":"status","aria-live":e==="error"||e==="warning"?"assertive":"polite",children:[o&&r("div",{className:"efp-alert__icon",children:r("i",{className:t(m()),"aria-hidden":"true"})}),a("div",{className:"efp-alert__content",children:[l&&r("div",{className:"efp-alert__title",children:l}),i]}),d&&r("button",{type:"button",className:"efp-alert__close",onClick:f,"aria-label":"Close alert",title:"Close"})]})};export default p;
1
+ import{jsx as r,jsxs as t}from"react/jsx-runtime";import a from"classnames";import"./Alert.scss";import{t as i}from"../utils/i18n";const u=({children:o,position:l,variant:e="info",inline:c=!1,showIcon:n=!0,size:d="md",closable:f=!1,title:s,onClose:m})=>{const p=()=>{switch(e){case"error":return"icon-close-solid";case"success":return"icon-checkmark-solid";case"warning":return"icon-warning-solid";default:return"icon-info-solid"}};return t("div",{className:a("efp-alert",`efp-alert--${e} efp-alert--${d}`,{isInline:c,[`efp-alert--${l}`]:l}),role:e==="error"||e==="warning"?"alert":"status","aria-live":e==="error"||e==="warning"?"assertive":"polite",children:[n&&r("div",{className:"efp-alert__icon",children:r("i",{className:a(p()),"aria-hidden":"true"})}),t("div",{className:"efp-alert__content",children:[s&&r("div",{className:"efp-alert__title",children:s}),o]}),f&&r("button",{type:"button",className:"efp-alert__close",onClick:m,"aria-label":i("Close alert"),title:i("Close alert")})]})};export default u;
@@ -1 +1 @@
1
- import{jsx as u,jsxs as j,Fragment as te}from"react/jsx-runtime";import ne from"classnames";import{useEffect as W,useRef as b,useState as p}from"react";import{createPortal as oe}from"react-dom";import re from"../utils/useOnClickOutside";import{useRenderTarget as se}from"../utils/useRenderTarget";import"./Autocomplete.scss";const O={ENTER:13,ESCAPE:27,ARROW_UP:38,ARROW_DOWN:40,DELETE:46},ce=({placeholder:B,options:c,value:r="",showClear:T=!1,onChange:K})=>{const k=se(),g=b(null),m=b(null),L=b(null),d=b(!1),P=e=>typeof e=="object"&&"value"in e&&"label"in e,E=e=>P(e)?e.value:e,w=e=>P(e)?e.label:e,x=e=>c.findIndex(t=>E(t)===e),S=e=>c.find(t=>E(t)===e),U=()=>{if(!r)return"";const e=S(r);return e?w(e):""},[l,D]=p([]),[_,I]=p(U()),[F,v]=p(r?x(r):null),[n,i]=p(F),[s,a]=p(!1),[A,R]=p(""),[y,$]=p({top:0,left:0,width:0}),h=()=>{if(g.current&&s){const e=g.current.getBoundingClientRect();$({top:e.bottom+window.scrollY+4,left:e.left+window.scrollX,width:e.width})}};W(()=>{if(s)return h(),window.addEventListener("scroll",h,!0),window.addEventListener("resize",h),()=>{window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h)}},[s]),re([g,L],()=>{a(!1)});const N=e=>{const t=S(e);I(t?w(t):""),R(""),D([]),K?.(e)};W(()=>{if(d.current){d.current=!1;return}const e=r?x(r):-1,t=e>=0?c[e]:null;v(e>=0?e:null),i(e>=0?e:null),I(t?w(t):""),R(""),D([])},[r,c]);const z=e=>{const t=x(e);d.current=!0,N(e),v(t),i(t),a(!1),m.current?.blur()},M=e=>{e.preventDefault(),e.stopPropagation();const t=e.currentTarget,o=t.getAttribute("data-value")||t.innerText;D([]),z(o)},V=(e=!1)=>{N(""),v(null),i(null),e&&m.current?.focus()},Y=()=>{a(!0)},X=()=>{setTimeout(()=>{if(d.current){d.current=!1;return}!_&&r&&N(r)},200)},q=()=>{if(!_&&n===null||A&&n===null)return;d.current=!0;const e=l.length>0?l:c;if(n!==null&&e[n]){const t=e[n],o=E(t),f=x(o);N(o),v(f),i(f)}a(!1),m.current?.blur()},G=()=>{!s||n===0||n===null||i(n-1)},H=()=>{if(!s){a(!0);return}const e=l.length>0?l:c,t=n===null?0:n+1;t<e.length&&i(t)},J=e=>{switch(e.keyCode){case O.ENTER:q();break;case O.ARROW_UP:G();break;case O.ARROW_DOWN:H();break;case O.DELETE:V(!0);break;case O.ESCAPE:A||(e.preventDefault(),a(!1),m.current?.blur());break}},Q=e=>{const t=e.target.value,o=t.toLowerCase(),f=t?c.filter(C=>w(C).toLowerCase().includes(o)):[];a(!0),I(t),R(t),i(null),D(f)},Z=()=>{const e=l.length>0?l:c;return A&&l.length===0?u("div",{className:"efp-autocomplete__empty",children:"No options"}):u("ul",{children:e.map((t,o)=>{const f=o===n,C=l.length===0&&o===F;return u("li",{className:f?"is-focus":C?"is-active":void 0,"data-value":E(t),onMouseDown:ee=>ee.preventDefault(),onClick:M,children:w(t)},o)})})};return j(te,{children:[u("div",{ref:g,className:ne("efp-autocomplete",{"is-open":s,"with-clear":s&&T}),children:j("div",{className:"efp-autocomplete__inner",children:[u("input",{type:"search",className:"efp-autocomplete__input",onChange:Q,onFocus:Y,onBlur:X,onKeyDown:J,value:_,placeholder:B,ref:m}),T&&s&&_&&u("div",{className:"efp-autocomplete__clear",onMouseDown:e=>{e.preventDefault(),V(!0)}})]})}),s&&k&&oe(u("div",{ref:L,className:"efp-autocomplete-options",style:{top:`${y.top}px`,left:`${y.left}px`,width:`${y.width}px`},children:u("div",{className:"efp-autocomplete-options__scroll",children:Z()})}),k)]})};export default ce;
1
+ import{jsx as i,jsxs as j,Fragment as te}from"react/jsx-runtime";import ne from"classnames";import{useEffect as W,useRef as b,useState as p}from"react";import{createPortal as oe}from"react-dom";import re from"../utils/useOnClickOutside";import{useRenderTarget as se}from"../utils/useRenderTarget";import"./Autocomplete.scss";import{t as ce}from"../utils/i18n";const O={ENTER:13,ESCAPE:27,ARROW_UP:38,ARROW_DOWN:40,DELETE:46},le=({placeholder:B,options:c,value:r="",showClear:T=!1,onChange:K})=>{const k=se(),g=b(null),m=b(null),L=b(null),d=b(!1),P=e=>typeof e=="object"&&"value"in e&&"label"in e,E=e=>P(e)?e.value:e,w=e=>P(e)?e.label:e,x=e=>c.findIndex(t=>E(t)===e),S=e=>c.find(t=>E(t)===e),U=()=>{if(!r)return"";const e=S(r);return e?w(e):""},[l,D]=p([]),[_,I]=p(U()),[F,v]=p(r?x(r):null),[n,u]=p(F),[s,a]=p(!1),[A,R]=p(""),[y,$]=p({top:0,left:0,width:0}),h=()=>{if(g.current&&s){const e=g.current.getBoundingClientRect();$({top:e.bottom+window.scrollY+4,left:e.left+window.scrollX,width:e.width})}};W(()=>{if(s)return h(),window.addEventListener("scroll",h,!0),window.addEventListener("resize",h),()=>{window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",h)}},[s]),re([g,L],()=>{a(!1)});const N=e=>{const t=S(e);I(t?w(t):""),R(""),D([]),K?.(e)};W(()=>{if(d.current){d.current=!1;return}const e=r?x(r):-1,t=e>=0?c[e]:null;v(e>=0?e:null),u(e>=0?e:null),I(t?w(t):""),R(""),D([])},[r,c]);const z=e=>{const t=x(e);d.current=!0,N(e),v(t),u(t),a(!1),m.current?.blur()},M=e=>{e.preventDefault(),e.stopPropagation();const t=e.currentTarget,o=t.getAttribute("data-value")||t.innerText;D([]),z(o)},V=(e=!1)=>{N(""),v(null),u(null),e&&m.current?.focus()},Y=()=>{a(!0)},X=()=>{setTimeout(()=>{if(d.current){d.current=!1;return}!_&&r&&N(r)},200)},q=()=>{if(!_&&n===null||A&&n===null)return;d.current=!0;const e=l.length>0?l:c;if(n!==null&&e[n]){const t=e[n],o=E(t),f=x(o);N(o),v(f),u(f)}a(!1),m.current?.blur()},G=()=>{!s||n===0||n===null||u(n-1)},H=()=>{if(!s){a(!0);return}const e=l.length>0?l:c,t=n===null?0:n+1;t<e.length&&u(t)},J=e=>{switch(e.keyCode){case O.ENTER:q();break;case O.ARROW_UP:G();break;case O.ARROW_DOWN:H();break;case O.DELETE:V(!0);break;case O.ESCAPE:A||(e.preventDefault(),a(!1),m.current?.blur());break}},Q=e=>{const t=e.target.value,o=t.toLowerCase(),f=t?c.filter(C=>w(C).toLowerCase().includes(o)):[];a(!0),I(t),R(t),u(null),D(f)},Z=()=>{const e=l.length>0?l:c;return A&&l.length===0?i("div",{className:"efp-autocomplete__empty",children:ce("No options")}):i("ul",{children:e.map((t,o)=>{const f=o===n,C=l.length===0&&o===F;return i("li",{className:f?"is-focus":C?"is-active":void 0,"data-value":E(t),onMouseDown:ee=>ee.preventDefault(),onClick:M,children:w(t)},o)})})};return j(te,{children:[i("div",{ref:g,className:ne("efp-autocomplete",{"is-open":s,"with-clear":s&&T}),children:j("div",{className:"efp-autocomplete__inner",children:[i("input",{type:"search",className:"efp-autocomplete__input",onChange:Q,onFocus:Y,onBlur:X,onKeyDown:J,value:_,placeholder:B,ref:m}),T&&s&&_&&i("div",{className:"efp-autocomplete__clear",onMouseDown:e=>{e.preventDefault(),V(!0)}})]})}),s&&k&&oe(i("div",{ref:L,className:"efp-autocomplete-options",style:{top:`${y.top}px`,left:`${y.left}px`,width:`${y.width}px`},children:i("div",{className:"efp-autocomplete-options__scroll",children:Z()})}),k)]})};export default le;
@@ -1 +1 @@
1
- import{jsx as r}from"react/jsx-runtime";import{observer as u,useLocalStore as C}from"mobx-react-lite";import{t as d}from"../utils/i18n";import{Modal as I,MultiSelectGroups as S}from"./";export const BaseFilterModal=u(({store:t,rootStore:a,title:o,groups:s})=>{const i=C(()=>({get pendingSelectedIds(){return t.state.pendingItems.map(e=>e.id)},get totalItemsCount(){return t.state.pendingItems.length===0?t.getFilteredItems().length:a.exhibitorStore.exhibitors.filter(e=>e.categories.some(l=>t.state.pendingItems.some(n=>n.id===l.id))).length},get allCategories(){return s.flatMap(e=>e.items)},get isAllSelected(){return this.allCategories.every(e=>this.pendingSelectedIds.includes(e.id))},get isPartiallySelected(){const e=this.allCategories.filter(l=>this.pendingSelectedIds.includes(l.id)).length;return e>0&&e<this.allCategories.length},get totalCategoriesCount(){return this.allCategories.length}})),g=e=>{const l=s.flatMap(n=>n.items).filter(n=>e.includes(n.id));t.setPendingItems(l)},c=()=>{t.applyFilter()},h=()=>{t.closeFilter()},m=()=>{t.clearPendingItems()},f=e=>{const l=i.allCategories;t.setPendingItems(e?l:[])},p=()=>t.state.isOpen;return r(I,{open:t.state.isOpen,title:o,onClickClose:h,footerLeft:[{label:d("Clear all"),onClick:m,variant:"gray",disabled:i.pendingSelectedIds.length===0}],footerRight:[{label:i.pendingSelectedIds.length>0?`Show #${i.totalItemsCount}# Matching Exhibitors`:d("Show All Exhibitors"),onClick:c,variant:"primary",withBadge:!0,disabled:!p()}],children:r(S,{groups:s,selectedIds:i.pendingSelectedIds,variant:"categories",onChange:g,itemCountProvider:e=>a.categoryStore.categoryById.get(Number(e.id))?.exhibitors?.length||0})})});
1
+ import{jsx as d}from"react/jsx-runtime";import{observer as u,useLocalStore as C}from"mobx-react-lite";import{t as a}from"../utils/i18n";import{Modal as I,MultiSelectGroups as S}from"./";export const BaseFilterModal=u(({store:t,rootStore:r,title:o,groups:s})=>{const i=C(()=>({get pendingSelectedIds(){return t.state.pendingItems.map(e=>e.id)},get totalItemsCount(){return t.state.pendingItems.length===0?t.getFilteredItems().length:r.exhibitorStore.exhibitors.filter(e=>e.categories.some(l=>t.state.pendingItems.some(n=>n.id===l.id))).length},get allCategories(){return s.flatMap(e=>e.items)},get isAllSelected(){return this.allCategories.every(e=>this.pendingSelectedIds.includes(e.id))},get isPartiallySelected(){const e=this.allCategories.filter(l=>this.pendingSelectedIds.includes(l.id)).length;return e>0&&e<this.allCategories.length},get totalCategoriesCount(){return this.allCategories.length}})),g=e=>{const l=s.flatMap(n=>n.items).filter(n=>e.includes(n.id));t.setPendingItems(l)},c=()=>{t.applyFilter()},h=()=>{t.closeFilter()},m=()=>{t.clearPendingItems()},f=e=>{const l=i.allCategories;t.setPendingItems(e?l:[])},p=()=>t.state.isOpen;return d(I,{open:t.state.isOpen,title:o,onClickClose:h,footerLeft:[{label:a("Clear all"),onClick:m,variant:"gray",disabled:i.pendingSelectedIds.length===0}],footerRight:[{label:i.pendingSelectedIds.length>0?a("Show #{{count}}# Matching Exhibitors",{count:i.totalItemsCount}):a("Show All Exhibitors"),onClick:c,variant:"primary",withBadge:!0,disabled:!p()}],children:d(S,{groups:s,selectedIds:i.pendingSelectedIds,variant:"categories",onChange:g,itemCountProvider:e=>r.categoryStore.categoryById.get(Number(e.id))?.exhibitors?.length||0})})});
@@ -1 +1 @@
1
- import{jsx as e,Fragment as k,jsxs as a}from"react/jsx-runtime";import r from"classnames";import _ from"./HighlightText";import"./EntityItem.scss";const w=["booth","exhibitor","event","speaker","category"],F=l=>/^\d+$/.test(l),H=({id:l,type:i,url:L,title:s,icon:p,subtitle:c,date:n,time:d,itemsCount:v,image:m,additionalInfo:f=[],bookmarked:b=!1,featured:y=!1,locationTerm:S="Booth",visited:N,onClick:h,highlighted:g=!1,heatmapColor:o,heatmapClicks:A,rebookingColor:x,kioskMode:T=!1,compactDetails:j,foundInDescription:u})=>{const E=w.includes(i)?i:"other";return e("div",{role:"button",className:r("efp-entity-item",{"is-featured":y,"is-visited":N,"is-highlighted":g,"has-heatmap":!!o,"is-speaker":i==="speaker"}),"aria-label":s,tabIndex:0,"aria-pressed":g||void 0,onClick:()=>h&&h(i,l),onKeyDown:t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),h?.(i,l))},style:{"--item-type-color":`var(--color-${E})`,...o&&{"--heatmap-color":o},...x?{borderLeft:`5px solid ${x}`}:{}},children:a("div",{className:"efp-entity-item__body",children:[a("div",{className:"efp-entity-item__left",children:[e("div",{className:"efp-entity-item__icon",children:p?e("img",{src:p,alt:s}):e("i",{className:`icon-${i}-solid`,"aria-hidden":"true"})}),!T&&a(k,{children:[N&&e("div",{className:"efp-entity-item__visited",children:e("i",{className:"icon-checkmark"})}),b&&e("i",{className:r("efp-entity-item__bookmarked","icon-bookmark-solid")})]})]}),a("div",{className:"efp-entity-item__right",children:[a("div",{className:r("efp-entity-item__content",{"with-image":m}),children:[a("div",{className:"efp-entity-item__header",children:[a("div",{className:"efp-entity-item__title",children:[e(_,{text:s}),u&&e("div",{className:"efp-entity-item__description",children:e(_,{text:u})}),i==="category"&&e("span",{children:v!==void 0&&v})]}),y&&e("div",{className:"efp-entity-item__featured",children:"Featured"})]}),(i==="event"||i==="category"||c)&&a("div",{className:"efp-entity-item__subtitle",children:[i==="event"&&(n||d)&&a("div",{className:"efp-entity-item__datetime",children:[n&&e("strong",{children:n}),d&&e("span",{children:d})]}),i==="category"&&e("span",{children:"Category"}),c&&e("div",{children:c})]}),!!f.length&&i!=="booth"&&e("ul",{className:r("efp-entity-item__details",{"compact-details":j}),children:f.map((t,$)=>a("li",{className:"efp-entity-item__details-item",children:[t.type==="location"&&a(k,{children:[i!=="category"&&i!=="booth"&&e("div",{className:"efp-entity-item__details-item-booth",children:e(_,{text:t.locationName})}),t.hall&&a("div",{children:["Hall\xA0",e("span",{children:t.hall})]}),t.level&&a("div",{children:[F(t.level)&&e("span",{children:"Level\xA0"}),e("span",{children:t.level})]})]}),(t.type==="event"||t.type==="speaker")&&e("span",{children:t.text})]},$))})]}),m&&e("div",{className:"efp-entity-item__image",children:e("img",{src:m,alt:s})})]})]})})};export default H;
1
+ import{jsx as e,Fragment as b,jsxs as a}from"react/jsx-runtime";import r from"classnames";import p from"./HighlightText";import"./EntityItem.scss";import{t as c}from"../utils/i18n";const F=["booth","exhibitor","event","speaker","category"],H=l=>/^\d+$/.test(l),L=({id:l,type:i,url:S,title:s,icon:v,subtitle:n,date:d,time:m,itemsCount:f,image:h,additionalInfo:y=[],bookmarked:T=!1,featured:N=!1,locationTerm:A="Booth",visited:g,onClick:o,highlighted:x=!1,heatmapColor:_,heatmapClicks:I,rebookingColor:u,kioskMode:j=!1,compactDetails:E,foundInDescription:k})=>{const $=F.includes(i)?i:"other";return e("div",{role:"button",className:r("efp-entity-item",{"is-featured":N,"is-visited":g,"is-highlighted":x,"has-heatmap":!!_,"is-speaker":i==="speaker"}),"aria-label":s,tabIndex:0,"aria-pressed":x||void 0,onClick:()=>o&&o(i,l),onKeyDown:t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),o?.(i,l))},style:{"--item-type-color":`var(--color-${$})`,..._&&{"--heatmap-color":_},...u?{borderLeft:`5px solid ${u}`}:{}},children:a("div",{className:"efp-entity-item__body",children:[a("div",{className:"efp-entity-item__left",children:[e("div",{className:"efp-entity-item__icon",children:v?e("img",{src:v,alt:s}):e("i",{className:`icon-${i}-solid`,"aria-hidden":"true"})}),!j&&a(b,{children:[g&&e("div",{className:"efp-entity-item__visited",children:e("i",{className:"icon-checkmark"})}),T&&e("i",{className:r("efp-entity-item__bookmarked","icon-bookmark-solid")})]})]}),a("div",{className:"efp-entity-item__right",children:[a("div",{className:r("efp-entity-item__content",{"with-image":h}),children:[a("div",{className:"efp-entity-item__header",children:[a("div",{className:"efp-entity-item__title",children:[e(p,{text:s}),k&&e("div",{className:"efp-entity-item__description",children:e(p,{text:k})}),i==="category"&&e("span",{children:f!==void 0&&f})]}),N&&e("div",{className:"efp-entity-item__featured",children:c("Featured")})]}),(i==="event"||i==="category"||n)&&a("div",{className:"efp-entity-item__subtitle",children:[i==="event"&&(d||m)&&a("div",{className:"efp-entity-item__datetime",children:[d&&e("strong",{children:d}),m&&e("span",{children:m})]}),i==="category"&&e("span",{children:c("Category")}),n&&e("div",{children:n})]}),!!y.length&&i!=="booth"&&e("ul",{className:r("efp-entity-item__details",{"compact-details":E}),children:y.map((t,w)=>a("li",{className:"efp-entity-item__details-item",children:[t.type==="location"&&a(b,{children:[i!=="category"&&i!=="booth"&&e("div",{className:"efp-entity-item__details-item-booth",children:e(p,{text:t.locationName})}),t.hall&&a("div",{children:[c("Hall"),"\xA0",e("span",{children:t.hall})]}),t.level&&a("div",{children:[H(t.level)&&a("span",{children:[c("Level"),"\xA0"]}),e("span",{children:t.level})]})]}),(t.type==="event"||t.type==="speaker")&&e("span",{children:t.text})]},w))})]}),h&&e("div",{className:"efp-entity-item__image",children:e("img",{src:h,alt:s})})]})]})})};export default L;
@@ -1 +1 @@
1
- import{jsx as c}from"react/jsx-runtime";import{observer as k}from"mobx-react-lite";import{Suspense as x,lazy as v,useEffect as C,useRef as T,useCallback as L,useContext as E}from"react";import e,{uiState as t}from"../store";import w from"../tools/settings";import R from"./EntityListRow";import{OverlayScrollContext as P}from"./Overlay";import"./EntityList.scss";import O from"./LayersLoading";const I=()=>import("react-virtuoso").then(r=>({default:r.Virtuoso})).catch(()=>new Promise(r=>setTimeout(()=>r(I()),3e3))),H=v(I),V=["ipia2025"],_=({updatedScrollableRef:r,updateScroll:m})=>{const f=E(P),a=T(null),g=t.getListScrollItemId(t.list.type),S=V.includes(w.EXPO);C(()=>{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,b=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 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]),y=()=>c("div",{className:"list-empty",children:t.list.type==="search"?"Oops, nothing found":"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(x,{fallback:c(O,{active:!0,isCenter:!0}),children:c(H,{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=g?.toString()===o.id?.toString();return c(R,{item:o,index:n,highlighted:s,compactDetails:S,onClick:b},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(y,{})};export default k(_);
1
+ import{jsx as c}from"react/jsx-runtime";import{observer as x}from"mobx-react-lite";import{Suspense as v,lazy as C,useEffect as T,useRef as L,useCallback as E,useContext as w}from"react";import e,{uiState as t}from"../store";import R from"../tools/settings";import P from"./EntityListRow";import{OverlayScrollContext as O}from"./Overlay";import"./EntityList.scss";import H from"./LayersLoading";import{t as I}from"../utils/i18n";const g=()=>import("react-virtuoso").then(r=>({default:r.Virtuoso})).catch(()=>new Promise(r=>setTimeout(()=>r(g()),3e3))),V=C(g),_=["ipia2025"],z=({updatedScrollableRef:r,updateScroll:m})=>{const f=w(O),a=L(null),S=t.getListScrollItemId(t.list.type),b=_.includes(R.EXPO);T(()=>{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(v,{fallback:c(H,{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=S?.toString()===o.id?.toString();return c(P,{item:o,index:n,highlighted:s,compactDetails:b,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 x(z);
@@ -1 +1 @@
1
- import{jsx as l,Fragment as d,jsxs as g}from"react/jsx-runtime";import{useState as f,useEffect as p}from"react";import i from"classnames";import{calculateTimeUntilStart as v,formatTimeUntilStart as h,getEventStatus as S}from"../utils/eventTime";import{shouldShowEventFullBadge as w}from"../utils/eventFullBadge";import"./EventBadge.scss";const E=({event:e,className:s=""})=>{const[a,u]=f(()=>Date.now());p(()=>{const m=setInterval(()=>{u(Date.now())},1e3);return()=>clearInterval(m)},[]);const n=v(e.startDate,a),t=S(e,a,n),c=()=>{switch(t){case"live":return"LIVE";case"upcoming":return"UPCOMING";case"starting-soon":return h(n);case"past":return"PAST";default:return null}},r=w(e),o=t!=="none"?l("div",{className:i("efp-event-badge",`efp-event-badge--${t}`,{"is-urgent":t==="starting-soon"&&n.isLessThan10Minutes},s),children:c()}):null;return!o&&!r?null:g(d,{children:[o,r&&l("div",{className:i("efp-event-badge","efp-event-badge--full",s),children:"EVENT IS FULL"})]})};export default E;
1
+ import{jsx as i,Fragment as f,jsxs as g}from"react/jsx-runtime";import{useState as p,useEffect as v}from"react";import u from"classnames";import{calculateTimeUntilStart as h,formatTimeUntilStart as S,getEventStatus as w}from"../utils/eventTime";import{shouldShowEventFullBadge as E}from"../utils/eventFullBadge";import"./EventBadge.scss";import{t as e}from"../utils/i18n";const x=({event:n,className:s=""})=>{const[a,c]=p(()=>Date.now());v(()=>{const d=setInterval(()=>{c(Date.now())},1e3);return()=>clearInterval(d)},[]);const r=h(n.startDate,a),t=w(n,a,r),m=()=>{switch(t){case"live":return e("LIVE");case"upcoming":return e("UPCOMING");case"starting-soon":return S(r);case"past":return e("PAST");default:return null}},o=E(n),l=t!=="none"?i("div",{className:u("efp-event-badge",`efp-event-badge--${t}`,{"is-urgent":t==="starting-soon"&&r.isLessThan10Minutes},s),children:m()}):null;return!l&&!o?null:g(f,{children:[l,o&&i("div",{className:u("efp-event-badge","efp-event-badge--full",s),children:e("EVENT IS FULL")})]})};export default x;
@@ -1 +1 @@
1
- import{jsx as i,jsxs as a,Fragment as C}from"react/jsx-runtime";import p from"classnames";import{useLocalStore as Z,useObserver as T}from"mobx-react-lite";import ee,{Suspense as O,useRef as y,useState as I,useEffect as ie}from"react";import f from"../data";import l,{uiState as r}from"../store";import{RegularBooth as te}from"../store/BoothStore";import{GaEventActions as d,sendEventToGa as D}from"../tools/gtag";import oe from"../tools/logger";import S from"../tools/settings";import{t as m,getLocale as re}from"../utils/i18n";import ne from"../utils/is-mobile";import{useReaction as ae}from"../utils/mobx";import U from"./Button";import G from"./ErrorBoundary";import"./Exhibitor.scss";import se from"./MarketMaterialList";import le from"./RebookingNotes";import ce,{defaultRebookingOptions as de}from"./RebookingRadioGroup";import he from"./Schedule";import me from"./SidebarActions";import ue from"../utils/useHeatmapOverlay";import be from"./Alert";import{Transition as ke}from"react-transition-group";const z=ee.lazy(()=>import("./Gallery/Gallery"));function ge(){const w=y(),o=Z(()=>({collapsed:!0,updateOverlayContent:null,get exhibitor(){return r.selectedExhibitor},get websiteTrimmed(){return this.exhibitor.website?this.exhibitor.website.replace(/^(http(s?):\/\/)([^/]+)(\/)?$/i,"$3"):""},get anySocial(){return r.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||r.overlayPosition==="left"&&(this.exhibitor.description||"").length<800},get showEdit(){return!!(f.sendLoginLinkUrl&&this.sendLinkEmail)},get sendLinkEmail(){return this.exhibitor.privateEmail||this.exhibitor.email}})),{heatmapBar:A}=ue(o.exhibitor),[x,M]=I(!1),[_,B]=I(!1),v=y(null);ie(()=>((()=>{if(v.current){const c=v.current.offsetHeight;M(c>300)}})(),()=>{l.exhibitorStore.rebookingStateChangeRequested=!1}),[]),ae(()=>o.exhibitor,()=>{w.current&&(w.current.parentElement.scrollTop=0),o.collapsed=!0});function N(e,c){if(u(c),r.kiosk)return e.preventDefault()}function H(e,c,h){D(d.ClickCustomButton,o.exhibitor.name);const b={externalId:o.exhibitor.externalId,buttonNumber:e,buttonUrl:c,preventDefault:h.preventDefault.bind(h)};r.onExhibitorCustomButtonClick&&r.onExhibitorCustomButtonClick(b)}function u(e){D(e,o.exhibitor.name)}const E=y(),V={entering:{opacity:1},entered:{opacity:1},exiting:{opacity:0},exited:{opacity:0}},L=150;return T(()=>{const e=o.exhibitor,c=f.isRebooking?(()=>{const t=new Set;for(const s of e.booths)s instanceof te&&s.size&&t.add(s.size);const n=Array.from(t);return a("div",{children:[n.length>0&&i("div",{className:"booth__infos",style:{padding:"0 15px",marginBottom:"1rem"},children:a("div",{className:"booth__info",children:[i("div",{className:"booth__info-icon",children:i("i",{className:"icon-size"})}),a("div",{className:"booth__info-body",children:[i("div",{className:"booth__info-title",children:m("Size")}),i("div",{className:"booth__info-val",children:n.join(", ")})]})]})}),i(ce,{showTitle:!1,options:de,checked:e.rebookingState.toString(),onChange:s=>l.exhibitorStore.setRebookingState(e,parseInt(s.target.value),e.rebookingNote)}),i(le,{state:"default",value:e.rebookingNote||"",onClickSave:s=>l.exhibitorStore.setRebookingState(e,e.rebookingState,s)}),i(ke,{in:l.exhibitorStore.rebookingStateChangeRequested,nodeRef:E,timeout:L,appear:!0,enter:!0,exit:!0,mountOnEnter:!0,unmountOnExit:!0,children:s=>i("div",{ref:E,style:{position:"fixed",bottom:"1rem",left:"1rem",zIndex:9999,transition:`opacity ${L}ms ease-in-out`,opacity:0,...V[s]},children:i(be,{title:l.exhibitorStore.rebookingStateSaved?m("Changes saved"):m("Oops! Something went wrong"),variant:l.exhibitorStore.rebookingStateSaved?"success":"error",inline:!0,closable:!0,onClose:()=>{l.exhibitorStore.rebookingStateChangeRequested=!1}})})})]})})():null,h=p({exhibitor:!0,"is-featured":e.featured,bookmarked:e.bookmarked,[r.responsiveClass]:!0}),b=()=>{o.collapsed=!1,setTimeout(o.updateOverlayContent)};function k(t,n,s){return!t||!n||r.kiosk||r.previewMode?null:i("div",{className:"exhibitor-custom-button",children:i(U,{link:n,inline:!0,onClick:g=>{H(s,n,g)},target:"_blank",children:t})},s)}const W=({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 X(t){if(t===null)return"";const n=t.split(RegExp("(?=!\\*\\/\\/\\|\\|\\^\\^[a-z]{2}\\^\\^\\/\\/\\|\\|\\*!)")),s=`!*//||^^${re()}^^//||*!`,g=n.find(Q=>Q.startsWith(s));return g!=null?g.substring(18):n[0].startsWith("!*//||^^")&&n[0].length>18?n[0].substring(18):n[0]}function K(){return!f.hideShareButton&&!r.kiosk&&window.location.host.endsWith(".expofp.com")&&S.EXPO!=="globalaltsmiami2024"}function R(){o.updateOverlayContent()}const J=t=>/^\d+$/.test(t),Y=t=>f.shortLevelName?t.layer?.shortName:t.layer?.description;return a("div",{className:h,"aria-label":m("Details"),children:[a("div",{className:"exhibitor__header",children:[a("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:()=>l.searchStore.handleBackAction(),className:"exhibitor__header-close",children:i("i",{className:"icon-close"})})]}),c||a(C,{children:[i("div",{className:"exhibitor__buttons",children:!r.isGuidedToursActive&&i(me,{showBookmark:!r.disableBookmarked&&!f.hideBookmarks&&!r.kiosk,showDirections:e.booths.length>0&&S.wayfinding,inBookmark:o.exhibitor.bookmarked,showShare:K(),showVisited:!r.kiosk,visited:o.exhibitor.visited,onClickBookmark:$,onClickShare:P,onClickDirections:()=>{l.routeStore.clickRoute(null,l.routeStore.tempToBooth||e.booths[0])},onClickVisited:F})}),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(G,{children:i(O,{fallback:null,children:i(z,{className:r.responsiveClass,onOpenGallery:()=>l.openGallery(),onCloseGallery:()=>l.closeGallery(),onImageLoadHeightUpdate:R,leading:!0,images:[e.leadingImageUrl]})})})}):null,a("div",{className:p("exhibitor__details",{"details-hidden":r.kiosk&&x&&!_}),ref:v,children:[a("div",{className:p("exhibitor-categories",{"is-links-disabled":r.isGuidedToursActive}),children:[e.featured&&i("div",{className:"exhibitor-featured",children:"Featured"}),e.booths.map(t=>{const n=Y(t),s=g=>{g.preventDefault(),l.toggleMapOverlay(),l.selectBooth(t)};return a("a",{href:`?${t.slug}`,onClick:s,className:"exhibitor-categories__booth",children:[i("div",{className:"exhibitor-categories__booth-name",children:t.name}),n&&a("div",{className:"exhibitor-categories__booth-level",children:[J(n)?"Level ":"",n]})]},t.id)}),e.categories.map(t=>i("a",{href:"?"+encodeURIComponent(t.slug),onClick:n=>{n.preventDefault(),j(t)},className:t.sponsorship?"exhibitor-categories__sponsorship":"exhibitor-categories__cat",children:t.name},t.id))]}),e.description||e.logo?a("div",{className:p("exhibitor-description",{collapsed:o.collapsed&&!o.disableCollapse}),children:[e.logo?i("div",{className:p("exhibitor-description__logo",{"exhibitor-description__logo--left":!e.description}),children:i("img",{src:e.logo,alt:e.name,crossOrigin:"anonymous"})}):null,e.description?i("span",{className:"exhibitor-description__content",dir:"auto",dangerouslySetInnerHTML:{__html:X(e.description)},onClick:b}):null]}):null,(!!e.schedule?.length||!!e.booths[0]?.schedule.length)&&i(he,{events:[...e.schedule||e.booths[0]?.schedule||[]].sort((t,n)=>new Date(t.startDate).getTime()-new Date(n.startDate).getTime())}),!r.kiosk&&e.videoUrl&&navigator.onLine&&i("div",{className:"exhibitor-video",children:i("iframe",{src:e.videoUrl,"data-allow":"encrypted-media; autoplay; fullscreen",title:m("Exhibitor Video"),allowFullScreen:!0})}),e.gallery&&i("div",{className:"exhibitor-slider",onClick:()=>u(d.ViewGallery),children:i(G,{children:i(O,{fallback:null,children:i(z,{className:r.responsiveClass,onOpenGallery:()=>l.openGallery(),onCloseGallery:()=>l.closeGallery(),onImageLoadHeightUpdate:R,images:e.gallery})})})}),!r.kiosk&&e.marketMaterials&&a(C,{children:[i("div",{className:"exhibitor-sep"}),i(se,{list:e.marketMaterials})]}),o.showEdit&&i("div",{className:"exhibitor-sep"}),!r.kiosk&&o.showEdit&&i("div",{className:"exhibitor-edit",children:i(U,{size:"sm",variant:"secondary",onClick:q,children:m("Edit")})}),o.anyAddress&&a("div",{className:"exhibitor-meta",children:[!!(e.address||e.address2)&&a("div",{className:"exhibitor-meta__item",children:[i("div",{className:"exhibitor-meta__icon",children:i("i",{className:"icon-marker-pin-solid"})}),a("div",{className:"exhibitor-meta__content",children:[e.address,!!e.address2&&i("div",{children:e.address2}),!!(e.city||e.state||e.zip)&&a("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&&a("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=>N(t,d.ClickPhone),children:e.phone1})})]}),!!e.website&&a("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=>N(t,d.ClickWebsite),children:o.websiteTrimmed})})]}),!!e.email&&a("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=>N(t,d.ClickEmail),children:e.email})})]}),o.anySocial&&a("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(W,{exhibitor:e})]}),r.kiosk&&x&&!_?i("div",{className:"show-details-button",children:i("button",{type:"button",onClick:()=>B(!0),children:m("Show More")})}):null]}),r.kiosk&&x&&_?i("button",{type:"button",className:"hide-details-button",onClick:()=>B(!1),children:i("i",{className:"icon-chevron-up-narrow"})}):null]})});function P(){const e=window.navigator,c={title:r.selectedExhibitor.name,url:window.location.href};ne&&e?.canShare&&e.canShare(c)?e.share(c):l.toggleModal("share")}function j(e){l.clickCategory(e)}function q(e){if(r.kiosk)return e.preventDefault();e.target.blur();const c=o.sendLinkEmail;if(!window.confirm(m("Send login instructions to {{email}} to edit profile?",{email:c}))||S.EXPO==="expo")return;const h=new XMLHttpRequest;h.open("POST",f.sendLoginLinkUrl),h.setRequestHeader("Content-Type","application/json");function b(){alert(m("Error sending login instructions"))}h.onload=function(k){if(this.status!==200){b();return}alert(m("A link to edit profile was sent to {{email}}",{email:c}))},h.onerror=function(k){oe.error("Error",k),b()},h.send(JSON.stringify({id:o.exhibitor.id}))}function $(){o.exhibitor.bookmarked=!o.exhibitor.bookmarked,r.onBookmarkClick&&r.onBookmarkClick({name:o.exhibitor.name,bookmarked:o.exhibitor.bookmarked,externalId:o.exhibitor.externalId})}function F(){o.exhibitor.visited=!o.exhibitor.visited,r.onVisitedClick&&r.onVisitedClick({name:o.exhibitor.name,visited:o.exhibitor.visited,externalId:o.exhibitor.externalId})}}export default()=>T(()=>i(C,{children:!r.menu&&r.selectedExhibitor?i(ge,{}):null}));
1
+ import{jsx as i,jsxs as a,Fragment as C}from"react/jsx-runtime";import p from"classnames";import{useLocalStore as Z,useObserver as T}from"mobx-react-lite";import ee,{Suspense as O,useRef as y,useState as I,useEffect as ie}from"react";import f from"../data";import l,{uiState as r}from"../store";import{RegularBooth as te}from"../store/BoothStore";import{GaEventActions as h,sendEventToGa as D}from"../tools/gtag";import oe from"../tools/logger";import S from"../tools/settings";import{t as d,getLocale as re}from"../utils/i18n";import ne from"../utils/is-mobile";import{useReaction as ae}from"../utils/mobx";import U from"./Button";import G from"./ErrorBoundary";import"./Exhibitor.scss";import se from"./MarketMaterialList";import le from"./RebookingNotes";import ce,{defaultRebookingOptions as de}from"./RebookingRadioGroup";import he from"./Schedule";import me from"./SidebarActions";import ue from"../utils/useHeatmapOverlay";import be from"./Alert";import{Transition as ke}from"react-transition-group";const z=ee.lazy(()=>import("./Gallery/Gallery"));function ge(){const w=y(),o=Z(()=>({collapsed:!0,updateOverlayContent:null,get exhibitor(){return r.selectedExhibitor},get websiteTrimmed(){return this.exhibitor.website?this.exhibitor.website.replace(/^(http(s?):\/\/)([^/]+)(\/)?$/i,"$3"):""},get anySocial(){return r.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||r.overlayPosition==="left"&&(this.exhibitor.description||"").length<800},get showEdit(){return!!(f.sendLoginLinkUrl&&this.sendLinkEmail)},get sendLinkEmail(){return this.exhibitor.privateEmail||this.exhibitor.email}})),{heatmapBar:A}=ue(o.exhibitor),[x,M]=I(!1),[_,B]=I(!1),v=y(null);ie(()=>((()=>{if(v.current){const c=v.current.offsetHeight;M(c>300)}})(),()=>{l.exhibitorStore.rebookingStateChangeRequested=!1}),[]),ae(()=>o.exhibitor,()=>{w.current&&(w.current.parentElement.scrollTop=0),o.collapsed=!0});function N(e,c){if(u(c),r.kiosk)return e.preventDefault()}function H(e,c,m){D(h.ClickCustomButton,o.exhibitor.name);const b={externalId:o.exhibitor.externalId,buttonNumber:e,buttonUrl:c,preventDefault:m.preventDefault.bind(m)};r.onExhibitorCustomButtonClick&&r.onExhibitorCustomButtonClick(b)}function u(e){D(e,o.exhibitor.name)}const E=y(),V={entering:{opacity:1},entered:{opacity:1},exiting:{opacity:0},exited:{opacity:0}},L=150;return T(()=>{const e=o.exhibitor,c=f.isRebooking?(()=>{const t=new Set;for(const s of e.booths)s instanceof te&&s.size&&t.add(s.size);const n=Array.from(t);return a("div",{children:[n.length>0&&i("div",{className:"booth__infos",style:{padding:"0 15px",marginBottom:"1rem"},children:a("div",{className:"booth__info",children:[i("div",{className:"booth__info-icon",children:i("i",{className:"icon-size"})}),a("div",{className:"booth__info-body",children:[i("div",{className:"booth__info-title",children:d("Size")}),i("div",{className:"booth__info-val",children:n.join(", ")})]})]})}),i(ce,{showTitle:!1,options:de,checked:e.rebookingState.toString(),onChange:s=>l.exhibitorStore.setRebookingState(e,parseInt(s.target.value),e.rebookingNote)}),i(le,{state:"default",value:e.rebookingNote||"",onClickSave:s=>l.exhibitorStore.setRebookingState(e,e.rebookingState,s)}),i(ke,{in:l.exhibitorStore.rebookingStateChangeRequested,nodeRef:E,timeout:L,appear:!0,enter:!0,exit:!0,mountOnEnter:!0,unmountOnExit:!0,children:s=>i("div",{ref:E,style:{position:"fixed",bottom:"1rem",left:"1rem",zIndex:9999,transition:`opacity ${L}ms ease-in-out`,opacity:0,...V[s]},children:i(be,{title:l.exhibitorStore.rebookingStateSaved?d("Changes saved"):d("Oops! Something went wrong"),variant:l.exhibitorStore.rebookingStateSaved?"success":"error",inline:!0,closable:!0,onClose:()=>{l.exhibitorStore.rebookingStateChangeRequested=!1}})})})]})})():null,m=p({exhibitor:!0,"is-featured":e.featured,bookmarked:e.bookmarked,[r.responsiveClass]:!0}),b=()=>{o.collapsed=!1,setTimeout(o.updateOverlayContent)};function k(t,n,s){return!t||!n||r.kiosk||r.previewMode?null:i("div",{className:"exhibitor-custom-button",children:i(U,{link:n,inline:!0,onClick:g=>{H(s,n,g)},target:"_blank",children:t})},s)}const W=({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 X(t){if(t===null)return"";const n=t.split(RegExp("(?=!\\*\\/\\/\\|\\|\\^\\^[a-z]{2}\\^\\^\\/\\/\\|\\|\\*!)")),s=`!*//||^^${re()}^^//||*!`,g=n.find(Q=>Q.startsWith(s));return g!=null?g.substring(18):n[0].startsWith("!*//||^^")&&n[0].length>18?n[0].substring(18):n[0]}function K(){return!f.hideShareButton&&!r.kiosk&&window.location.host.endsWith(".expofp.com")&&S.EXPO!=="globalaltsmiami2024"}function R(){o.updateOverlayContent()}const J=t=>/^\d+$/.test(t),Y=t=>f.shortLevelName?t.layer?.shortName:t.layer?.description;return a("div",{className:m,"aria-label":d("Details"),children:[a("div",{className:"exhibitor__header",children:[a("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:()=>l.searchStore.handleBackAction(),className:"exhibitor__header-close",children:i("i",{className:"icon-close"})})]}),c||a(C,{children:[i("div",{className:"exhibitor__buttons",children:!r.isGuidedToursActive&&i(me,{showBookmark:!r.disableBookmarked&&!f.hideBookmarks&&!r.kiosk,showDirections:e.booths.length>0&&S.wayfinding,inBookmark:o.exhibitor.bookmarked,showShare:K(),showVisited:!r.kiosk,visited:o.exhibitor.visited,onClickBookmark:$,onClickShare:P,onClickDirections:()=>{l.routeStore.clickRoute(null,l.routeStore.tempToBooth||e.booths[0])},onClickVisited:F})}),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(G,{children:i(O,{fallback:null,children:i(z,{className:r.responsiveClass,onOpenGallery:()=>l.openGallery(),onCloseGallery:()=>l.closeGallery(),onImageLoadHeightUpdate:R,leading:!0,images:[e.leadingImageUrl]})})})}):null,a("div",{className:p("exhibitor__details",{"details-hidden":r.kiosk&&x&&!_}),ref:v,children:[a("div",{className:p("exhibitor-categories",{"is-links-disabled":r.isGuidedToursActive}),children:[e.featured&&i("div",{className:"exhibitor-featured",children:d("Featured")}),e.booths.map(t=>{const n=Y(t),s=g=>{g.preventDefault(),l.toggleMapOverlay(),l.selectBooth(t)};return a("a",{href:`?${t.slug}`,onClick:s,className:"exhibitor-categories__booth",children:[i("div",{className:"exhibitor-categories__booth-name",children:t.name}),n&&a("div",{className:"exhibitor-categories__booth-level",children:[J(n)?d("Level")+" ":"",n]})]},t.id)}),e.categories.map(t=>i("a",{href:"?"+encodeURIComponent(t.slug),onClick:n=>{n.preventDefault(),j(t)},className:t.sponsorship?"exhibitor-categories__sponsorship":"exhibitor-categories__cat",children:t.name},t.id))]}),e.description||e.logo?a("div",{className:p("exhibitor-description",{collapsed:o.collapsed&&!o.disableCollapse}),children:[e.logo?i("div",{className:p("exhibitor-description__logo",{"exhibitor-description__logo--left":!e.description}),children:i("img",{src:e.logo,alt:e.name,crossOrigin:"anonymous"})}):null,e.description?i("span",{className:"exhibitor-description__content",dir:"auto",dangerouslySetInnerHTML:{__html:X(e.description)},onClick:b}):null]}):null,(!!e.schedule?.length||!!e.booths[0]?.schedule.length)&&i(he,{events:[...e.schedule||e.booths[0]?.schedule||[]].sort((t,n)=>new Date(t.startDate).getTime()-new Date(n.startDate).getTime())}),!r.kiosk&&e.videoUrl&&navigator.onLine&&i("div",{className:"exhibitor-video",children:i("iframe",{src:e.videoUrl,"data-allow":"encrypted-media; autoplay; fullscreen",title:d("Exhibitor Video"),allowFullScreen:!0})}),e.gallery&&i("div",{className:"exhibitor-slider",onClick:()=>u(h.ViewGallery),children:i(G,{children:i(O,{fallback:null,children:i(z,{className:r.responsiveClass,onOpenGallery:()=>l.openGallery(),onCloseGallery:()=>l.closeGallery(),onImageLoadHeightUpdate:R,images:e.gallery})})})}),!r.kiosk&&e.marketMaterials&&a(C,{children:[i("div",{className:"exhibitor-sep"}),i(se,{list:e.marketMaterials})]}),o.showEdit&&i("div",{className:"exhibitor-sep"}),!r.kiosk&&o.showEdit&&i("div",{className:"exhibitor-edit",children:i(U,{size:"sm",variant:"secondary",onClick:q,children:d("Edit")})}),o.anyAddress&&a("div",{className:"exhibitor-meta",children:[!!(e.address||e.address2)&&a("div",{className:"exhibitor-meta__item",children:[i("div",{className:"exhibitor-meta__icon",children:i("i",{className:"icon-marker-pin-solid"})}),a("div",{className:"exhibitor-meta__content",children:[e.address,!!e.address2&&i("div",{children:e.address2}),!!(e.city||e.state||e.zip)&&a("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&&a("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=>N(t,h.ClickPhone),children:e.phone1})})]}),!!e.website&&a("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=>N(t,h.ClickWebsite),children:o.websiteTrimmed})})]}),!!e.email&&a("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=>N(t,h.ClickEmail),children:e.email})})]}),o.anySocial&&a("div",{className:"exhibitor-meta__socials",children:[i("a",{href:e.facebook,className:"exhibitor-meta__social",onClick:()=>u(h.ClickFacebook),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-facebook"})}),i("a",{href:e.instagram,className:"exhibitor-meta__social",onClick:()=>u(h.ClickInstagaram),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-instagram"})}),i("a",{href:e.linkedin,className:"exhibitor-meta__social",onClick:()=>u(h.ClickLinkedin),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-linkedin"})}),i("a",{href:e.twitter,className:"exhibitor-meta__social",onClick:()=>u(h.ClickTwitter),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-twitter-x"})}),i("a",{href:e.xing,className:"exhibitor-meta__social",onClick:()=>u(h.ClickXing),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-xing"})}),i("a",{href:e.youtube,className:"exhibitor-meta__social",onClick:()=>u(h.ClickYoutube),target:"_blank",rel:"noopener noreferrer",children:i("i",{className:"icon-youtube"})})]})]}),i(W,{exhibitor:e})]}),r.kiosk&&x&&!_?i("div",{className:"show-details-button",children:i("button",{type:"button",onClick:()=>B(!0),children:d("Show More")})}):null]}),r.kiosk&&x&&_?i("button",{type:"button",className:"hide-details-button",onClick:()=>B(!1),children:i("i",{className:"icon-chevron-up-narrow"})}):null]})});function P(){const e=window.navigator,c={title:r.selectedExhibitor.name,url:window.location.href};ne&&e?.canShare&&e.canShare(c)?e.share(c):l.toggleModal("share")}function j(e){l.clickCategory(e)}function q(e){if(r.kiosk)return e.preventDefault();e.target.blur();const c=o.sendLinkEmail;if(!window.confirm(d("Send login instructions to {{email}} to edit profile?",{email:c}))||S.EXPO==="expo")return;const m=new XMLHttpRequest;m.open("POST",f.sendLoginLinkUrl),m.setRequestHeader("Content-Type","application/json");function b(){alert(d("Error sending login instructions"))}m.onload=function(k){if(this.status!==200){b();return}alert(d("A link to edit profile was sent to {{email}}",{email:c}))},m.onerror=function(k){oe.error("Error",k),b()},m.send(JSON.stringify({id:o.exhibitor.id}))}function $(){o.exhibitor.bookmarked=!o.exhibitor.bookmarked,r.onBookmarkClick&&r.onBookmarkClick({name:o.exhibitor.name,bookmarked:o.exhibitor.bookmarked,externalId:o.exhibitor.externalId})}function F(){o.exhibitor.visited=!o.exhibitor.visited,r.onVisitedClick&&r.onVisitedClick({name:o.exhibitor.name,visited:o.exhibitor.visited,externalId:o.exhibitor.externalId})}}export default()=>T(()=>i(C,{children:!r.menu&&r.selectedExhibitor?i(ge,{}):null}));
@@ -1 +1 @@
1
- import{jsx as o,jsxs as m}from"react/jsx-runtime";import{useMemo as n}from"react";import"./HeatmapLegend.scss";import{getColorFromGradient as p}from"../tools/Color";import h from"classnames";const g=({min:e,max:r,className:d,style:i})=>{const t=n(()=>{const a=r-e;return a<=0?2:Math.min(a+1,5)},[e,r]),s=n(()=>Array.from({length:t},(a,l)=>{const c=l/(t-1);return Math.round(e+(r-e)*c)}),[e,r,t]),u=n(()=>s.map(a=>p(a,e,r)),[s,e,r]);return m("div",{className:h("heatmap-legend",d),style:i,role:"img","aria-label":"Heatmap intensity scale",children:[o("div",{className:"heatmap-legend__colors",style:{background:`linear-gradient(to right, ${u.join(", ")})`},"aria-hidden":"true"}),o("div",{className:"heatmap-legend__values",children:s.map((a,l)=>o("span",{className:"heatmap-legend__value","aria-hidden":"true",children:a},l))})]})};export default g;
1
+ import{jsx as l,jsxs as c}from"react/jsx-runtime";import{useMemo as n}from"react";import"./HeatmapLegend.scss";import{getColorFromGradient as p}from"../tools/Color";import h from"classnames";import{t as g}from"../utils/i18n";const _=({min:e,max:a,className:i,style:d})=>{const t=n(()=>{const r=a-e;return r<=0?2:Math.min(r+1,5)},[e,a]),s=n(()=>Array.from({length:t},(r,o)=>{const u=o/(t-1);return Math.round(e+(a-e)*u)}),[e,a,t]),m=n(()=>s.map(r=>p(r,e,a)),[s,e,a]);return c("div",{className:h("heatmap-legend",i),style:d,role:"img","aria-label":g("Heatmap intensity scale"),children:[l("div",{className:"heatmap-legend__colors",style:{background:`linear-gradient(to right, ${m.join(", ")})`},"aria-hidden":"true"}),l("div",{className:"heatmap-legend__values",children:s.map((r,o)=>l("span",{className:"heatmap-legend__value","aria-hidden":"true",children:r},o))})]})};export default _;
@@ -22,8 +22,9 @@ declare class KioskStore {
22
22
  handleChange(event: any): void;
23
23
  initialPtScale: any;
24
24
  setInitialPtScale(ptscale: number): void;
25
- handleClick({ point }: {
26
- point: any;
25
+ handleClick(point: {
26
+ x: number;
27
+ y: number;
27
28
  }): void;
28
29
  handleNavigationChange(): void;
29
30
  }
@@ -1 +1 @@
1
- import{__esDecorate as s,__runInitializers as d}from"tslib";import{action as r,computed as u,observable as R,runInAction as O,toJS as c}from"mobx";import{removeKiosk as j,getSavedKiosk as A,saveKiosk as E}from"./SetKiosk";import a from"../../store";import{isPointVisible as X}from"../Map/visibleArea";import{areLayersEnabled as Y}from"../../utils/areLayersEnabled";let q=(()=>{let i=[],m,k,g,S,f=[],p=[],v,_,C=[],K=[],M,b,y,D,P,I,F,z,N,x,T,U,w;return class{static{const t=typeof Symbol=="function"&&Symbol.metadata?Object.create(null):void 0;m=[u],k=[r],g=[u],S=[R],v=[u],_=[R],M=[r],b=[r],y=[r],D=[r],P=[r],I=[r],F=[r],z=[r],N=[r],x=[r],T=[r],U=[r],w=[r],s(this,null,m,{kind:"getter",name:"kiosk",static:!1,private:!1,access:{has:e=>"kiosk"in e,get:e=>e.kiosk},metadata:t},null,i),s(this,null,k,{kind:"method",name:"setKiosk",static:!1,private:!1,access:{has:e=>"setKiosk"in e,get:e=>e.setKiosk},metadata:t},null,i),s(this,null,g,{kind:"getter",name:"renderer",static:!1,private:!1,access:{has:e=>"renderer"in e,get:e=>e.renderer},metadata:t},null,i),s(this,null,v,{kind:"getter",name:"hasUnsavedChanges",static:!1,private:!1,access:{has:e=>"hasUnsavedChanges"in e,get:e=>e.hasUnsavedChanges},metadata:t},null,i),s(this,null,M,{kind:"method",name:"addStatusMessage",static:!1,private:!1,access:{has:e=>"addStatusMessage"in e,get:e=>e.addStatusMessage},metadata:t},null,i),s(this,null,b,{kind:"method",name:"clearStatusMessages",static:!1,private:!1,access:{has:e=>"clearStatusMessages"in e,get:e=>e.clearStatusMessages},metadata:t},null,i),s(this,null,y,{kind:"method",name:"startCleanupMessages",static:!1,private:!1,access:{has:e=>"startCleanupMessages"in e,get:e=>e.startCleanupMessages},metadata:t},null,i),s(this,null,D,{kind:"method",name:"resetCamera",static:!1,private:!1,access:{has:e=>"resetCamera"in e,get:e=>e.resetCamera},metadata:t},null,i),s(this,null,P,{kind:"method",name:"restoreData",static:!1,private:!1,access:{has:e=>"restoreData"in e,get:e=>e.restoreData},metadata:t},null,i),s(this,null,I,{kind:"method",name:"handleSetupReady",static:!1,private:!1,access:{has:e=>"handleSetupReady"in e,get:e=>e.handleSetupReady},metadata:t},null,i),s(this,null,F,{kind:"method",name:"handleClose",static:!1,private:!1,access:{has:e=>"handleClose"in e,get:e=>e.handleClose},metadata:t},null,i),s(this,null,z,{kind:"method",name:"handleDelete",static:!1,private:!1,access:{has:e=>"handleDelete"in e,get:e=>e.handleDelete},metadata:t},null,i),s(this,null,N,{kind:"method",name:"handleSave",static:!1,private:!1,access:{has:e=>"handleSave"in e,get:e=>e.handleSave},metadata:t},null,i),s(this,null,x,{kind:"method",name:"handleChange",static:!1,private:!1,access:{has:e=>"handleChange"in e,get:e=>e.handleChange},metadata:t},null,i),s(this,null,T,{kind:"method",name:"setInitialPtScale",static:!1,private:!1,access:{has:e=>"setInitialPtScale"in e,get:e=>e.setInitialPtScale},metadata:t},null,i),s(this,null,U,{kind:"method",name:"handleClick",static:!1,private:!1,access:{has:e=>"handleClick"in e,get:e=>e.handleClick},metadata:t},null,i),s(this,null,w,{kind:"method",name:"handleNavigationChange",static:!1,private:!1,access:{has:e=>"handleNavigationChange"in e,get:e=>e.handleNavigationChange},metadata:t},null,i),s(null,null,S,{kind:"field",name:"savedKiosk",static:!1,private:!1,access:{has:e=>"savedKiosk"in e,get:e=>e.savedKiosk,set:(e,l)=>{e.savedKiosk=l}},metadata:t},f,p),s(null,null,_,{kind:"field",name:"statusMessages",static:!1,private:!1,access:{has:e=>"statusMessages"in e,get:e=>e.statusMessages,set:(e,l)=>{e.statusMessages=l}},metadata:t},C,K),t&&Object.defineProperty(this,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:t})}get kiosk(){return a.uiState.kioskData}setKiosk(t){a.uiState.setKioskData(t)}get renderer(){return a.rendererService.renderer}getCameraState(){const t=a.rendererService.getCameraState();return t?{mapInitialPtScale:this.initialPtScale,mapPtScale:t.ptScale,mapCenterX:t.center.x,mapCenterY:t.center.y,mapRollDegrees:t.roll,mapPitch:t.pitch}:{}}savedKiosk=(d(this,i),d(this,f,void 0));get hasUnsavedChanges(){const t=this.savedKiosk,e=c(this.kiosk);if(!e||!t)return!!e!=!!t;const l=Object.keys(t),o=Object.keys(e);if(l.length!==o.length)return!0;for(const n of l)if(!(n in e)||t[n]!==e[n])return!0;return!1}statusMessages=(d(this,p),d(this,C,[]));addStatusMessage(t){this.statusMessages=[{...t,id:Date.now()}],this.startCleanupMessages()}clearStatusMessages(){this.statusMessages=[]}statusMessageTimer=(d(this,K),0);startCleanupMessages(){clearTimeout(this.statusMessageTimer),this.statusMessageTimer=window.setTimeout(()=>this.clearStatusMessages(),1e3)}async resetCamera(){const{z:t,mapRollDegrees:e,mapInitialPtScale:l,mapPtScale:o,mapCenterX:n,mapCenterY:h}=this.kiosk||{};await this.renderer.controls.resetCamera({pan:!0,zoom:!0,roll:!0,pitch:!0},!0),O(()=>{Number.isFinite(l)&&Number.isFinite(o)&&o>0&&this.renderer.controls.zoomBy(l/o,!0),Number.isFinite(n)&&Number.isFinite(h)&&this.renderer.controls.panTo(n,h,!0),Number.isFinite(e)&&this.renderer.controls.rollTo(e,!0),t&&a.fp.activateFloor({name:t})})}restoreData(){const t=A();return t&&(this.setKiosk(t),this.savedKiosk=t,a.uiState.kiosk=!0,this.resetCamera()),t}handleSetupReady(){this.restoreData(),a.uiState.kiosk=!0,a.uiState.hideFreeOrDemo=!0,a.uiState.setForceDimm(!0),a.searchStore.setSearchText(""),a.searchStore.setFocused(!1)}handleClose(){this.setKiosk(null),a.uiState.setForceDimm(!1),a.uiState.enableSetKioskMode(!1),a.searchStore.closeSearch(),this.resetCamera()}handleDelete(){j(),this.setKiosk(null),a.uiState.resetMapSettings(),a.uiState.resetUIScale(),this.resetCamera(),this.addStatusMessage({variant:"success",title:"Deleted"})}handleSave(){const t=c(this.kiosk),e=this.getCameraState(),l={...t,...e};if(!X(this.renderer,l)){this.addStatusMessage({variant:"error",title:"Kiosk not visible"});return}this.setKiosk(l),E(l),a.uiState.setUIScale(l.uiScale,!0),this.addStatusMessage({variant:"success",title:"Saved"}),this.savedKiosk=l}delayChange(t){requestAnimationFrame(()=>t?.())}handleChange(t){const e=c(this.kiosk);e&&(Number.isFinite(t.angle)&&this.setKiosk({...e,heading:t.angle}),Number.isFinite(t.scale)&&(this.setKiosk({...e,uiScale:t.scale}),this.delayChange(()=>a.uiState.setUIScale(t.scale,!1))),Number.isFinite(t.percent)&&this.setKiosk({...e,iconSizePercent:t.percent}))}initialPtScale;setInitialPtScale(t){if(this.initialPtScale)return;this.initialPtScale=t;const e=c(this.kiosk);e&&this.setKiosk({...e,mapInitialPtScale:t})}handleClick({point:t}){const e=c(this.kiosk),l=a.fp.getFloors(),o=Y()?l.find(h=>h.active)?.name:null,n=a.uiState.uiScale;this.setKiosk({...e,x:t.x,y:t.y,z:o,uiScale:e?.uiScale||n,heading:e?.heading||0,iconSizePercent:e?.iconSizePercent||100,...this.getCameraState()})}handleNavigationChange(){const t=c(this.kiosk);t&&this.setKiosk({...t,...this.getCameraState()})}}})();export default new q;
1
+ import{__esDecorate as s,__runInitializers as d}from"tslib";import{action as r,computed as u,observable as O,runInAction as j,toJS as c}from"mobx";import{removeKiosk as A,getSavedKiosk as E,saveKiosk as X}from"./SetKiosk";import a from"../../store";import{isPointVisible as Y}from"../Map/visibleArea";import{areLayersEnabled as q}from"../../utils/areLayersEnabled";import{t as m}from"../../utils/i18n";let B=(()=>{let i=[],k,g,S,f,p=[],v=[],_,C,K=[],M=[],b,y,D,P,I,F,z,N,x,T,U,w,R;return class{static{const t=typeof Symbol=="function"&&Symbol.metadata?Object.create(null):void 0;k=[u],g=[r],S=[u],f=[O],_=[u],C=[O],b=[r],y=[r],D=[r],P=[r],I=[r],F=[r],z=[r],N=[r],x=[r],T=[r],U=[r],w=[r],R=[r],s(this,null,k,{kind:"getter",name:"kiosk",static:!1,private:!1,access:{has:e=>"kiosk"in e,get:e=>e.kiosk},metadata:t},null,i),s(this,null,g,{kind:"method",name:"setKiosk",static:!1,private:!1,access:{has:e=>"setKiosk"in e,get:e=>e.setKiosk},metadata:t},null,i),s(this,null,S,{kind:"getter",name:"renderer",static:!1,private:!1,access:{has:e=>"renderer"in e,get:e=>e.renderer},metadata:t},null,i),s(this,null,_,{kind:"getter",name:"hasUnsavedChanges",static:!1,private:!1,access:{has:e=>"hasUnsavedChanges"in e,get:e=>e.hasUnsavedChanges},metadata:t},null,i),s(this,null,b,{kind:"method",name:"addStatusMessage",static:!1,private:!1,access:{has:e=>"addStatusMessage"in e,get:e=>e.addStatusMessage},metadata:t},null,i),s(this,null,y,{kind:"method",name:"clearStatusMessages",static:!1,private:!1,access:{has:e=>"clearStatusMessages"in e,get:e=>e.clearStatusMessages},metadata:t},null,i),s(this,null,D,{kind:"method",name:"startCleanupMessages",static:!1,private:!1,access:{has:e=>"startCleanupMessages"in e,get:e=>e.startCleanupMessages},metadata:t},null,i),s(this,null,P,{kind:"method",name:"resetCamera",static:!1,private:!1,access:{has:e=>"resetCamera"in e,get:e=>e.resetCamera},metadata:t},null,i),s(this,null,I,{kind:"method",name:"restoreData",static:!1,private:!1,access:{has:e=>"restoreData"in e,get:e=>e.restoreData},metadata:t},null,i),s(this,null,F,{kind:"method",name:"handleSetupReady",static:!1,private:!1,access:{has:e=>"handleSetupReady"in e,get:e=>e.handleSetupReady},metadata:t},null,i),s(this,null,z,{kind:"method",name:"handleClose",static:!1,private:!1,access:{has:e=>"handleClose"in e,get:e=>e.handleClose},metadata:t},null,i),s(this,null,N,{kind:"method",name:"handleDelete",static:!1,private:!1,access:{has:e=>"handleDelete"in e,get:e=>e.handleDelete},metadata:t},null,i),s(this,null,x,{kind:"method",name:"handleSave",static:!1,private:!1,access:{has:e=>"handleSave"in e,get:e=>e.handleSave},metadata:t},null,i),s(this,null,T,{kind:"method",name:"handleChange",static:!1,private:!1,access:{has:e=>"handleChange"in e,get:e=>e.handleChange},metadata:t},null,i),s(this,null,U,{kind:"method",name:"setInitialPtScale",static:!1,private:!1,access:{has:e=>"setInitialPtScale"in e,get:e=>e.setInitialPtScale},metadata:t},null,i),s(this,null,w,{kind:"method",name:"handleClick",static:!1,private:!1,access:{has:e=>"handleClick"in e,get:e=>e.handleClick},metadata:t},null,i),s(this,null,R,{kind:"method",name:"handleNavigationChange",static:!1,private:!1,access:{has:e=>"handleNavigationChange"in e,get:e=>e.handleNavigationChange},metadata:t},null,i),s(null,null,f,{kind:"field",name:"savedKiosk",static:!1,private:!1,access:{has:e=>"savedKiosk"in e,get:e=>e.savedKiosk,set:(e,l)=>{e.savedKiosk=l}},metadata:t},p,v),s(null,null,C,{kind:"field",name:"statusMessages",static:!1,private:!1,access:{has:e=>"statusMessages"in e,get:e=>e.statusMessages,set:(e,l)=>{e.statusMessages=l}},metadata:t},K,M),t&&Object.defineProperty(this,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:t})}get kiosk(){return a.uiState.kioskData}setKiosk(t){a.uiState.setKioskData(t)}get renderer(){return a.rendererService.renderer}getCameraState(){const t=a.rendererService.getCameraState();return t?{mapInitialPtScale:this.initialPtScale,mapPtScale:t.ptScale,mapCenterX:t.center.x,mapCenterY:t.center.y,mapRollDegrees:t.roll,mapPitch:t.pitch}:{}}savedKiosk=(d(this,i),d(this,p,void 0));get hasUnsavedChanges(){const t=this.savedKiosk,e=c(this.kiosk);if(!e||!t)return!!e!=!!t;const l=Object.keys(t),o=Object.keys(e);if(l.length!==o.length)return!0;for(const n of l)if(!(n in e)||t[n]!==e[n])return!0;return!1}statusMessages=(d(this,v),d(this,K,[]));addStatusMessage(t){this.statusMessages=[{...t,id:Date.now()}],this.startCleanupMessages()}clearStatusMessages(){this.statusMessages=[]}statusMessageTimer=(d(this,M),0);startCleanupMessages(){clearTimeout(this.statusMessageTimer),this.statusMessageTimer=window.setTimeout(()=>this.clearStatusMessages(),1e3)}async resetCamera(){const{z:t,mapRollDegrees:e,mapInitialPtScale:l,mapPtScale:o,mapCenterX:n,mapCenterY:h}=this.kiosk||{};await this.renderer.controls.resetCamera({pan:!0,zoom:!0,roll:!0,pitch:!0},!0),j(()=>{Number.isFinite(l)&&Number.isFinite(o)&&o>0&&this.renderer.controls.zoomBy(l/o,!0),Number.isFinite(n)&&Number.isFinite(h)&&this.renderer.controls.panTo(n,h,!0),Number.isFinite(e)&&this.renderer.controls.rollTo(e,!0),t&&a.fp.activateFloor({name:t})})}restoreData(){const t=E();return t&&(this.setKiosk(t),this.savedKiosk=t,a.uiState.kiosk=!0,this.resetCamera()),t}handleSetupReady(){this.restoreData(),a.uiState.kiosk=!0,a.uiState.hideFreeOrDemo=!0,a.uiState.setForceDimm(!0),a.searchStore.setSearchText(""),a.searchStore.setFocused(!1)}handleClose(){this.setKiosk(null),a.uiState.setForceDimm(!1),a.uiState.enableSetKioskMode(!1),a.searchStore.closeSearch(),this.resetCamera()}handleDelete(){A(),this.setKiosk(null),a.uiState.resetMapSettings(),a.uiState.resetUIScale(),this.resetCamera(),this.addStatusMessage({variant:"success",title:m("Deleted")})}handleSave(){const t=c(this.kiosk),e=this.getCameraState(),l={...t,...e};if(!Y(this.renderer,l)){this.addStatusMessage({variant:"error",title:m("Kiosk not visible")});return}this.setKiosk(l),X(l),a.uiState.setUIScale(l.uiScale,!0),this.addStatusMessage({variant:"success",title:m("Saved")}),this.savedKiosk=l}delayChange(t){requestAnimationFrame(()=>t?.())}handleChange(t){const e=c(this.kiosk);e&&(Number.isFinite(t.angle)&&this.setKiosk({...e,heading:t.angle}),Number.isFinite(t.scale)&&(this.setKiosk({...e,uiScale:t.scale}),this.delayChange(()=>a.uiState.setUIScale(t.scale,!1))),Number.isFinite(t.percent)&&this.setKiosk({...e,iconSizePercent:t.percent}))}initialPtScale;setInitialPtScale(t){if(this.initialPtScale)return;this.initialPtScale=t;const e=c(this.kiosk);e&&this.setKiosk({...e,mapInitialPtScale:t})}handleClick(t){const e=c(this.kiosk),l=a.fp.getFloors(),o=q()?l.find(h=>h.active)?.name:null,n=a.uiState.uiScale;this.setKiosk({...e,x:t.x,y:t.y,z:o,uiScale:e?.uiScale||n,heading:e?.heading||0,iconSizePercent:e?.iconSizePercent||100,...this.getCameraState()})}handleNavigationChange(){const t=c(this.kiosk);t&&this.setKiosk({...t,...this.getCameraState()})}}})();export default new B;
@@ -1 +1 @@
1
- import{jsx as e,jsxs as a}from"react/jsx-runtime";import"./RangeInput.scss";export function RangeInput({value:n,name:o,min:s,max:r,step:l,onChange:i,isDisabled:c,symbol:u}){const d=()=>i(Math.min(n+l,r)),f=()=>i(Math.max(n-l,s));let t=0;r!==s&&(t=(n-s)/(r-s)*100);let p="-50%";return t===0?p="0":t===100&&(p="-100%"),a("div",{className:"efp-range-input",children:[a("span",{className:"efp-range-input__header",children:[e("button",{type:"button",className:"efp-range-input__control",draggable:"false",onClick:f,disabled:c,"aria-label":"Decrease",children:e("i",{className:"icon-minus"})}),a("span",{className:"efp-no-select",children:[o," ",a("strong",{children:[n,u??""]})]}),e("button",{type:"button",className:"efp-range-input__control",draggable:"false",onClick:d,disabled:c,"aria-label":"Increase",children:e("i",{className:"icon-plus"})})]}),a("label",{className:"efp-range-input__input-block",children:[e("input",{className:"efp-range-input__input",name:o,type:"range",min:s,max:r,step:l,value:n,disabled:c,onChange:_=>i(Number(_.target.value))}),a("span",{className:"efp-range-input__custom-input",children:[e("span",{className:"efp-range-input__progress",style:{width:`${t}%`}}),e("span",{className:"efp-range-input__thumb",style:{insetInlineStart:`${t}%`,transform:`translateX(${p}) translateY(-50%)`}})]})]})]})}
1
+ import{jsx as e,jsxs as a}from"react/jsx-runtime";import"./RangeInput.scss";import{t as u}from"../../../../utils/i18n";export function RangeInput({value:n,name:o,min:t,max:r,step:l,onChange:i,isDisabled:p,symbol:f}){const m=()=>i(Math.min(n+l,r)),d=()=>i(Math.max(n-l,t));let s=0;r!==t&&(s=(n-t)/(r-t)*100);let c="-50%";return s===0?c="0":s===100&&(c="-100%"),a("div",{className:"efp-range-input",children:[a("span",{className:"efp-range-input__header",children:[e("button",{type:"button",className:"efp-range-input__control",draggable:"false",onClick:d,disabled:p,"aria-label":u("Decrease"),children:e("i",{className:"icon-minus"})}),a("span",{className:"efp-no-select",children:[o," ",a("strong",{children:[n,f??""]})]}),e("button",{type:"button",className:"efp-range-input__control",draggable:"false",onClick:m,disabled:p,"aria-label":u("Increase"),children:e("i",{className:"icon-plus"})})]}),a("label",{className:"efp-range-input__input-block",children:[e("input",{className:"efp-range-input__input",name:o,type:"range",min:t,max:r,step:l,value:n,disabled:p,onChange:_=>i(Number(_.target.value))}),a("span",{className:"efp-range-input__custom-input",children:[e("span",{className:"efp-range-input__progress",style:{width:`${s}%`}}),e("span",{className:"efp-range-input__thumb",style:{insetInlineStart:`${s}%`,transform:`translateX(${c}) translateY(-50%)`}})]})]})]})}
@@ -1 +1 @@
1
- import{jsx as e,Fragment as i,jsxs as t}from"react/jsx-runtime";import{useState as _}from"react";import{SetKioskForm as y}from"./SetKioskForm";import{InfoMessage as L}from"./Message/InfoMessage";import"./SetKioskComponent.scss";import{Draggable as w}from"../../Draggable";import{ConfirmDialog as K}from"./Confirm/ConfirmDialog";import N from"./SetKioskStatusMessages";import r from"../../../tools/base-runtime-url";export default function j({isSaveDisabled:c,isDeleteDisabled:m,areControlsDisabled:d,confirmOnClose:g,angle:f,uiScale:p,minUiScale:h,maxUiScale:u,uiScaleStep:k,iconSizePercent:b,isInfoVisible:v,statusMessages:S,onClose:D,onDelete:C,onSave:x,onChange:s}){const[a,n]=_(null);return t(w,{className:"efp-set-kiosk-mode",translate:{x:window.innerWidth/2,y:0},children:[t("div",{className:"efp-set-kiosk-mode__header",children:[e("img",{src:`${r}icons/dragdrop-solid.svg`,alt:"Drag and Drop Icon",width:"24",height:"24"}),e("span",{className:"efp-no-select",children:a?a.title:"Set Kiosk"}),e("button",{type:"button",draggable:"false",className:"efp-set-kiosk-mode__close","aria-label":"Close",onClick:()=>{const o=()=>{n(null)},l=()=>{D?.(),n(null)};a?o():g?n({title:"Leave without saving?",content:t(i,{children:["You have changes that ",e("strong",{children:"haven't been saved."})]}),confirmLabel:"Keep editing",cancelLabel:"Leave",onCancel:l,onConfirm:o,confirmVariant:"primary",cancelVariant:"danger"}):l()},children:e("i",{className:"icon-close"})})]}),!a&&e(N,{messages:S}),v?e(L,{list:[{id:"1",image:{src:`${r}icons/tap.svg`,alt:"Tap to set or move kiosk."},content:t(i,{children:["Tap to ",e("strong",{children:"set or move"})," kiosk."]})},{id:"2",image:{src:`${r}icons/rotate.svg`,alt:"Zoom and rotate the map before saving."},content:t(i,{children:[e("strong",{children:"Zoom and rotate"})," the map before saving."]})}]}):e(i,{children:a?e(K,{...a}):e(y,{isSaveDisabled:c,isDeleteDisabled:m,areControlsDisabled:d,onSave:()=>{x?.(),n(null)},onDelete:()=>{n({title:"Delete kiosk?",content:t(i,{children:["Are you sure you want to ",e("strong",{children:"delete this kiosk"}),"?"]}),confirmLabel:"Cancel",cancelLabel:"Delete",onConfirm:()=>{n(null)},onCancel:()=>{C?.(),n(null)},confirmVariant:"gray",cancelVariant:"danger"})},angle:f,onRotateIcon:o=>s?.({angle:o}),uiScale:p,minUiScale:h,maxUiScale:u,uiScaleStep:k,onUiScaleChange:o=>s?.({scale:o}),iconSizePercent:b,onChangeIconSizePercent:o=>s?.({percent:o})})})]})}
1
+ import{jsx as o,jsxs as i,Fragment as _}from"react/jsx-runtime";import{useState as y}from"react";import{SetKioskForm as L}from"./SetKioskForm";import{InfoMessage as w}from"./Message/InfoMessage";import"./SetKioskComponent.scss";import{Draggable as K}from"../../Draggable";import{ConfirmDialog as N}from"./Confirm/ConfirmDialog";import j from"./SetKioskStatusMessages";import r from"../../../tools/base-runtime-url";import{t as e}from"../../../utils/i18n";export default function I({isSaveDisabled:c,isDeleteDisabled:m,areControlsDisabled:d,confirmOnClose:g,angle:p,uiScale:f,minUiScale:h,maxUiScale:u,uiScaleStep:k,iconSizePercent:b,isInfoVisible:v,statusMessages:S,onClose:D,onDelete:C,onSave:x,onChange:s}){const[t,a]=y(null);return i(K,{className:"efp-set-kiosk-mode",translate:{x:window.innerWidth/2,y:0},children:[i("div",{className:"efp-set-kiosk-mode__header",children:[o("img",{src:`${r}icons/dragdrop-solid.svg`,alt:e("Drag and Drop Icon"),width:"24",height:"24"}),o("span",{className:"efp-no-select",children:t?t.title:e("Set Kiosk")}),o("button",{type:"button",draggable:"false",className:"efp-set-kiosk-mode__close","aria-label":e("Close"),onClick:()=>{const n=()=>{a(null)},l=()=>{D?.(),a(null)};t?n():g?a({title:e("Leave without saving?"),content:i("span",{children:[e("You have changes that "),o("strong",{children:e("haven't been saved.")})]}),confirmLabel:e("Keep editing"),cancelLabel:e("Leave"),onCancel:l,onConfirm:n,confirmVariant:"primary",cancelVariant:"danger"}):l()},children:o("i",{className:"icon-close"})})]}),!t&&o(j,{messages:S}),v?o(w,{list:[{id:"1",image:{src:`${r}icons/tap.svg`,alt:e("Tap to set or move kiosk.")},content:i("span",{children:[e("Tap to "),o("strong",{children:e("set or move")}),e(" kiosk.")]})},{id:"2",image:{src:`${r}icons/rotate.svg`,alt:e("Zoom and rotate the map before saving.")},content:i("span",{children:[o("strong",{children:e("Zoom and rotate")}),e(" the map before saving.")]})}]}):o(_,{children:t?o(N,{...t}):o(L,{isSaveDisabled:c,isDeleteDisabled:m,areControlsDisabled:d,onSave:()=>{x?.(),a(null)},onDelete:()=>{a({title:e("Delete kiosk?"),content:i("span",{children:[e("Are you sure you want to "),o("strong",{children:e("delete this kiosk?")})]}),confirmLabel:e("Cancel"),cancelLabel:e("Delete"),onConfirm:()=>{a(null)},onCancel:()=>{C?.(),a(null)},confirmVariant:"gray",cancelVariant:"danger"})},angle:p,onRotateIcon:n=>s?.({angle:n}),uiScale:f,minUiScale:h,maxUiScale:u,uiScaleStep:k,onUiScaleChange:n=>s?.({scale:n}),iconSizePercent:b,onChangeIconSizePercent:n=>s?.({percent:n})})})]})}
@@ -1 +1 @@
1
- import{jsx as e,jsxs as i}from"react/jsx-runtime";import"./SetKioskForm.scss";import{RangeInput as a}from"./FormInput/RangeInput";import o from"../../Button";export function SetKioskForm({onSave:n,onDelete:m,isSaveDisabled:t,isDeleteDisabled:r,areControlsDisabled:s,angle:l,onRotateIcon:c,uiScale:d,minUiScale:p,maxUiScale:k,uiScaleStep:f,onUiScaleChange:u,iconSizePercent:v,onChangeIconSizePercent:x}){return e("div",{className:"efp-set-kiosk-form",children:i("div",{className:"efp-set-kiosk-form__content",children:[i("div",{className:"efp-set-kiosk-form__inputs",children:[e(a,{value:l,name:"Icon rotation",min:0,max:360,step:1,symbol:"\xB0",isDisabled:s,onChange:c}),e(a,{value:v,name:"Icon size",min:100,max:300,step:1,symbol:"%",isDisabled:s,onChange:x}),e(a,{value:Math.round(d*100),name:"UI scale",min:p*100,max:k*100,step:f*100,symbol:"%",isDisabled:s,onChange:h=>u(h/100)})]}),i("div",{className:"efp-set-kiosk-form__controls",children:[e(o,{size:"md",variant:"gray",text:"Delete kiosk",onClick:m,disabled:r}),e(o,{size:"md",variant:"primary",text:"Save",onClick:n,disabled:t})]})]})})}
1
+ import{jsx as e,jsxs as o}from"react/jsx-runtime";import"./SetKioskForm.scss";import{RangeInput as a}from"./FormInput/RangeInput";import m from"../../Button";import{t as s}from"../../../utils/i18n";export function SetKioskForm({onSave:n,onDelete:t,isSaveDisabled:r,isDeleteDisabled:l,areControlsDisabled:i,angle:c,onRotateIcon:d,uiScale:p,minUiScale:f,maxUiScale:k,uiScaleStep:u,onUiScaleChange:v,iconSizePercent:x,onChangeIconSizePercent:h}){return e("div",{className:"efp-set-kiosk-form",children:o("div",{className:"efp-set-kiosk-form__content",children:[o("div",{className:"efp-set-kiosk-form__inputs",children:[e(a,{value:c,name:s("Icon rotation"),min:0,max:360,step:1,symbol:"\xB0",isDisabled:i,onChange:d}),e(a,{value:x,name:s("Icon size"),min:100,max:300,step:1,symbol:"%",isDisabled:i,onChange:h}),e(a,{value:Math.round(p*100),name:s("UI scale"),min:f*100,max:k*100,step:u*100,symbol:"%",isDisabled:i,onChange:_=>v(_/100)})]}),o("div",{className:"efp-set-kiosk-form__controls",children:[e(m,{size:"md",variant:"gray",text:s("Delete kiosk"),onClick:t,disabled:l}),e(m,{size:"md",variant:"primary",text:s("Save"),onClick:n,disabled:r})]})]})})}
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{useEffect as l}from"react";import i from"../../store";import{observer as d}from"mobx-react-lite";import e from"./KioskStore";import c from"./SetKiosk";import{useInit as v}from"../../utils/mobx";const m=d(()=>{v(()=>e.handleSetupReady()),l(()=>{const t=a=>e.setInitialPtScale(a);e.renderer.events.addEventListener("viewport:ptscale",t);const s=a=>e.handleClick(a);e.renderer.events.addEventListener("pointer:click",s);const r=()=>e.handleNavigationChange();return e.renderer.events.addEventListener("navigation:change",r),()=>{e.renderer.events.removeEventListener("viewport:ptscale",t),e.renderer.events.removeEventListener("pointer:click",s),e.renderer.events.removeEventListener("navigation:change",r)}},[e.renderer]);const n=!!e.kiosk;return o(c,{isSaveDisabled:n?!e.hasUnsavedChanges:!0,isDeleteDisabled:!n,areControlsDisabled:!n,confirmOnClose:n?e.hasUnsavedChanges:!1,angle:e.kiosk?.heading||0,uiScale:e.kiosk?.uiScale||i.uiState.uiScale,minUiScale:i.uiState.minUIScale,maxUiScale:i.uiState.maxUIScale,uiScaleStep:.01,iconSizePercent:e.kiosk?.iconSizePercent||100,isInfoVisible:!n,statusMessages:e.statusMessages,onClose:()=>e.handleClose(),onDelete:()=>e.handleDelete(),onSave:()=>e.handleSave(),onChange:t=>e.handleChange(t)})});export default m;
1
+ import{jsx as l}from"react/jsx-runtime";import{useEffect as c}from"react";import r from"../../store";import{observer as d}from"mobx-react-lite";import e from"./KioskStore";import v from"./SetKiosk";import{useInit as m}from"../../utils/mobx";import{isDefaultScene as S,pickDefaultScene as h}from"../../renderer/engine-core/defs";const p=d(()=>{m(()=>e.handleSetupReady()),c(()=>{const t=({ptScale:a,sceneId:i})=>{S(i)&&e.setInitialPtScale(a)};e.renderer.events.addEventListener("viewport:ptscale",t);const s=({data:a})=>{const{point:i}=h(a);e.handleClick(i)};e.renderer.events.addEventListener("pointer:click",s);const o=()=>e.handleNavigationChange();return e.renderer.events.addEventListener("navigation:change",o),()=>{e.renderer.events.removeEventListener("viewport:ptscale",t),e.renderer.events.removeEventListener("pointer:click",s),e.renderer.events.removeEventListener("navigation:change",o)}},[e.renderer]);const n=!!e.kiosk;return l(v,{isSaveDisabled:n?!e.hasUnsavedChanges:!0,isDeleteDisabled:!n,areControlsDisabled:!n,confirmOnClose:n?e.hasUnsavedChanges:!1,angle:e.kiosk?.heading||0,uiScale:e.kiosk?.uiScale||r.uiState.uiScale,minUiScale:r.uiState.minUIScale,maxUiScale:r.uiState.maxUIScale,uiScaleStep:.01,iconSizePercent:e.kiosk?.iconSizePercent||100,isInfoVisible:!n,statusMessages:e.statusMessages,onClose:()=>e.handleClose(),onDelete:()=>e.handleDelete(),onSave:()=>e.handleSave(),onChange:t=>e.handleChange(t)})});export default p;
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{getLocale as e,setLocale as r}from"../utils/i18n";import{observer as l}from"mobx-react-lite";import n from"./Radio";import"./LanguageRow.scss";const g=l(({item:a})=>o(n,{label:a.name,value:a.id,checked:a.id===e(),className:"language-row","aria-label":`Change language to ${a.name}`,onChange:()=>r(a.id)}));export default g;
1
+ import{jsx as e}from"react/jsx-runtime";import{getLocale as o,setLocale as r,t as g}from"../utils/i18n";import{observer as l}from"mobx-react-lite";import n from"./Radio";import"./LanguageRow.scss";const t=l(({item:a})=>e(n,{label:a.name,value:a.id,checked:a.id===o(),className:"language-row","aria-label":g("Change language to {{language}}",{language:a.name}),onChange:()=>r(a.id)}));export default t;
@@ -1 +1 @@
1
- import{jsx as s,jsxs as r}from"react/jsx-runtime";import"./LevelBadge.scss";const n=e=>/^\d+$/.test(e);export const LevelBadge=({level:e})=>e?s("div",{className:"efp-level-badge",children:r("span",{children:[n(e)&&s("span",{children:"Level\xA0"}),s("span",{children:e})]})}):null;export default LevelBadge;
1
+ import{jsxs as r,jsx as s}from"react/jsx-runtime";import"./LevelBadge.scss";import{t}from"../utils/i18n";const n=e=>/^\d+$/.test(e);export const LevelBadge=({level:e})=>e?s("div",{className:"efp-level-badge",children:r("span",{children:[n(e)&&r("span",{children:[t("Level"),"\xA0"]}),s("span",{children:e})]})}):null;export default LevelBadge;
@@ -1 +1 @@
1
- import{jsx as n,jsxs as v}from"react/jsx-runtime";import m from"classnames";import{useObserver as F}from"mobx-react-lite";import{useRef as w,useEffect as E,useState as O,useCallback as b,useLayoutEffect as I}from"react";import D from"../core/Rect";import i,{uiState as S}from"../store";import{LayersMode as g}from"../store/LayerStore";import R from"../tools/settings";import{t as p}from"../utils/i18n";import L from"../data";import T from"../utils/useOnClickOutside";import"./LevelSelector.scss";const P=["money2020usa","rodion2","possible2025","2025virtuosotravelweek","zscalerskofy26","gamescom2025"],V=["ice-gaming2026"];function B(l){return V.includes(R.EXPO)?{layout:"compact-list",useShortNames:l}:{layout:l?"compact-list":"dropdown",useShortNames:l}}export default function X(){const l=w(null),x=w(null),d=w(null),[c,y]=O(!1),[_,C]=O("down");T([x,d],()=>y(!1)),E(()=>()=>{l.current&&clearTimeout(l.current)},[]),E(()=>{if(!c)return;const t=r=>{r.key==="Escape"&&(y(!1),d.current?.focus())};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[c]),I(()=>{if(c&&d.current){const t=d.current.getBoundingClientRect(),s=window.innerHeight-t.bottom;C(s<200?"up":"down")}},[c]);const k=b(t=>{if(l.current)return;l.current=setTimeout(()=>l.current=null,500);const r=i.layerStore.layers.find(u=>u.description===t.description);if(i.layerStore.mode===g.Radio){if(i.layerStore.updateVisibility(r,!0),i.mapboxStore.showMapbox)return;if(!!window.__fpSettings?.fpVer||P.includes(R.EXPO)){const o=r.viewbox??r.rect;S.moveToRect=D.fromX1y1x2y2(o.x1,o.y1,o.x2,o.y2)}else{const o=i.layerStore.layers.indexOf(i.layerStore.layers.filter(e=>!e.frozen&&e.visible)[0]),a=i.layerStore.layers.indexOf(r);if(o===a)return;a<o?S.zoomBy=.95:S.zoomBy=1.05}}else i.layerStore.updateVisibility(r,!r.visible);const s=i.toursStore.getTourLayerInfo(r.name)||i.toursStore.getTourLayerInfo(r.description);if(s){i.layerStore.showPathWay(s.id);return}i.fp.hidePathways(),i.toursStore.stopTour()},[]),f=b(t=>{t.disabled||(k(t.layer),y(!1),d.current?.focus())},[k]),N=b((t,r,s)=>{if(t.key==="Enter"||t.key===" "){if(r.disabled)return;t.preventDefault(),f(r);return}if(t.key==="ArrowDown"||t.key==="ArrowUp"){t.preventDefault();const u=s.findIndex(e=>e.layer.description===r.layer.description),o=t.key==="ArrowDown"?1:-1;let a=u+o;for(;a>=0&&a<s.length;){if(!s[a].disabled){t.currentTarget.parentElement?.children?.[a]?.focus();return}a+=o}}t.key==="Escape"&&(y(!1),d.current?.focus())},[f]);return F(()=>{const t=i.layerStore.floors;if(!(i.layerStore.mode===g.Radio||i.layerStore.mode===g.CheckBox)||t.length===0)return null;const{layout:s,useShortNames:u}=B(L.shortLevelName),o=t.find(e=>e.active),a=e=>u?e.shortName:e.description;return s==="compact-list"?n("div",{className:m("efp-level-selector","efp-level-selector--compact-list",{"is-ready":t.length}),role:"radiogroup","aria-label":p("Floor Selection"),children:t.map(e=>n("div",{className:m("efp-level-selector__item",{"is-active":e.active,"is-disabled":e.disabled}),role:"radio",title:`${e.active?p("Current Floor"):p("Floor")} ${e.layer.description}`,"aria-label":`${e.active?p("Current Floor"):p("Floor")} ${e.layer.description}`,"aria-checked":e.active,"aria-disabled":e.disabled,tabIndex:e.disabled?-1:0,onClick:()=>!e.disabled&&f(e),onKeyDown:h=>N(h,e,t),dir:"auto",children:n("span",{children:a(e)})},e.layer.description))}):v("div",{className:m("efp-level-selector","efp-level-selector--dropdown",{"is-ready":t.length}),children:[v("button",{ref:d,type:"button",className:m("efp-level-selector__trigger",{"is-open":c}),onClick:()=>y(!c),"aria-haspopup":"listbox","aria-expanded":c,"aria-label":`${p("Current Floor")}: ${o?.description??""}`,children:[v("div",{className:"efp-level-selector__trigger-text",children:[n("i",{className:"icon-layers","aria-hidden":"true"}),n("span",{children:o?.description??""})]}),n("div",{className:"efp-level-selector__trigger-chevron",children:n("i",{className:"icon-chevron-down","aria-hidden":"true"})})]}),c&&n("div",{ref:x,className:m("efp-level-selector__dropdown","efp-level-selector__dropdown--full",{"is-opens-up":_==="up","is-opens-down":_==="down"}),role:"listbox","aria-label":p("Floor Selection"),children:t.map(e=>v("div",{className:m("efp-level-selector__dropdown-item",{"is-active":e.active,"is-disabled":e.disabled}),role:"option","aria-selected":e.active,"aria-disabled":e.disabled,tabIndex:e.disabled?-1:0,onClick:()=>f(e),onKeyDown:h=>N(h,e,t),children:[n("span",{className:"efp-level-selector__dropdown-item-icon",children:e.active&&n("i",{className:"icon-checkmark-solid","aria-hidden":"true"})}),n("span",{className:"efp-level-selector__dropdown-item-name",children:e.description})]},e.layer.description))})]})})}
1
+ import{jsx as s,jsxs as v}from"react/jsx-runtime";import m from"classnames";import{useObserver as F}from"mobx-react-lite";import{useRef as w,useEffect as E,useState as O,useCallback as b,useLayoutEffect as I}from"react";import D from"../core/Rect";import i,{uiState as g}from"../store";import{LayersMode as S}from"../store/LayerStore";import R from"../tools/settings";import{t as p}from"../utils/i18n";import L from"../data";import T from"../utils/useOnClickOutside";import"./LevelSelector.scss";const P=["money2020usa","rodion2","possible2025","2025virtuosotravelweek","zscalerskofy26","gamescom2025"],V=["ice-gaming2026"];function B(l){return V.includes(R.EXPO)?{layout:"compact-list",useShortNames:l}:{layout:l?"compact-list":"dropdown",useShortNames:l}}export default function X(){const l=w(null),x=w(null),d=w(null),[c,y]=O(!1),[_,C]=O("down");T([x,d],()=>y(!1)),E(()=>()=>{l.current&&clearTimeout(l.current)},[]),E(()=>{if(!c)return;const t=r=>{r.key==="Escape"&&(y(!1),d.current?.focus())};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[c]),I(()=>{if(c&&d.current){const t=d.current.getBoundingClientRect(),n=window.innerHeight-t.bottom;C(n<200?"up":"down")}},[c]);const k=b(t=>{if(l.current)return;l.current=setTimeout(()=>l.current=null,500);const r=i.layerStore.layers.find(u=>u.description===t.description);if(i.layerStore.mode===S.Radio){if(i.layerStore.updateVisibility(r,!0),i.mapboxStore.showMapbox)return;if(!!window.__fpSettings?.fpVer||P.includes(R.EXPO)){const o=r.viewbox??r.rect;g.moveToRect=D.fromX1y1x2y2(o.x1,o.y1,o.x2,o.y2)}else{const o=i.layerStore.layers.indexOf(i.layerStore.layers.filter(e=>!e.frozen&&e.visible)[0]),a=i.layerStore.layers.indexOf(r);if(o===a)return;a<o?g.zoomBy=.95:g.zoomBy=1.05}}else i.layerStore.updateVisibility(r,!r.visible);const n=i.toursStore.getTourLayerInfo(r.name)||i.toursStore.getTourLayerInfo(r.description);if(n){i.layerStore.showPathWay(n.id);return}i.fp.hidePathways(),i.toursStore.stopTour()},[]),f=b(t=>{t.disabled||(k(t.layer),y(!1),d.current?.focus())},[k]),N=b((t,r,n)=>{if(t.key==="Enter"||t.key===" "){if(r.disabled)return;t.preventDefault(),f(r);return}if(t.key==="ArrowDown"||t.key==="ArrowUp"){t.preventDefault();const u=n.findIndex(e=>e.layer.description===r.layer.description),o=t.key==="ArrowDown"?1:-1;let a=u+o;for(;a>=0&&a<n.length;){if(!n[a].disabled){t.currentTarget.parentElement?.children?.[a]?.focus();return}a+=o}}t.key==="Escape"&&(y(!1),d.current?.focus())},[f]);return F(()=>{const t=i.layerStore.floors;if(!(i.layerStore.mode===S.Radio||i.layerStore.mode===S.CheckBox)||t.length===0)return null;const{layout:n,useShortNames:u}=B(L.shortLevelName),o=t.find(e=>e.active),a=e=>u?e.shortName:e.description;return n==="compact-list"?s("div",{className:m("efp-level-selector","efp-level-selector--compact-list",{"is-ready":t.length}),role:"radiogroup","aria-label":p("Floor selection"),children:t.map(e=>s("div",{className:m("efp-level-selector__item",{"is-active":e.active,"is-disabled":e.disabled}),role:"radio",title:`${e.active?p("Current Floor"):p("Floor")} ${e.layer.description}`,"aria-label":`${e.active?p("Current Floor"):p("Floor")} ${e.layer.description}`,"aria-checked":e.active,"aria-disabled":e.disabled,tabIndex:e.disabled?-1:0,onClick:()=>!e.disabled&&f(e),onKeyDown:h=>N(h,e,t),dir:"auto",children:s("span",{children:a(e)})},e.layer.description))}):v("div",{className:m("efp-level-selector","efp-level-selector--dropdown",{"is-ready":t.length}),children:[v("button",{ref:d,type:"button",className:m("efp-level-selector__trigger",{"is-open":c}),onClick:()=>y(!c),"aria-haspopup":"listbox","aria-expanded":c,"aria-label":`${p("Current Floor")}: ${o?.description??""}`,children:[v("div",{className:"efp-level-selector__trigger-text",children:[s("i",{className:"icon-layers","aria-hidden":"true"}),s("span",{children:o?.description??""})]}),s("div",{className:"efp-level-selector__trigger-chevron",children:s("i",{className:"icon-chevron-down","aria-hidden":"true"})})]}),c&&s("div",{ref:x,className:m("efp-level-selector__dropdown","efp-level-selector__dropdown--full",{"is-opens-up":_==="up","is-opens-down":_==="down"}),role:"listbox","aria-label":p("Floor selection"),children:t.map(e=>v("div",{className:m("efp-level-selector__dropdown-item",{"is-active":e.active,"is-disabled":e.disabled}),role:"option","aria-selected":e.active,"aria-disabled":e.disabled,tabIndex:e.disabled?-1:0,onClick:()=>f(e),onKeyDown:h=>N(h,e,t),children:[s("span",{className:"efp-level-selector__dropdown-item-icon",children:e.active&&s("i",{className:"icon-checkmark-solid","aria-hidden":"true"})}),s("span",{className:"efp-level-selector__dropdown-item-name",children:e.description})]},e.layer.description))})]})})}
@@ -1 +1 @@
1
- import{jsx as t,jsxs as m}from"react/jsx-runtime";import l from"classnames";import S from"color";import{Suspense as M}from"react";import{useLocalStore as P,useObserver as R}from"mobx-react-lite";import _ from"../data";import f,{uiState as o}from"../store";import p from"../tools/settings";import{remsToPixels as n}from"../utils";import{t as a}from"../utils/i18n";import c from"../utils/is-from-designer";import d from"./Alert";import"./Alert.scss";import"./LogoOverlay.scss";import{fpGeo as h}from"./Mapbox/utils/fpGeo";import O from"../tools/base-runtime-url";import{buildExpofpUrl as C,UTM_CAMPAIGNS as N}from"../tools/expofpUrl";import V from"./QrCode";const g=["info-techlive2025","metstrade-superyacht2023"].includes(p.EXPO),A=p.backgroundColor!=="none"&&S(p.backgroundColor).isDark()||h?.properties?.style?.includes("dark");export default function D(){const b=P(()=>{const i=(r,e,E,k)=>({width:k,opacity:o.wsStarted?1:0}),s=g||o.rtl?"left":"right";return{get style(){const r=n((o.overlayPosition==="left",1));if(o.overlayPosition==="left"){const e=o.mapVisibleBottom+r;return i("bottom",s,e,"5rem")}else{let e=o.mapVisibleTop;return f.mapboxStore.showMapbox&&(e=n(.5)),i("bottom",s,20,"4.5rem")}},get warningStyle(){const r=n(o.overlayPosition==="left"?1:.5);if(o.overlayPosition==="left"){const e=o.mapVisibleBottom+2*r;return i("bottom",s,e,"3rem")}else{let e=o.mapVisibleTop+2*r;return f.mapboxStore.showMapbox&&(e=n(.5)),i("top",s,e,"2rem")}}}}),u=Math.round(window.__fpStat?.dataSize/1024/1024||0),w=c&&u>=10,x=c&&!h&&_.allow3dView&&!o.kiosk&&!o.heatmap,v=o.kiosk&&!o.selectedRoute?.to&&!o.selectedRoute?.from,y=l("efp-qr",{"is-right":g||o.rtl});return R(()=>m("div",{children:[t("a",{href:C(N.SUBDOMAIN_LOGO),target:"_blank",rel:"noopener noreferrer",className:l("logo-overlay",{invert:A}),style:b.style,children:t("img",{src:`${O}expofp-overlay.png`,alt:a("Made with ExpoFP"),crossOrigin:"anonymous"})}),w&&t(d,{title:"This floor plan is too big",variant:"warning",showIcon:!0,position:"bottomRight",children:t("a",{rel:"noopener noreferrer",target:"_blank",href:"https://expofp.com/pages/huge-fp-warning",children:a("Read how to optimize it")})}),x&&t(d,{title:"3D view is hidden",variant:"warning",showIcon:!0,position:"bottomRight",children:t("a",{rel:"noopener noreferrer",target:"_blank",href:"https://expofp.com/pages/expofp-mapbox-integration",children:a("Setup mapbox first")})}),v&&t(M,{fallback:null,children:m("div",{className:l(y,{"efp-semi-transparent":o.setKioskModeEnabled}),children:[t("div",{children:a("View Map on Phone")}),t(V,{value:o.viewMapOnPhoneQRCodeUrl,size:100})]})})]}))}
1
+ import{jsx as t,jsxs as m}from"react/jsx-runtime";import l from"classnames";import S from"color";import{Suspense as M}from"react";import{useLocalStore as P,useObserver as R}from"mobx-react-lite";import _ from"../data";import f,{uiState as o}from"../store";import p from"../tools/settings";import{remsToPixels as a}from"../utils";import{t as r}from"../utils/i18n";import c from"../utils/is-from-designer";import d from"./Alert";import"./Alert.scss";import"./LogoOverlay.scss";import{fpGeo as h}from"./Mapbox/utils/fpGeo";import O from"../tools/base-runtime-url";import{buildExpofpUrl as C,UTM_CAMPAIGNS as N}from"../tools/expofpUrl";import V from"./QrCode";const g=["info-techlive2025","metstrade-superyacht2023"].includes(p.EXPO),A=p.backgroundColor!=="none"&&S(p.backgroundColor).isDark()||h?.properties?.style?.includes("dark");export default function D(){const b=P(()=>{const s=(i,e,E,k)=>({width:k,opacity:o.wsStarted?1:0}),n=g||o.rtl?"left":"right";return{get style(){const i=a((o.overlayPosition==="left",1));if(o.overlayPosition==="left"){const e=o.mapVisibleBottom+i;return s("bottom",n,e,"5rem")}else{let e=o.mapVisibleTop;return f.mapboxStore.showMapbox&&(e=a(.5)),s("bottom",n,20,"4.5rem")}},get warningStyle(){const i=a(o.overlayPosition==="left"?1:.5);if(o.overlayPosition==="left"){const e=o.mapVisibleBottom+2*i;return s("bottom",n,e,"3rem")}else{let e=o.mapVisibleTop+2*i;return f.mapboxStore.showMapbox&&(e=a(.5)),s("top",n,e,"2rem")}}}}),u=Math.round(window.__fpStat?.dataSize/1024/1024||0),w=c&&u>=10,x=c&&!h&&_.allow3dView&&!o.kiosk&&!o.heatmap,v=o.kiosk&&!o.selectedRoute?.to&&!o.selectedRoute?.from,y=l("efp-qr",{"is-right":g||o.rtl});return R(()=>m("div",{children:[t("a",{href:C(N.SUBDOMAIN_LOGO),target:"_blank",rel:"noopener noreferrer",className:l("logo-overlay",{invert:A}),style:b.style,children:t("img",{src:`${O}expofp-overlay.png`,alt:r("Made with ExpoFP"),crossOrigin:"anonymous"})}),w&&t(d,{title:r("This floor plan is too big"),variant:"warning",showIcon:!0,position:"bottomRight",children:t("a",{rel:"noopener noreferrer",target:"_blank",href:"https://expofp.com/pages/huge-fp-warning",children:r("Read how to optimize it")})}),x&&t(d,{title:r("3D view is hidden"),variant:"warning",showIcon:!0,position:"bottomRight",children:t("a",{rel:"noopener noreferrer",target:"_blank",href:"https://expofp.com/pages/expofp-mapbox-integration",children:r("Setup mapbox first")})}),v&&t(M,{fallback:null,children:m("div",{className:l(y,{"efp-semi-transparent":o.setKioskModeEnabled}),children:[t("div",{children:r("View Map on Phone")}),t(V,{value:o.viewMapOnPhoneQRCodeUrl,size:100})]})})]}))}
@@ -1 +1 @@
1
- import{jsx as w,jsxs as I,Fragment as $}from"react/jsx-runtime";import{useObserver as H}from"mobx-react-lite";import K from"classnames";import{useEffect as U,useMemo as Y,useRef as _,useState as q}from"react";import{observable as J}from"mobx";import i,{boothStore as Q,layersStore as S,uiState as e}from"../../store";import ee from"./drawing/config/config-all";import{useReaction as u}from"../../utils/mobx";import{LayerMode as y}from"../../store/LayerStore";import p from"../../tools/settings";import{Rect as g}from"./drawing/config/Rect";import R from"../../core/Rect";import{Exhibitor as z}from"../../store/ExhibitorStore";import{BoothBase as oe}from"../../store/BoothStore";import{CurrentPosition as te,Route as re}from"../../store/RouteStore";import{Category as ne}from"../../store/CategoryStore";import C from"../../tools/logger";import{svgArea as F}from"../../data/svg";import{configMarkers as ie,getMarkerFromClick as ae}from"./drawing/config/config-markers";import se from"color";import le from"./drawing/config/config-wf";import{createSceneDef as me}from"../../renderer";import{convertGpsToLocal as ce}from"../../utils/gps";import{fpGeo as fe}from"../Mapbox/utils/fpGeo";import v from"../../utils/is-debug";import{Draggable as de}from"../Draggable";import{useBuildRoute as ue}from"./traffic/useBuildRoute";import{useManageTraffic as pe}from"./traffic/useManageTraffic";import{PATHWAY_KEY as G}from"../../constants";import N from"./booth-by-xy";import{mapRollSetting as D}from"../../renderer";import{loadLayersImages as he}from"./drawing/config/loadBoothsImages";import{areLayersEnabled as ve}from"../../utils/areLayersEnabled";const O=Number.isFinite(p.maxZoom);export default function be(){let T={};const X="#ebebeb",h=_(),b=Y(()=>J({moving:!1,prevLevel:i.layerStore.layers.find(o=>!o.frozen&&o.visible)}),[]),s=i.rendererService;let l;const L=_(null);let k=null,M=null;const[j,A]=q(()=>typeof window<"u"&&window.localStorage?localStorage.getItem("debug")!=="0":!0);u(()=>i.routeStore.currentRouteLayer,()=>{if(!s.scene||b.prevLevel===i.routeStore.currentRouteLayer)return;const o=s.scene.rootLayer.children.filter(r=>i.layerStore.floors.some(n=>r.name.includes(n.name)));let t=i.routeStore.currentRouteLayer.name;if(!o.find(r=>r.name===t))return;const a=o?.map(r=>(r.name===t&&(r.hidden=!1),r.name===b.prevLevel?.name&&(r.hidden=!0),r));b.prevLevel=i.routeStore.currentRouteLayer,s.update(...a)}),u(()=>e.centerMap,()=>{!e.centerMap||i.mapboxStore.showMapbox||(l.controls.resetCamera({zoom:!!(e.list.type==="search"&&e.list.text)}),e.centerMap=!1)}),U(()=>{if(!h.current)return;async function o(){let t={};try{if(v){const r=document.createElement("canvas").getContext("webgl2"),n=r&&r.getExtension("EXT_disjoint_timer_query_webgl2"),c=(await import("stats-gl")).default,f=new c({trackGPU:n,horizontal:!0}),d=L.current;if(!d)throw new Error("memoryInfoPanel not found.");f.dom.style.position="relative",d.style.width=`${90*(n?3:2)}px`,d.style.height="48px",d.appendChild(f.dom),t={stats:f,memoryInfoPanel:d}}}catch(a){console.error(a)}l=s.create({canvas:h.current,ui:t}),e.canvasVisibleRectPx&&(l.visibleRect=g.fromCoreRect(e.canvasVisibleRectPx)),ee(s).then(a=>{v&&console.log("Renderer settings",l);const r=se(p.backgroundColor==="none"?X:p.backgroundColor).string("rgba");T=me(a,g.fromCoreRect(F),r),s.start(T),D(l,i.fp.enableRotation?1:0),O&&l.viewport.setMaxZoom(p.maxZoom),S.layersLoaded=!0,i.fp.onFpConfigured&&i.fp?.onFpConfigured(),k=le(s),M=ie(s),he(s)}),l.events.addEventListener("pointer:move",({point:a,defs:r})=>{if(e.setKioskModeEnabled)return;const n=N(a.x,a.y),m=B(r[0]);e.hoveredBooth=n||m}),l.events.addEventListener("pointer:out",()=>{e.setKioskModeEnabled||(e.hoveredBooth=null)}),l.events.addEventListener("pointer:click",({defs:a,point:r})=>{if(!e?.rootElement)return;window.__resett&&window.__resett(),e.overlayPosition==="bottom"&&e.overlaySize==="full"&&i.showMap();const{x:n,y:m}=r;if(e.onGetCoordsClick){const d=i.layerStore.layers.find(x=>x.visible&&(x.mode===y.TurnedOn||x.mode===y.TurnedOff));e.onGetCoordsClick({x:n,y:m,z:d?.name||null})}if(e.setKioskModeEnabled)return;if(e.onMarkerClick){const d=ae(n,m,s.scale);v&&console.log("marker",d),e.onMarkerClick(d)}const c=N(r.x,r.y),f=B(a[0]);v&&console.log("boothIdFromClientXy",c,"boothByShape",f,"pointer:click point",r),i.clickBooth(c||f)}),l.events.addEventListener("navigation:change",()=>window.__resett&&window.__resett())}return o(),i.fp.getCenterCoordinates=W,()=>V()},[]);function V(){k?.(),M?.(),s.dispose()}function W(){const o=h.current;if(!h.current)throw new Error("Canvas not ready");const t=l.viewport.canvasToSvg({x:o.clientWidth/2,y:o.clientHeight/2}),r=i.layerStore.visible.find(n=>n.mode===y.TurnedOff||n.mode===y.TurnedOn)?.name||null;return{...t,z:r}}function B(o){return!o||!o.shape?null:Q.booths.find(t=>t.shapes?.find(a=>a.shape==o.shape))}u(()=>e.zoomBy,()=>{if(!e.zoomBy||i.mapboxStore.showMapbox)return;const o=e.zoomBy;l.controls.zoomBy(o),e.zoomBy=null}),u(()=>e.dimmed,o=>{if(!s.scene)return;const t=s.scene.rootLayer;t.dim!==o&&(t.dim=o,s.update(t))}),u(()=>e.details,()=>{if(!e.onDetails)return;if(!e.details){e.onDetails(null);return}var o=e.details;if(p.EXPO==="wineparis"&&(o instanceof z&&(o=o.booths[0]),!o))return;let t=null,a=[];o instanceof z?(t="exhibitor",a=o.booths.map(n=>n.name).sort((n,m)=>n==i.routeStore.tempToBooth?.name?-1:m==i.routeStore.tempToBooth?.name?1:0)):o instanceof oe?(t="booth",a=[o.name]):o instanceof re?(t="route",a=[o.from?.name,o.to?.name].filter(n=>!!n)):o instanceof ne&&(t="category",a=o.exhibitors.map(n=>n.booths.map(m=>m.name)).flat());var r={type:t,name:o?.name,id:o?.id,externalId:o?.externalId,boothsNames:a};e.onDetails({...r,...t==="route"?{routeInfo:i.routeStore.routeInfo}:{}})}),u(()=>e.canvasVisibleRectPx,()=>{s.renderer&&(s.renderer.visibleRect=g.fromCoreRect(e.canvasVisibleRectPx))},{fireImmediately:!0}),u(()=>e.moveToRect,()=>{!e.moveToRect||i.mapboxStore.showMapbox||(e.moveToRect&&e.moveToRect.h!==1/0&&e.moveToRect.w!==1/0&&e.moveToRect.h>0&&e.moveToRect.w>0&&E(e.moveToRect),e.moveToRect=null)}),u(()=>e.rollReset,o=>{o&&(l.controls.resetCamera({roll:!0}),e.rollReset=!1)}),u(()=>e.moveToBooths,()=>{if(C.log("this.moveToBooths",e.moveToBooths),!e.moveToBooths||i.mapboxStore.showMapbox)return;C.log("watched moveToBooths",e.moveToBooths);const o=e.moveToBooths.filter(t=>t.rect).map(t=>t.rect);o.length!==0&&(E(R.fromMultiple(o)),e.moveToBooths=null)}),u(()=>e.mapSettings,({zoomtime:o,center:t,centerxy:a,bearing:r,roll:n,z:m})=>{if(!(i.mapboxStore.showMapbox||!s.renderer))try{o&&o!==e.defaultMapSettings.zoomtime&&s.renderer.controls.configure({zoomTime:o/1e3}),i.fp.enableRotation&&D(l,n);let c;if(t){const f=t.split(",").map(Number),d=new te(void 0,void 0,void 0,void 0,f[0],f[1]);c=ce(d,fe.properties.config)}else if(a){const f=a.split(",").map(Number);c={x:f[0],y:f[1]}}m&&i.fp.activateFloor({name:m}),(c?.x||c?.y)&&s.renderer.controls.panTo(c.x,c.y),Number.isFinite(r)&&s.renderer.controls.rollTo(r)}catch(c){C.error("Error in mapSettings reaction",c)}}),ue({enabled:S.layersLoaded&&e.buildRoute,rendererService:s});const P="routes-api.expofp.com";pe({permission:S.layersLoaded,rendererService:s,dataJsonUrl:`https://${P}/v1/routes?expo=${p.EXPO}`,websocketUrl:`wss://${P}/locations?expo=${p.EXPO}`}),u(()=>i.layerStore.visible,o=>{if(!s.scene)return;const t=o.filter(n=>n.name.toLowerCase().includes(G)),r=s.scene.rootLayer.children.filter(n=>n.name.toLowerCase().includes(G));r.forEach(n=>{n.hidden=!t.find(m=>m.name===n.name)}),s.update(...r)});function E(o){let t=o;const a=Z(o,F);e.kioskData&&(!ve()||i.routeStore.defaultFrom?.layer?.name===i.routeStore.currentRouteLayer?.name)&&(t=R.fromMultiple([o,R.fromXywh(e.kioskData.x,e.kioskData.y,1,1)]));const r=g.fromCoreRect(t),n={paddingPercent:a,maxZoom:O?void 0:10};if(e.shouldShiftMapRect){l.visibleRect.min={...l.visibleRect.min,x:l.visibleRect.min.x+e.overlayWidthPx};try{l.controls.zoomTo(r,n)}finally{l.visibleRect.min={...l.visibleRect.min,x:l.visibleRect.min.x-e.overlayWidthPx}}}else l.controls.zoomTo(r,n)}function Z(o,t){return!o||!t?0:(o.w*o.h/(t.h*t.w)>.1?15:25)/100}return H(()=>I($,{children:[w("canvas",{style:{width:"100%",height:"100%"},ref:h,className:K({map:!0,moving:b.moving,hidden:i.mapboxStore.showMapbox}),children:"ExpoFP.com"}),v&&j&&I(de,{className:"debug-fps",children:[w("div",{ref:L}),w("button",{onClick:()=>{typeof window<"u"&&window.localStorage&&localStorage.setItem("debug","0"),A(!1)},style:{padding:"4px 8px",fontSize:"11px",cursor:"pointer",backgroundColor:"#333",color:"#fff",border:"1px solid #555",width:"100%"},children:"Hide debug"})]})]}))}
1
+ import{jsx as S,jsxs as _,Fragment as K}from"react/jsx-runtime";import{useObserver as U}from"mobx-react-lite";import Y from"classnames";import{useEffect as q,useMemo as J,useRef as z,useState as Q}from"react";import{observable as ee}from"mobx";import i,{boothStore as oe,layersStore as R,uiState as e}from"../../store";import te from"./drawing/config/config-all";import{useReaction as d}from"../../utils/mobx";import{LayerMode as g}from"../../store/LayerStore";import p from"../../tools/settings";import{Rect as x}from"./drawing/config/Rect";import C from"../../core/Rect";import{Exhibitor as F}from"../../store/ExhibitorStore";import{BoothBase as re}from"../../store/BoothStore";import{CurrentPosition as ne,Route as ie}from"../../store/RouteStore";import{Category as ae}from"../../store/CategoryStore";import T from"../../tools/logger";import{svgArea as D}from"../../data/svg";import{configMarkers as se,getMarkerFromClick as le}from"./drawing/config/config-markers";import me from"color";import ce from"./drawing/config/config-wf";import{createSceneDef as fe}from"../../renderer";import{convertGpsToLocal as de}from"../../utils/gps";import{fpGeo as ue}from"../Mapbox/utils/fpGeo";import v from"../../utils/is-debug";import{Draggable as pe}from"../Draggable";import{useBuildRoute as he}from"./traffic/useBuildRoute";import{useManageTraffic as ve}from"./traffic/useManageTraffic";import{PATHWAY_KEY as G}from"../../constants";import N from"./booth-by-xy";import{mapRollSetting as O}from"../../renderer";import{loadLayersImages as be}from"./drawing/config/loadBoothsImages";import{areLayersEnabled as ye}from"../../utils/areLayersEnabled";import{pickDefaultScene as X,pickDefaultScenePoint as ge}from"../../renderer/engine-core/defs";const j=Number.isFinite(p.maxZoom);export default function xe(){let k={};const A="#ebebeb",h=z(),b=J(()=>ee({moving:!1,prevLevel:i.layerStore.layers.find(o=>!o.frozen&&o.visible)}),[]),s=i.rendererService;let l;const L=z(null);let M=null,B=null;const[V,W]=Q(()=>typeof window<"u"&&window.localStorage?localStorage.getItem("debug")!=="0":!0);d(()=>i.routeStore.currentRouteLayer,()=>{if(!s.scene||b.prevLevel===i.routeStore.currentRouteLayer)return;const o=s.scene.rootLayer.children.filter(r=>i.layerStore.floors.some(n=>r.name.includes(n.name)));let t=i.routeStore.currentRouteLayer.name;if(!o.find(r=>r.name===t))return;const a=o?.map(r=>(r.name===t&&(r.hidden=!1),r.name===b.prevLevel?.name&&(r.hidden=!0),r));b.prevLevel=i.routeStore.currentRouteLayer,s.update(...a)}),d(()=>e.centerMap,()=>{!e.centerMap||i.mapboxStore.showMapbox||(l.controls.resetCamera({zoom:!!(e.list.type==="search"&&e.list.text)}),e.centerMap=!1)}),q(()=>{if(!h.current)return;async function o(){let t={};try{if(v){const r=document.createElement("canvas").getContext("webgl2"),n=r&&r.getExtension("EXT_disjoint_timer_query_webgl2"),m=(await import("stats-gl")).default,f=new m({trackGPU:n,horizontal:!0}),u=L.current;if(!u)throw new Error("memoryInfoPanel not found.");f.dom.style.position="relative",u.style.width=`${90*(n?3:2)}px`,u.style.height="48px",u.appendChild(f.dom),t={stats:f,memoryInfoPanel:u}}}catch(a){console.error(a)}l=s.create({canvas:h.current,ui:t}),e.canvasVisibleRectPx&&(l.visibleRect=x.fromCoreRect(e.canvasVisibleRectPx)),te(s).then(a=>{v&&console.log("Renderer settings",l);const r=me(p.backgroundColor==="none"?A:p.backgroundColor).string("rgba");k=fe(a,x.fromCoreRect(D),r),s.start(k),O(l,i.fp.enableRotation?1:0),j&&l.viewport.setMaxZoom(p.maxZoom),R.layersLoaded=!0,i.fp.onFpConfigured&&i.fp?.onFpConfigured(),M=ce(s),B=se(s),be(s)}),l.events.addEventListener("pointer:move",({data:a})=>{if(e.setKioskModeEnabled)return;const{point:r,defs:n}=X(a),c=N(r.x,r.y),m=P(n[0]);e.hoveredBooth=c||m}),l.events.addEventListener("pointer:out",()=>{e.setKioskModeEnabled||(e.hoveredBooth=null)}),l.events.addEventListener("pointer:click",({data:a})=>{if(!e?.rootElement)return;window.__resett&&window.__resett(),e.overlayPosition==="bottom"&&e.overlaySize==="full"&&i.showMap();const{point:r,defs:n}=X(a),{x:c,y:m}=r;if(e.onGetCoordsClick){const y=i.layerStore.layers.find(w=>w.visible&&(w.mode===g.TurnedOn||w.mode===g.TurnedOff));e.onGetCoordsClick({x:c,y:m,z:y?.name||null})}if(e.setKioskModeEnabled)return;if(e.onMarkerClick){const y=le(c,m,s.scale);v&&console.log("marker",y),e.onMarkerClick(y)}const f=N(r.x,r.y),u=P(n[0]);v&&console.log("boothIdFromClientXy",f,"boothByShape",u,"pointer:click point",r),i.clickBooth(f||u)}),l.events.addEventListener("navigation:change",()=>window.__resett&&window.__resett())}return o(),i.fp.getCenterCoordinates=$,()=>Z()},[]);function Z(){M?.(),B?.(),s.dispose()}function $(){const o=h.current;if(!h.current)throw new Error("Canvas not ready");const t=ge(l.viewport.canvasToSvg({x:o.clientWidth/2,y:o.clientHeight/2})),r=i.layerStore.visible.find(n=>n.mode===g.TurnedOff||n.mode===g.TurnedOn)?.name||null;return{...t,z:r}}function P(o){return!o||!o.shape?null:oe.booths.find(t=>t.shapes?.find(a=>a.shape==o.shape))}d(()=>e.zoomBy,()=>{if(!e.zoomBy||i.mapboxStore.showMapbox)return;const o=e.zoomBy;l.controls.zoomBy(o),e.zoomBy=null}),d(()=>e.dimmed,o=>{if(!s.scene)return;const t=s.scene.rootLayer;t.dim!==o&&(t.dim=o,s.update(t))}),d(()=>e.details,()=>{if(!e.onDetails)return;if(!e.details){e.onDetails(null);return}var o=e.details;if(p.EXPO==="wineparis"&&(o instanceof F&&(o=o.booths[0]),!o))return;let t=null,a=[];o instanceof F?(t="exhibitor",a=o.booths.map(n=>n.name).sort((n,c)=>n==i.routeStore.tempToBooth?.name?-1:c==i.routeStore.tempToBooth?.name?1:0)):o instanceof re?(t="booth",a=[o.name]):o instanceof ie?(t="route",a=[o.from?.name,o.to?.name].filter(n=>!!n)):o instanceof ae&&(t="category",a=o.exhibitors.map(n=>n.booths.map(c=>c.name)).flat());var r={type:t,name:o?.name,id:o?.id,externalId:o?.externalId,boothsNames:a};e.onDetails({...r,...t==="route"?{routeInfo:i.routeStore.routeInfo}:{}})}),d(()=>e.canvasVisibleRectPx,()=>{s.renderer&&(s.renderer.visibleRect=x.fromCoreRect(e.canvasVisibleRectPx))},{fireImmediately:!0}),d(()=>e.moveToRect,()=>{!e.moveToRect||i.mapboxStore.showMapbox||(e.moveToRect&&e.moveToRect.h!==1/0&&e.moveToRect.w!==1/0&&e.moveToRect.h>0&&e.moveToRect.w>0&&I(e.moveToRect),e.moveToRect=null)}),d(()=>e.rollReset,o=>{o&&(l.controls.resetCamera({roll:!0}),e.rollReset=!1)}),d(()=>e.moveToBooths,()=>{if(T.log("this.moveToBooths",e.moveToBooths),!e.moveToBooths||i.mapboxStore.showMapbox)return;T.log("watched moveToBooths",e.moveToBooths);const o=e.moveToBooths.filter(t=>t.rect).map(t=>t.rect);o.length!==0&&(I(C.fromMultiple(o)),e.moveToBooths=null)}),d(()=>e.mapSettings,({zoomtime:o,center:t,centerxy:a,bearing:r,roll:n,z:c})=>{if(!(i.mapboxStore.showMapbox||!s.renderer))try{o&&o!==e.defaultMapSettings.zoomtime&&s.renderer.controls.configure({zoomTime:o/1e3}),i.fp.enableRotation&&O(l,n);let m;if(t){const f=t.split(",").map(Number),u=new ne(void 0,void 0,void 0,void 0,f[0],f[1]);m=de(u,ue.properties.config)}else if(a){const f=a.split(",").map(Number);m={x:f[0],y:f[1]}}c&&i.fp.activateFloor({name:c}),(m?.x||m?.y)&&s.renderer.controls.panTo(m.x,m.y),Number.isFinite(r)&&s.renderer.controls.rollTo(r)}catch(m){T.error("Error in mapSettings reaction",m)}}),he({enabled:R.layersLoaded&&e.buildRoute,rendererService:s});const E="routes-api.expofp.com";ve({permission:R.layersLoaded,rendererService:s,dataJsonUrl:`https://${E}/v1/routes?expo=${p.EXPO}`,websocketUrl:`wss://${E}/locations?expo=${p.EXPO}`}),d(()=>i.layerStore.visible,o=>{if(!s.scene)return;const t=o.filter(n=>n.name.toLowerCase().includes(G)),r=s.scene.rootLayer.children.filter(n=>n.name.toLowerCase().includes(G));r.forEach(n=>{n.hidden=!t.find(c=>c.name===n.name)}),s.update(...r)});function I(o){let t=o;const a=H(o,D);e.kioskData&&(!ye()||i.routeStore.defaultFrom?.layer?.name===i.routeStore.currentRouteLayer?.name)&&(t=C.fromMultiple([o,C.fromXywh(e.kioskData.x,e.kioskData.y,1,1)]));const r=x.fromCoreRect(t),n={paddingPercent:a,maxZoom:j?void 0:10};if(e.shouldShiftMapRect){l.visibleRect.min={...l.visibleRect.min,x:l.visibleRect.min.x+e.overlayWidthPx};try{l.controls.zoomTo(r,n)}finally{l.visibleRect.min={...l.visibleRect.min,x:l.visibleRect.min.x-e.overlayWidthPx}}}else l.controls.zoomTo(r,n)}function H(o,t){return!o||!t?0:(o.w*o.h/(t.h*t.w)>.1?15:25)/100}return U(()=>_(K,{children:[S("canvas",{style:{width:"100%",height:"100%"},ref:h,className:Y({map:!0,moving:b.moving,hidden:i.mapboxStore.showMapbox}),children:"ExpoFP.com"}),v&&V&&_(pe,{className:"debug-fps",children:[S("div",{ref:L}),S("button",{onClick:()=>{typeof window<"u"&&window.localStorage&&localStorage.setItem("debug","0"),W(!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 ne from"color";import{observable as he,reaction as q}from"mobx";import{lineLength as Se}from"simple-geometry";import He from"../../../../core/Rect";import o,{layersStore as Ae,uiState as c}from"../../../../store";import{LayersMode as _e}from"../../../../store/LayerStore";import{boothToWaypoint as me,getGraphLines as We,graphDataSource as Ye,computeTransitionPoints as Ue,normalizeRouteDirection as Ge,bezierCurve as qe,splitPolyLine as Ke}from"../../../../wayfinding";import{decreaseByPercentage as oe}from"../../../../utils/math";import{strEqual as ie}from"../../../../utils/strEqual";import{createArrowCurrentCanvas as De,createCurrentCanvas as re,createImageCanvas as z,createTargetCanvas as Ve,createYahCanvas as Xe}from"./canvases";import{toRadians as Ie}from"../../../../utils/math";import{areLayersEnabled as ve}from"../../../../utils/areLayersEnabled";import{createImageDef as H,createLineDef as ye,createCircleCanvas as je,getBounds as R,getRotation as Je}from"../../../../renderer";import{animateLineSegments as Qe}from"../../../../renderer/engine-core/animation";import{splitRouteByPoint as Ze,snapPositionToRoute as et,getThresholdSafe as tt,getThresholdFromMetersToSvg as nt,SNAP_THRESHOLD_METERS as ot}from"./route-snapping";import{fpGeo as Ne}from"../../../Mapbox/utils/fpGeo";import{getRouteLength as pe}from"../../../../wayfinding";const L=devicePixelRatio;let I=[],X=null,T=[],Q=ne("#00A2FF"),it=ne("#FF9F06"),Fe="#A4CCE2",rt="#0794EA";const W=34;let B,M,k,$,Y,ge,Re,Le,xe,Z,C,E,N,F,O,we=[];function at(){I=[];const t=o.routeStore.currentRouteLayer?.name;X=lt();const r=X&&(ve()?ie(t,X.destination?.layer):!0);if(X){const l=X?.routePoint;l&&ie(t,l.layer)&&(I=ct(l,I))}let a=[],f=[];for(let l=0;l<T.length;l++){let _=T[l],x=o.layerStore.mode==_e.Default?!0:o.layerStore.layers.find(h=>h.name==t&&t===_.p0.layer)?.visible||!1;!_.virtual&&x&&a.push(_),(_.virtual||!x||l===T.length-1)&&a.length&&(f=a.map(({p0:h,p1:w})=>(I.push({x:h.x,y:h.y},{x:w.x,y:w.y}),{p0:h,p1:w})))}I.length||(E.hidden=!0,C.hidden=!0);let m=1e6,s=1e6,y=0,u=0;I.forEach(l=>{l.x<m&&(m=l.x),l.y<s&&(s=l.y),l.x>y&&(y=l.x),l.y>u&&(u=l.y)});const d=He.fromX1y1x2y2(m,s,y,u);return{rect:I.length&&(d.w||d.h)?d.withPadding(d.w,d.h):null,lines:f,addTrailPoints:r}}export const WF_TRAIL_LAYER_NAME="wf-trail-points",WF_POINTS_LAYER_NAME="wf-points",WF_CURRENT_POSITION_NAME="wf-current-position",WF_LINES_LAYER_NAME="wf-lines",WF_LINES_ANIMATED_LAYER_NAME="wf-lines-animated";export default function st(t){let r=null;const a=[];let f=null,m=he.box([]),s=he.box([],{deep:!1}),y=[],u=he.box([],{deep:!1});const d=t.scene.rootLayer.children,l=d.find(e=>e.name===WF_POINTS_LAYER_NAME),_=d.find(e=>e.name===WF_CURRENT_POSITION_NAME),x=d.find(e=>e.name===WF_LINES_LAYER_NAME),h=d.find(e=>e.name===WF_TRAIL_LAYER_NAME),w=d.find(e=>e.name===WF_LINES_ANIMATED_LAYER_NAME),U=tt(Ne?.properties?.config?.snapThreshold)||ot,ae=nt({thresholdInMeters:U,gpsConfig:Ne?.properties?.config});let ee=[];const j=o.fp.icons.get("destination");j?(j.id="destination",M=z(j,W,W,L)):M=Ve(L,it.hex()),E=H(M,R(0,0,M.width,M.height),{hidden:!0});const G=o.fp.icons.get("departure");G?(G.id="departure",B=z(G,W,W,L)):B=re(L,Q.hex()),C=H(B,R(0,0,B.width,B.height),{hidden:!0}),k=re(L,Q.hex()),k.id="current-location",N=H(k,R(0,0,k.width,k.height),{hidden:!0,origin:[.5,.5]});const K=o.fp.icons.get("transition");K?(K.id="transition",ge=z(K,34,34,L)):ge=re(L,Q.hex());const se=o.fp.icons.get("transition_up");se&&(se.id="transition_up",Re=z(se,56,34,L));const ue=o.fp.icons.get("transition_down");ue&&(ue.id="transition_down",Le=z(ue,56,34,L)),G?xe=z(G,W,W,L):xe=re(L,Q.hex());const le=o.fp.icons.get("direction");le?(le.id="direction",$=z(le,W,W,L)):$=De(L,Q.hex()),F=H($,R(0,0,$.width,$.height),{hidden:!0});const Pe=o.fp.icons.get("yah");Pe?Y=z(Pe,oe(64,32),oe(90,32),L):Y=Xe(L,"#ff4343"),Y.id="current-location-2",O=H(Y,R(0,0,Y.width,Y.height),{hidden:!0,origin:[.5,1]}),Z=je(4,ne("#b5b7bc").hex());function ce(e=null){const n=o.layerStore.visible.map(i=>i.name);if(I=[],m.set([]),e||(T=[]),n.length&&c.selectedRoute?.from?.rect&&c.selectedRoute?.to?.rect){let i=c.selectedRoute.from,p=c.selectedRoute.to;if(!T.length&&!e&&(T=We(Ye,me(i),me(p),o.routeStore.onlyAccessible,c.selectedRoute.waypoints?.map(me))),!T.length){if(o.routeStore.updateRoute(T),o.routeStore.updateRouteDistance(0),i.name!==p.name)throw new Error(`Route not found. From: ${i.name} to: ${p.name}`);return}const{rect:g,lines:D,addTrailPoints:b}=at();D.length?(ut(t.scale),dt(t.scale,s,y),ze(t,h,!b),t.ptScaleRegistry.unregisterByName(h.name),b&&t.onPtScale(h.name,()=>{const P=ze(t,h)||[];return h.children=P,we=P,h})):t.ptScaleRegistry.unregisterByName(h.name),ee=D,fe(),g&&(c.moveToRect=g)}else C.hidden=!0,E.hidden=!0;o.routeStore.updateRoute(T.filter(i=>!i.virtual)),m.get()||(C.hidden=!0,E.hidden=!0)}function J(){const e=o.routeStore.currentPosition,n=e?.angle?Ie(e.angle):null,i=o.routeStore.currentRouteLayer?.name,p=T.filter(A=>o.layerStore.mode==_e.Default?!0:o.layerStore.layers.find(Oe=>Oe.name==i&&i===A.p0.layer)?.visible).filter(A=>!A.virtual);if(c.kioskData&&c.selectedRoute?.from){const A=o.routeStore.currentRouteLayer;C.hidden=c.selectedRoute?.from?.entity?.type==="route-cut-in"&&A?.name===c.selectedRoute?.from?.layer?.name,E.hidden=c.selectedRoute?.to?.entity?.type==="route-cut-in"&&A?.name===c.selectedRoute?.to?.layer?.name}if(e){const A=Ae.findLayer(e.z)?.visible??!0;o.routeStore.iconType===0||c.selectedRoute?.from&&c.selectedRoute?.to?(O.hidden=!0,N.hidden=!A,N.dim=!A,N.bounds=R(e.x,e.y,k.width,k.height,t.scale),n!=null?(N.hidden=!0,F.hidden=!A,F.dim=!A,F.bounds=R(e.x,e.y,$.width,$.height,t.scale,n)):F.hidden=!0):(N.hidden=!0,F.hidden=!0,O.dim=!A,O.hidden=!A,O.bounds=R(e.x,e.y,Y.width,Y.height,t.scale))}else N.hidden=!0,O.hidden=!0,F.hidden=!0,de(),fe();if(!e||!I.length){t.update(F,N,O);return}const g=c.selectedRoute?.to,D=c.selectedRoute?.from,b={layer:D?.layer?.name,x:C.bounds.center.x,y:C.bounds.center.y},P={layer:g?.layer?.name,x:E.bounds.center.x,y:E.bounds.center.y},S=et(e,p,{snapThreshold:ae,fromPoint:b,toPoint:P,fromRect:D?.rect,toRect:g?.rect}),v=S.snapped?S.snappedPoint:e;fe(S,!0),F.bounds=R(v.x,v.y,$.width,$.height,t.scale,n),N.bounds=R(v.x,v.y,k.width,k.height,t.scale,n),t.update(F,N,O)}function Be(){const e=[{point:F,name:"wf-current-arrow"},{point:N,name:"wf-current-location"},{point:O,name:"wf-current-location-2"}];_.children=e.map(({point:n})=>n),e.forEach(({point:n,name:i})=>te(n,i)),t.update(_)}function V(e=!1){const n=[C,E,...s.get(),...u.get()];e&&(Me(!0),h.children=[],n.forEach(i=>{i.source.id.includes("kiosk")||(i.hidden=!0)})),l.children=n,t.update(l,h)}function de(e,n){const i=T.filter(P=>!P.virtual),p=pe(i);if(!e?.snapped){o.routeStore.updateRouteDistance(p);return}const g=c.selectedRoute?.to,D=pe(n);let b;if(e.snappedPoint?.layer===g?.layer?.name||g?.layer?.name===o.routeStore.currentRouteLayer?.name)b=D;else if(e.snappedPoint?.layer!==g?.layer?.name&&e.snappedPoint?.layer===o.routeStore.currentRouteLayer?.name){const P=i.filter(v=>v.p0.layer!==e?.snappedPoint?.layer&&v.p1.layer!==e?.snappedPoint?.layer),S=pe(P);b=D+S}b&&o.routeStore.updateRouteDistance(b)}function fe(e,n=!1){const i=c.selectedRoute?.from,p=c.selectedRoute?.to;if(!i||!p)return;const g=T[0]?.p0.layer,D=Ge(T,ee,{layer:i.layer?.name??g,x:i.rect.cx,y:i.rect.cy},{layer:p.layer?.name??g,x:p.rect.cx,y:p.rect.cy});if(!e?.snapped){const S=D.map(v=>ye(v,Fe));o.routeStore.currentPosition&&o.routeStore.currentRouteLayer&&o.routeStore.currentPosition?.z?.toString()===o.routeStore.currentRouteLayer?.name.toString()&&de(),Ce([],S,n);return}const{passed:b,remaining:P}=Ze(D,e.snappedPoint);P.length&&(P[0]={...P[0],p0:e.snappedPoint}),de(e,P),Ce(b.map(S=>ye(S,"#B5B7BC")),P.map(S=>ye(S,Fe)),n)}const te=(e,n)=>t.onPtScale(n,i=>(e.hidden||(e.bounds=R(e.bounds.center.x,e.bounds.center.y,e.source.width,e.source.height,i,e.bounds.rotation)),e)),be=(e,n)=>t.onRoll(n,i=>{const p=Je(i,e.bounds.rotation);return p!==void 0&&(e.bounds.rotation=e.bounds.rotation+p),e});function Me(e){r&&(r.stop(),r=null),w.children=[],e&&(x.children=[]),t.update(w,x)}function Ce(e=[],n=[],i=!1){let p=0;if(r&&(i&&(p=r.getProgress()),r.stop(),r=null),x.children=[...e,...n],!n.length){w.children=[],t.update(w,x);return}const g=n.map(b=>({...b,color:rt}));r=Qe(g,(b,P,S)=>{if(S)w.children=[];else{const v=g.slice(0,P);w.children=[...v,b]}t.update(w)},()=>t.scale,p)??null,t.update(x)}a.push(q(()=>[o.layerStore.layersLoaded],()=>{ce(),J(),V()}));const ke=q(()=>[o.routeStore.currentRouteLayer,c.getRouteNextFloor],()=>{o.layerStore.layersLoaded&&(f!==null&&clearTimeout(f),f=setTimeout(()=>{ce(o.routeStore.currentRouteLayer),J(),V(),f=null},0))});a.push(()=>{f!==null&&(clearTimeout(f),f=null),ke()}),a.push(q(()=>[c.selectedRoute,o.routeStore.onlyAccessible],()=>{ce(),J(),V(!c.selectedRoute)})),a.push(q(()=>o.routeStore.currentPosition,()=>{J(),V()})),a.push(q(()=>s.get(),e=>{const n="transitionPoints";t.ptScaleRegistry.unregisterByPrefix(n),t.rollRegistry.unregisterByPrefix(n),e.length&&e.forEach((i,p)=>{const g=`${n}-${p}`;te(i,g),be(i,g)})})),a.push(q(()=>[u.get()],()=>{const e=u.get(),n="kioskArrows";t.ptScaleRegistry.unregisterByPrefix(n),e.length&&e.forEach((i,p)=>te(i,`${n}-${p}`))})),a.push(q(()=>[c.kioskData,Ae.floors.find(e=>e.active),c.selectedRoute],([e,n])=>{u.set([]);const i=ve()?e?.z===n?.name:!0;e&&i&&ft(e,{skipdim:!0,visible:!0,pixelRatio:L},t.scale,u),V()}));function Ee({defs:e}){const n=y.find(i=>e.includes(i.imageDef));n&&o.layerStore.updateVisibility(n.targetLayer,!0)}t.renderer.events.addEventListener("pointer:click",Ee),a.push(()=>t.renderer.events.removeEventListener("pointer:click",Ee));function Te({defs:e}){const n=y.some(i=>e.includes(i.imageDef));t.renderer.canvas.style.cursor=n?"pointer":""}t.renderer.events.addEventListener("pointer:move",Te),a.push(()=>t.renderer.events.removeEventListener("pointer:move",Te)),[{point:C,name:"wf-source"},{point:E,name:"wf-destination"}].forEach(({point:e,name:n})=>{te(e,n),be(e,n)}),V(),J(),Be();function $e(){r&&(r.stop(),r=null),a.forEach(e=>e()),a.length=0}return $e}function ut(t){const r=o.routeStore.currentRouteLayer?.name,a=I;let f=c.selectedRoute?.from,m=c.selectedRoute?.to;const s=c.selectedRoute?.waypoints;if(f?.entity.type==="route-cut-in"&&(f=null),m?.entity.type==="route-cut-in"&&(m=null),!a.length)return;const y=[{key:"sourceLocation",rect:f?.rect,index:void 0},{key:"destinationLocation",rect:m?.rect,index:void 0}];s&&y.push(...s?.map((x,h)=>({key:`waypoint-${x.externalId}`,index:h,rect:x.rect})));const u=r?ie(r,f?.layer?.name):!0,d=r?ie(r,m?.layer?.name):!0;let l=!1,_=!1;a.forEach(({x,y:h})=>{for(const{key:w,rect:U,index:ae}of y)if(U?.containsPoint(x,h)){w==="sourceLocation"&&(C.bounds=R(x,h,B.width,B.height,t),C.hidden=!u,C.dim=!u,l=u),w==="destinationLocation"&&(E.bounds=R(x,h,M.width,M.height,t),E.hidden=!d,E.dim=!d,_=d);break}}),l||(C.bounds=R(a[a.length-1].x,a[a.length-1].y,B.width,B.height,t),C.hidden=!1,C.dim=!1),_||(E.bounds=R(a[0].x,a[0].y,M.width,M.height,t),E.hidden=!d,E.dim=!d)}function lt(){const{from:t,to:r}=o.uiState.selectedRoute||{},a="route-cut-in";return t&&t?.entity.type===a||r&&r?.entity.type===a?o.routeStore.defaultFrom:null}function ct(t,r){if(!t||!r.length)return r;const a=r.reduce((f,m,s)=>Se(t,m)<Se(t,r[f])?s:f,0);return a<=r.length/2?r.slice(a):r.slice(0,a)}function dt(t,r,a){const f=o.routeStore.currentRouteLayer?.name,m=o.layerStore.floors.map(u=>u.name).reverse(),s=Ue({routeLines:T,currentLayerName:f,floorOrder:m});a.length=0;const y=s.map(u=>{const d=u.role==="entry"?xe:u.direction==="up"&&Re?Re:u.direction==="down"&&Le?Le:ge,l=H(d,R(u.x,u.y,d.width,d.height,t),{hidden:!1,dim:!1});return u.role==="exit"&&a.push({imageDef:l,targetLayer:u.targetLayer}),l});r.set(y)}function ft(t,r,a=1,f){if(!t)return;const m=o.fp.icons.get("kiosk");m.id="kiosk";let s;if(m){const u=t?.iconSizePercent?t.iconSizePercent/100:1,d=55;s=z(m,oe(199*u,d),oe(152*u,d),L)}else s=De(L,ne("#ee4422").hex());const y=H(s,R(t.x,t.y,s.width,s.height,a,Ie(t.heading||0)),{hidden:!r.visible,dim:!r.skipdim});f.set([...f.get(),y])}function ze(t,r,a=!1){let f=I.length-1;if(c.selectedRoute?.to?.entity.type==="route-cut-in"&&(f=0),a){we=[],r.children=[],t.update(r);return}const m=t.scale,s=I[f],y=X?.destination;if(!s||!y)return;const u=Z.width,d=Ke([{p0:s,p1:y}],u*2*m);if(d.length<2)return;const l=y.x-s.x,_=y.y-s.y,x=Math.hypot(l,_),h={x:(s.x+y.x)/2,y:(s.y+y.y)/2-x*.2},w=[s,h,y],U=d.map((ae,ee,j)=>{const G=(ee+1)/(j.length+1),K=qe(w,G);return H(Z,R(K.x,K.y,Z.width,Z.height,m),{hidden:!1,dim:!1})})||[];return r.children=U,we=U,U}
1
+ import ne from"color";import{observable as he,reaction as q}from"mobx";import{lineLength as Se}from"simple-geometry";import We from"../../../../core/Rect";import o,{layersStore as Ae,uiState as c}from"../../../../store";import{LayersMode as _e}from"../../../../store/LayerStore";import{boothToWaypoint as me,getGraphLines as Ye,graphDataSource as Ue,computeTransitionPoints as Ge,normalizeRouteDirection as qe,bezierCurve as Ke,splitPolyLine as Ve}from"../../../../wayfinding";import{decreaseByPercentage as oe}from"../../../../utils/math";import{strEqual as ie}from"../../../../utils/strEqual";import{createArrowCurrentCanvas as De,createCurrentCanvas as re,createImageCanvas as k,createTargetCanvas as Xe,createYahCanvas as je}from"./canvases";import{toRadians as Ie}from"../../../../utils/math";import{areLayersEnabled as ve}from"../../../../utils/areLayersEnabled";import{createImageDef as H,createLineDef as ye,createCircleCanvas as Je,getBounds as R,getRotation as Qe}from"../../../../renderer";import{animateLineSegments as Ze}from"../../../../renderer/engine-core/animation";import{splitRouteByPoint as et,snapPositionToRoute as tt,getThresholdSafe as nt,getThresholdFromMetersToSvg as ot,SNAP_THRESHOLD_METERS as it}from"./route-snapping";import{fpGeo as Ne}from"../../../Mapbox/utils/fpGeo";import{getRouteLength as pe}from"../../../../wayfinding";import{pickDefaultScene as Fe}from"../../../../renderer/engine-core/defs";const L=devicePixelRatio;let I=[],X=null,T=[],Q=ne("#00A2FF"),rt=ne("#FF9F06"),ke="#A4CCE2",at="#0794EA";const W=34;let z,B,M,$,Y,ge,Re,Le,xe,Z,C,E,N,F,O,we=[];function st(){I=[];const t=o.routeStore.currentRouteLayer?.name;X=ct();const r=X&&(ve()?ie(t,X.destination?.layer):!0);if(X){const l=X?.routePoint;l&&ie(t,l.layer)&&(I=dt(l,I))}let a=[],f=[];for(let l=0;l<T.length;l++){let _=T[l],x=o.layerStore.mode==_e.Default?!0:o.layerStore.layers.find(m=>m.name==t&&t===_.p0.layer)?.visible||!1;!_.virtual&&x&&a.push(_),(_.virtual||!x||l===T.length-1)&&a.length&&(f=a.map(({p0:m,p1:w})=>(I.push({x:m.x,y:m.y},{x:w.x,y:w.y}),{p0:m,p1:w})))}I.length||(E.hidden=!0,C.hidden=!0);let y=1e6,s=1e6,p=0,u=0;I.forEach(l=>{l.x<y&&(y=l.x),l.y<s&&(s=l.y),l.x>p&&(p=l.x),l.y>u&&(u=l.y)});const d=We.fromX1y1x2y2(y,s,p,u);return{rect:I.length&&(d.w||d.h)?d.withPadding(d.w,d.h):null,lines:f,addTrailPoints:r}}export const WF_TRAIL_LAYER_NAME="wf-trail-points",WF_POINTS_LAYER_NAME="wf-points",WF_CURRENT_POSITION_NAME="wf-current-position",WF_LINES_LAYER_NAME="wf-lines",WF_LINES_ANIMATED_LAYER_NAME="wf-lines-animated";export default function ut(t){let r=null;const a=[];let f=null,y=he.box([]),s=he.box([],{deep:!1}),p=[],u=he.box([],{deep:!1});const d=t.scene.rootLayer.children,l=d.find(e=>e.name===WF_POINTS_LAYER_NAME),_=d.find(e=>e.name===WF_CURRENT_POSITION_NAME),x=d.find(e=>e.name===WF_LINES_LAYER_NAME),m=d.find(e=>e.name===WF_TRAIL_LAYER_NAME),w=d.find(e=>e.name===WF_LINES_ANIMATED_LAYER_NAME),U=nt(Ne?.properties?.config?.snapThreshold)||it,ae=ot({thresholdInMeters:U,gpsConfig:Ne?.properties?.config});let ee=[];const j=o.fp.icons.get("destination");j?(j.id="destination",B=k(j,W,W,L)):B=Xe(L,rt.hex()),E=H(B,R(0,0,B.width,B.height),{hidden:!0});const G=o.fp.icons.get("departure");G?(G.id="departure",z=k(G,W,W,L)):z=re(L,Q.hex()),C=H(z,R(0,0,z.width,z.height),{hidden:!0}),M=re(L,Q.hex()),M.id="current-location",N=H(M,R(0,0,M.width,M.height),{hidden:!0,origin:[.5,.5]});const K=o.fp.icons.get("transition");K?(K.id="transition",ge=k(K,34,34,L)):ge=re(L,Q.hex());const se=o.fp.icons.get("transition_up");se&&(se.id="transition_up",Re=k(se,56,34,L));const ue=o.fp.icons.get("transition_down");ue&&(ue.id="transition_down",Le=k(ue,56,34,L)),G?xe=k(G,W,W,L):xe=re(L,Q.hex());const le=o.fp.icons.get("direction");le?(le.id="direction",$=k(le,W,W,L)):$=De(L,Q.hex()),F=H($,R(0,0,$.width,$.height),{hidden:!0});const Pe=o.fp.icons.get("yah");Pe?Y=k(Pe,oe(64,32),oe(90,32),L):Y=je(L,"#ff4343"),Y.id="current-location-2",O=H(Y,R(0,0,Y.width,Y.height),{hidden:!0,origin:[.5,1]}),Z=Je(4,ne("#b5b7bc").hex());function ce(e=null){const n=o.layerStore.visible.map(i=>i.name);if(I=[],y.set([]),e||(T=[]),n.length&&c.selectedRoute?.from?.rect&&c.selectedRoute?.to?.rect){let i=c.selectedRoute.from,h=c.selectedRoute.to;if(!T.length&&!e&&(T=Ye(Ue,me(i),me(h),o.routeStore.onlyAccessible,c.selectedRoute.waypoints?.map(me))),!T.length){if(o.routeStore.updateRoute(T),o.routeStore.updateRouteDistance(0),i.name!==h.name)throw new Error(`Route not found. From: ${i.name} to: ${h.name}`);return}const{rect:g,lines:D,addTrailPoints:b}=st();D.length?(lt(t.scale),ft(t.scale,s,p),ze(t,m,!b),t.ptScaleRegistry.unregisterByName(m.name),b&&t.onPtScale(m.name,()=>{const P=ze(t,m)||[];return m.children=P,we=P,m})):t.ptScaleRegistry.unregisterByName(m.name),ee=D,fe(),g&&(c.moveToRect=g)}else C.hidden=!0,E.hidden=!0;o.routeStore.updateRoute(T.filter(i=>!i.virtual)),y.get()||(C.hidden=!0,E.hidden=!0)}function J(){const e=o.routeStore.currentPosition,n=e?.angle?Ie(e.angle):null,i=o.routeStore.currentRouteLayer?.name,h=T.filter(A=>o.layerStore.mode==_e.Default?!0:o.layerStore.layers.find(He=>He.name==i&&i===A.p0.layer)?.visible).filter(A=>!A.virtual);if(c.kioskData&&c.selectedRoute?.from){const A=o.routeStore.currentRouteLayer;C.hidden=c.selectedRoute?.from?.entity?.type==="route-cut-in"&&A?.name===c.selectedRoute?.from?.layer?.name,E.hidden=c.selectedRoute?.to?.entity?.type==="route-cut-in"&&A?.name===c.selectedRoute?.to?.layer?.name}if(e){const A=Ae.findLayer(e.z)?.visible??!0;o.routeStore.iconType===0||c.selectedRoute?.from&&c.selectedRoute?.to?(O.hidden=!0,N.hidden=!A,N.dim=!A,N.bounds=R(e.x,e.y,M.width,M.height,t.scale),n!=null?(N.hidden=!0,F.hidden=!A,F.dim=!A,F.bounds=R(e.x,e.y,$.width,$.height,t.scale,n)):F.hidden=!0):(N.hidden=!0,F.hidden=!0,O.dim=!A,O.hidden=!A,O.bounds=R(e.x,e.y,Y.width,Y.height,t.scale))}else N.hidden=!0,O.hidden=!0,F.hidden=!0,de(),fe();if(!e||!I.length){t.update(F,N,O);return}const g=c.selectedRoute?.to,D=c.selectedRoute?.from,b={layer:D?.layer?.name,x:C.bounds.center.x,y:C.bounds.center.y},P={layer:g?.layer?.name,x:E.bounds.center.x,y:E.bounds.center.y},S=tt(e,h,{snapThreshold:ae,fromPoint:b,toPoint:P,fromRect:D?.rect,toRect:g?.rect}),v=S.snapped?S.snappedPoint:e;fe(S,!0),F.bounds=R(v.x,v.y,$.width,$.height,t.scale,n),N.bounds=R(v.x,v.y,M.width,M.height,t.scale,n),t.update(F,N,O)}function Be(){const e=[{point:F,name:"wf-current-arrow"},{point:N,name:"wf-current-location"},{point:O,name:"wf-current-location-2"}];_.children=e.map(({point:n})=>n),e.forEach(({point:n,name:i})=>te(n,i)),t.update(_)}function V(e=!1){const n=[C,E,...s.get(),...u.get()];e&&(Me(!0),m.children=[],n.forEach(i=>{i.source.id.includes("kiosk")||(i.hidden=!0)})),l.children=n,t.update(l,m)}function de(e,n){const i=T.filter(P=>!P.virtual),h=pe(i);if(!e?.snapped){o.routeStore.updateRouteDistance(h);return}const g=c.selectedRoute?.to,D=pe(n);let b;if(e.snappedPoint?.layer===g?.layer?.name||g?.layer?.name===o.routeStore.currentRouteLayer?.name)b=D;else if(e.snappedPoint?.layer!==g?.layer?.name&&e.snappedPoint?.layer===o.routeStore.currentRouteLayer?.name){const P=i.filter(v=>v.p0.layer!==e?.snappedPoint?.layer&&v.p1.layer!==e?.snappedPoint?.layer),S=pe(P);b=D+S}b&&o.routeStore.updateRouteDistance(b)}function fe(e,n=!1){const i=c.selectedRoute?.from,h=c.selectedRoute?.to;if(!i||!h)return;const g=T[0]?.p0.layer,D=qe(T,ee,{layer:i.layer?.name??g,x:i.rect.cx,y:i.rect.cy},{layer:h.layer?.name??g,x:h.rect.cx,y:h.rect.cy});if(!e?.snapped){const S=D.map(v=>ye(v,ke));o.routeStore.currentPosition&&o.routeStore.currentRouteLayer&&o.routeStore.currentPosition?.z?.toString()===o.routeStore.currentRouteLayer?.name.toString()&&de(),Ce([],S,n);return}const{passed:b,remaining:P}=et(D,e.snappedPoint);P.length&&(P[0]={...P[0],p0:e.snappedPoint}),de(e,P),Ce(b.map(S=>ye(S,"#B5B7BC")),P.map(S=>ye(S,ke)),n)}const te=(e,n)=>t.onPtScale(n,i=>(e.hidden||(e.bounds=R(e.bounds.center.x,e.bounds.center.y,e.source.width,e.source.height,i,e.bounds.rotation)),e)),be=(e,n)=>t.onRoll(n,i=>{const h=Qe(i,e.bounds.rotation);return h!==void 0&&(e.bounds.rotation=e.bounds.rotation+h),e});function Me(e){r&&(r.stop(),r=null),w.children=[],e&&(x.children=[]),t.update(w,x)}function Ce(e=[],n=[],i=!1){let h=0;if(r&&(i&&(h=r.getProgress()),r.stop(),r=null),x.children=[...e,...n],!n.length){w.children=[],t.update(w,x);return}const g=n.map(b=>({...b,color:at}));r=Ze(g,(b,P,S)=>{if(S)w.children=[];else{const v=g.slice(0,P);w.children=[...v,b]}t.update(w)},()=>t.scale,h)??null,t.update(x)}a.push(q(()=>[o.layerStore.layersLoaded],()=>{ce(),J(),V()}));const $e=q(()=>[o.routeStore.currentRouteLayer,c.getRouteNextFloor],()=>{o.layerStore.layersLoaded&&(f!==null&&clearTimeout(f),f=setTimeout(()=>{ce(o.routeStore.currentRouteLayer),J(),V(),f=null},0))});a.push(()=>{f!==null&&(clearTimeout(f),f=null),$e()}),a.push(q(()=>[c.selectedRoute,o.routeStore.onlyAccessible],()=>{ce(),J(),V(!c.selectedRoute)})),a.push(q(()=>o.routeStore.currentPosition,()=>{J(),V()})),a.push(q(()=>s.get(),e=>{const n="transitionPoints";t.ptScaleRegistry.unregisterByPrefix(n),t.rollRegistry.unregisterByPrefix(n),e.length&&e.forEach((i,h)=>{const g=`${n}-${h}`;te(i,g),be(i,g)})})),a.push(q(()=>[u.get()],()=>{const e=u.get(),n="kioskArrows";t.ptScaleRegistry.unregisterByPrefix(n),e.length&&e.forEach((i,h)=>te(i,`${n}-${h}`))})),a.push(q(()=>[c.kioskData,Ae.floors.find(e=>e.active),c.selectedRoute],([e,n])=>{u.set([]);const i=ve()?e?.z===n?.name:!0;e&&i&&ht(e,{skipdim:!0,visible:!0,pixelRatio:L},t.scale,u),V()}));function Ee({data:e}){const{defs:n}=Fe(e),i=p.find(h=>n.includes(h.imageDef));i&&o.layerStore.updateVisibility(i.targetLayer,!0)}t.renderer.events.addEventListener("pointer:click",Ee),a.push(()=>t.renderer.events.removeEventListener("pointer:click",Ee));function Te({data:e}){const{defs:n}=Fe(e),i=p.some(h=>n.includes(h.imageDef));t.renderer.canvas.style.cursor=i?"pointer":""}t.renderer.events.addEventListener("pointer:move",Te),a.push(()=>t.renderer.events.removeEventListener("pointer:move",Te)),[{point:C,name:"wf-source"},{point:E,name:"wf-destination"}].forEach(({point:e,name:n})=>{te(e,n),be(e,n)}),V(),J(),Be();function Oe(){r&&(r.stop(),r=null),a.forEach(e=>e()),a.length=0}return Oe}function lt(t){const r=o.routeStore.currentRouteLayer?.name,a=I;let f=c.selectedRoute?.from,y=c.selectedRoute?.to;const s=c.selectedRoute?.waypoints;if(f?.entity.type==="route-cut-in"&&(f=null),y?.entity.type==="route-cut-in"&&(y=null),!a.length)return;const p=[{key:"sourceLocation",rect:f?.rect,index:void 0},{key:"destinationLocation",rect:y?.rect,index:void 0}];s&&p.push(...s?.map((x,m)=>({key:`waypoint-${x.externalId}`,index:m,rect:x.rect})));const u=r?ie(r,f?.layer?.name):!0,d=r?ie(r,y?.layer?.name):!0;let l=!1,_=!1;a.forEach(({x,y:m})=>{for(const{key:w,rect:U,index:ae}of p)if(U?.containsPoint(x,m)){w==="sourceLocation"&&(C.bounds=R(x,m,z.width,z.height,t),C.hidden=!u,C.dim=!u,l=u),w==="destinationLocation"&&(E.bounds=R(x,m,B.width,B.height,t),E.hidden=!d,E.dim=!d,_=d);break}}),l||(C.bounds=R(a[a.length-1].x,a[a.length-1].y,z.width,z.height,t),C.hidden=!1,C.dim=!1),_||(E.bounds=R(a[0].x,a[0].y,B.width,B.height,t),E.hidden=!d,E.dim=!d)}function ct(){const{from:t,to:r}=o.uiState.selectedRoute||{},a="route-cut-in";return t&&t?.entity.type===a||r&&r?.entity.type===a?o.routeStore.defaultFrom:null}function dt(t,r){if(!t||!r.length)return r;const a=r.reduce((f,y,s)=>Se(t,y)<Se(t,r[f])?s:f,0);return a<=r.length/2?r.slice(a):r.slice(0,a)}function ft(t,r,a){const f=o.routeStore.currentRouteLayer?.name,y=o.layerStore.floors.map(u=>u.name).reverse(),s=Ge({routeLines:T,currentLayerName:f,floorOrder:y});a.length=0;const p=s.map(u=>{const d=u.role==="entry"?xe:u.direction==="up"&&Re?Re:u.direction==="down"&&Le?Le:ge,l=H(d,R(u.x,u.y,d.width,d.height,t),{hidden:!1,dim:!1});return u.role==="exit"&&a.push({imageDef:l,targetLayer:u.targetLayer}),l});r.set(p)}function ht(t,r,a=1,f){if(!t)return;const y=o.fp.icons.get("kiosk");y.id="kiosk";let s;if(y){const u=t?.iconSizePercent?t.iconSizePercent/100:1,d=55;s=k(y,oe(199*u,d),oe(152*u,d),L)}else s=De(L,ne("#ee4422").hex());const p=H(s,R(t.x,t.y,s.width,s.height,a,Ie(t.heading||0)),{hidden:!r.visible,dim:!r.skipdim});f.set([...f.get(),p])}function ze(t,r,a=!1){let f=I.length-1;if(c.selectedRoute?.to?.entity.type==="route-cut-in"&&(f=0),a){we=[],r.children=[],t.update(r);return}const y=t.scale,s=I[f],p=X?.destination;if(!s||!p)return;const u=Z.width,d=Ve([{p0:s,p1:p}],u*2*y);if(d.length<2)return;const l=p.x-s.x,_=p.y-s.y,x=Math.hypot(l,_),m={x:(s.x+p.x)/2,y:(s.y+p.y)/2-x*.2},w=[s,m,p],U=d.map((ae,ee,j)=>{const G=(ee+1)/(j.length+1),K=Ke(w,G);return H(Z,R(K.x,K.y,Z.width,Z.height,y),{hidden:!1,dim:!1})})||[];return r.children=U,we=U,U}
@@ -1,7 +1,7 @@
1
- import{useCallback as x,useEffect as M,useMemo as _,useRef as P}from"react";import{BUILD_ROUTE_DOTS as U,BUILD_ROUTE_LINES as $}from"./trafficLayers";import{createCircleCanvas as I,getBounds as S}from"../../../renderer/engine-core/canvases";import{UpdateQueue as A}from"./UpdateQueue";const v=49,C=`hsl(257, 76%, ${v}%)`,K=`hsl(339.903, 82%, ${v}%)`,T=`hsl(257, 76%, ${Math.round(v*1.82)}%)`,O=4,H=O,R="U",D="R",b="S",N="P";class Y{_state=[[]];index=0;pointHashSet=new Set;locked=!1;storageKey="expofp_build_route_state";_selected=0;get points(){return this._state[this.index]}set points(t){this._state.push(t),this.setIndex(),this.save()}setIndex(){this.index=Math.max(this._state.length-1,0)}genPointHash(t){return`${t.x},${t.y}`}add(t){const a=this.genPointHash(t);this.pointHashSet.has(a)||(this.pointHashSet.add(a),this.points=[...this.points,t])}undo(){this.index&&(this._state.pop(),this.setIndex(),this.save(),this.select(this.points.length-1))}execute(t){try{if(this.locked)return;this.locked=!0,t()}finally{requestAnimationFrame(()=>{this.locked=!1})}}log(t,a=12){console.log(`%c${t}`,`color: black; font-size: ${a}px; background: LemonChiffon;`)}instruct(){this.log(`How to Build a Route:
1
+ import{useCallback as _,useEffect as M,useMemo as L,useRef as P}from"react";import{BUILD_ROUTE_DOTS as U,BUILD_ROUTE_LINES as $}from"./trafficLayers";import{createCircleCanvas as S,getBounds as I}from"../../../renderer/engine-core/canvases";import{UpdateQueue as A}from"./UpdateQueue";import{isDefaultScene as K,pickDefaultScene as T}from"../../../renderer/engine-core/defs";const v=49,C=`hsl(257, 76%, ${v}%)`,H=`hsl(339.903, 82%, ${v}%)`,Y=`hsl(257, 76%, ${Math.round(v*1.82)}%)`,O=4,B=O,D="U",R="R",b="S",N="P";class J{_state=[[]];index=0;pointHashSet=new Set;locked=!1;storageKey="expofp_build_route_state";_selected=0;get points(){return this._state[this.index]}set points(t){this._state.push(t),this.setIndex(),this.save()}setIndex(){this.index=Math.max(this._state.length-1,0)}genPointHash(t){return`${t.x},${t.y}`}add(t){const a=this.genPointHash(t);this.pointHashSet.has(a)||(this.pointHashSet.add(a),this.points=[...this.points,t])}undo(){this.index&&(this._state.pop(),this.setIndex(),this.save(),this.select(this.points.length-1))}execute(t){try{if(this.locked)return;this.locked=!0,t()}finally{requestAnimationFrame(()=>{this.locked=!1})}}log(t,a=12){console.log(`%c${t}`,`color: black; font-size: ${a}px; background: LemonChiffon;`)}instruct(){this.log(`How to Build a Route:
2
2
  Add Point: Click on the map.
3
- Apply Smoothing: Press ${D}.
3
+ Apply Smoothing: Press ${R}.
4
4
  Apply Simplification: Press ${b}.
5
- Undo: Press ${R}.
5
+ Undo: Press ${D}.
6
6
  Enable/Disable Preview: Press ${N}.
7
- `,16)}applyChaikinSmoothing(t,a,d){let c=[];if(d>=1&&t.length>=2){c=[t[0]];for(let h=1;h<t.length;h++){const s=t[h-1],u=t[h];for(let o=1;o<=d;o++){const n=o/(d+1);c.push({x:s.x+(u.x-s.x)*n,y:s.y+(u.y-s.y)*n})}c.push(u)}}else c=t.slice();for(let h=0;h<a&&!(c.length<2);h++){const s=[{...c[0]}];for(let u=1;u<c.length;u++){const o=c[u-1],n=c[u];s.push({x:.75*o.x+.25*n.x,y:.75*o.y+.25*n.y}),s.push({x:.25*o.x+.75*n.x,y:.25*o.y+.75*n.y})}s.push({...c[c.length-1]}),c=s}return c}applySmoothing(){this.points.length<3||(this.points=this.applyChaikinSmoothing(this.points,1,0),this.select(this.points.length-1))}save(){try{this.points.length?sessionStorage.setItem(this.storageKey,JSON.stringify(this.points)):sessionStorage.removeItem(this.storageKey)}catch(t){console.warn(t)}}restore(){try{const t=sessionStorage.getItem(this.storageKey);if(!t)return;const a=JSON.parse(t);if(!Array.isArray(a))return;a.forEach(d=>this.add(d)),this.select(this.points.length-1)}catch(t){console.warn(t)}}topologyPreservingSimplify(t,a){if(t.length<=2)return t.map(o=>({...o}));const d=(o,n,y)=>{const g=o.x,f=o.y,e=n.x,i=n.y,r=y.x,l=y.y,m=Math.abs((l-i)*g-(r-e)*f+r*i-l*e),p=Math.sqrt((l-i)**2+(r-e)**2);return m/(p||1e-10)},c=(o,n,y,g)=>{const f=(e,i,r)=>(r.y-e.y)*(i.x-e.x)-(i.y-e.y)*(r.x-e.x);return f(o,y,g)*f(n,y,g)<0&&f(y,o,n)*f(g,o,n)<0},h=new Array(t.length).fill(!1);h[0]=h[h.length-1]=!0;const s=[],u=(o,n)=>{if(n<=o+1)return;const y=t[o],g=t[n];let f=0,e=0;for(let i=o+1;i<n;i++){const r=d(t[i],y,g);r>f&&(f=r,e=i)}if(f>a){const i=t[e];let r=!0;for(let l=0;l<s.length-1;l++)if(c(s[l],s[l+1],y,i)||c(s[l],s[l+1],i,g)){r=!1;break}r&&(h[e]=!0,u(o,e),u(e,n))}};return u(0,t.length-1),t.filter((o,n)=>h[n])}applySimplification(){this.points=this.topologyPreservingSimplify(this.points,.5),this.select(this.points.length-1)}get selected(){return this._selected}select(t){this._selected=Math.max(0,Math.min(t,this.points.length-1))}}export function useBuildRoute({enabled:L,rendererService:t}){const a=P(!1),d=P(),c=_(()=>I(O,C),[]),h=_(()=>I(O,K),[]),s=_(()=>new Y,[]),u=P(new A),o=_(()=>{if(!t.scene)return{};const e=t.scene.rootLayer.children,i=e.find(l=>l.name===$),r=e.find(l=>l.name===U);return{linesLayer:i,pointsLayer:r}},[t.scene]),n=x(()=>{if(!t?.renderer||!o||!c||!h)return;const{linesLayer:e,pointsLayer:i}=o;if(!e||!i)return;const r=s.points,l=a.current;l?i.children.length=0:i.children=r.map(({x:p,y:w},k)=>{const E=k==s.selected?h:c;return{source:E,bounds:S(p,w,E.width,E.height,d.current)}});const m=[];for(let p=1;p<r.length;p++){const w=r[p-1],k=r[p];m.push({points:[w,k],color:l?C:T,width:H})}m.length?e.children=m:e.children.length=0,u.current.add(()=>t.update(i,e)),s.instruct(),s.log(JSON.stringify(s.points))},[t,s,o,c,h]),y=x(e=>{const i=e.key.toUpperCase();s.execute(()=>{switch(i){case R:e.preventDefault(),s.undo(),a.current=!1,n();break;case D:e.preventDefault(),s.applySmoothing(),a.current=!1,n();break;case b:e.preventDefault(),s.applySimplification(),a.current=!1,n();break;case N:e.preventDefault(),a.current=!a.current,n();break}})},[s,n]),g=x(e=>{if(!t?.renderer||!o)return;const{pointsLayer:i}=o;i&&(d.current=e,s.execute(()=>{const r=i.children,l=[];for(let m=0;m<r.length;m++){const p=r[m];p.bounds=S(p.bounds.center.x,p.bounds.center.y,p.source.width,p.source.height,d.current),l.push(p)}u.current.add(()=>t.update(...l))}))},[t,o,s]),f=x(e=>{s.execute(()=>{s.add({x:e.point.x,y:e.point.y}),s.select(s.points.length-1),n()})},[s,n]);M(()=>{const e=t.renderer;if(!(!L||!e))return d.current=t.scale,s.execute(()=>{s.restore(),n()}),e.events.addEventListener("pointer:click",f),e.events.addEventListener("viewport:ptscale",g),window.addEventListener("keyup",y),()=>{window.removeEventListener("keyup",y),e.events.removeEventListener("pointer:click",f),e.events.removeEventListener("viewport:ptscale",g),u.current.destroy()}},[L,t,s,n,f,g,y])}
7
+ `,16)}applyChaikinSmoothing(t,a,y){let c=[];if(y>=1&&t.length>=2){c=[t[0]];for(let h=1;h<t.length;h++){const s=t[h-1],u=t[h];for(let o=1;o<=y;o++){const n=o/(y+1);c.push({x:s.x+(u.x-s.x)*n,y:s.y+(u.y-s.y)*n})}c.push(u)}}else c=t.slice();for(let h=0;h<a&&!(c.length<2);h++){const s=[{...c[0]}];for(let u=1;u<c.length;u++){const o=c[u-1],n=c[u];s.push({x:.75*o.x+.25*n.x,y:.75*o.y+.25*n.y}),s.push({x:.25*o.x+.75*n.x,y:.25*o.y+.75*n.y})}s.push({...c[c.length-1]}),c=s}return c}applySmoothing(){this.points.length<3||(this.points=this.applyChaikinSmoothing(this.points,1,0),this.select(this.points.length-1))}save(){try{this.points.length?sessionStorage.setItem(this.storageKey,JSON.stringify(this.points)):sessionStorage.removeItem(this.storageKey)}catch(t){console.warn(t)}}restore(){try{const t=sessionStorage.getItem(this.storageKey);if(!t)return;const a=JSON.parse(t);if(!Array.isArray(a))return;a.forEach(y=>this.add(y)),this.select(this.points.length-1)}catch(t){console.warn(t)}}topologyPreservingSimplify(t,a){if(t.length<=2)return t.map(o=>({...o}));const y=(o,n,f)=>{const d=o.x,p=o.y,e=n.x,i=n.y,r=f.x,l=f.y,x=Math.abs((l-i)*d-(r-e)*p+r*i-l*e),g=Math.sqrt((l-i)**2+(r-e)**2);return x/(g||1e-10)},c=(o,n,f,d)=>{const p=(e,i,r)=>(r.y-e.y)*(i.x-e.x)-(i.y-e.y)*(r.x-e.x);return p(o,f,d)*p(n,f,d)<0&&p(f,o,n)*p(d,o,n)<0},h=new Array(t.length).fill(!1);h[0]=h[h.length-1]=!0;const s=[],u=(o,n)=>{if(n<=o+1)return;const f=t[o],d=t[n];let p=0,e=0;for(let i=o+1;i<n;i++){const r=y(t[i],f,d);r>p&&(p=r,e=i)}if(p>a){const i=t[e];let r=!0;for(let l=0;l<s.length-1;l++)if(c(s[l],s[l+1],f,i)||c(s[l],s[l+1],i,d)){r=!1;break}r&&(h[e]=!0,u(o,e),u(e,n))}};return u(0,t.length-1),t.filter((o,n)=>h[n])}applySimplification(){this.points=this.topologyPreservingSimplify(this.points,.5),this.select(this.points.length-1)}get selected(){return this._selected}select(t){this._selected=Math.max(0,Math.min(t,this.points.length-1))}}export function useBuildRoute({enabled:k,rendererService:t}){const a=P(!1),y=P(),c=L(()=>S(O,C),[]),h=L(()=>S(O,H),[]),s=L(()=>new J,[]),u=P(new A),o=L(()=>{if(!t.scene)return{};const e=t.scene.rootLayer.children,i=e.find(l=>l.name===$),r=e.find(l=>l.name===U);return{linesLayer:i,pointsLayer:r}},[t.scene]),n=_(()=>{if(!t?.renderer||!o||!c||!h)return;const{linesLayer:e,pointsLayer:i}=o;if(!e||!i)return;const r=s.points,l=a.current;l?i.children.length=0:i.children=r.map(({x:g,y:m},w)=>{const E=w==s.selected?h:c;return{source:E,bounds:I(g,m,E.width,E.height,y.current)}});const x=[];for(let g=1;g<r.length;g++){const m=r[g-1],w=r[g];x.push({points:[m,w],color:l?C:Y,width:B})}x.length?e.children=x:e.children.length=0,u.current.add(()=>t.update(i,e)),s.instruct(),s.log(JSON.stringify(s.points))},[t,s,o,c,h]),f=_(e=>{const i=e.key.toUpperCase();s.execute(()=>{switch(i){case D:e.preventDefault(),s.undo(),a.current=!1,n();break;case R:e.preventDefault(),s.applySmoothing(),a.current=!1,n();break;case b:e.preventDefault(),s.applySimplification(),a.current=!1,n();break;case N:e.preventDefault(),a.current=!a.current,n();break}})},[s,n]),d=_(({ptScale:e,sceneId:i})=>{if(!K(i)||!t?.renderer||!o)return;const{pointsLayer:r}=o;r&&(y.current=e,s.execute(()=>{const l=r.children,x=[];for(let g=0;g<l.length;g++){const m=l[g];m.bounds=I(m.bounds.center.x,m.bounds.center.y,m.source.width,m.source.height,y.current),x.push(m)}u.current.add(()=>t.update(...x))}))},[t,o,s]),p=_(({data:e})=>{s.execute(()=>{const{point:i}=T(e);s.add({x:i.x,y:i.y}),s.select(s.points.length-1),n()})},[s,n]);M(()=>{const e=t.renderer;if(!(!k||!e))return y.current=t.scale,s.execute(()=>{s.restore(),n()}),e.events.addEventListener("pointer:click",p),e.events.addEventListener("viewport:ptscale",d),window.addEventListener("keyup",f),()=>{window.removeEventListener("keyup",f),e.events.removeEventListener("pointer:click",p),e.events.removeEventListener("viewport:ptscale",d),u.current.destroy()}},[k,t,s,n,p,d,f])}