@expofp/floorplan 3.8.0 → 3.9.0

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 (87) hide show
  1. package/dist/browser/{Button-1J9oictV.js → Button-D6kSs8oT.js} +5 -5
  2. package/dist/browser/{CookieConsent-DIB9ja_x.js → CookieConsent-COR-7PnR.js} +7 -7
  3. package/dist/browser/{Debug-Dj0pjQgz.js → Debug-hcVDK_6B.js} +7 -7
  4. package/dist/browser/{Demo-DFFTbr3B.js → Demo-CXfqKcNa.js} +9 -9
  5. package/dist/browser/{Free-VNovKWeM.js → Free-UltUjcsW.js} +9 -9
  6. package/dist/browser/{Gallery-CsjJODa1.js → Gallery-Dw_l4-HJ.js} +9 -9
  7. package/dist/browser/{GpsLoader-LtDTQ04B.js → GpsLoader-BeUr-tWe.js} +26 -26
  8. package/dist/browser/{KioskStore-BlqVE5Em.js → KioskStore-rXGF6ISj.js} +47 -47
  9. package/dist/browser/{MaplibreAdapter-BdhppB5g.js → MaplibreAdapter-DBu4xFLx.js} +10 -10
  10. package/dist/browser/{ModalContainer-B3TzgHkN.js → ModalContainer-CHubcxXg.js} +10 -10
  11. package/dist/browser/{PermissionNotice-CFzmPPcM.js → PermissionNotice-Dcyf-h-X.js} +6 -6
  12. package/dist/browser/{SetKioskMode-BmGR1XVY.js → SetKioskMode-Dsaeb_7s.js} +8 -8
  13. package/dist/browser/{ShowKiosk-zlmmcHhV.js → ShowKiosk-B33TvvNh.js} +11 -11
  14. package/dist/browser/{TouchHand-CJVe9zjZ.js → TouchHand-BglJHdqZ.js} +4 -4
  15. package/dist/browser/{ViewerMenuPanel-BWULAn9z.js → ViewerMenuPanel-6hwMrGsD.js} +9 -9
  16. package/dist/browser/{add-debug-secret-listener-BmN449zK.js → add-debug-secret-listener-CrjDiiDe.js} +1 -1
  17. package/dist/browser/{boolean-editor-DfnwzSdd.js → boolean-editor-B8TY5r_7.js} +9 -9
  18. package/dist/browser/{bootIntercom-Dm7ltiQq.js → bootIntercom-BLVUFUo9.js} +2 -2
  19. package/dist/browser/{browser-BHxQ7Crl.js → browser-C0ZAqhfq.js} +2 -2
  20. package/dist/browser/bundle.json +61 -61
  21. package/dist/browser/{classnames-CYIl-Aml.js → classnames-CORO_J9N.js} +2 -2
  22. package/dist/browser/{client-C9cyInZ3.js → client-B8k3_zlK.js} +4 -4
  23. package/dist/browser/{components-CGrjy21U.js → components-Br23UmiD.js} +263 -263
  24. package/dist/browser/{createWayfinding-BiBK6J8p.js → createWayfinding-CywBuuhE.js} +87 -87
  25. package/dist/browser/{debug-overlay-DDKkKZ7_.js → debug-overlay-OnJ9mpi3.js} +10 -10
  26. package/dist/browser/{debug-ui-CKdNfGUm.js → debug-ui-BGxXBqCM.js} +6 -6
  27. package/dist/browser/{dist-Y5bXC6OR.js → dist-Bwo0bena.js} +5 -5
  28. package/dist/browser/{dist-Dveh_M6J.js → dist-DJcDQ9wl.js} +3 -3
  29. package/dist/browser/{dist-Sr-nbWel.js → dist-DeenbCqa.js} +6 -6
  30. package/dist/browser/{efp-debug-init-QlttX6qg.js → efp-debug-init-D4xpSVxZ.js} +2 -2
  31. package/dist/browser/{enum-editor-D8AUxIjM.js → enum-editor-BtQ7q_B6.js} +11 -11
  32. package/dist/browser/{es5-DM_2dLMc.js → es5-DyYwMIHo.js} +2 -2
  33. package/dist/browser/{event-not-found-BzZrJTbo.js → event-not-found-DHZml9YG.js} +1 -1
  34. package/dist/browser/{exports-C77c46fn.js → exports-BSvGPafo.js} +1 -1
  35. package/dist/browser/{favicon-CLXnJgR0.js → favicon-7eGefoDS.js} +1 -1
  36. package/dist/browser/{fetch-retry.umd-DIeR-B1a.js → fetch-retry.umd-D4q_0lN2.js} +2 -2
  37. package/dist/browser/{flex-B9_T4ILl.js → flex-BNMB3s0s.js} +5 -5
  38. package/dist/browser/{floorplan.loader-DBLUmBct.js → floorplan.loader-C464BfTl.js} +45 -45
  39. package/dist/browser/{floorplan.ready-C_Yqubo7.js → floorplan.ready-F-rEW40x.js} +21 -21
  40. package/dist/browser/{fuse-BA9FAI84.js → fuse-BOOzXNLy.js} +2 -2
  41. package/dist/browser/{i18n-i9ni8Aks.js → i18n-CJxFIIru.js} +9 -9
  42. package/dist/browser/index.js +12 -12
  43. package/dist/browser/{index.module-DPZn4TXU.js → index.module-CkT4oOvs.js} +26 -26
  44. package/dist/browser/{is-webview-Dy8i33Cj.js → is-webview-B86RAuQv.js} +1 -1
  45. package/dist/browser/{jsx-runtime-DzGUGvz-.js → jsx-runtime-3_7049j-.js} +2 -2
  46. package/dist/browser/{lib-BHciLO67.js → lib-CjZn5G8Q.js} +4 -4
  47. package/dist/browser/{loadImage-Kl5pv_Gu.js → loadImage-CV72jhce.js} +5 -5
  48. package/dist/browser/locales/ar.json +4 -1
  49. package/dist/browser/locales/da.json +4 -1
  50. package/dist/browser/locales/de.json +4 -1
  51. package/dist/browser/locales/es.json +4 -1
  52. package/dist/browser/locales/fr.json +4 -1
  53. package/dist/browser/locales/he.json +4 -1
  54. package/dist/browser/locales/it.json +4 -1
  55. package/dist/browser/locales/kk.json +4 -1
  56. package/dist/browser/locales/ko.json +4 -1
  57. package/dist/browser/locales/mn.json +4 -1
  58. package/dist/browser/locales/nl.json +4 -1
  59. package/dist/browser/locales/pl.json +4 -1
  60. package/dist/browser/locales/pt.json +4 -1
  61. package/dist/browser/locales/ru.json +4 -1
  62. package/dist/browser/locales/sv.json +4 -1
  63. package/dist/browser/locales/th.json +4 -1
  64. package/dist/browser/locales/tr.json +4 -1
  65. package/dist/browser/locales/uk.json +4 -1
  66. package/dist/browser/locales/vi.json +4 -1
  67. package/dist/browser/locales/zh.json +4 -1
  68. package/dist/browser/{logDeviceInfo-CS0Fd9Bz.js → logDeviceInfo-CH_mwixN.js} +9 -9
  69. package/dist/browser/{main-CnhK8g8p.js → main-DBcClnTP.js} +1 -1
  70. package/dist/browser/{mobx-MDNY-J4R.js → mobx-Cnc_mxKS.js} +8 -8
  71. package/dist/browser/{particles.min-BfWO2YCb.js → particles.min-Bdddyoyn.js} +2 -2
  72. package/dist/browser/{prop-types-8OQVQO5z.js → prop-types-D9saedjy.js} +2 -2
  73. package/dist/browser/{react-BHziDcUN.js → react-CtAjLpE4.js} +2 -2
  74. package/dist/browser/{react-dom-B2YH_-FW.js → react-dom-9Z9grXEI.js} +3 -3
  75. package/dist/browser/{reset-all-settings-DhiQzgYR.js → reset-all-settings-D2rGLtD9.js} +7 -7
  76. package/dist/browser/{rolldown-runtime-kNW8iHBm.js → rolldown-runtime-6HCGHF5o.js} +1 -1
  77. package/dist/browser/{settings-item-v4B4uQdw.js → settings-item-CmuDoi0N.js} +6 -6
  78. package/dist/browser/{settings-Cu5Wcs8p.js → settings-r2jCygEX.js} +2 -2
  79. package/dist/browser/{store-pynNgMKs.js → store-hsXE5nII.js} +4967 -4967
  80. package/dist/browser/{string-editor-DpTkbez0.js → string-editor-UncyEsWj.js} +7 -7
  81. package/dist/browser/{theme-BOa5CSxW.js → theme-DmuulesT.js} +8 -8
  82. package/dist/browser/{ui-Bq-HLu6b.js → ui-CBeseOX-.js} +8 -8
  83. package/dist/browser/{useRenderTarget-l4FhOrhr.js → useRenderTarget-C5lcypnV.js} +4 -4
  84. package/dist/esm/store/search-buttons/SearchButtonsFactory.js +1 -1
  85. package/dist/esm/utils/i18n.d.ts +9 -0
  86. package/dist/esm/utils/i18n.js +1 -1
  87. package/package.json +4 -4
