@expofp/floorplan 3.7.15 → 3.7.17

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 (85) hide show
  1. package/dist/browser/{Button-Bw2rU4DR.js → Button-CalAncSt.js} +5 -5
  2. package/dist/browser/{CookieConsent-Cg6F_bop.js → CookieConsent-ZygvYtDb.js} +7 -7
  3. package/dist/browser/{Debug-D2FxPAx6.js → Debug-D0iAX94G.js} +7 -7
  4. package/dist/browser/{Demo-CbKUORDI.js → Demo-DtZnCrNU.js} +9 -9
  5. package/dist/browser/{Free-CCt5diJn.js → Free-CY2ZgfTi.js} +9 -9
  6. package/dist/browser/{Gallery-DikV7y2O.js → Gallery-BJyU80Q8.js} +9 -9
  7. package/dist/browser/{GpsLoader-DK17fABw.js → GpsLoader-C4Az3Ogj.js} +9 -9
  8. package/dist/browser/{KioskStore-D2IzX4PD.js → KioskStore-D3xv5iMJ.js} +3 -3
  9. package/dist/browser/{MaplibreAdapter-Cdj_O3dc.js → MaplibreAdapter-BI5hr4DA.js} +9 -9
  10. package/dist/browser/ModalContainer-CGy7G3W-.js +143 -0
  11. package/dist/browser/{PermissionNotice-Qy5OZjJx.js → PermissionNotice-BQl-Eh0U.js} +6 -6
  12. package/dist/browser/{SetKioskMode-D-rkGumI.js → SetKioskMode-puXODfKF.js} +8 -8
  13. package/dist/browser/{ShowKiosk-C4ifT0ai.js → ShowKiosk-78DDAGCM.js} +10 -10
  14. package/dist/browser/{TouchHand-2RuQPusV.js → TouchHand-DjRl3mqw.js} +4 -4
  15. package/dist/browser/{ViewerMenuPanel-DB-Xo9_R.js → ViewerMenuPanel-DwpOTh1A.js} +9 -9
  16. package/dist/browser/{add-debug-secret-listener-B6vQoW5d.js → add-debug-secret-listener-0zbOfR23.js} +1 -1
  17. package/dist/browser/{boolean-editor-BztUNp5J.js → boolean-editor-Ct-PRF2J.js} +9 -9
  18. package/dist/browser/{bootIntercom-CyhvNq9r.js → bootIntercom-CNJJMQLU.js} +2 -2
  19. package/dist/browser/{browser-Dl6QqUVd.js → browser-Dvk9Y0QP.js} +2 -2
  20. package/dist/browser/bundle.json +61 -61
  21. package/dist/browser/{classnames-C1vHtapl.js → classnames-N7RelmSW.js} +2 -2
  22. package/dist/browser/{client-DpUyEvQj.js → client-B3oB_gzf.js} +4 -4
  23. package/dist/browser/{components-DtWIsIkq.js → components-DCWqd4OH.js} +45 -46
  24. package/dist/browser/{createWayfinding-BVv2hHV9.js → createWayfinding-DCYv9I1K.js} +6 -6
  25. package/dist/browser/{debug-overlay-DmoQp6EX.js → debug-overlay-C1zmn9JP.js} +10 -10
  26. package/dist/browser/{debug-ui-Bz5JDxPC.js → debug-ui-Dk4TQW1Q.js} +6 -6
  27. package/dist/browser/{dist-Z8RrpBkv.js → dist-BjWXGdvS.js} +6 -6
  28. package/dist/browser/{dist-cXeLYynN.js → dist-CZ9F3ShM.js} +5 -5
  29. package/dist/browser/{dist-Cbw0umP3.js → dist-Dhhxwn3m.js} +3 -3
  30. package/dist/browser/{efp-debug-init-CPBlk_82.js → efp-debug-init-BY441NPw.js} +2 -2
  31. package/dist/browser/{enum-editor-BNgThR3i.js → enum-editor-wsFvRjdm.js} +11 -11
  32. package/dist/browser/{es5-CMwwFDWC.js → es5--a3vRB-s.js} +2 -2
  33. package/dist/browser/{event-not-found-wOgWWQj_.js → event-not-found-C08dNiXm.js} +1 -1
  34. package/dist/browser/{exports-B7YBEfSt.js → exports-DnnAyWkZ.js} +1 -1
  35. package/dist/browser/{favicon-C5TytmGw.js → favicon-BUBgyUNE.js} +1 -1
  36. package/dist/browser/{fetch-retry.umd-diPTbDpQ.js → fetch-retry.umd-DqWbcFb6.js} +2 -2
  37. package/dist/browser/{flex-tQ_pRPMh.js → flex-BJvbUFUw.js} +5 -5
  38. package/dist/browser/{floorplan.loader-C37lEsAw.js → floorplan.loader-DtRqhN7h.js} +11 -11
  39. package/dist/browser/{floorplan.ready-BqAKsSHu.js → floorplan.ready-DU_ul7oy.js} +12 -12
  40. package/dist/browser/{fuse-C5oNpAqA.js → fuse-C1gHDLf6.js} +2 -2
  41. package/dist/browser/{i18n-C4cY1vPb.js → i18n-GqZrkrT3.js} +4 -4
  42. package/dist/browser/index.js +12 -12
  43. package/dist/browser/{index.module-D43jVtM-.js → index.module-ClFPQstA.js} +4 -4
  44. package/dist/browser/{is-webview-DGy3FIDn.js → is-webview-Ubd69hDX.js} +1 -1
  45. package/dist/browser/{jsx-runtime-BtHP4gKJ.js → jsx-runtime-CcqjcKRn.js} +2 -2
  46. package/dist/browser/{lib-B7gHIqUz.js → lib-D-VhTz7u.js} +4 -4
  47. package/dist/browser/{loadImage-Bbdo2oJg.js → loadImage-BSgOJpEi.js} +4 -4
  48. package/dist/browser/{logDeviceInfo-8PaHmUQI.js → logDeviceInfo-CqPbQalh.js} +9 -9
  49. package/dist/browser/{main-Zc4W3FhR.js → main-D02oALU5.js} +1 -1
  50. package/dist/browser/{mobx-DkKmIOWe.js → mobx-9haaaJQN.js} +4 -4
  51. package/dist/browser/{particles.min-BAHCca3J.js → particles.min-Cy0_xv2F.js} +2 -2
  52. package/dist/browser/{prop-types-XYJZaoNk.js → prop-types-CGmwvRRk.js} +2 -2
  53. package/dist/browser/{react-CNjituVz.js → react-C94g1dWf.js} +2 -2
  54. package/dist/browser/{react-dom-Dg0lPUat.js → react-dom-VzzznUin.js} +3 -3
  55. package/dist/browser/{reset-all-settings-DC1I9Z62.js → reset-all-settings-Bs45R4UK.js} +7 -7
  56. package/dist/browser/{rolldown-runtime-DB-F2T_p.js → rolldown-runtime-DDajFMnr.js} +1 -1
  57. package/dist/browser/{settings-BbUH3X-c.js → settings-B89NEO7Z.js} +2 -2
  58. package/dist/browser/{settings-item-Bx-ykFAz.js → settings-item-CTgteXDw.js} +6 -6
  59. package/dist/browser/{store-BBGqjwE5.js → store-39MLQcdz.js} +72 -71
  60. package/dist/browser/{string-editor-KHIwnccQ.js → string-editor-4uawnaDY.js} +7 -7
  61. package/dist/browser/{theme-CpvxRxec.js → theme-CWzone56.js} +8 -8
  62. package/dist/browser/{ui-DjzupJ1a.js → ui-D8Gz1TVh.js} +8 -8
  63. package/dist/browser/{useRenderTarget-EL-n_0Va.js → useRenderTarget-BSjQ_3rd.js} +4 -4
  64. package/dist/esm/components/BaseFilterModal.d.ts +1 -1
  65. package/dist/esm/components/BaseFilterModal.js +1 -1
  66. package/dist/esm/components/Layout.js +1 -1
  67. package/dist/esm/components/ModalContainer.d.ts +41 -0
  68. package/dist/esm/components/ModalContainer.js +1 -0
  69. package/dist/esm/components/SessionsFiltersModal.js +1 -1
  70. package/dist/esm/components/SpeakersFiltersModal.js +1 -1
  71. package/dist/esm/components/index.d.ts +2 -2
  72. package/dist/esm/components/index.js +1 -1
  73. package/dist/esm/ui/Modal/Modal.d.ts +34 -0
  74. package/dist/esm/ui/Modal/Modal.js +1 -0
  75. package/dist/esm/ui/Modal/index.d.ts +3 -0
  76. package/dist/esm/ui/Modal/index.js +1 -0
  77. package/dist/esm/wayfinding/core/graph/constants.d.ts +16 -2
  78. package/dist/esm/wayfinding/core/graph/constants.js +1 -1
  79. package/dist/esm/wayfinding/core/graph/linkCost.js +1 -1
  80. package/dist/esm/wayfinding/core/graph/pathfinder/aStarPathFinder.js +1 -1
  81. package/dist/esm/wayfinding/core/types.d.ts +3 -2
  82. package/package.json +3 -3
  83. package/dist/browser/Modal-BZ1LsZ64.js +0 -105
  84. package/dist/esm/components/Modal.d.ts +0 -38
  85. package/dist/esm/components/Modal.js +0 -1
