@expofp/ui 3.21.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 (304) hide show
  1. package/README.md +30 -0
  2. package/dist/Alert/Alert.d.ts +20 -0
  3. package/dist/Alert/Alert.js +23 -0
  4. package/dist/Alert/index.d.ts +3 -0
  5. package/dist/Alert/index.js +1 -0
  6. package/dist/Autocomplete/Autocomplete.d.ts +21 -0
  7. package/dist/Autocomplete/Autocomplete.js +183 -0
  8. package/dist/Autocomplete/index.d.ts +3 -0
  9. package/dist/Autocomplete/index.js +1 -0
  10. package/dist/Badge/Badge.d.ts +14 -0
  11. package/dist/Badge/Badge.js +15 -0
  12. package/dist/Badge/index.d.ts +3 -0
  13. package/dist/Badge/index.js +1 -0
  14. package/dist/Button/Button.d.ts +30 -0
  15. package/dist/Button/Button.js +41 -0
  16. package/dist/Button/index.d.ts +3 -0
  17. package/dist/Button/index.js +1 -0
  18. package/dist/Checkbox/Checkbox.d.ts +19 -0
  19. package/dist/Checkbox/Checkbox.js +19 -0
  20. package/dist/Checkbox/index.d.ts +3 -0
  21. package/dist/Checkbox/index.js +1 -0
  22. package/dist/CheckboxButton/CheckboxButton.d.ts +12 -0
  23. package/dist/CheckboxButton/CheckboxButton.js +19 -0
  24. package/dist/CheckboxButton/index.d.ts +3 -0
  25. package/dist/CheckboxButton/index.js +1 -0
  26. package/dist/DownloadList/DownloadList.d.ts +15 -0
  27. package/dist/DownloadList/DownloadList.js +9 -0
  28. package/dist/DownloadList/index.d.ts +3 -0
  29. package/dist/DownloadList/index.js +2 -0
  30. package/dist/Draggable/Draggable.d.ts +9 -0
  31. package/dist/Draggable/Draggable.js +92 -0
  32. package/dist/Draggable/index.d.ts +3 -0
  33. package/dist/Draggable/index.js +2 -0
  34. package/dist/EntityItem/EntityItem.d.ts +46 -0
  35. package/dist/EntityItem/EntityItem.js +29 -0
  36. package/dist/EntityItem/index.d.ts +3 -0
  37. package/dist/EntityItem/index.js +1 -0
  38. package/dist/EventBadge/EventBadge.d.ts +13 -0
  39. package/dist/EventBadge/EventBadge.js +10 -0
  40. package/dist/EventBadge/index.d.ts +3 -0
  41. package/dist/EventBadge/index.js +1 -0
  42. package/dist/HeatmapLegend/HeatmapLegend.d.ts +15 -0
  43. package/dist/HeatmapLegend/HeatmapLegend.js +11 -0
  44. package/dist/HeatmapLegend/index.d.ts +3 -0
  45. package/dist/HeatmapLegend/index.js +2 -0
  46. package/dist/HighlightText/HighlightText.d.ts +7 -0
  47. package/dist/HighlightText/HighlightText.js +14 -0
  48. package/dist/HighlightText/index.d.ts +2 -0
  49. package/dist/HighlightText/index.js +1 -0
  50. package/dist/LevelBadge/LevelBadge.d.ts +9 -0
  51. package/dist/LevelBadge/LevelBadge.js +10 -0
  52. package/dist/LevelBadge/index.d.ts +3 -0
  53. package/dist/LevelBadge/index.js +2 -0
  54. package/dist/LevelSelector/LevelSelector.d.ts +19 -0
  55. package/dist/LevelSelector/LevelSelector.js +91 -0
  56. package/dist/LevelSelector/index.d.ts +3 -0
  57. package/dist/LevelSelector/index.js +2 -0
  58. package/dist/MapControls/MapControls.d.ts +33 -0
  59. package/dist/MapControls/MapControls.js +38 -0
  60. package/dist/MapControls/index.d.ts +3 -0
  61. package/dist/MapControls/index.js +2 -0
  62. package/dist/MobileToggleButton/MobileToggleButton.d.ts +12 -0
  63. package/dist/MobileToggleButton/MobileToggleButton.js +8 -0
  64. package/dist/MobileToggleButton/index.d.ts +3 -0
  65. package/dist/MobileToggleButton/index.js +1 -0
  66. package/dist/Modal/Modal.d.ts +34 -0
  67. package/dist/Modal/Modal.js +98 -0
  68. package/dist/Modal/index.d.ts +3 -0
  69. package/dist/Modal/index.js +1 -0
  70. package/dist/MultiSelectGroups/MultiSelectGroups.d.ts +37 -0
  71. package/dist/MultiSelectGroups/MultiSelectGroups.js +80 -0
  72. package/dist/MultiSelectGroups/index.d.ts +3 -0
  73. package/dist/MultiSelectGroups/index.js +1 -0
  74. package/dist/OverlayGrip/OverlayGrip.d.ts +11 -0
  75. package/dist/OverlayGrip/OverlayGrip.js +8 -0
  76. package/dist/OverlayGrip/index.d.ts +3 -0
  77. package/dist/OverlayGrip/index.js +2 -0
  78. package/dist/PermissionNotice/PermissionNotice.d.ts +16 -0
  79. package/dist/PermissionNotice/PermissionNotice.js +11 -0
  80. package/dist/PermissionNotice/index.d.ts +3 -0
  81. package/dist/PermissionNotice/index.js +2 -0
  82. package/dist/Radio/Radio.d.ts +15 -0
  83. package/dist/Radio/Radio.js +13 -0
  84. package/dist/Radio/index.d.ts +3 -0
  85. package/dist/Radio/index.js +1 -0
  86. package/dist/RebookingNotes/RebookingNotes.d.ts +11 -0
  87. package/dist/RebookingNotes/RebookingNotes.js +18 -0
  88. package/dist/RebookingNotes/index.d.ts +3 -0
  89. package/dist/RebookingNotes/index.js +1 -0
  90. package/dist/RebookingRadioGroup/RebookingRadioGroup.d.ts +17 -0
  91. package/dist/RebookingRadioGroup/RebookingRadioGroup.js +13 -0
  92. package/dist/RebookingRadioGroup/index.d.ts +3 -0
  93. package/dist/RebookingRadioGroup/index.js +1 -0
  94. package/dist/ScrollableRow/ScrollableRow.d.ts +21 -0
  95. package/dist/ScrollableRow/ScrollableRow.js +155 -0
  96. package/dist/ScrollableRow/index.d.ts +3 -0
  97. package/dist/ScrollableRow/index.js +2 -0
  98. package/dist/Share/Share.d.ts +22 -0
  99. package/dist/Share/Share.js +24 -0
  100. package/dist/Share/index.d.ts +3 -0
  101. package/dist/Share/index.js +1 -0
  102. package/dist/ShowMoreButton/ShowMoreButton.d.ts +11 -0
  103. package/dist/ShowMoreButton/ShowMoreButton.js +7 -0
  104. package/dist/ShowMoreButton/index.d.ts +3 -0
  105. package/dist/ShowMoreButton/index.js +1 -0
  106. package/dist/SidebarActions/SidebarActions.d.ts +26 -0
  107. package/dist/SidebarActions/SidebarActions.js +32 -0
  108. package/dist/SidebarActions/index.d.ts +3 -0
  109. package/dist/SidebarActions/index.js +2 -0
  110. package/dist/SimpleRow/SimpleRow.d.ts +15 -0
  111. package/dist/SimpleRow/SimpleRow.js +11 -0
  112. package/dist/SimpleRow/index.d.ts +3 -0
  113. package/dist/SimpleRow/index.js +2 -0
  114. package/dist/Spinner/Spinner.d.ts +9 -0
  115. package/dist/Spinner/Spinner.js +8 -0
  116. package/dist/Spinner/index.d.ts +3 -0
  117. package/dist/Spinner/index.js +1 -0
  118. package/dist/ToggleButton/ToggleButton.d.ts +17 -0
  119. package/dist/ToggleButton/ToggleButton.js +8 -0
  120. package/dist/ToggleButton/index.d.ts +3 -0
  121. package/dist/ToggleButton/index.js +1 -0
  122. package/dist/ToggleSwitch/ToggleSwitch.d.ts +12 -0
  123. package/dist/ToggleSwitch/ToggleSwitch.js +10 -0
  124. package/dist/ToggleSwitch/index.d.ts +3 -0
  125. package/dist/ToggleSwitch/index.js +1 -0
  126. package/dist/TouchHand/TouchHand.d.ts +5 -0
  127. package/dist/TouchHand/TouchHand.js +7 -0
  128. package/dist/TouchHand/index.d.ts +2 -0
  129. package/dist/TouchHand/index.js +1 -0
  130. package/dist/WayfindingFloorSelector/WayfindingFloorSelector.d.ts +24 -0
  131. package/dist/WayfindingFloorSelector/WayfindingFloorSelector.js +27 -0
  132. package/dist/WayfindingFloorSelector/index.d.ts +3 -0
  133. package/dist/WayfindingFloorSelector/index.js +1 -0
  134. package/dist/components/Alert/Alert.d.ts +20 -0
  135. package/dist/components/Alert/Alert.js +23 -0
  136. package/dist/components/Alert/index.d.ts +3 -0
  137. package/dist/components/Alert/index.js +1 -0
  138. package/dist/components/Autocomplete/Autocomplete.d.ts +21 -0
  139. package/dist/components/Autocomplete/Autocomplete.js +183 -0
  140. package/dist/components/Autocomplete/index.d.ts +3 -0
  141. package/dist/components/Autocomplete/index.js +1 -0
  142. package/dist/components/Badge/Badge.d.ts +14 -0
  143. package/dist/components/Badge/Badge.js +15 -0
  144. package/dist/components/Badge/index.d.ts +3 -0
  145. package/dist/components/Badge/index.js +1 -0
  146. package/dist/components/Button/Button.d.ts +30 -0
  147. package/dist/components/Button/Button.js +41 -0
  148. package/dist/components/Button/index.d.ts +3 -0
  149. package/dist/components/Button/index.js +1 -0
  150. package/dist/components/Checkbox/Checkbox.d.ts +19 -0
  151. package/dist/components/Checkbox/Checkbox.js +19 -0
  152. package/dist/components/Checkbox/index.d.ts +3 -0
  153. package/dist/components/Checkbox/index.js +1 -0
  154. package/dist/components/CheckboxButton/CheckboxButton.d.ts +12 -0
  155. package/dist/components/CheckboxButton/CheckboxButton.js +19 -0
  156. package/dist/components/CheckboxButton/index.d.ts +3 -0
  157. package/dist/components/CheckboxButton/index.js +1 -0
  158. package/dist/components/DownloadList/DownloadList.d.ts +15 -0
  159. package/dist/components/DownloadList/DownloadList.js +9 -0
  160. package/dist/components/DownloadList/index.d.ts +3 -0
  161. package/dist/components/DownloadList/index.js +2 -0
  162. package/dist/components/Draggable/Draggable.d.ts +9 -0
  163. package/dist/components/Draggable/Draggable.js +92 -0
  164. package/dist/components/Draggable/index.d.ts +3 -0
  165. package/dist/components/Draggable/index.js +2 -0
  166. package/dist/components/EntityItem/EntityItem.d.ts +46 -0
  167. package/dist/components/EntityItem/EntityItem.js +29 -0
  168. package/dist/components/EntityItem/index.d.ts +3 -0
  169. package/dist/components/EntityItem/index.js +1 -0
  170. package/dist/components/EventBadge/EventBadge.d.ts +13 -0
  171. package/dist/components/EventBadge/EventBadge.js +10 -0
  172. package/dist/components/EventBadge/index.d.ts +3 -0
  173. package/dist/components/EventBadge/index.js +1 -0
  174. package/dist/components/Gallery/Gallery.d.ts +25 -0
  175. package/dist/components/Gallery/Gallery.js +25 -0
  176. package/dist/components/Gallery/GalleryBadges/GalleryBadges.d.ts +8 -0
  177. package/dist/components/Gallery/GalleryBadges/GalleryBadges.js +5 -0
  178. package/dist/components/Gallery/GalleryControls/GalleryControls.d.ts +11 -0
  179. package/dist/components/Gallery/GalleryControls/GalleryControls.js +5 -0
  180. package/dist/components/Gallery/GalleryImg/GalleryImg.d.ts +13 -0
  181. package/dist/components/Gallery/GalleryImg/GalleryImg.js +37 -0
  182. package/dist/components/Gallery/GalleryItem/GalleryItem.d.ts +14 -0
  183. package/dist/components/Gallery/GalleryItem/GalleryItem.js +6 -0
  184. package/dist/components/Gallery/GalleryModal/GalleryModal.d.ts +18 -0
  185. package/dist/components/Gallery/GalleryModal/GalleryModal.js +88 -0
  186. package/dist/components/Gallery/GalleryPreLoader.d.ts +7 -0
  187. package/dist/components/Gallery/GalleryPreLoader.js +29 -0
  188. package/dist/components/Gallery/TransformImg/TransformImg.d.ts +10 -0
  189. package/dist/components/Gallery/TransformImg/TransformImg.js +15 -0
  190. package/dist/components/Gallery/index.d.ts +3 -0
  191. package/dist/components/Gallery/index.js +1 -0
  192. package/dist/components/HeatmapLegend/HeatmapLegend.d.ts +15 -0
  193. package/dist/components/HeatmapLegend/HeatmapLegend.js +11 -0
  194. package/dist/components/HeatmapLegend/index.d.ts +3 -0
  195. package/dist/components/HeatmapLegend/index.js +2 -0
  196. package/dist/components/HighlightText/HighlightText.d.ts +7 -0
  197. package/dist/components/HighlightText/HighlightText.js +14 -0
  198. package/dist/components/HighlightText/index.d.ts +2 -0
  199. package/dist/components/HighlightText/index.js +1 -0
  200. package/dist/components/LevelBadge/LevelBadge.d.ts +9 -0
  201. package/dist/components/LevelBadge/LevelBadge.js +10 -0
  202. package/dist/components/LevelBadge/index.d.ts +3 -0
  203. package/dist/components/LevelBadge/index.js +2 -0
  204. package/dist/components/LevelSelector/LevelSelector.d.ts +19 -0
  205. package/dist/components/LevelSelector/LevelSelector.js +91 -0
  206. package/dist/components/LevelSelector/index.d.ts +3 -0
  207. package/dist/components/LevelSelector/index.js +2 -0
  208. package/dist/components/MapControls/MapControls.d.ts +33 -0
  209. package/dist/components/MapControls/MapControls.js +38 -0
  210. package/dist/components/MapControls/index.d.ts +3 -0
  211. package/dist/components/MapControls/index.js +2 -0
  212. package/dist/components/MobileToggleButton/MobileToggleButton.d.ts +12 -0
  213. package/dist/components/MobileToggleButton/MobileToggleButton.js +8 -0
  214. package/dist/components/MobileToggleButton/index.d.ts +3 -0
  215. package/dist/components/MobileToggleButton/index.js +1 -0
  216. package/dist/components/Modal/Modal.d.ts +34 -0
  217. package/dist/components/Modal/Modal.js +98 -0
  218. package/dist/components/Modal/index.d.ts +3 -0
  219. package/dist/components/Modal/index.js +1 -0
  220. package/dist/components/MultiSelectGroups/MultiSelectGroups.d.ts +37 -0
  221. package/dist/components/MultiSelectGroups/MultiSelectGroups.js +80 -0
  222. package/dist/components/MultiSelectGroups/index.d.ts +3 -0
  223. package/dist/components/MultiSelectGroups/index.js +1 -0
  224. package/dist/components/Overlay/Overlay.d.ts +29 -0
  225. package/dist/components/Overlay/Overlay.js +251 -0
  226. package/dist/components/Overlay/OverlayScrollContext.d.ts +7 -0
  227. package/dist/components/Overlay/OverlayScrollContext.js +7 -0
  228. package/dist/components/Overlay/index.d.ts +4 -0
  229. package/dist/components/Overlay/index.js +2 -0
  230. package/dist/components/OverlayGrip/OverlayGrip.d.ts +11 -0
  231. package/dist/components/OverlayGrip/OverlayGrip.js +8 -0
  232. package/dist/components/OverlayGrip/index.d.ts +3 -0
  233. package/dist/components/OverlayGrip/index.js +2 -0
  234. package/dist/components/PermissionNotice/PermissionNotice.d.ts +16 -0
  235. package/dist/components/PermissionNotice/PermissionNotice.js +11 -0
  236. package/dist/components/PermissionNotice/index.d.ts +3 -0
  237. package/dist/components/PermissionNotice/index.js +2 -0
  238. package/dist/components/Radio/Radio.d.ts +15 -0
  239. package/dist/components/Radio/Radio.js +13 -0
  240. package/dist/components/Radio/index.d.ts +3 -0
  241. package/dist/components/Radio/index.js +1 -0
  242. package/dist/components/RebookingNotes/RebookingNotes.d.ts +11 -0
  243. package/dist/components/RebookingNotes/RebookingNotes.js +18 -0
  244. package/dist/components/RebookingNotes/index.d.ts +3 -0
  245. package/dist/components/RebookingNotes/index.js +1 -0
  246. package/dist/components/RebookingRadioGroup/RebookingRadioGroup.d.ts +17 -0
  247. package/dist/components/RebookingRadioGroup/RebookingRadioGroup.js +13 -0
  248. package/dist/components/RebookingRadioGroup/index.d.ts +3 -0
  249. package/dist/components/RebookingRadioGroup/index.js +1 -0
  250. package/dist/components/ScrollableRow/ScrollableRow.d.ts +21 -0
  251. package/dist/components/ScrollableRow/ScrollableRow.js +155 -0
  252. package/dist/components/ScrollableRow/index.d.ts +3 -0
  253. package/dist/components/ScrollableRow/index.js +2 -0
  254. package/dist/components/Share/Share.d.ts +22 -0
  255. package/dist/components/Share/Share.js +24 -0
  256. package/dist/components/Share/index.d.ts +3 -0
  257. package/dist/components/Share/index.js +1 -0
  258. package/dist/components/ShowMoreButton/ShowMoreButton.d.ts +11 -0
  259. package/dist/components/ShowMoreButton/ShowMoreButton.js +7 -0
  260. package/dist/components/ShowMoreButton/index.d.ts +3 -0
  261. package/dist/components/ShowMoreButton/index.js +1 -0
  262. package/dist/components/SidebarActions/SidebarActions.d.ts +26 -0
  263. package/dist/components/SidebarActions/SidebarActions.js +32 -0
  264. package/dist/components/SidebarActions/index.d.ts +3 -0
  265. package/dist/components/SidebarActions/index.js +2 -0
  266. package/dist/components/SimpleRow/SimpleRow.d.ts +15 -0
  267. package/dist/components/SimpleRow/SimpleRow.js +11 -0
  268. package/dist/components/SimpleRow/index.d.ts +3 -0
  269. package/dist/components/SimpleRow/index.js +2 -0
  270. package/dist/components/Spinner/Spinner.d.ts +9 -0
  271. package/dist/components/Spinner/Spinner.js +8 -0
  272. package/dist/components/Spinner/index.d.ts +3 -0
  273. package/dist/components/Spinner/index.js +1 -0
  274. package/dist/components/ToggleButton/ToggleButton.d.ts +17 -0
  275. package/dist/components/ToggleButton/ToggleButton.js +8 -0
  276. package/dist/components/ToggleButton/index.d.ts +3 -0
  277. package/dist/components/ToggleButton/index.js +1 -0
  278. package/dist/components/ToggleSwitch/ToggleSwitch.d.ts +12 -0
  279. package/dist/components/ToggleSwitch/ToggleSwitch.js +10 -0
  280. package/dist/components/ToggleSwitch/index.d.ts +3 -0
  281. package/dist/components/ToggleSwitch/index.js +1 -0
  282. package/dist/components/TouchHand/TouchHand.d.ts +5 -0
  283. package/dist/components/TouchHand/TouchHand.js +7 -0
  284. package/dist/components/TouchHand/index.d.ts +2 -0
  285. package/dist/components/TouchHand/index.js +1 -0
  286. package/dist/components/WayfindingFloorSelector/WayfindingFloorSelector.d.ts +24 -0
  287. package/dist/components/WayfindingFloorSelector/WayfindingFloorSelector.js +27 -0
  288. package/dist/components/WayfindingFloorSelector/index.d.ts +3 -0
  289. package/dist/components/WayfindingFloorSelector/index.js +1 -0
  290. package/dist/index.d.ts +65 -0
  291. package/dist/index.js +69 -0
  292. package/dist/shared/debounce.d.ts +2 -0
  293. package/dist/shared/debounce.js +9 -0
  294. package/dist/shared/hooks/useDragGesture.d.ts +19 -0
  295. package/dist/shared/hooks/useDragGesture.js +45 -0
  296. package/dist/shared/hooks/useOnClickOutside.d.ts +14 -0
  297. package/dist/shared/hooks/useOnClickOutside.js +43 -0
  298. package/dist/shared/hooks/useOnEscape.d.ts +14 -0
  299. package/dist/shared/hooks/useOnEscape.js +31 -0
  300. package/dist/shared/hooks/useWindowSize.d.ts +5 -0
  301. package/dist/shared/hooks/useWindowSize.js +40 -0
  302. package/dist/shared/interactive.d.ts +2 -0
  303. package/dist/shared/interactive.js +4 -0
  304. package/package.json +70 -0