@@ -1,17 +1,17 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.8.0" };
4
+ e.SENTRY_RELEASE = { id: "3.9.0" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "888fc155-fb35-4159-9302-91880886e35d", e._sentryDebugIdIdentifier = "sentry-dbid-888fc155-fb35-4159-9302-91880886e35d");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-kNW8iHBm.js";
10
- import { t } from "./react-BHziDcUN.js";
11
- import { t as n } from "./jsx-runtime-DzGUGvz-.js";
12
- import { D as r, i, l as a, n as o, s, u as c, y as l } from "./flex-B9_T4ILl.js";
13
- import { t as u } from "./classnames-CYIl-Aml.js";
14
- import { t as d } from "./settings-item-v4B4uQdw.js";
9
+ import { r as e } from "./rolldown-runtime-6HCGHF5o.js";
10
+ import { t } from "./react-CtAjLpE4.js";
11
+ import { t as n } from "./jsx-runtime-3_7049j-.js";
12
+ import { D as r, i, l as a, n as o, s, u as c, y as l } from "./flex-BNMB3s0s.js";
13
+ import { t as u } from "./classnames-CORO_J9N.js";
14
+ import { t as d } from "./settings-item-CmuDoi0N.js";
15
15
  //#region ../../node_modules/.pnpm/@radix-ui+themes@3.3.0_@types+react-dom@19.2.3_@types+react@19.2.17__@types+react@19.2._925f851475345a9e5e368d312bb98178/node_modules/@radix-ui/themes/dist/esm/components/text-field.props.js