@@ -1 +1 @@
1
- import{jsx as o,jsxs as S}from"react/jsx-runtime";import"./SpeakersFiltersModal.scss";import{observer as b}from"mobx-react-lite";import{useMemo as c}from"react";import{t as i}from"../utils/i18n";import{Modal as k,MultiSelectGroups as d}from"./";const v=b(({store:e,visibleSections:m,open:r,onClose:u})=>{const n=e.state.filters,l=c(()=>{const s=e.rootStore.speakerStore.companies;return s.length?[{groupName:"Companies",items:s.map(t=>({id:t,name:t,countProvider:()=>e.rootStore.speakerStore.getSpeakersByCompany(t).length})),showGroupActions:!0,fullWidth:!0}]:[]},[e.rootStore.speakerStore.companies]),a=c(()=>{const s=e.rootStore.speakerStore.jobTitles;return s.length?[{groupName:"Job Titles",items:s.map(t=>({id:t,name:t,countProvider:()=>e.rootStore.speakerStore.getSpeakersByJobTitle(t).length})),showGroupActions:!0,fullWidth:!0}]:[]},[e.rootStore.speakerStore.jobTitles]),g=s=>{const t=s;e.setPending("selectedCompanies",t)},h=s=>{const t=s;e.setPending("selectedJobTitles",t)},f=r!==void 0?r:e.state.isOpen,C=u||(()=>e.closeFilter()),p=m||e.state.visibleSections;return o(k,{open:f,title:i("Speaker Filters"),badge:e.activeFiltersCount>0?e.activeFiltersCount:void 0,maxWidth:800,footerLeft:[{label:i("Clear all"),variant:"gray",disabled:n.selectedCompanies.pending.length===0&&n.selectedJobTitles.pending.length===0,onClick:()=>{e.resetFilters()}}],footerRight:[{label:i("Apply"),variant:"primary",onClick:()=>{e.applyFilters()}}],onClickClose:C,children:S("div",{className:"efp-speakers-filters-modal",children:[p.includes("companies")&&l.length>0&&o("div",{className:"efp-speakers-filters-modal__section",children:o(d,{groups:l,selectedIds:n.selectedCompanies.pending,onChange:g,showItemCounts:!0})}),p.includes("jobTitles")&&a.length>0&&o("div",{className:"efp-speakers-filters-modal__section",children:o(d,{groups:a,selectedIds:n.selectedJobTitles.pending,onChange:h,showItemCounts:!0})})]})})});export default v;
1
+ import{jsx as o,jsxs as S}from"react/jsx-runtime";import"./SpeakersFiltersModal.scss";import{observer as b}from"mobx-react-lite";import{useMemo as c}from"react";import{t as r}from"../utils/i18n";import{ModalContainer as k,MultiSelectGroups as d}from"./";const T=b(({store:e,visibleSections:m,open:i,onClose:u})=>{const n=e.state.filters,l=c(()=>{const s=e.rootStore.speakerStore.companies;return s.length?[{groupName:"Companies",items:s.map(t=>({id:t,name:t,countProvider:()=>e.rootStore.speakerStore.getSpeakersByCompany(t).length})),showGroupActions:!0,fullWidth:!0}]:[]},[e.rootStore.speakerStore.companies]),a=c(()=>{const s=e.rootStore.speakerStore.jobTitles;return s.length?[{groupName:"Job Titles",items:s.map(t=>({id:t,name:t,countProvider:()=>e.rootStore.speakerStore.getSpeakersByJobTitle(t).length})),showGroupActions:!0,fullWidth:!0}]:[]},[e.rootStore.speakerStore.jobTitles]),g=s=>{const t=s;e.setPending("selectedCompanies",t)},h=s=>{const t=s;e.setPending("selectedJobTitles",t)},f=i!==void 0?i:e.state.isOpen,C=u||(()=>e.closeFilter()),p=m||e.state.visibleSections;return o(k,{open:f,title:r("Speaker Filters"),maxWidth:800,footerLeft:[{label:r("Clear all"),variant:"gray",disabled:n.selectedCompanies.pending.length===0&&n.selectedJobTitles.pending.length===0,onClick:()=>{e.resetFilters()}}],footerRight:[{label:r("Apply"),variant:"primary",onClick:()=>{e.applyFilters()}}],onClose:C,children:S("div",{className:"efp-speakers-filters-modal",children:[p.includes("companies")&&l.length>0&&o("div",{className:"efp-speakers-filters-modal__section",children:o(d,{groups:l,selectedIds:n.selectedCompanies.pending,onChange:g,showItemCounts:!0})}),p.includes("jobTitles")&&a.length>0&&o("div",{className:"efp-speakers-filters-modal__section",children:o(d,{groups:a,selectedIds:n.selectedJobTitles.pending,onChange:h,showItemCounts:!0})})]})})});export default T;
@@ -11,6 +11,7 @@ export type { EntityItemAdditionalInfo, EntityItemProps } from '../ui/EntityItem
11
11
  export type { EventBadgeProps } from '../ui/EventBadge';