@@ -0,0 +1,33 @@
1
+ import './MapControls.scss';
2
+ import { type CSSProperties } from 'react';
3
+ export interface MapControlLayersItem {
4
+ id: string;
5
+ name: string;
6
+ }
7
+ export interface MapControlsProps {
8
+ className?: string;
9
+ style?: CSSProperties;
10
+ title: string;
11
+ findLocationLabel: string;
12
+ zoomInLabel: string;
13
+ zoomOutLabel: string;
14
+ viewModeLabel: string;
15
+ fitToScreenLabel: string;
16
+ layersLabel: string;
17
+ showModeSwitch: boolean;
18
+ showFindLocation: boolean;
19
+ isMap3d: boolean;
20
+ defaultLayersOpen?: boolean;
21
+ layersList?: MapControlLayersItem[];
22
+ layersActiveItems?: string[];
23
+ layersWidth?: number;
24
+ onViewModeSwitch: () => void;
25
+ onFindLocation: () => void;
26
+ onZoomIn: () => void;
27
+ onZoomOut: () => void;
28
+ onFitToScreen: () => void;
29
+ onChangeLayers: (value: string) => void;
30
+ }
31
+ declare const MapControls: ({ className, style, title, findLocationLabel, zoomInLabel, zoomOutLabel, viewModeLabel, fitToScreenLabel, layersLabel, isMap3d, showModeSwitch, showFindLocation, defaultLayersOpen, layersList, layersActiveItems, layersWidth, onViewModeSwitch, onFindLocation, onZoomIn, onZoomOut, onFitToScreen, onChangeLayers, }: MapControlsProps) => import("react").JSX.Element;
32
+ export default MapControls;
33
+ //# sourceMappingURL=MapControls.d.ts.map
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import './MapControls.scss';
3
+ import classNames from 'classnames';
4
+ import { useId, useLayoutEffect, useRef, useState } from 'react';
5
+ import useOnClickOutside from '../../shared/hooks/useOnClickOutside';
6
+ import useOnEscape from '../../shared/hooks/useOnEscape';
7
+ const MapControls = ({ className, style, title, findLocationLabel, zoomInLabel, zoomOutLabel, viewModeLabel, fitToScreenLabel, layersLabel, isMap3d, showModeSwitch, showFindLocation, defaultLayersOpen = false, layersList, layersActiveItems = [], layersWidth, onViewModeSwitch, onFindLocation, onZoomIn, onZoomOut, onFitToScreen, onChangeLayers, }) => {
8
+ const refLayersWrapper = useRef(null);
9
+ const refLayersButton = useRef(null);
10
+ const layerIdPrefix = useId();
11
+ const [layersIsOpen, setLayersOpen] = useState(defaultLayersOpen);
12
+ const [menuPosition, setMenuPosition] = useState('down');
13
+ useOnClickOutside(refLayersWrapper, () => setLayersOpen(false), layersIsOpen);
14
+ useOnEscape(() => {
15
+ setLayersOpen(false);
16
+ refLayersButton.current?.focus();
17
+ }, layersIsOpen);
18
+ useLayoutEffect(() => {
19
+ if (layersIsOpen && refLayersWrapper.current) {
20
+ const buttonRect = refLayersWrapper.current.getBoundingClientRect();
21
+ const windowHeight = window.innerHeight;
22
+ const spaceBelow = windowHeight - buttonRect.bottom;
23
+ const minSpaceRequired = 250;
24
+ if (spaceBelow < minSpaceRequired) {
25
+ setMenuPosition('up');
26
+ }
27
+ else {
28
+ setMenuPosition('down');
29
+ }
30
+ }
31
+ }, [layersIsOpen]);
32
+ const handleLayersCheck = (id) => onChangeLayers(id);
33
+ return (_jsxs("div", { className: classNames('efp-map-controls', className), style: style, role: "toolbar", "aria-label": title, children: [showFindLocation && (_jsx("button", { type: "button", className: "efp-map-control", "aria-label": findLocationLabel, title: findLocationLabel, onClick: onFindLocation, children: _jsx("i", { className: "icon-navigation", "aria-hidden": "true" }) })), layersList && (_jsxs("div", { className: "efp-layers-button", ref: refLayersWrapper, children: [_jsx("button", { ref: refLayersButton, type: "button", className: classNames('efp-map-control', { 'efp-map-control--active': layersIsOpen }), "aria-label": layersLabel, title: layersLabel, "aria-haspopup": "true", "aria-expanded": layersIsOpen, onClick: () => setLayersOpen(!layersIsOpen), children: _jsx("i", { className: "icon-layers", "aria-hidden": "true" }) }), layersIsOpen && (_jsx("div", { className: classNames('efp-checked-panel', {
34
+ 'efp-checked-panel--opens-up': menuPosition === 'up',
35
+ 'efp-checked-panel--opens-down': menuPosition === 'down',
36
+ }), style: { minWidth: layersWidth }, children: _jsx("ul", { className: "efp-checked-panel__list", children: layersList.map((item) => (_jsxs("li", { children: [_jsx("input", { type: "checkbox", className: "efp-checked-panel__checkbox", value: item.id, id: `${layerIdPrefix}-${item.id}`, checked: layersActiveItems.includes(item.id), onChange: () => handleLayersCheck(item.id) }), _jsx("label", { className: "efp-checked-panel__label", htmlFor: `${layerIdPrefix}-${item.id}`, children: _jsx("div", { className: "efp-checked-panel__item-name", children: item.name }) })] }, item.id))) }) }))] })), showModeSwitch && (_jsx("button", { type: "button", className: "efp-map-control", "aria-label": viewModeLabel, title: viewModeLabel, onClick: onViewModeSwitch, children: _jsx("i", { className: isMap3d ? 'icon-two-dim' : 'icon-three-dim', "aria-hidden": "true" }) })), _jsxs("div", { className: "efp-map-control-group", children: [_jsx("button", { type: "button", className: "efp-map-control", "aria-label": zoomInLabel, title: zoomInLabel, onClick: onZoomIn, children: _jsx("i", { className: "icon-plus", "aria-hidden": "true" }) }), _jsx("div", { className: "efp-map-control-divider" }), _jsx("button", { type: "button", className: "efp-map-control", "aria-label": zoomOutLabel, title: zoomOutLabel, onClick: onZoomOut, children: _jsx("i", { className: "icon-minus", "aria-hidden": "true" }) })] }), _jsx("button", { type: "button", className: "efp-map-control", "aria-label": fitToScreenLabel, title: fitToScreenLabel, onClick: onFitToScreen, children: _jsx("i", { className: "icon-maximize", "aria-hidden": "true" }) })] }));
37
+ };
38
+ export default MapControls;
@@ -0,0 +1,3 @@
1
+ export { default } from './MapControls';
2
+ export type { MapControlsProps, MapControlLayersItem } from './MapControls';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,2 @@
1
+ /* eslint-disable simple-import-sort/exports */
2
+ export { default } from './MapControls';
@@ -0,0 +1,12 @@
1
+ import './MobileToggleButton.scss';
2
+ export type MobileToggleButtonMode = 'list' | 'map';
3
+ export interface MobileToggleButtonProps {
4
+ mode: MobileToggleButtonMode;
5
+ label: string;
6
+ ariaLabel: string;
7
+ withBanner?: boolean;
8
+ onClick: () => void;
9
+ }
10
+ declare function MobileToggleButton({ mode, label, ariaLabel, withBanner, onClick, }: MobileToggleButtonProps): import("react").JSX.Element;
11
+ export default MobileToggleButton;
12
+ //# sourceMappingURL=MobileToggleButton.d.ts.map
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import './MobileToggleButton.scss';
3
+ import classNames from 'classnames';
4
+ function MobileToggleButton({ mode, label, ariaLabel, withBanner, onClick, }) {
5
+ const isListMode = mode === 'list';
6
+ return (_jsxs("button", { className: classNames('efp-mobile-toggle-button', { 'efp-mobile-toggle-button--with-banner': withBanner }, isListMode ? 'efp-mobile-toggle-button--list' : 'efp-mobile-toggle-button--map'), onClick: onClick, type: "button", "aria-label": ariaLabel, children: [_jsx("i", { className: isListMode ? 'icon-list' : 'icon-map', "aria-hidden": "true" }), _jsx("span", { className: "efp-mobile-toggle-button__text", children: label })] }));
7
+ }
8
+ export default MobileToggleButton;
@@ -0,0 +1,3 @@
1
+ export type { MobileToggleButtonMode, MobileToggleButtonProps } from './MobileToggleButton';
2
+ export { default } from './MobileToggleButton';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export { default } from './MobileToggleButton';
@@ -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,98 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import './Modal.scss';
3
+ import classNames from 'classnames';
4
+ import { useEffect, useId, useRef, useState } from 'react';
5
+ import { createPortal } from 'react-dom';
6
+ import Button from '../Button';
7
+ const MODAL_EXIT_TRANSITION_MS = 200;
8
+ const isElementVisible = (el) => el.getClientRects().length > 0 && getComputedStyle(el).visibility !== 'hidden';
9
+ const Modal = ({ open, className, variant = 'default', title, ariaLabel, maxWidth, children, closeLabel, renderTarget, footerLeft = [], footerRight = [], onClose, }) => {
10
+ const modalRef = useRef(null);
11
+ const previousFocusRef = useRef(null);
12
+ const titleId = useId();
13
+ const [isOpen, setIsOpen] = useState(open);
14
+ const [isVisible, setIsVisible] = useState(open);
15
+ // Focus restore + body scroll lock + enter/exit animation. Driven solely by `open`.
16
+ useEffect(() => {
17
+ if (!open) {
18
+ const deactivateFrame = requestAnimationFrame(() => setIsOpen(false));
19
+ const unmountTimer = setTimeout(() => setIsVisible(false), MODAL_EXIT_TRANSITION_MS);
20
+ previousFocusRef.current?.focus();
21
+ previousFocusRef.current = null;
22
+ return () => {
23
+ cancelAnimationFrame(deactivateFrame);
24
+ clearTimeout(unmountTimer);
25
+ };
26
+ }
27
+ previousFocusRef.current ??= document.activeElement;
28
+ const previousBodyOverflow = document.body.style.overflow;
29
+ document.body.style.overflow = 'hidden';
30
+ let activateFrame = 0;
31
+ const mountFrame = requestAnimationFrame(() => {
32
+ setIsVisible(true);
33
+ activateFrame = requestAnimationFrame(() => setIsOpen(true));
34
+ });
35
+ return () => {
36
+ cancelAnimationFrame(mountFrame);
37
+ cancelAnimationFrame(activateFrame);
38
+ document.body.style.overflow = previousBodyOverflow;
39
+ };
40
+ }, [open]);
41
+ // Keydown handling (Escape + focus trap). Kept separate from the lifecycle
42
+ // effect above so a new `onClose` identity only re-subscribes this listener
43
+ // and never restarts the enter/exit animation or scroll lock.
44
+ useEffect(() => {
45
+ if (!open)
46
+ return;
47
+ const handleKeyDown = (e) => {
48
+ if (e.key === 'Escape') {
49
+ e.preventDefault();
50
+ e.stopImmediatePropagation();
51
+ onClose();
52
+ return;
53
+ }
54
+ if (e.key !== 'Tab')
55
+ return;
56
+ const container = modalRef.current;
57
+ if (!container)
58
+ return;
59
+ const focusable = Array.from(container.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])')).filter(isElementVisible);
60
+ if (focusable.length === 0) {
61
+ e.preventDefault();
62
+ return;
63
+ }
64
+ const first = focusable[0];
65
+ const last = focusable[focusable.length - 1];
66
+ const active = document.activeElement;
67
+ if (e.shiftKey) {
68
+ if (active === first || active === container) {
69
+ e.preventDefault();
70
+ last.focus();
71
+ }
72
+ }
73
+ else if (active === last) {
74
+ e.preventDefault();
75
+ first.focus();
76
+ }
77
+ };
78
+ document.addEventListener('keydown', handleKeyDown);
79
+ return () => document.removeEventListener('keydown', handleKeyDown);
80
+ }, [open, onClose]);
81
+ useEffect(() => {
82
+ if (!isOpen)
83
+ return;
84
+ let inner = 0;
85
+ const outer = requestAnimationFrame(() => {
86
+ inner = requestAnimationFrame(() => modalRef.current?.focus());
87
+ });
88
+ return () => {
89
+ cancelAnimationFrame(outer);
90
+ cancelAnimationFrame(inner);
91
+ };
92
+ }, [isOpen]);
93
+ if (!isVisible || !renderTarget)
94
+ return null;
95
+ const renderButtons = (buttons) => buttons?.map(({ label, onClick, variant = 'primary', disabled, withBadge }, idx) => (_jsx(Button, { onClick: onClick, variant: variant, size: "md", inline: true, disabled: disabled, withBadge: withBadge, children: label }, idx)));
96
+ return createPortal(_jsx("div", { className: classNames('efp-modal', `efp-modal--${variant}`, { 'efp-modal--open': isOpen }, className), role: "dialog", "aria-modal": "true", "aria-labelledby": title ? titleId : undefined, "aria-label": !title ? ariaLabel : undefined, ref: modalRef, tabIndex: -1, onClick: onClose, children: _jsxs("div", { className: "efp-modal__box", style: maxWidth ? { maxWidth: `${maxWidth}px` } : undefined, onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: "efp-modal__header", children: [title && (_jsx("div", { className: "efp-modal__title-container", children: _jsx("h2", { className: "efp-modal__title", id: titleId, children: title }) })), _jsx("button", { type: "button", className: "efp-modal__close", onClick: onClose, "aria-label": closeLabel, title: closeLabel, children: _jsx("i", { className: "icon-close", "aria-hidden": "true" }) })] }), _jsx("div", { className: "efp-modal__body", children: children }), (footerLeft.length > 0 || footerRight.length > 0) && (_jsxs("div", { className: "efp-modal__footer", children: [_jsx("div", { className: "efp-modal__footer-left", children: footerLeft.length > 0 && renderButtons(footerLeft) }), footerRight.length > 0 && (_jsx("div", { className: "efp-modal__footer-right", children: renderButtons(footerRight) }))] }))] }) }), renderTarget);
97
+ };
98
+ export default Modal;
@@ -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';
@@ -0,0 +1,37 @@
1
+ import './MultiSelectGroups.scss';
2
+ import React from 'react';
3
+ export interface MultiSelectGroupItem {
4
+ id: number | string;
5
+ name: string;
6
+ count?: number;
7
+ disabled?: boolean;
8
+ countProvider?: () => number;
9
+ }
10
+ export interface MultiSelectGroup {
11
+ groupName: string;
12
+ items: MultiSelectGroupItem[];
13
+ showGroupActions?: boolean;
14
+ customGroupClass?: string;
15
+ fullWidth?: boolean;
16
+ id?: string | number;
17
+ }
18
+ export type MultiSelectVariant = 'default' | 'categories';
19
+ export interface MultiSelectGroupsProps {
20
+ groups: MultiSelectGroup[];
21
+ selectedIds: (number | string)[];
22
+ showItemCounts?: boolean;
23
+ showGroupActions?: boolean;
24
+ variant?: MultiSelectVariant;
25
+ maxItemsVisible?: number;
26
+ selectAllLabel: string;
27
+ clearAllLabel: string;
28
+ selectedLabel: string;
29
+ showMoreLabel: string;
30
+ showLessLabel: string;
31
+ onChange: (selectedIds: (number | string)[]) => void;
32
+ itemCountProvider?: (item: MultiSelectGroupItem) => number;
33
+ customItemRenderer?: (item: MultiSelectGroupItem, isSelected: boolean) => React.ReactNode;
34
+ }
35
+ declare function MultiSelectGroups({ groups, selectedIds, showItemCounts, showGroupActions, variant, maxItemsVisible, selectAllLabel, clearAllLabel, selectedLabel, showMoreLabel, showLessLabel, itemCountProvider, customItemRenderer, onChange, }: MultiSelectGroupsProps): React.JSX.Element | null;
36
+ export default MultiSelectGroups;
37
+ //# sourceMappingURL=MultiSelectGroups.d.ts.map
@@ -0,0 +1,80 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import './MultiSelectGroups.scss';
3
+ import cn from 'classnames';
4
+ import React, { useCallback, useMemo, useState } from 'react';
5
+ import ShowMoreButton from '../ShowMoreButton';
6
+ const GroupItem = React.memo(({ item, isSelected, variant, showCount, count, onClick, customRenderer }) => {
7
+ if (customRenderer) {
8
+ return _jsx(_Fragment, { children: customRenderer(item, isSelected) });
9
+ }
10
+ return (_jsxs("button", { type: "button", className: cn('efp-multi-select-groups__item', {
11
+ 'efp-multi-select-groups__item--selected': isSelected,
12
+ 'efp-multi-select-groups__item--disabled': item.disabled,
13
+ [`efp-multi-select-groups__item--${variant}`]: variant,
14
+ }), onClick: () => !item.disabled && onClick(item.id), disabled: item.disabled, "aria-pressed": isSelected, children: [_jsx("div", { className: "efp-multi-select-groups__item-name", children: item.name }), showCount && count > 0 && (_jsx("span", { className: "efp-multi-select-groups__item-count", children: count }))] }));
15
+ });
16
+ function MultiSelectGroups({ groups = [], selectedIds = [], showItemCounts = true, showGroupActions = true, variant = 'default', maxItemsVisible = 20, selectAllLabel, clearAllLabel, selectedLabel, showMoreLabel, showLessLabel, itemCountProvider, customItemRenderer, onChange, }) {
17
+ const [expandedGroups, setExpandedGroups] = useState(() => new Set());
18
+ const handleItemToggle = useCallback((id) => {
19
+ const newSelected = selectedIds.includes(id)
20
+ ? selectedIds.filter((i) => i !== id)
21
+ : [...selectedIds, id];
22
+ onChange(newSelected);
23
+ }, [selectedIds, onChange]);
24
+ const selectAllInGroup = useCallback((group) => {
25
+ const groupItemIds = group.items
26
+ .filter((item) => item.id && !item.disabled)
27
+ .map((item) => item.id);
28
+ const uniqueNewIds = groupItemIds.filter((id) => !selectedIds.includes(id));
29
+ if (uniqueNewIds.length === 0)
30
+ return;
31
+ onChange([...selectedIds, ...uniqueNewIds]);
32
+ }, [selectedIds, onChange]);
33
+ const clearAllInGroup = useCallback((group) => {
34
+ const groupItemIds = new Set(group.items.map((item) => item.id));
35
+ const newSelected = selectedIds.filter((id) => !groupItemIds.has(id));
36
+ onChange(newSelected);
37
+ }, [selectedIds, onChange]);
38
+ const toggleGroupExpansion = useCallback((groupName) => {
39
+ setExpandedGroups((prev) => {
40
+ const newSet = new Set(prev);
41
+ if (newSet.has(groupName))
42
+ newSet.delete(groupName);
43
+ else
44
+ newSet.add(groupName);
45
+ return newSet;
46
+ });
47
+ }, []);
48
+ const getItemCount = (item) => {
49
+ if (item.count !== undefined)
50
+ return item.count;
51
+ if (item.countProvider)
52
+ return item.countProvider();
53
+ if (itemCountProvider)
54
+ return itemCountProvider(item);
55
+ return 0;
56
+ };
57
+ const selectedSet = useMemo(() => new Set(selectedIds), [selectedIds]);
58
+ if (!Array.isArray(groups) || !groups.length) {
59
+ return null;
60
+ }
61
+ return (_jsx("div", { className: "efp-multi-select-groups", children: _jsx("div", { className: "efp-multi-select-groups__list", children: groups.map((group) => {
62
+ if (!group?.groupName || !Array.isArray(group.items))
63
+ return null;
64
+ const validItems = group.items.filter((i) => i.id);
65
+ const selectedItemsInGroup = validItems.filter((item) => selectedSet.has(item.id));
66
+ const isFull = selectedItemsInGroup.length === validItems.length && validItems.length > 0;
67
+ const isPartial = selectedItemsInGroup.length > 0 && !isFull;
68
+ const isExpanded = expandedGroups.has(group.groupName);
69
+ const visibleItems = isExpanded || validItems.length <= maxItemsVisible
70
+ ? validItems
71
+ : validItems.slice(0, maxItemsVisible);
72
+ const hiddenCount = validItems.length - visibleItems.length;
73
+ const hiddenSelectedCount = hiddenCount > 0
74
+ ? validItems.slice(maxItemsVisible).filter((item) => selectedSet.has(item.id)).length
75
+ : 0;
76
+ return (_jsxs("div", { className: cn('efp-multi-select-groups__group', { 'efp-multi-select-groups__group--full-width': group.fullWidth }, group.customGroupClass), children: [_jsxs("div", { className: "efp-multi-select-groups__group-header", children: [_jsx("div", { className: "efp-multi-select-groups__group-title", children: group.groupName }), showGroupActions && group.showGroupActions !== false && (_jsxs("div", { className: "efp-multi-select-groups__group-actions", children: [!isFull && (_jsx("button", { type: "button", className: "efp-multi-select-groups__action-btn", onClick: () => selectAllInGroup(group), children: selectAllLabel })), (isPartial || isFull) && (_jsx("button", { type: "button", className: "efp-multi-select-groups__action-btn", onClick: () => clearAllInGroup(group), children: clearAllLabel }))] }))] }), _jsx("div", { className: "efp-multi-select-groups__group-items", children: visibleItems.map((item) => (_jsx(GroupItem, { item: item, isSelected: selectedSet.has(item.id), variant: variant, showCount: showItemCounts, count: getItemCount(item), onClick: handleItemToggle, customRenderer: customItemRenderer }, item.id))) }), validItems.length > maxItemsVisible && (_jsx(ShowMoreButton, { className: "efp-multi-select-groups__show-more", expanded: isExpanded, showMoreLabel: showMoreLabel, showLessLabel: showLessLabel, onClick: () => toggleGroupExpansion(group.groupName), suffix: !isExpanded &&
77
+ hiddenSelectedCount > 0 && (_jsxs("span", { className: "efp-multi-select-groups__show-more-badge", children: [hiddenSelectedCount, " ", selectedLabel] })) }))] }, group.groupName));
78
+ }) }) }));
79
+ }
80
+ export default MultiSelectGroups;
@@ -0,0 +1,3 @@
1
+ export type { MultiSelectGroup, MultiSelectGroupItem, MultiSelectGroupsProps, MultiSelectVariant, } from './MultiSelectGroups';
2
+ export { default } from './MultiSelectGroups';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export { default } from './MultiSelectGroups';
@@ -0,0 +1,29 @@
1
+ import './Overlay.scss';
2
+ import { type ReactNode } from 'react';
3
+ export type Size = 'small' | 'medium' | 'full';
4
+ export interface OverlayProps {
5
+ children?: ReactNode;
6
+ open: boolean;
7
+ size?: Size;
8
+ /** Slot rendered above the content (e.g. a particles canvas); nothing when omitted. */
9
+ particles?: ReactNode;
10
+ className?: string;
11
+ smallSizeMultiplier?: number;
12
+ mediumSizeMultiplier?: number;
13
+ fullSizeOffset?: number;
14
+ scrollThreshold?: number;
15
+ disableDrag?: boolean;
16
+ forceFull?: boolean;
17
+ scrollResetKey?: unknown;
18
+ /** Viewport width (px) at or below which the overlay switches to its mobile bottom-sheet mode. */
19
+ mobileBreakpoint?: number;
20
+ /** Shown when `children` is empty. */
21
+ noContentLabel: string;
22
+ onChangeSize?: (size: Size) => void;
23
+ onScrollStateChange?: (isScrolled: boolean) => void;
24
+ /** Fired (debounced) on scroll — lets the host react to user activity. */
25
+ onScrollActivity?: () => void;
26
+ }
27
+ declare const Overlay: ({ children, open, size, particles, className, onChangeSize, onScrollStateChange, onScrollActivity, smallSizeMultiplier, mediumSizeMultiplier, fullSizeOffset, scrollThreshold, disableDrag, forceFull, scrollResetKey, mobileBreakpoint, noContentLabel, }: OverlayProps) => import("react").JSX.Element | null;
28
+ export default Overlay;
29
+ //# sourceMappingURL=Overlay.d.ts.map