16
16
  var f = {
17
17
  size: {
@@ -1,18 +1,18 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.8.0" };
4
+ e.SENTRY_RELEASE = { id: "3.9.0" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "b674b3f0-1e85-4d5b-b554-fb365f6d1945", e._sentryDebugIdIdentifier = "sentry-dbid-b674b3f0-1e85-4d5b-b554-fb365f6d1945");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-kNW8iHBm.js";
10
- import { t } from "./react-BHziDcUN.js";
11
- import { t as n } from "./jsx-runtime-DzGUGvz-.js";
12
- import { t as r } from "./react-dom-B2YH_-FW.js";
13
- import { C as i, E as a, O as o, T as s, _ as c, o as l, v as u, w as d } from "./flex-B9_T4ILl.js";
14
- import { c as f, i as p, n as m, o as h, r as g, s as _, t as v } from "./dist-Sr-nbWel.js";
15
- import { t as y } from "./classnames-CYIl-Aml.js";
9
+ import { r as e } from "./rolldown-runtime-6HCGHF5o.js";
10
+ import { t } from "./react-CtAjLpE4.js";
11
+ import { t as n } from "./jsx-runtime-3_7049j-.js";
12
+ import { t as r } from "./react-dom-9Z9grXEI.js";
13
+ import { C as i, E as a, O as o, T as s, _ as c, o as l, v as u, w as d } from "./flex-BNMB3s0s.js";
14
+ import { c as f, i as p, n as m, o as h, r as g, s as _, t as v } from "./dist-DeenbCqa.js";
15
+ import { t as y } from "./classnames-CORO_J9N.js";
16
16
  //#region ../../node_modules/.pnpm/@radix-ui+react-visually-hidden@1.2.3_@types+react-dom@19.2.3_@types+react@19.2.17__@ty_070bcfa32421a5876e7dcb93369fcbee/node_modules/@radix-ui/react-visually-hidden/dist/index.mjs
17
17
  var b = /* @__PURE__ */ e(r(), 1), x = /* @__PURE__ */ e(t(), 1), S = n(), C = Object.freeze({
18
18
  position: "absolute",
@@ -1,17 +1,17 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.8.0" };
4
+ e.SENTRY_RELEASE = { id: "3.9.0" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "43912113-9328-4069-8890-5091c8745c34", e._sentryDebugIdIdentifier = "sentry-dbid-43912113-9328-4069-8890-5091c8745c34");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-kNW8iHBm.js";
10
- import { a as t, r as n } from "./reset-all-settings-DhiQzgYR.js";
11
- import { t as r } from "./jsx-runtime-DzGUGvz-.js";
12
- import "./settings-Cu5Wcs8p.js";
13
- import { t as i } from "./browser-BHxQ7Crl.js";
14
- import { t as a } from "./add-debug-secret-listener-BmN449zK.js";
9
+ import { r as e } from "./rolldown-runtime-6HCGHF5o.js";
10
+ import { a as t, r as n } from "./reset-all-settings-D2rGLtD9.js";
11
+ import { t as r } from "./jsx-runtime-3_7049j-.js";
12
+ import "./settings-r2jCygEX.js";
13
+ import { t as i } from "./browser-C0ZAqhfq.js";
14
+ import { t as a } from "./add-debug-secret-listener-CrjDiiDe.js";
15
15
  //#region ../debug/src/lib/ui/render-debug-ui.tsx
16
16
  var o = /* @__PURE__ */ e(i(), 1), s = r(), c = !1;
17
17
  function l() {
@@ -26,7 +26,7 @@ function l() {
26
26
  }
27
27
  });
28
28
  let i = async (t) => {
29
- let { DebugUi: n } = await import("./debug-ui-CKdNfGUm.js"), { createRoot: i } = await import("./client-C9cyInZ3.js").then((t) => /* @__PURE__ */ e(t.default, 1)), a = document.createElement("div");
29
+ let { DebugUi: n } = await import("./debug-ui-BGxXBqCM.js"), { createRoot: i } = await import("./client-B8k3_zlK.js").then((t) => /* @__PURE__ */ e(t.default, 1)), a = document.createElement("div");
30
30
  document.body.appendChild(a), i(a).render(/* @__PURE__ */ (0, s.jsx)(n, {
31
31
  useDebugButtonState: r.useState,
32
32
  open: t
@@ -1,14 +1,14 @@
1
1
  (function() {
2
2
  try {
3
3
  var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
4
- e.SENTRY_RELEASE = { id: "3.8.0" };
4
+ e.SENTRY_RELEASE = { id: "3.9.0" };
5
5
  var t = new e.Error().stack;
6
6
  t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "d4febe97-784c-4cf8-93f1-f2e3b29f8347", e._sentryDebugIdIdentifier = "sentry-dbid-d4febe97-784c-4cf8-93f1-f2e3b29f8347");
7
7
  } catch {}
8
8
  })();
9
- import { r as e } from "./rolldown-runtime-kNW8iHBm.js";
10
- import { t } from "./react-BHziDcUN.js";
11
- import { s as n } from "./store-pynNgMKs.js";
9
+ import { r as e } from "./rolldown-runtime-6HCGHF5o.js";
10
+ import { t } from "./react-CtAjLpE4.js";
11
+ import { s as n } from "./store-hsXE5nII.js";
12
12
  //#region src/utils/getRenderTargetFromRoot.ts
13
13
  var r = /* @__PURE__ */ e(t(), 1);
14
14
  function i(e) {
@@ -1 +1 @@
1
- import h from"../../data";import{getContrastTextColor as l}from"../../utils/getContrastTextColor";import{BUTTON_ICONS as u,PREFIXES as a,SearchButtonType as i}from"./constants";export class SearchButtonsFactory{rootStore;state;actions;buttonFactories;constructor(t,e,o){this.rootStore=t,this.state=e,this.actions=o,this.buttonFactories={[i.BOOKMARKS]:r=>this.createBookmarksButton(r),[i.VISITED]:r=>this.createVisitedButton(r),[i.CATEGORIES]:r=>this.createCategoriesButton(r),[i.SESSIONS]:r=>this.createSessionsButton(r),[i.TOURS]:r=>this.createGuidedToursButton(r),[i.POI_TYPE]:r=>this.createPoiTypeButton(r),[i.POI_TYPES]:r=>this.createPoiTypesButton(r),[i.LINK]:r=>this.createLinkButton(r),[i.EXHIBITORS]:r=>this.createExhibitorsButton(r)}}createButtons(t){return this.dedupeButtons(t).filter(e=>e.visible).map(e=>({button:this.createButton(e),order:e.order??Number.MAX_SAFE_INTEGER})).filter(e=>e.button!==null).sort((e,o)=>e.order-o.order).map(e=>e.button)}createButton(t){const e=this.buttonFactories[t.type];return e?e(t):null}createBaseButton(t){const e=t.color&&t.color.toUpperCase()!=="#FFFFFF";return{id:t.id||`${t.type}_${t.name}`,label:t.name,text:t.name,enabled:!0,isDimmed:!1,isClickable:!0,backgroundColor:e?t.color:void 0,textColor:e&&t.color?l(t.color):void 0}}createButtonId(t,e){return e.id||`${t}${e.name}`}createBookmarksButton(t){const{uiState:e}=this.rootStore;return e.kiosk||e.disableBookmarked||h.hideBookmarks?null:{...this.createBaseButton(t),id:i.BOOKMARKS,icon:u.BOOKMARKS,active:e.list.type==="bookmarks",count:this.countBookmarks(),onClick:()=>this.actions.handleSearchButtonClick(i.BOOKMARKS)}}createVisitedButton(t){const{uiState:e}=this.rootStore;return e.kiosk?null:{...this.createBaseButton(t),id:i.VISITED,icon:u.VISITED,active:e.list.type==="visited",count:this.countVisited(),onClick:()=>this.actions.handleSearchButtonClick(i.VISITED)}}createCategoriesButton(t){if(!t.children?.length){const n=this.getCategoriesTotalCount();return n>0?this.createSimpleCategoriesButton(t,n):null}const e=(t.children||[]).filter(n=>n.visible);if(e.length===0)return null;const o=this.createButtonId(a.CATEGORIES,t),r=e.filter(n=>n.type==="categories"),s=this.countCategories(r);return{...this.createBaseButton(t),id:o,active:this.state.searchShortcutState.activeParentId===o,count:s,showZeroCount:!0,onClick:()=>this.actions.handleExtendedSearchButtonClick(o)}}createSimpleCategoriesButton(t,e){const{uiState:o}=this.rootStore,r=o.selectedCategoryFilters.length>0?o.selectedCategoryFilters.length:e;return{...this.createBaseButton(t),id:i.CATEGORIES,active:o.selectedCategoryFilters.length>0&&!this.state.searchShortcutState.activeParentId,count:r,showZeroCount:!0,onClick:()=>this.actions.handleSearchButtonClick(i.CATEGORIES)}}createSessionsButton(t){const{uiState:e}=this.rootStore,o=this.getSessionsTotalCount();return o===0?null:{...this.createBaseButton(t),id:i.SESSIONS,icon:u.SESSIONS,active:e.list.type==="sessions",count:o,showZeroCount:!0,hasSubButtons:!0,onClick:()=>this.actions.handleSessionsClick()}}createGuidedToursButton(t){const{uiState:e}=this.rootStore,o=this.getGuidedToursTotalCount();return o===0?null:{...this.createBaseButton(t),id:"guided_tours",active:e.list.type==="tours"||e.list.type==="multi-point-tour",count:o,showZeroCount:!0,onClick:()=>this.actions.handleSearchButtonClick("guided_tours")}}createPoiTypeButton(t){const e=this.rootStore.poiTypeStore.poiTypes.find(s=>s.name===t.name);if(!e)return null;const o=`${a.POI_TYPE}${e.id}`,r=this.getPoiTypeTotalCount(e.id);return r===0?null:{...this.createBaseButton(t),id:o,active:this.state.activePoiFilterId===o,count:r,showZeroCount:!0,onClick:()=>this.actions.handleSearchButtonClick(o)}}createPoiTypesButton(t){if(!t.children?.length)return this.createPoiTypeButton(t);const e=t.children.filter(n=>n.visible);if(e.length===0)return null;if(this.shouldFlattenToSinglePoiType(e,t))return this.createPoiTypeButton(t);const o=e.filter(n=>n.type!=="link"),r=this.countPoiTypes(o),s=this.createButtonId(a.POI_TYPES,t);return{...this.createBaseButton(t),id:s,active:this.state.searchShortcutState.activeParentId===s,count:r,showZeroCount:!0,onClick:()=>this.actions.handleExtendedSearchButtonClick(s)}}shouldFlattenToSinglePoiType(t,e){return t.length===1&&t[0].type==="poi_types"&&t[0].name===e.name}createLinkButton(t){const e=this.createButtonId(a.LINK,t);return{...this.createBaseButton(t),id:e,active:!1,onClick:()=>this.actions.handleExtendedSearchButtonClick(e)}}createExhibitorsButton(t){const{uiState:e}=this.rootStore,o=this.getExhibitorsTotalCount();return o===0?null:{...this.createBaseButton(t),id:i.EXHIBITORS,icon:u.EXHIBITORS,active:e.list.type==="exhibitors",count:o,showZeroCount:!0,onClick:()=>this.actions.handleSearchButtonClick(i.EXHIBITORS)}}countCategories(t){const{categoryById:e}=this.rootStore.categoryStore,o=new Set;return t.forEach(r=>{if(r.type!=="categories")return;const s=e.get(Number(r.id));s&&s.exhibitors.forEach(n=>o.add(n.id))}),o.size}countPoiTypes(t){return t.reduce((e,o)=>{if(o.type!=="poi_types")return e;if(o.count!==void 0)return e+o.count;const r=Number(o.id),s=this.rootStore.poiTypeStore.poiTypes.find(n=>n.id===r);if(s){const n=this.rootStore.boothStore.booths.filter(c=>c.poiTypeId===s.id).length;return e+n}return e},0)}dedupeButtons(t){const e=new Set;return t.filter(o=>{const r=`${o.type}_${o.name}`;return e.has(r)?!1:(e.add(r),!0)})}countBookmarks(){return this.rootStore.exhibitorStore.bookmarked.length+this.rootStore.eventStore.bookmarked.length+this.rootStore.speakerStore.bookmarked.length+this.rootStore.boothStore.booths.filter(t=>t.exhibitors.length===0&&t.bookmarkedDirectly).length}countVisited(){return this.rootStore.exhibitorStore.visited.length+this.rootStore.eventStore.visited.length}getSessionsTotalCount(){return this.rootStore.eventStore.eventItems.length}getGuidedToursTotalCount(){return this.rootStore.toursStore.hasTours?this.rootStore.toursStore.tourItems.length:0}getCategoriesTotalCount(){return this.rootStore.categoryStore.categories.filter(t=>t.exhibitors.length>0).length}getPoiTypeTotalCount(t){return this.rootStore.boothStore.booths.filter(e=>e.poiTypeId===t).length}getExhibitorsTotalCount(){return this.rootStore.exhibitorStore.exhibitors.length}}
1
+ import h from"../../data";import{getContrastTextColor as l}from"../../utils/getContrastTextColor";import{tIfExists as d}from"../../utils/i18n";import{BUTTON_ICONS as u,PREFIXES as a,SearchButtonType as i}from"./constants";export class SearchButtonsFactory{rootStore;state;actions;buttonFactories;constructor(t,e,o){this.rootStore=t,this.state=e,this.actions=o,this.buttonFactories={[i.BOOKMARKS]:r=>this.createBookmarksButton(r),[i.VISITED]:r=>this.createVisitedButton(r),[i.CATEGORIES]:r=>this.createCategoriesButton(r),[i.SESSIONS]:r=>this.createSessionsButton(r),[i.TOURS]:r=>this.createGuidedToursButton(r),[i.POI_TYPE]:r=>this.createPoiTypeButton(r),[i.POI_TYPES]:r=>this.createPoiTypesButton(r),[i.LINK]:r=>this.createLinkButton(r),[i.EXHIBITORS]:r=>this.createExhibitorsButton(r)}}createButtons(t){return this.dedupeButtons(t).filter(e=>e.visible).map(e=>({button:this.createButton(e),order:e.order??Number.MAX_SAFE_INTEGER})).filter(e=>e.button!==null).sort((e,o)=>e.order-o.order).map(e=>e.button)}createButton(t){const e=this.buttonFactories[t.type];return e?e(t):null}createBaseButton(t){const e=t.color&&t.color.toUpperCase()!=="#FFFFFF",o=d(t.name);return{id:t.id||`${t.type}_${t.name}`,label:o,text:o,enabled:!0,isDimmed:!1,isClickable:!0,backgroundColor:e?t.color:void 0,textColor:e&&t.color?l(t.color):void 0}}createButtonId(t,e){return e.id||`${t}${e.name}`}createBookmarksButton(t){const{uiState:e}=this.rootStore;return e.kiosk||e.disableBookmarked||h.hideBookmarks?null:{...this.createBaseButton(t),id:i.BOOKMARKS,icon:u.BOOKMARKS,active:e.list.type==="bookmarks",count:this.countBookmarks(),onClick:()=>this.actions.handleSearchButtonClick(i.BOOKMARKS)}}createVisitedButton(t){const{uiState:e}=this.rootStore;return e.kiosk?null:{...this.createBaseButton(t),id:i.VISITED,icon:u.VISITED,active:e.list.type==="visited",count:this.countVisited(),onClick:()=>this.actions.handleSearchButtonClick(i.VISITED)}}createCategoriesButton(t){if(!t.children?.length){const n=this.getCategoriesTotalCount();return n>0?this.createSimpleCategoriesButton(t,n):null}const e=(t.children||[]).filter(n=>n.visible);if(e.length===0)return null;const o=this.createButtonId(a.CATEGORIES,t),r=e.filter(n=>n.type==="categories"),s=this.countCategories(r);return{...this.createBaseButton(t),id:o,active:this.state.searchShortcutState.activeParentId===o,count:s,showZeroCount:!0,onClick:()=>this.actions.handleExtendedSearchButtonClick(o)}}createSimpleCategoriesButton(t,e){const{uiState:o}=this.rootStore,r=o.selectedCategoryFilters.length>0?o.selectedCategoryFilters.length:e;return{...this.createBaseButton(t),id:i.CATEGORIES,active:o.selectedCategoryFilters.length>0&&!this.state.searchShortcutState.activeParentId,count:r,showZeroCount:!0,onClick:()=>this.actions.handleSearchButtonClick(i.CATEGORIES)}}createSessionsButton(t){const{uiState:e}=this.rootStore,o=this.getSessionsTotalCount();return o===0?null:{...this.createBaseButton(t),id:i.SESSIONS,icon:u.SESSIONS,active:e.list.type==="sessions",count:o,showZeroCount:!0,hasSubButtons:!0,onClick:()=>this.actions.handleSessionsClick()}}createGuidedToursButton(t){const{uiState:e}=this.rootStore,o=this.getGuidedToursTotalCount();return o===0?null:{...this.createBaseButton(t),id:"guided_tours",active:e.list.type==="tours"||e.list.type==="multi-point-tour",count:o,showZeroCount:!0,onClick:()=>this.actions.handleSearchButtonClick("guided_tours")}}createPoiTypeButton(t){const e=this.rootStore.poiTypeStore.poiTypes.find(s=>s.name===t.name);if(!e)return null;const o=`${a.POI_TYPE}${e.id}`,r=this.getPoiTypeTotalCount(e.id);return r===0?null:{...this.createBaseButton(t),id:o,active:this.state.activePoiFilterId===o,count:r,showZeroCount:!0,onClick:()=>this.actions.handleSearchButtonClick(o)}}createPoiTypesButton(t){if(!t.children?.length)return this.createPoiTypeButton(t);const e=t.children.filter(n=>n.visible);if(e.length===0)return null;if(this.shouldFlattenToSinglePoiType(e,t))return this.createPoiTypeButton(t);const o=e.filter(n=>n.type!=="link"),r=this.countPoiTypes(o),s=this.createButtonId(a.POI_TYPES,t);return{...this.createBaseButton(t),id:s,active:this.state.searchShortcutState.activeParentId===s,count:r,showZeroCount:!0,onClick:()=>this.actions.handleExtendedSearchButtonClick(s)}}shouldFlattenToSinglePoiType(t,e){return t.length===1&&t[0].type==="poi_types"&&t[0].name===e.name}createLinkButton(t){const e=this.createButtonId(a.LINK,t);return{...this.createBaseButton(t),id:e,active:!1,onClick:()=>this.actions.handleExtendedSearchButtonClick(e)}}createExhibitorsButton(t){const{uiState:e}=this.rootStore,o=this.getExhibitorsTotalCount();return o===0?null:{...this.createBaseButton(t),id:i.EXHIBITORS,icon:u.EXHIBITORS,active:e.list.type==="exhibitors",count:o,showZeroCount:!0,onClick:()=>this.actions.handleSearchButtonClick(i.EXHIBITORS)}}countCategories(t){const{categoryById:e}=this.rootStore.categoryStore,o=new Set;return t.forEach(r=>{if(r.type!=="categories")return;const s=e.get(Number(r.id));s&&s.exhibitors.forEach(n=>o.add(n.id))}),o.size}countPoiTypes(t){return t.reduce((e,o)=>{if(o.type!=="poi_types")return e;if(o.count!==void 0)return e+o.count;const r=Number(o.id),s=this.rootStore.poiTypeStore.poiTypes.find(n=>n.id===r);if(s){const n=this.rootStore.boothStore.booths.filter(c=>c.poiTypeId===s.id).length;return e+n}return e},0)}dedupeButtons(t){const e=new Set;return t.filter(o=>{const r=`${o.type}_${o.name}`;return e.has(r)?!1:(e.add(r),!0)})}countBookmarks(){return this.rootStore.exhibitorStore.bookmarked.length+this.rootStore.eventStore.bookmarked.length+this.rootStore.speakerStore.bookmarked.length+this.rootStore.boothStore.booths.filter(t=>t.exhibitors.length===0&&t.bookmarkedDirectly).length}countVisited(){return this.rootStore.exhibitorStore.visited.length+this.rootStore.eventStore.visited.length}getSessionsTotalCount(){return this.rootStore.eventStore.eventItems.length}getGuidedToursTotalCount(){return this.rootStore.toursStore.hasTours?this.rootStore.toursStore.tourItems.length:0}getCategoriesTotalCount(){return this.rootStore.categoryStore.categories.filter(t=>t.exhibitors.length>0).length}getPoiTypeTotalCount(t){return this.rootStore.boothStore.booths.filter(e=>e.poiTypeId===t).length}getExhibitorsTotalCount(){return this.rootStore.exhibitorStore.exhibitors.length}}
@@ -3,6 +3,15 @@ export declare const getLocale: () => string;
3
3
  export declare const getLocales: () => readonly Language[];
4
4
  export declare const hasLocale: (id: string | undefined) => id is string;
5
5
  export declare const t: (template: string, options?: any) => string;
6
+ /**
7
+ * Like {@link t}, but only looks the string up when a matching key exists in the
8
+ * active locale; otherwise it returns the string verbatim. Use for values that
9
+ * may be organizer-authored (e.g. search-button names): built-in labels still
10
+ * localize and react to language switches, while custom names pass through
11
+ * without tripping saveMissing / missingKeyHandler (console noise + extra work)
12
+ * in non-English locales.
13
+ */
14
+ export declare const tIfExists: (template: string, options?: any) => string;
6
15
  export declare const initI18n: () => Promise<TFunction>;
7
16
  export declare const setLocale: (id: string) => Promise<void>;
8
17
  export declare const resetLocale: () => Promise<void>;
@@ -1 +1 @@
1
- import n from"i18next";import{observable as u}from"mobx";import{LANGUAGE_TYPE as y}from"../constants";import p from"../locales";import S from"../tools/base-runtime-url";import{loadJson as w}from"../tools/loaders";import{isLocalStorageAvailable as i}from"./localStorage";const l="en",s="efp-locale",g="language",c=u.box(l),m=u.array([],{deep:!1}),f=o=>w(`${S}locales/${o}.json`),v=()=>{if(!i)return null;const o=localStorage.getItem(s),e=localStorage.getItem(g);return e&&localStorage.removeItem(g),o||(e&&localStorage.setItem(s,e),e)},d=()=>{const o=window.__data,e=navigator.languages?.[0]||navigator.language,a=Object.keys(p).find(r=>e.startsWith(r));return(v()||o?.locale||a||l).toLowerCase()};export const getLocale=()=>c.get(),getLocales=()=>m,hasLocale=o=>m.some(e=>e.id===o),t=(o,e)=>(c.get(),n.t(o,e)),initI18n=async()=>{m.replace(Object.entries(p).sort(([a],[r])=>a.localeCompare(r)).map(([a,r])=>({id:a,name:r,entity:{type:y}})));let o=d();const e={};if(o!==l)try{e[o]={translation:await f(o)}}catch(a){console.error(`Unable to load "${o}" localization, falling back to "${l}".`,a),o=l}return c.set(o),n.init({resources:e,lng:o,keySeparator:!1,saveMissing:o!==l,missingKeyHandler:(a,r,L,b)=>console.debug(`i18n missing key: '${a[0]}:${r}:${L}', fallback: '${b}'`)})},setLocale=async o=>{const e=o.toLowerCase();try{e!==l&&!n.hasResourceBundle(e,"translation")&&n.addResourceBundle(e,"translation",await f(e),!0,!0),await n.changeLanguage(e),c.set(e),i&&localStorage.setItem(s,e)}catch(a){console.error(`Failed to switch language to "${e}":`,a)}},resetLocale=async()=>(i&&(localStorage.removeItem(s),localStorage.removeItem(g)),setLocale(d()));
1
+ import s from"i18next";import{observable as u}from"mobx";import{LANGUAGE_TYPE as y}from"../constants";import f from"../locales";import x from"../tools/base-runtime-url";import{loadJson as S}from"../tools/loaders";import{isLocalStorageAvailable as i}from"./localStorage";const n="en",c="efp-locale",g="language",l=u.box(n),m=u.array([],{deep:!1}),d=e=>S(`${x}locales/${e}.json`),w=()=>{if(!i)return null;const e=localStorage.getItem(c),o=localStorage.getItem(g);return o&&localStorage.removeItem(g),e||(o&&localStorage.setItem(c,o),o)},p=()=>{const e=window.__data,o=navigator.languages?.[0]||navigator.language,a=Object.keys(f).find(r=>o.startsWith(r));return(w()||e?.locale||a||n).toLowerCase()};export const getLocale=()=>l.get(),getLocales=()=>m,hasLocale=e=>m.some(o=>o.id===e),t=(e,o)=>(l.get(),s.t(e,o)),tIfExists=(e,o)=>(l.get(),s.exists(e,o)?s.t(e,o):e),initI18n=async()=>{m.replace(Object.entries(f).sort(([a],[r])=>a.localeCompare(r)).map(([a,r])=>({id:a,name:r,entity:{type:y}})));let e=p();const o={};if(e!==n)try{o[e]={translation:await d(e)}}catch(a){console.error(`Unable to load "${e}" localization, falling back to "${n}".`,a),e=n}return l.set(e),s.init({resources:o,lng:e,keySeparator:!1,saveMissing:e!==n,missingKeyHandler:(a,r,L,b)=>console.debug(`i18n missing key: '${a[0]}:${r}:${L}', fallback: '${b}'`)})},setLocale=async e=>{const o=e.toLowerCase();try{o!==n&&!s.hasResourceBundle(o,"translation")&&s.addResourceBundle(o,"translation",await d(o),!0,!0),await s.changeLanguage(o),l.set(o),i&&localStorage.setItem(c,o)}catch(a){console.error(`Failed to switch language to "${o}":`,a)}},resetLocale=async()=>(i&&(localStorage.removeItem(c),localStorage.removeItem(g)),setLocale(p()));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expofp/floorplan",
3
- "version": "3.8.0",
3
+ "version": "3.9.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/expofp/efp-app.git",
@@ -72,9 +72,9 @@
72
72
  "tslib": "^2.3.0",
73
73
  "uuid": "^9.0.1",
74
74
  "zod": "4.3.5",
75
- "@expofp/geometry": "3.8.0",
76
- "@expofp/resolve": "3.8.0",
77
- "@expofp/debug": "3.8.0"
75
+ "@expofp/debug": "3.9.0",
76
+ "@expofp/geometry": "3.9.0",
77
+ "@expofp/resolve": "3.9.0"
78
78
  },
79
79
  "devDependencies": {
80
80
  "@babel/plugin-proposal-decorators": "^8.0.2",