12
12
  export type { HeatmapLegendProps } from '../ui/HeatmapLegend';
13
13
  export type { LevelBadgeProps } from '../ui/LevelBadge';
14
+ export type { ModalProps } from '../ui/Modal';
14
15
  export type { PermissionNoticeProps } from '../ui/PermissionNotice';
15
16
  export { default as PermissionNotice } from '../ui/PermissionNotice';
16
17
  export type { RadioProps } from '../ui/Radio';
@@ -67,8 +68,7 @@ export type { MarketMaterialListProps } from './MarketMaterialList';
67
68
  export { default as MarketMaterialList } from './MarketMaterialList';
68
69
  export { default as Menu } from './Menu';
69
70
  export { default as MobileToggleButton } from './MobileToggleButton';
70
- export type { ModalProps } from './Modal';
71
- export { default as Modal } from './Modal';
71
+ export { default as ModalContainer } from './ModalContainer';
72
72
  export type { MultiSelectGroup, MultiSelectGroupItem, MultiSelectGroupsProps, } from './MultiSelectGroups';
73
73
  export { default as MultiSelectGroups } from './MultiSelectGroups';
74
74
  export { default as Overlay } from './Overlay';
@@ -1 +1 @@
1
- export{default as Badge}from"../ui/Badge";export{default as Button}from"../ui/Button";export{default as Checkbox}from"../ui/Checkbox";export{default as CheckboxButton}from"../ui/CheckboxButton";export{default as PermissionNotice}from"../ui/PermissionNotice";export{default as Radio}from"../ui/Radio";export{default as Spinner}from"../ui/Spinner";export{default as ToggleButton}from"../ui/ToggleButton";export{default as ToggleSwitch}from"../ui/ToggleSwitch";export{default as TouchHand}from"../ui/TouchHand";export{default as AlertContainer}from"./AlertContainer";export{default as AutocompleteContainer}from"./AutocompleteContainer";export{BaseFilterModal}from"./BaseFilterModal";export{default as Bookmarks}from"./Bookmarks";export{default as Booth}from"./Booth/Booth";export{BoothOnHold}from"./Booth/BoothOnHold";export{BoothReserved}from"./Booth/BoothReserved";export{BoothWithoutExhibitor}from"./Booth/BoothWithoutExhibitor";export{default as Category}from"./Category";export{CategoryFilterModal}from"./CategoryFilterModal";export{default as Controls}from"./Controls";export{default as CookieConsent}from"./CookieConsent";export{default as Demo}from"./Demo";export{default as EntityItemContainer}from"./EntityItemContainer";export{default as EntityList}from"./EntityList";export{default as EntityListRow}from"./EntityListRow";export{default as ErrorBoundary}from"./ErrorBoundary";export{default as Event}from"./Event";export{default as EventBadgeContainer}from"./EventBadgeContainer";export{default as Exhibitor}from"./Exhibitor";export{default as Filter}from"./Filter";export{default as Gallery}from"./Gallery/Gallery";export{default as HeatmapLegend}from"./HeatmapLegendContainer";export{default as HighlightTextContainer}from"./HighlightTextContainer";export{default as Language}from"./Language";export{default as LanguageRowContainer}from"./LanguageRowContainer";export{default as LargeMessage}from"./LargeMessage";export{default as Layout}from"./Layout";export{default as LevelBadge}from"./LevelBadgeContainer";export{default as LevelSelector}from"./LevelSelector";export{default as List}from"./List";export{default as LogoOverlay}from"./LogoOverlay";export{default as MapControls}from"./MapControls";export{default as MarketMaterialList}from"./MarketMaterialList";export{default as Menu}from"./Menu";export{default as MobileToggleButton}from"./MobileToggleButton";export{default as Modal}from"./Modal";export{default as MultiSelectGroups}from"./MultiSelectGroups";export{default as Overlay}from"./Overlay";export{default as OverlayGrip}from"./OverlayGripContainer";export{default as OverlayParticles}from"./OverlayParticles";export{default as RebookingNotesContainer}from"./RebookingNotesContainer";export{default as RebookingRadioGroupContainer}from"./RebookingRadioGroupContainer";export{default as RoutePlanner}from"./RoutePlanner/RoutePlanner";export{default as RouteQR}from"./RouteQR";export{default as Schedule}from"./Schedule";export{default as ScrollableRow}from"./ScrollableRowContainer";export{default as Search}from"./Search";export{default as SearchBox}from"./SearchBox";export{SearchButtons}from"./SearchButtons";export{default as Sessions}from"./Sessions";export{default as SessionsFiltersModal}from"./SessionsFiltersModal";export{default as ShareContainer}from"./ShareContainer";export{ShortcutsToolbar}from"./Shortcuts";export{ShortcutButton}from"./Shortcuts";export{ShortcutsFiltersButton}from"./Shortcuts";export{default as ShowMoreButton}from"./ShowMoreButton";export{default as SidebarActions}from"./SidebarActions";export{default as SimpleRow}from"./SimpleRow";export{useToast}from"./Toast";export{default as TourPoints}from"./TourPoints";export{default as Tours}from"./Tours";export{default as ToursList}from"./ToursList";export{default as Visited}from"./Visited";export{default as Wayfinding}from"./Wayfinding";export{default as WayfindingFloorSelectorContainer}from"./WayfindingFloorSelectorContainer";export{default as WayfindingTemplate}from"./WayfindingTemplate";export{default as WayInformation}from"./WayInformation";export{default as Ws}from"./Ws";export{default as YahRow}from"./YahRow";
1
+ export{default as Badge}from"../ui/Badge";export{default as Button}from"../ui/Button";export{default as Checkbox}from"../ui/Checkbox";export{default as CheckboxButton}from"../ui/CheckboxButton";export{default as PermissionNotice}from"../ui/PermissionNotice";export{default as Radio}from"../ui/Radio";export{default as Spinner}from"../ui/Spinner";export{default as ToggleButton}from"../ui/ToggleButton";export{default as ToggleSwitch}from"../ui/ToggleSwitch";export{default as TouchHand}from"../ui/TouchHand";export{default as AlertContainer}from"./AlertContainer";export{default as AutocompleteContainer}from"./AutocompleteContainer";export{BaseFilterModal}from"./BaseFilterModal";export{default as Bookmarks}from"./Bookmarks";export{default as Booth}from"./Booth/Booth";export{BoothOnHold}from"./Booth/BoothOnHold";export{BoothReserved}from"./Booth/BoothReserved";export{BoothWithoutExhibitor}from"./Booth/BoothWithoutExhibitor";export{default as Category}from"./Category";export{CategoryFilterModal}from"./CategoryFilterModal";export{default as Controls}from"./Controls";export{default as CookieConsent}from"./CookieConsent";export{default as Demo}from"./Demo";export{default as EntityItemContainer}from"./EntityItemContainer";export{default as EntityList}from"./EntityList";export{default as EntityListRow}from"./EntityListRow";export{default as ErrorBoundary}from"./ErrorBoundary";export{default as Event}from"./Event";export{default as EventBadgeContainer}from"./EventBadgeContainer";export{default as Exhibitor}from"./Exhibitor";export{default as Filter}from"./Filter";export{default as Gallery}from"./Gallery/Gallery";export{default as HeatmapLegend}from"./HeatmapLegendContainer";export{default as HighlightTextContainer}from"./HighlightTextContainer";export{default as Language}from"./Language";export{default as LanguageRowContainer}from"./LanguageRowContainer";export{default as LargeMessage}from"./LargeMessage";export{default as Layout}from"./Layout";export{default as LevelBadge}from"./LevelBadgeContainer";export{default as LevelSelector}from"./LevelSelector";export{default as List}from"./List";export{default as LogoOverlay}from"./LogoOverlay";export{default as MapControls}from"./MapControls";export{default as MarketMaterialList}from"./MarketMaterialList";export{default as Menu}from"./Menu";export{default as MobileToggleButton}from"./MobileToggleButton";export{default as ModalContainer}from"./ModalContainer";export{default as MultiSelectGroups}from"./MultiSelectGroups";export{default as Overlay}from"./Overlay";export{default as OverlayGrip}from"./OverlayGripContainer";export{default as OverlayParticles}from"./OverlayParticles";export{default as RebookingNotesContainer}from"./RebookingNotesContainer";export{default as RebookingRadioGroupContainer}from"./RebookingRadioGroupContainer";export{default as RoutePlanner}from"./RoutePlanner/RoutePlanner";export{default as RouteQR}from"./RouteQR";export{default as Schedule}from"./Schedule";export{default as ScrollableRow}from"./ScrollableRowContainer";export{default as Search}from"./Search";export{default as SearchBox}from"./SearchBox";export{SearchButtons}from"./SearchButtons";export{default as Sessions}from"./Sessions";export{default as SessionsFiltersModal}from"./SessionsFiltersModal";export{default as ShareContainer}from"./ShareContainer";export{ShortcutsToolbar}from"./Shortcuts";export{ShortcutButton}from"./Shortcuts";export{ShortcutsFiltersButton}from"./Shortcuts";export{default as ShowMoreButton}from"./ShowMoreButton";export{default as SidebarActions}from"./SidebarActions";export{default as SimpleRow}from"./SimpleRow";export{useToast}from"./Toast";export{default as TourPoints}from"./TourPoints";export{default as Tours}from"./Tours";export{default as ToursList}from"./ToursList";export{default as Visited}from"./Visited";export{default as Wayfinding}from"./Wayfinding";export{default as WayfindingFloorSelectorContainer}from"./WayfindingFloorSelectorContainer";export{default as WayfindingTemplate}from"./WayfindingTemplate";export{default as WayInformation}from"./WayInformation";export{default as Ws}from"./Ws";export{default as YahRow}from"./YahRow";
@@ -0,0 +1,34 @@
1
+ import './Modal.scss';
2
+ import React from 'react';
3
+ import { type ButtonVariant } from '../Button';
4
+ export type ModalVariant = 'default' | 'share';
5
+ export interface ModalButton {
6
+ label: string;
7
+ variant?: ButtonVariant;
8
+ disabled?: boolean;
9
+ withBadge?: boolean;
10
+ onClick: () => void;
11
+ }
12
+ type ModalFooterButton = Omit<ModalButton, 'withBadge'>;
13
+ type ModalLabel = {
14
+ title: string;
15
+ ariaLabel?: string;
16
+ } | {
17
+ title?: undefined;
18
+ ariaLabel: string;
19
+ };
20
+ export type ModalProps = ModalLabel & {
21
+ open: boolean;
22
+ className?: string;
23
+ variant?: ModalVariant;
24
+ maxWidth?: number;
25
+ children?: React.ReactNode;
26
+ closeLabel: string;
27
+ renderTarget?: HTMLElement | null;
28
+ footerLeft?: ModalFooterButton[];
29
+ footerRight?: ModalButton[];
30
+ onClose: () => void;
31
+ };
32
+ declare const Modal: ({ open, className, variant, title, ariaLabel, maxWidth, children, closeLabel, renderTarget, footerLeft, footerRight, onClose, }: ModalProps) => React.ReactPortal | null;
33
+ export default Modal;
34
+ //# sourceMappingURL=Modal.d.ts.map
@@ -0,0 +1 @@
1
+ import{jsx as a,jsxs as h}from"react/jsx-runtime";import"./Modal.scss";import O from"classnames";import{useEffect as b,useId as S,useRef as I,useState as k}from"react";import{createPortal as j}from"react-dom";import B from"../Button";const C=200,M=n=>n.getClientRects().length>0&&getComputedStyle(n).visibility!=="hidden",P=({open:n,className:w,variant:E="default",title:s,ariaLabel:q,maxWidth:_,children:D,closeLabel:y,renderTarget:A,footerLeft:u=[],footerRight:f=[],onClose:c})=>{const p=I(null),d=I(null),F=S(),[v,N]=k(n),[T,g]=k(n);if(b(()=>{if(!n){const i=requestAnimationFrame(()=>N(!1)),l=setTimeout(()=>g(!1),C);return d.current?.focus(),d.current=null,()=>{cancelAnimationFrame(i),clearTimeout(l)}}d.current||(d.current=document.activeElement);const t=document.body.style.overflow;document.body.style.overflow="hidden";let e=0;const r=requestAnimationFrame(()=>{g(!0),e=requestAnimationFrame(()=>N(!0))});return()=>{cancelAnimationFrame(r),cancelAnimationFrame(e),document.body.style.overflow=t}},[n]),b(()=>{if(!n)return;const t=e=>{if(e.key==="Escape"){e.preventDefault(),e.stopImmediatePropagation(),c();return}if(e.key!=="Tab")return;const r=p.current;if(!r)return;const i=Array.from(r.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter(M);if(i.length===0){e.preventDefault();return}const l=i[0],m=i[i.length-1],o=document.activeElement;e.shiftKey?(o===l||o===r)&&(e.preventDefault(),m.focus()):o===m&&(e.preventDefault(),l.focus())};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[n,c]),b(()=>{if(!v)return;let t=0;const e=requestAnimationFrame(()=>{t=requestAnimationFrame(()=>p.current?.focus())});return()=>{cancelAnimationFrame(e),cancelAnimationFrame(t)}},[v]),!T||!A)return null;const x=t=>t?.map(({label:e,onClick:r,variant:i="primary",disabled:l,withBadge:m},o)=>a(B,{onClick:r,variant:i,size:"md",inline:!0,disabled:l,withBadge:m,children:e},o));return j(a("div",{className:O("efp-modal",`efp-modal--${E}`,{"efp-modal--open":v},w),role:"dialog","aria-modal":"true","aria-labelledby":s?F:void 0,"aria-label":s?void 0:q,ref:p,tabIndex:-1,onClick:c,children:h("div",{className:"efp-modal__box",style:_?{maxWidth:`${_}px`}:void 0,onClick:t=>t.stopPropagation(),children:[h("div",{className:"efp-modal__header",children:[s&&a("div",{className:"efp-modal__title-container",children:a("h2",{className:"efp-modal__title",id:F,children:s})}),a("button",{type:"button",className:"efp-modal__close",onClick:c,"aria-label":y,title:y,children:a("i",{className:"icon-close","aria-hidden":"true"})})]}),a("div",{className:"efp-modal__body",children:D}),(u.length>0||f.length>0)&&h("div",{className:"efp-modal__footer",children:[a("div",{className:"efp-modal__footer-left",children:u.length>0&&x(u)}),f.length>0&&a("div",{className:"efp-modal__footer-right",children:x(f)})]})]})}),A)};export default P;
@@ -0,0 +1,3 @@
1
+ export type { ModalButton, ModalProps, ModalVariant } from './Modal';
2
+ export { default } from './Modal';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export{default}from"./Modal";
@@ -1,3 +1,17 @@
1
- /** Cost assigned to virtual (non-physical) route segments. Zero means virtual links are free (preferred by the pathfinder). */
2
- export declare const VIRTUAL_LINE_PENALTY = 0;
1
+ /**
2
+ * Default A* cost for a virtual (floor-transition) link. Non-zero so a floor
3
+ * change costs more than any same-floor detour; otherwise floor changes are free
4
+ * and a route between two points on one floor can detour through another.
5
+ */
6
+ export declare const VIRTUAL_LINE_PENALTY = 10000;
7
+ /**
8
+ * Fallback line weight when `line.weight` is 0 (meaning "not set" in floorplan data,
9
+ * not "free passage").
10
+ */
11
+ export declare const DEFAULT_LINE_WEIGHT = 4;
12
+ /**
13
+ * Multiplier applied to a graph edge cost whenever the route changes direction at a node
14
+ * (A* turn penalty).
15
+ */
16
+ export declare const TURN_PENALTY = 1.01;
3
17
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- export const VIRTUAL_LINE_PENALTY=0;
1
+ export const VIRTUAL_LINE_PENALTY=1e4,DEFAULT_LINE_WEIGHT=4,TURN_PENALTY=1.01;
@@ -1 +1 @@
1
- import{lineLength as r}from"simple-geometry";import{VIRTUAL_LINE_PENALTY as o}from"./constants";const L=4;export function linkCost(t){return t.virtual?t.virtualLength??o:r(t.p0,t.p1)/(t.weight||L)}
1
+ import{lineLength as r}from"simple-geometry";import{DEFAULT_LINE_WEIGHT as o,VIRTUAL_LINE_PENALTY as L}from"./constants";export function linkCost(t){return t.virtual?t.virtualLength??L:r(t.p0,t.p1)/(t.weight||o)}
@@ -1 +1 @@
1
- import{lineAngle as f}from"simple-geometry";import{buildNGraph as h}from"../buildNGraph";import y from"../utils/a-star/a-star";import{parseNodeId as l}from"./parseNodeId";const g=1.01;function x(){return function(n,e,t){let r=1;if(e.parent){const[,a,c]=l(e.parent.node.id),[,o,d]=l(e.node.id),[,s,u]=l(n.id),p=f({x:a,y:c},{x:o,y:d}),m=f({x:o,y:d},{x:s,y:u});p!==m&&(r=g)}return r*t.data.distance}}export function createAStarPathFinder(){let i=null,n=null;return{build(e,t){n=h(e,t),i=y(n,{oriented:t.oriented,distance:x()})},hasNode(e){return n?!!n.hasNode(e):!1},find(e,t){if(!i)return[];const r=i.find(e,t);return r.length?r.map(a=>{const[c,o,d]=l(a.id);return{id:a.id,layer:c,x:o,y:d}}):[]}}}
1
+ import{lineAngle as c}from"simple-geometry";import{buildNGraph as h}from"../buildNGraph";import{TURN_PENALTY as y}from"../constants";import g from"../utils/a-star/a-star";import{parseNodeId as f}from"./parseNodeId";function x(){return function(n,e,r){let t=1;if(e.parent){const[,a,l]=f(e.parent.node.id),[,o,d]=f(e.node.id),[,u,s]=f(n.id),p=c({x:a,y:l},{x:o,y:d}),m=c({x:o,y:d},{x:u,y:s});p!==m&&(t=y)}return t*r.data.distance}}export function createAStarPathFinder(){let i=null,n=null;return{build(e,r){n=h(e,r),i=g(n,{oriented:r.oriented,distance:x()})},hasNode(e){return n?!!n.hasNode(e):!1},find(e,r){if(!i)return[];const t=i.find(e,r);return t.length?t.map(a=>{const[l,o,d]=f(a.id);return{id:a.id,layer:l,x:o,y:d}}):[]}}}
@@ -23,8 +23,9 @@ export interface RouteLine {
23
23
  /**
24
24
  * Optional custom cost for virtual (floor-transition) links, configured
25
25
  * per-line in the designer as "Virtual length". When set, the pathfinder
26
- * uses this value instead of the default VIRTUAL_LINE_PENALTY (0), making
27
- * the transition less preferred so routes may stay on the same floor.
26
+ * uses this value instead of the default VIRTUAL_LINE_PENALTY, overriding it
27
+ * per line `0` makes the transition free (preferred), a large value makes
28
+ * it avoided. When unset, the non-zero default keeps routes on the same floor.
28
29
  */
29
30
  readonly virtualLength?: number;
30
31
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expofp/floorplan",
3
- "version": "3.7.15",
3
+ "version": "3.7.17",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/expofp/efp-app.git",
@@ -73,8 +73,8 @@
73
73
  "tslib": "^2.3.0",
74
74
  "uuid": "^9.0.1",
75
75
  "zod": "4.3.5",
76
- "@expofp/debug": "3.7.15",
77
- "@expofp/resolve": "3.7.15"
76
+ "@expofp/debug": "3.7.17",
77
+ "@expofp/resolve": "3.7.17"
78
78
  },
79
79
  "devDependencies": {
80
80
  "@babel/plugin-proposal-decorators": "^8.0.2",
@@ -1,105 +0,0 @@
1
- function __vite_inject_css__(css, id, forceLightDom){ if (typeof document==='undefined') return; var shadow=!forceLightDom&&typeof window!=='undefined'&&window.__efpShadowDOMStyleParent; var parent=shadow||document.head; var s=document.createElement('style'); s.setAttribute('data-chunk-style', id); s.appendChild(document.createTextNode(css)); parent.appendChild(s);}
2
- (function() {
3
- try {
4
- var e = typeof window < "u" ? window : typeof global < "u" ? global : typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : {};
5
- e.SENTRY_RELEASE = { id: "3.7.15" };
6
- var t = new e.Error().stack;
7
- t && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[t] = "525f6433-95e7-4860-9fd7-26e314146d85", e._sentryDebugIdIdentifier = "sentry-dbid-525f6433-95e7-4860-9fd7-26e314146d85");
8
- } catch {}
9
- })();
10
- import { n as e, r as t } from "./rolldown-runtime-DB-F2T_p.js";
11
- import { t as n } from "./react-CNjituVz.js";
12
- import { t as r } from "./jsx-runtime-BtHP4gKJ.js";
13
- import { s as i } from "./i18n-C4cY1vPb.js";
14
- import { t as a } from "./react-dom-Dg0lPUat.js";
15
- import { t as o } from "./classnames-C1vHtapl.js";
16
- import { t as s } from "./Button-Bw2rU4DR.js";
17
- import { t as c } from "./useRenderTarget-EL-n_0Va.js";
18
- //#region src/components/Modal.tsx
19
- var l = /* @__PURE__ */ e({ default: () => m }), u = /* @__PURE__ */ t(o(), 1), d = /* @__PURE__ */ t(n(), 1), f = /* @__PURE__ */ t(a(), 1), p = r(), m = ({ open: e, className: t, type: n = "default", title: r, badge: a, maxWidth: o, children: l, closeLabel: m, footerLeft: h = [], footerRight: g = [], onClickClose: _ }) => {
20
- let v = c(), y = (0, d.useRef)(null), [b, x] = (0, d.useState)(e), [S, C] = (0, d.useState)(e);
21
- if ((0, d.useEffect)(() => {
22
- if (e) C(!0), setTimeout(() => {
23
- x(!0);
24
- }, 10), document.body.style.overflow = "hidden", setTimeout(() => {
25
- var e;
26
- return (e = y.current) == null ? void 0 : e.focus();
27
- }, 0);
28
- else {
29
- x(!1);
30
- let e = setTimeout(() => {
31
- C(!1);
32
- }, 200);
33
- return () => clearTimeout(e);
34
- }
35
- let t = (e) => {
36
- e.key === "Escape" && _();
37
- };
38
- return document.addEventListener("keydown", t), () => {
39
- document.removeEventListener("keydown", t), document.body.style.overflow = "";
40
- };
41
- }, [e, _]), !S || !v) return null;
42
- let w = m == null ? i("Close") : m, T = (e) => e == null ? void 0 : e.map(({ label: e, onClick: t, variant: n = "primary", disabled: r, withBadge: i }, a) => /* @__PURE__ */ (0, p.jsx)(s, {
43
- onClick: t,
44
- variant: n,
45
- size: "md",
46
- inline: !0,
47
- disabled: r,
48
- withBadge: i,
49
- children: e
50
- }, a));
51
- return (0, f.createPortal)(/* @__PURE__ */ (0, p.jsx)("div", {
52
- className: (0, u.default)("modal", `modal--${n}`, { isOpen: b }, t),
53
- role: "dialog",
54
- "aria-modal": "true",
55
- ref: y,
56
- tabIndex: -1,
57
- onClick: _,
58
- children: /* @__PURE__ */ (0, p.jsxs)("div", {
59
- className: "modal__box",
60
- style: o ? { maxWidth: `${o}px` } : void 0,
61
- onClick: (e) => e.stopPropagation(),
62
- children: [
63
- /* @__PURE__ */ (0, p.jsxs)("div", {
64
- className: "modal__header",
65
- children: [/* @__PURE__ */ (0, p.jsx)("div", {
66
- className: "modal__title-container",
67
- children: /* @__PURE__ */ (0, p.jsx)("div", {
68
- className: "modal__title",
69
- children: r
70
- })
71
- }), /* @__PURE__ */ (0, p.jsx)("button", {
72
- type: "button",
73
- className: "modal__close",
74
- onClick: _,
75
- "aria-label": w,
76
- title: w,
77
- children: /* @__PURE__ */ (0, p.jsx)("i", {
78
- className: "icon-close",
79
- "aria-hidden": "true"
80
- })
81
- })]
82
- }),
83
- /* @__PURE__ */ (0, p.jsx)("div", {
84
- className: "modal__body",
85
- children: l
86
- }),
87
- (h.length > 0 || g.length > 0) && /* @__PURE__ */ (0, p.jsxs)("div", {
88
- className: "modal__footer",
89
- children: [/* @__PURE__ */ (0, p.jsx)("div", {
90
- className: "modal__footer-left",
91
- children: h.length > 0 && T(h)
92
- }), g.length > 0 && /* @__PURE__ */ (0, p.jsx)("div", {
93
- className: "modal__footer-right",
94
- children: T(g)
95
- })]
96
- })
97
- ]
98
- })
99
- }), v);
100
- };
101
- //#endregion
102
- export { l as n, m as t };
103
-
104
- ;/* vite-per-chunk-css */
105
- __vite_inject_css__(".modal{z-index:999;width:100%;height:100%;padding:calc(1.25rem * var(--ui-scale));opacity:0;visibility:hidden;background:#a3a8afcc;justify-content:center;align-items:center;transition:opacity .2s,visibility .2s;display:flex;position:fixed;top:0;bottom:0;left:0;right:0}.modal__box{width:100%;max-height:94vh;background:var(--color-white);border-radius:var(--border-radius-xl);max-height:94dvh;box-shadow:var(--shadow-md);opacity:0;flex-direction:column;transition:opacity .1s,transform .2s;display:flex;position:relative;overflow:hidden;transform:translateY(100px)}.modal__header{width:100%;min-height:calc(3.75rem * var(--ui-scale));padding:calc(.625rem * var(--ui-scale)) calc(3.125rem * var(--ui-scale)) calc(.625rem * var(--ui-scale)) calc(1.5rem * var(--ui-scale));border-bottom:1px solid var(--color-gray-200);flex-shrink:0;align-items:center;display:flex}.modal__title-container{align-items:center;gap:calc(1.25rem * var(--ui-scale));display:flex}.modal__title{align-items:center;gap:calc(.625rem * var(--ui-scale));font-size:var(--font-size-xxl);font-weight:var(--font-weight-bold);display:flex}.modal__badge{min-width:calc(1.625rem * var(--ui-scale));height:calc(1.625rem * var(--ui-scale));background:var(--color-primary-ultra-light);border-radius:var(--border-radius-full);font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);color:var(--color-primary);justify-content:center;align-items:center;display:flex}.modal__close{top:calc(.5rem * var(--ui-scale));right:calc(.5rem * var(--ui-scale));width:calc(2.5rem * var(--ui-scale));height:calc(2.5rem * var(--ui-scale));border-radius:var(--border-radius-md);opacity:.6;color:var(--color-gray-700);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;transition:opacity .1s,background-color .1s;display:flex;position:absolute}.modal__close:hover{background-color:var(--color-gray-100);opacity:1;color:var(--color-black)}.modal__body{padding:calc(1.5rem * var(--ui-scale)) calc(1.25rem * var(--ui-scale));flex:1;min-height:0;overflow:auto}.modal__footer{justify-content:space-between;gap:calc(.625rem * var(--ui-scale));padding:calc(1.25rem * var(--ui-scale));border-top:1px solid var(--color-gray-200);flex-flow:wrap;flex-shrink:0;display:flex}@media (max-width:480px){.modal__footer{padding:calc(.875rem * var(--ui-scale)) calc(1.25rem * var(--ui-scale));gap:calc(.875rem * var(--ui-scale))}.modal__footer .efp-button{width:100%;max-width:100%}}.modal__footer-left,.modal__footer-right{align-items:center;gap:calc(0rem * var(--ui-scale));display:flex}.modal__footer-right{flex:1;justify-content:flex-end}@media (max-width:480px){.modal__footer-right{align-self:flex-end}}.modal--default .modal__box{max-width:900px}.modal--share .modal__box{max-width:420px}.modal.isOpen{opacity:1;visibility:visible}.modal.isOpen .modal__box{opacity:1;transform:translateY(0)}@media (max-width:768px){.modal{padding:calc(1.25rem * var(--ui-scale)) 0 0 0;align-items:flex-end}.modal .modal__box{border-radius:0;border-top-left-radius:var(--border-radius-xl);border-top-right-radius:var(--border-radius-xl)}}.layout[dir=rtl] .modal__close{right:unset;left:0}\n/*$vite$:1*/", "Modal.css", false);
@@ -1,38 +0,0 @@
1
- import './Modal.scss';
2
- import React from 'react';
3
- import { ButtonVariant } from '../ui/Button';
4
- type ModalType = 'default' | 'share' | 'fullscreen';
5
- export interface ModalButton {
6
- label: string;
7
- variant?: ButtonVariant;
8
- disabled?: boolean;
9
- withBadge?: boolean;
10
- onClick: () => void;
11
- }
12
- export interface ModalProps {
13
- open: boolean;
14
- className?: string;
15
- type?: ModalType;
16
- title?: string;
17
- badge?: number;
18
- maxWidth?: number;
19
- children?: React.ReactNode;
20
- closeLabel?: string;
21
- footerLeft?: {
22
- label: string;
23
- onClick: () => void;
24
- variant?: 'primary' | 'gray';
25
- disabled?: boolean;
26
- }[];
27
- footerRight?: {
28
- label: string;
29
- onClick: () => void;
30
- variant?: 'primary' | 'gray';
31
- withBadge?: boolean;
32
- disabled?: boolean;
33
- }[];
34
- onClickClose: () => void;
35
- }
36
- declare const Modal: React.FC<ModalProps>;
37
- export default Modal;
38
- //# sourceMappingURL=Modal.d.ts.map
@@ -1 +0,0 @@
1
- import{jsx as e,jsxs as i}from"react/jsx-runtime";import"./Modal.scss";import B from"classnames";import{useEffect as I,useRef as O,useState as h}from"react";import{createPortal as P}from"react-dom";import V from"../ui/Button";import{t as $}from"../utils/i18n";import{useRenderTarget as z}from"../utils/useRenderTarget";const L=({open:l,className:v,type:p="default",title:b,badge:M,maxWidth:d,children:N,closeLabel:y,footerLeft:o=[],footerRight:r=[],onClickClose:s})=>{const n=z(),m=O(null),[g,c]=h(l),[x,u]=h(l);if(I(()=>{if(l)u(!0),setTimeout(()=>{c(!0)},10),document.body.style.overflow="hidden",setTimeout(()=>m.current?.focus(),0);else{c(!1);const a=setTimeout(()=>{u(!1)},200);return()=>clearTimeout(a)}const t=a=>{a.key==="Escape"&&s()};return document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t),document.body.style.overflow=""}},[l,s]),!x||!n)return null;const f=y??$("Close"),_=t=>t?.map(({label:a,onClick:w,variant:E="primary",disabled:T,withBadge:j},k)=>e(V,{onClick:w,variant:E,size:"md",inline:!0,disabled:T,withBadge:j,children:a},k));return P(e("div",{className:B("modal",`modal--${p}`,{isOpen:g},v),role:"dialog","aria-modal":"true",ref:m,tabIndex:-1,onClick:s,children:i("div",{className:"modal__box",style:d?{maxWidth:`${d}px`}:void 0,onClick:t=>t.stopPropagation(),children:[i("div",{className:"modal__header",children:[e("div",{className:"modal__title-container",children:e("div",{className:"modal__title",children:b})}),e("button",{type:"button",className:"modal__close",onClick:s,"aria-label":f,title:f,children:e("i",{className:"icon-close","aria-hidden":"true"})})]}),e("div",{className:"modal__body",children:N}),(o.length>0||r.length>0)&&i("div",{className:"modal__footer",children:[e("div",{className:"modal__footer-left",children:o.length>0&&_(o)}),r.length>0&&e("div",{className:"modal__footer-right",children:_(r)})]})]})}),n)};export default L;