@expofp/ui 0.0.0-experimental.cf063fc

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 (192) hide show
  1. package/README.md +30 -0
  2. package/dist/components/Alert/Alert.d.ts +20 -0
  3. package/dist/components/Alert/Alert.js +23 -0
  4. package/dist/components/Alert/index.d.ts +3 -0
  5. package/dist/components/Alert/index.js +1 -0
  6. package/dist/components/Autocomplete/Autocomplete.d.ts +28 -0
  7. package/dist/components/Autocomplete/Autocomplete.js +292 -0
  8. package/dist/components/Autocomplete/index.d.ts +3 -0
  9. package/dist/components/Autocomplete/index.js +1 -0
  10. package/dist/components/Badge/Badge.d.ts +14 -0
  11. package/dist/components/Badge/Badge.js +15 -0
  12. package/dist/components/Badge/index.d.ts +3 -0
  13. package/dist/components/Badge/index.js +1 -0
  14. package/dist/components/Button/Button.d.ts +30 -0
  15. package/dist/components/Button/Button.js +41 -0
  16. package/dist/components/Button/index.d.ts +3 -0
  17. package/dist/components/Button/index.js +1 -0
  18. package/dist/components/Checkbox/Checkbox.d.ts +19 -0
  19. package/dist/components/Checkbox/Checkbox.js +19 -0
  20. package/dist/components/Checkbox/index.d.ts +3 -0
  21. package/dist/components/Checkbox/index.js +1 -0
  22. package/dist/components/CheckboxButton/CheckboxButton.d.ts +12 -0
  23. package/dist/components/CheckboxButton/CheckboxButton.js +19 -0
  24. package/dist/components/CheckboxButton/index.d.ts +3 -0
  25. package/dist/components/CheckboxButton/index.js +1 -0
  26. package/dist/components/DownloadList/DownloadList.d.ts +15 -0
  27. package/dist/components/DownloadList/DownloadList.js +9 -0
  28. package/dist/components/DownloadList/index.d.ts +3 -0
  29. package/dist/components/DownloadList/index.js +2 -0
  30. package/dist/components/Draggable/Draggable.d.ts +9 -0
  31. package/dist/components/Draggable/Draggable.js +92 -0
  32. package/dist/components/Draggable/index.d.ts +3 -0
  33. package/dist/components/Draggable/index.js +2 -0
  34. package/dist/components/EntityItem/EntityItem.d.ts +46 -0
  35. package/dist/components/EntityItem/EntityItem.js +29 -0
  36. package/dist/components/EntityItem/index.d.ts +3 -0
  37. package/dist/components/EntityItem/index.js +1 -0
  38. package/dist/components/EventBadge/EventBadge.d.ts +13 -0
  39. package/dist/components/EventBadge/EventBadge.js +10 -0
  40. package/dist/components/EventBadge/index.d.ts +3 -0
  41. package/dist/components/EventBadge/index.js +1 -0
  42. package/dist/components/Gallery/Gallery.d.ts +24 -0
  43. package/dist/components/Gallery/Gallery.js +28 -0
  44. package/dist/components/Gallery/GalleryBadges/GalleryBadges.d.ts +8 -0
  45. package/dist/components/Gallery/GalleryBadges/GalleryBadges.js +5 -0
  46. package/dist/components/Gallery/GalleryControls/GalleryControls.d.ts +11 -0
  47. package/dist/components/Gallery/GalleryControls/GalleryControls.js +5 -0
  48. package/dist/components/Gallery/GalleryImg/GalleryImg.d.ts +13 -0
  49. package/dist/components/Gallery/GalleryImg/GalleryImg.js +37 -0
  50. package/dist/components/Gallery/GalleryItem/GalleryItem.d.ts +14 -0
  51. package/dist/components/Gallery/GalleryItem/GalleryItem.js +6 -0
  52. package/dist/components/Gallery/GalleryModal/GalleryModal.d.ts +20 -0
  53. package/dist/components/Gallery/GalleryModal/GalleryModal.js +90 -0
  54. package/dist/components/Gallery/GalleryPreLoader.d.ts +7 -0
  55. package/dist/components/Gallery/GalleryPreLoader.js +29 -0
  56. package/dist/components/Gallery/TransformImg/TransformImg.d.ts +10 -0
  57. package/dist/components/Gallery/TransformImg/TransformImg.js +15 -0
  58. package/dist/components/Gallery/index.d.ts +4 -0
  59. package/dist/components/Gallery/index.js +1 -0
  60. package/dist/components/Gallery/types.d.ts +6 -0
  61. package/dist/components/Gallery/types.js +1 -0
  62. package/dist/components/HeatmapLegend/HeatmapLegend.d.ts +15 -0
  63. package/dist/components/HeatmapLegend/HeatmapLegend.js +11 -0
  64. package/dist/components/HeatmapLegend/index.d.ts +3 -0
  65. package/dist/components/HeatmapLegend/index.js +2 -0
  66. package/dist/components/HighlightText/HighlightText.d.ts +7 -0
  67. package/dist/components/HighlightText/HighlightText.js +14 -0
  68. package/dist/components/HighlightText/index.d.ts +2 -0
  69. package/dist/components/HighlightText/index.js +1 -0
  70. package/dist/components/LevelBadge/LevelBadge.d.ts +9 -0
  71. package/dist/components/LevelBadge/LevelBadge.js +10 -0
  72. package/dist/components/LevelBadge/index.d.ts +3 -0
  73. package/dist/components/LevelBadge/index.js +2 -0
  74. package/dist/components/LevelSelector/LevelSelector.d.ts +18 -0
  75. package/dist/components/LevelSelector/LevelSelector.js +91 -0
  76. package/dist/components/LevelSelector/index.d.ts +3 -0
  77. package/dist/components/LevelSelector/index.js +2 -0
  78. package/dist/components/MapControls/MapControls.d.ts +33 -0
  79. package/dist/components/MapControls/MapControls.js +38 -0
  80. package/dist/components/MapControls/index.d.ts +3 -0
  81. package/dist/components/MapControls/index.js +2 -0
  82. package/dist/components/MobileToggleButton/MobileToggleButton.d.ts +11 -0
  83. package/dist/components/MobileToggleButton/MobileToggleButton.js +8 -0
  84. package/dist/components/MobileToggleButton/index.d.ts +3 -0
  85. package/dist/components/MobileToggleButton/index.js +1 -0
  86. package/dist/components/Modal/Modal.d.ts +34 -0
  87. package/dist/components/Modal/Modal.js +103 -0
  88. package/dist/components/Modal/index.d.ts +3 -0
  89. package/dist/components/Modal/index.js +1 -0
  90. package/dist/components/MultiSelectGroups/MultiSelectGroups.d.ts +37 -0
  91. package/dist/components/MultiSelectGroups/MultiSelectGroups.js +80 -0
  92. package/dist/components/MultiSelectGroups/index.d.ts +3 -0
  93. package/dist/components/MultiSelectGroups/index.js +1 -0
  94. package/dist/components/Overlay/Overlay.d.ts +30 -0
  95. package/dist/components/Overlay/Overlay.js +250 -0
  96. package/dist/components/Overlay/OverlayHeaderContext.d.ts +7 -0
  97. package/dist/components/Overlay/OverlayHeaderContext.js +7 -0
  98. package/dist/components/Overlay/OverlayKeyboardInsetContext.d.ts +7 -0
  99. package/dist/components/Overlay/OverlayKeyboardInsetContext.js +7 -0
  100. package/dist/components/Overlay/OverlayScrollContext.d.ts +7 -0
  101. package/dist/components/Overlay/OverlayScrollContext.js +7 -0
  102. package/dist/components/Overlay/index.d.ts +5 -0
  103. package/dist/components/Overlay/index.js +3 -0
  104. package/dist/components/OverlayGrip/OverlayGrip.d.ts +11 -0
  105. package/dist/components/OverlayGrip/OverlayGrip.js +8 -0
  106. package/dist/components/OverlayGrip/index.d.ts +3 -0
  107. package/dist/components/OverlayGrip/index.js +2 -0
  108. package/dist/components/PermissionNotice/PermissionNotice.d.ts +16 -0
  109. package/dist/components/PermissionNotice/PermissionNotice.js +11 -0
  110. package/dist/components/PermissionNotice/index.d.ts +3 -0
  111. package/dist/components/PermissionNotice/index.js +2 -0
  112. package/dist/components/PlanSelector/PlanSelector.d.ts +13 -0
  113. package/dist/components/PlanSelector/PlanSelector.js +10 -0
  114. package/dist/components/PlanSelector/index.d.ts +3 -0
  115. package/dist/components/PlanSelector/index.js +2 -0
  116. package/dist/components/Radio/Radio.d.ts +15 -0
  117. package/dist/components/Radio/Radio.js +13 -0
  118. package/dist/components/Radio/index.d.ts +3 -0
  119. package/dist/components/Radio/index.js +1 -0
  120. package/dist/components/RebookingNotes/RebookingNotes.d.ts +11 -0
  121. package/dist/components/RebookingNotes/RebookingNotes.js +18 -0
  122. package/dist/components/RebookingNotes/index.d.ts +3 -0
  123. package/dist/components/RebookingNotes/index.js +1 -0
  124. package/dist/components/RebookingRadioGroup/RebookingRadioGroup.d.ts +17 -0
  125. package/dist/components/RebookingRadioGroup/RebookingRadioGroup.js +13 -0
  126. package/dist/components/RebookingRadioGroup/index.d.ts +3 -0
  127. package/dist/components/RebookingRadioGroup/index.js +1 -0
  128. package/dist/components/ScrollableRow/ScrollableRow.d.ts +21 -0
  129. package/dist/components/ScrollableRow/ScrollableRow.js +155 -0
  130. package/dist/components/ScrollableRow/index.d.ts +3 -0
  131. package/dist/components/ScrollableRow/index.js +2 -0
  132. package/dist/components/Share/Share.d.ts +22 -0
  133. package/dist/components/Share/Share.js +24 -0
  134. package/dist/components/Share/index.d.ts +3 -0
  135. package/dist/components/Share/index.js +1 -0
  136. package/dist/components/ShowMoreButton/ShowMoreButton.d.ts +11 -0
  137. package/dist/components/ShowMoreButton/ShowMoreButton.js +7 -0
  138. package/dist/components/ShowMoreButton/index.d.ts +3 -0
  139. package/dist/components/ShowMoreButton/index.js +1 -0
  140. package/dist/components/SidebarActions/SidebarActions.d.ts +26 -0
  141. package/dist/components/SidebarActions/SidebarActions.js +32 -0
  142. package/dist/components/SidebarActions/index.d.ts +3 -0
  143. package/dist/components/SidebarActions/index.js +2 -0
  144. package/dist/components/SimpleRow/SimpleRow.d.ts +15 -0
  145. package/dist/components/SimpleRow/SimpleRow.js +11 -0
  146. package/dist/components/SimpleRow/index.d.ts +3 -0
  147. package/dist/components/SimpleRow/index.js +2 -0
  148. package/dist/components/Spinner/Spinner.d.ts +9 -0
  149. package/dist/components/Spinner/Spinner.js +8 -0
  150. package/dist/components/Spinner/index.d.ts +3 -0
  151. package/dist/components/Spinner/index.js +1 -0
  152. package/dist/components/ToggleButton/ToggleButton.d.ts +17 -0
  153. package/dist/components/ToggleButton/ToggleButton.js +8 -0
  154. package/dist/components/ToggleButton/index.d.ts +3 -0
  155. package/dist/components/ToggleButton/index.js +1 -0
  156. package/dist/components/ToggleSwitch/ToggleSwitch.d.ts +12 -0
  157. package/dist/components/ToggleSwitch/ToggleSwitch.js +10 -0
  158. package/dist/components/ToggleSwitch/index.d.ts +3 -0
  159. package/dist/components/ToggleSwitch/index.js +1 -0
  160. package/dist/components/TouchHand/TouchHand.d.ts +5 -0
  161. package/dist/components/TouchHand/TouchHand.js +7 -0
  162. package/dist/components/TouchHand/index.d.ts +2 -0
  163. package/dist/components/TouchHand/index.js +1 -0
  164. package/dist/components/VenuePicker/VenuePicker.d.ts +23 -0
  165. package/dist/components/VenuePicker/VenuePicker.js +70 -0
  166. package/dist/components/VenuePicker/index.d.ts +3 -0
  167. package/dist/components/VenuePicker/index.js +2 -0
  168. package/dist/components/WayfindingFloorSelector/WayfindingFloorSelector.d.ts +24 -0
  169. package/dist/components/WayfindingFloorSelector/WayfindingFloorSelector.js +27 -0
  170. package/dist/components/WayfindingFloorSelector/index.d.ts +3 -0
  171. package/dist/components/WayfindingFloorSelector/index.js +1 -0
  172. package/dist/index.d.ts +74 -0
  173. package/dist/index.js +77 -0
  174. package/dist/shared/activeElement.d.ts +7 -0
  175. package/dist/shared/activeElement.js +14 -0
  176. package/dist/shared/debounce.d.ts +2 -0
  177. package/dist/shared/debounce.js +9 -0
  178. package/dist/shared/hooks/useKeyboardInset.d.ts +9 -0
  179. package/dist/shared/hooks/useKeyboardInset.js +84 -0
  180. package/dist/shared/hooks/useOnClickOutside.d.ts +14 -0
  181. package/dist/shared/hooks/useOnClickOutside.js +43 -0
  182. package/dist/shared/hooks/useOnEscape.d.ts +14 -0
  183. package/dist/shared/hooks/useOnEscape.js +31 -0
  184. package/dist/shared/hooks/useSheetDrag.d.ts +28 -0
  185. package/dist/shared/hooks/useSheetDrag.js +274 -0
  186. package/dist/shared/hooks/useWindowSize.d.ts +5 -0
  187. package/dist/shared/hooks/useWindowSize.js +38 -0
  188. package/dist/shared/interactive.d.ts +2 -0
  189. package/dist/shared/interactive.js +4 -0
  190. package/dist/shared/selector-option.d.ts +7 -0
  191. package/dist/shared/selector-option.js +1 -0
  192. package/package.json +73 -0
@@ -0,0 +1,155 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* eslint-disable @typescript-eslint/consistent-type-imports, @eslint-react/set-state-in-effect */
3
+ import './ScrollableRow.scss';
4
+ import cn from 'classnames';
5
+ import { useCallback, useEffect, useRef, useState } from 'react';
6
+ import { ResizeObserver } from 'resize-observer';
7
+ import { isInteractiveTarget } from '../../shared/interactive';
8
+ const SCROLL_THRESHOLD = 5;
9
+ const DEFAULT_MOBILE_BREAKPOINT = 768;
10
+ const ScrollableRow = ({ children, ariaLabel, leftAriaLabel, rightAriaLabel, className, scrollAmount = 150, mobileBreakpoint = DEFAULT_MOBILE_BREAKPOINT, showArrowsOnMobile = false, arrowPosition = 'inside', scrollBehavior = 'smooth', isRtl = false, enableDragScroll = true, dragScrollSensitivity = 1, onScroll, }) => {
11
+ const containerRef = useRef(null);
12
+ const scrollRef = useRef(null);
13
+ const resizeObserverRef = useRef(null);
14
+ const [showLeftArrow, setShowLeftArrow] = useState(false);
15
+ const [showRightArrow, setShowRightArrow] = useState(false);
16
+ const [isDragging, setIsDragging] = useState(false);
17
+ const [startX, setStartX] = useState(0);
18
+ const [dragStartScrollLeft, setDragStartScrollLeft] = useState(0);
19
+ const isDesktop = useCallback(() => {
20
+ return (window.innerWidth > mobileBreakpoint &&
21
+ !('ontouchstart' in window || navigator.maxTouchPoints > 0));
22
+ }, [mobileBreakpoint]);
23
+ const normalizeRTLScroll = useCallback((scrollLeft, scrollWidth, clientWidth) => {
24
+ const maxScroll = scrollWidth - clientWidth;
25
+ if (scrollLeft < 0) {
26
+ return Math.abs(scrollLeft);
27
+ }
28
+ else if (scrollLeft > maxScroll / 2) {
29
+ return maxScroll - scrollLeft;
30
+ }
31
+ return scrollLeft;
32
+ }, []);
33
+ const checkArrows = useCallback(() => {
34
+ const scrollEl = scrollRef.current;
35
+ if (!scrollEl)
36
+ return;
37
+ const isMobile = window.innerWidth <= mobileBreakpoint;
38
+ if (isMobile && !showArrowsOnMobile) {
39
+ setShowLeftArrow(false);
40
+ setShowRightArrow(false);
41
+ return;
42
+ }
43
+ const { scrollLeft, scrollWidth, clientWidth } = scrollEl;
44
+ const hasOverflow = scrollWidth > clientWidth;
45
+ if (!hasOverflow) {
46
+ setShowLeftArrow(false);
47
+ setShowRightArrow(false);
48
+ return;
49
+ }
50
+ if (isRtl) {
51
+ const maxScroll = scrollWidth - clientWidth;
52
+ const normalizedScroll = normalizeRTLScroll(scrollLeft, scrollWidth, clientWidth);
53
+ setShowLeftArrow(normalizedScroll > SCROLL_THRESHOLD);
54
+ setShowRightArrow(normalizedScroll < maxScroll - SCROLL_THRESHOLD);
55
+ }
56
+ else {
57
+ setShowLeftArrow(scrollLeft > SCROLL_THRESHOLD);
58
+ setShowRightArrow(scrollLeft < scrollWidth - clientWidth - SCROLL_THRESHOLD);
59
+ }
60
+ }, [mobileBreakpoint, showArrowsOnMobile, normalizeRTLScroll, isRtl]);
61
+ const handleScroll = useCallback(() => {
62
+ checkArrows();
63
+ if (onScroll && scrollRef.current) {
64
+ onScroll(scrollRef.current.scrollLeft);
65
+ }
66
+ }, [checkArrows, onScroll]);
67
+ const scroll = useCallback((direction) => {
68
+ const scrollEl = scrollRef.current;
69
+ if (!scrollEl)
70
+ return;
71
+ const currentScroll = scrollEl.scrollLeft;
72
+ let newScroll;
73
+ if (isRtl) {
74
+ const maxScrollLeft = -(scrollEl.scrollWidth - scrollEl.clientWidth);
75
+ newScroll =
76
+ direction === 'left'
77
+ ? Math.min(0, currentScroll + scrollAmount)
78
+ : Math.max(maxScrollLeft, currentScroll - scrollAmount);
79
+ }
80
+ else {
81
+ newScroll =
82
+ direction === 'left'
83
+ ? Math.max(0, currentScroll - scrollAmount)
84
+ : currentScroll + scrollAmount;
85
+ }
86
+ scrollEl.scrollTo({
87
+ left: newScroll,
88
+ behavior: scrollBehavior,
89
+ });
90
+ }, [scrollAmount, scrollBehavior, isRtl]);
91
+ const handleMouseDown = useCallback((e) => {
92
+ if (!enableDragScroll || !isDesktop() || !scrollRef.current)
93
+ return;
94
+ if (isInteractiveTarget(e.target))
95
+ return;
96
+ setIsDragging(true);
97
+ setStartX(e.pageX - scrollRef.current.offsetLeft);
98
+ setDragStartScrollLeft(scrollRef.current.scrollLeft);
99
+ e.preventDefault();
100
+ }, [enableDragScroll, isDesktop]);
101
+ const handleMouseMove = useCallback((e) => {
102
+ if (!isDragging || !scrollRef.current)
103
+ return;
104
+ e.preventDefault();
105
+ const x = e.pageX - scrollRef.current.offsetLeft;
106
+ const walk = (x - startX) * dragScrollSensitivity;
107
+ scrollRef.current.scrollLeft = dragStartScrollLeft - walk;
108
+ }, [isDragging, startX, dragStartScrollLeft, dragScrollSensitivity]);
109
+ const endDrag = useCallback(() => {
110
+ setIsDragging(false);
111
+ }, []);
112
+ useEffect(() => {
113
+ if (!isDragging)
114
+ return;
115
+ document.addEventListener('mousemove', handleMouseMove);
116
+ document.addEventListener('mouseup', endDrag);
117
+ document.addEventListener('mouseleave', endDrag);
118
+ return () => {
119
+ document.removeEventListener('mousemove', handleMouseMove);
120
+ document.removeEventListener('mouseup', endDrag);
121
+ document.removeEventListener('mouseleave', endDrag);
122
+ };
123
+ }, [isDragging, handleMouseMove, endDrag]);
124
+ useEffect(() => {
125
+ checkArrows();
126
+ const handleResize = () => checkArrows();
127
+ window.addEventListener('resize', handleResize);
128
+ if (containerRef.current && !resizeObserverRef.current) {
129
+ resizeObserverRef.current = new ResizeObserver(checkArrows);
130
+ resizeObserverRef.current.observe(containerRef.current);
131
+ }
132
+ return () => {
133
+ window.removeEventListener('resize', handleResize);
134
+ if (resizeObserverRef.current) {
135
+ resizeObserverRef.current.disconnect();
136
+ resizeObserverRef.current = null;
137
+ }
138
+ };
139
+ }, [checkArrows]);
140
+ const showDragCursor = enableDragScroll && isDesktop();
141
+ const cursorStyle = showDragCursor ? (isDragging ? 'grabbing' : 'grab') : undefined;
142
+ return (_jsx("div", { ref: containerRef, className: cn('efp-scrollable-row', className), role: "group", "aria-label": ariaLabel, children: _jsxs("div", { className: cn('efp-scrollable-row__container', {
143
+ [`efp-scrollable-row__container--${arrowPosition}`]: arrowPosition,
144
+ }), children: [showLeftArrow && (_jsx("button", { type: "button", className: cn('efp-scrollable-row__arrow', 'efp-scrollable-row__arrow--left', {
145
+ 'efp-scrollable-row__arrow--rtl': isRtl,
146
+ }), onClick: () => scroll('left'), "aria-label": leftAriaLabel, children: _jsx("i", { className: "icon-chevron-left" }) })), _jsx("div", { ref: scrollRef, className: cn('efp-scrollable-row__scroll-wrapper', {
147
+ 'efp-scrollable-row__scroll-wrapper--dragging': isDragging,
148
+ }), onScroll: handleScroll, onMouseDown: handleMouseDown, style: {
149
+ cursor: cursorStyle,
150
+ userSelect: isDragging ? 'none' : undefined,
151
+ }, children: _jsx("div", { className: "efp-scrollable-row__content", children: children }) }), showRightArrow && (_jsx("button", { type: "button", className: cn('efp-scrollable-row__arrow', 'efp-scrollable-row__arrow--right', {
152
+ 'efp-scrollable-row__arrow--rtl': isRtl,
153
+ }), onClick: () => scroll('right'), "aria-label": rightAriaLabel, children: _jsx("i", { className: "icon-chevron-right" }) }))] }) }));
154
+ };
155
+ export default ScrollableRow;
@@ -0,0 +1,3 @@
1
+ export { default } from './ScrollableRow';
2
+ export type { ScrollableRowProps } from './ScrollableRow';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,2 @@
1
+ /* eslint-disable simple-import-sort/exports */
2
+ export { default } from './ScrollableRow';
@@ -0,0 +1,22 @@
1
+ import './Share.scss';
2
+ export type SocialNetwork = 'facebook' | 'xcom' | 'linkedin';
3
+ export interface SocialLink {
4
+ network: SocialNetwork;
5
+ name: string;
6
+ url: string;
7
+ ariaLabel: string;
8
+ }
9
+ export interface ShareProps {
10
+ title: string;
11
+ url: string;
12
+ shareHeading: string;
13
+ socials: SocialLink[];
14
+ copyLinkSectionLabel: string;
15
+ directLinkAriaLabel: string;
16
+ copyButtonAriaLabel: string;
17
+ copyLabel: string;
18
+ copiedLabel: string;
19
+ }
20
+ declare const Share: ({ title, url, shareHeading, socials, copyLinkSectionLabel, directLinkAriaLabel, copyButtonAriaLabel, copyLabel, copiedLabel, }: ShareProps) => import("react").JSX.Element;
21
+ export default Share;
22
+ //# sourceMappingURL=Share.d.ts.map
@@ -0,0 +1,24 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import './Share.scss';
3
+ import classNames from 'classnames';
4
+ import copy from 'copy-to-clipboard';
5
+ import { useEffect, useRef, useState } from 'react';
6
+ const socialIconClass = {
7
+ facebook: 'icon-facebook',
8
+ xcom: 'icon-twitter-x',
9
+ linkedin: 'icon-linkedin',
10
+ };
11
+ const Share = ({ title, url, shareHeading, socials, copyLinkSectionLabel, directLinkAriaLabel, copyButtonAriaLabel, copyLabel, copiedLabel, }) => {
12
+ const [isCopied, setIsCopied] = useState(false);
13
+ const timerRef = useRef(undefined);
14
+ useEffect(() => () => clearTimeout(timerRef.current), []);
15
+ const copyToClipboard = () => {
16
+ if (!copy(url))
17
+ return;
18
+ setIsCopied(true);
19
+ clearTimeout(timerRef.current);
20
+ timerRef.current = setTimeout(() => setIsCopied(false), 2000);
21
+ };
22
+ return (_jsxs("div", { className: "share", children: [_jsxs("h3", { children: [shareHeading, " ", title] }), _jsx("div", { className: "share__socials", children: socials.map((social) => (_jsxs("a", { href: social.url, rel: "noopener noreferrer", target: "_blank", className: classNames('share-social', social.network), "aria-label": social.ariaLabel, children: [_jsx("div", { className: "share-social__icon", children: _jsx("i", { className: socialIconClass[social.network], "aria-hidden": "true" }) }), _jsx("div", { className: "share-social__title", children: social.name })] }, social.network))) }), _jsxs("div", { className: "share__copy", children: [_jsx("span", { children: copyLinkSectionLabel }), _jsxs("div", { className: "share__copy-input", children: [_jsx("input", { type: "text", defaultValue: url, readOnly: true, "aria-label": directLinkAriaLabel }), _jsx("button", { type: "button", className: classNames({ isCopied }), onClick: copyToClipboard, "aria-label": copyButtonAriaLabel, children: isCopied ? _jsx("span", { "aria-live": "polite", children: copiedLabel }) : copyLabel })] })] })] }));
23
+ };
24
+ export default Share;
@@ -0,0 +1,3 @@
1
+ export type { ShareProps, SocialLink, SocialNetwork } from './Share';
2
+ export { default } from './Share';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export { default } from './Share';
@@ -0,0 +1,11 @@
1
+ import './ShowMoreButton.scss';
2
+ import React from 'react';
3
+ export interface ShowMoreButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'aria-expanded' | 'type'> {
4
+ expanded: boolean;
5
+ showMoreLabel: string;
6
+ showLessLabel: string;
7
+ suffix?: React.ReactNode;
8
+ }
9
+ declare function ShowMoreButton({ expanded, showMoreLabel, showLessLabel, className, suffix, ...props }: ShowMoreButtonProps): React.JSX.Element;
10
+ export default ShowMoreButton;
11
+ //# sourceMappingURL=ShowMoreButton.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import './ShowMoreButton.scss';
3
+ import classNames from 'classnames';
4
+ function ShowMoreButton({ expanded, showMoreLabel, showLessLabel, className, suffix, ...props }) {
5
+ return (_jsxs("button", { ...props, type: "button", className: classNames('efp-show-more-button', { 'efp-show-more-button--expanded': expanded }, className), "aria-expanded": expanded, children: [_jsx("i", { className: "icon-chevron-down", "aria-hidden": "true" }), _jsx("span", { className: "efp-show-more-button__label", children: expanded ? showLessLabel : showMoreLabel }), suffix] }));
6
+ }
7
+ export default ShowMoreButton;
@@ -0,0 +1,3 @@
1
+ export type { ShowMoreButtonProps } from './ShowMoreButton';
2
+ export { default } from './ShowMoreButton';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export { default } from './ShowMoreButton';
@@ -0,0 +1,26 @@
1
+ import './SidebarActions.scss';
2
+ export interface SidebarActionsProps {
3
+ className?: string;
4
+ inBookmark?: boolean;
5
+ visited?: boolean;
6
+ showVisited?: boolean;
7
+ showBookmark?: boolean;
8
+ showDirections?: boolean;
9
+ showRoutePlanner?: boolean;
10
+ showShare?: boolean;
11
+ directionsLabel: string;
12
+ visitedLabel: string;
13
+ notVisitedLabel: string;
14
+ saveBookmarkLabel: string;
15
+ removeBookmarkLabel: string;
16
+ routePlannerLabel: string;
17
+ shareLabel: string;
18
+ onClickBookmark?: () => void;
19
+ onClickVisited?: () => void;
20
+ onClickDirections?: () => void;
21
+ onClickRoutePlanner?: () => void;
22
+ onClickShare?: () => void;
23
+ }
24
+ declare const SidebarActions: ({ className, inBookmark, visited, showVisited, showBookmark, showDirections, showRoutePlanner, showShare, directionsLabel, visitedLabel, notVisitedLabel, saveBookmarkLabel, removeBookmarkLabel, routePlannerLabel, shareLabel, onClickBookmark, onClickVisited, onClickDirections, onClickRoutePlanner, onClickShare, }: SidebarActionsProps) => import("react").JSX.Element;
25
+ export default SidebarActions;
26
+ //# sourceMappingURL=SidebarActions.d.ts.map
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import './SidebarActions.scss';
3
+ import classNames from 'classnames';
4
+ import { useEffect, useRef, useState } from 'react';
5
+ import CheckboxButton from '../CheckboxButton';
6
+ const SidebarActions = ({ className, inBookmark = false, visited = false, showVisited = false, showBookmark = true, showDirections = true, showRoutePlanner = false, showShare = true, directionsLabel, visitedLabel, notVisitedLabel, saveBookmarkLabel, removeBookmarkLabel, routePlannerLabel, shareLabel, onClickBookmark, onClickVisited, onClickDirections, onClickRoutePlanner, onClickShare, }) => {
7
+ const [animateIcon, setAnimateIcon] = useState(false);
8
+ const animateTimeoutRef = useRef(undefined);
9
+ useEffect(() => {
10
+ return () => {
11
+ if (animateTimeoutRef.current !== undefined) {
12
+ clearTimeout(animateTimeoutRef.current);
13
+ }
14
+ };
15
+ }, []);
16
+ const handleBookmarkClick = () => {
17
+ clearTimeout(animateTimeoutRef.current);
18
+ setAnimateIcon(true);
19
+ onClickBookmark?.();
20
+ animateTimeoutRef.current = setTimeout(() => {
21
+ setAnimateIcon(false);
22
+ }, 320);
23
+ };
24
+ return (_jsxs("div", { className: classNames('efp-sidebar-actions', className), children: [showDirections && (_jsxs("button", { type: "button", className: "efp-action-button efp-action-button--directions", onClick: onClickDirections, title: directionsLabel, "aria-label": directionsLabel, children: [_jsx("i", { className: "icon-directions", "aria-hidden": "true" }), directionsLabel] })), showVisited && (_jsx(CheckboxButton, { className: "efp-visited-btn", ariaLabel: visited ? visitedLabel : notVisitedLabel, checked: visited, label: visitedLabel, onClick: onClickVisited ??
25
+ (() => {
26
+ /* no-op */
27
+ }) })), showBookmark && (_jsx("button", { type: "button", className: classNames('efp-action-button', 'efp-action-button--bookmark', {
28
+ 'efp-action-button--active': inBookmark,
29
+ 'efp-action-button--animate': animateIcon,
30
+ }), title: inBookmark ? removeBookmarkLabel : saveBookmarkLabel, "aria-label": inBookmark ? removeBookmarkLabel : saveBookmarkLabel, "aria-pressed": inBookmark, onClick: handleBookmarkClick, children: _jsx("i", { className: inBookmark ? 'icon-bookmark-solid' : 'icon-bookmark', "aria-hidden": "true" }) })), showRoutePlanner && (_jsxs("button", { type: "button", className: "efp-action-button efp-action-button--route-planner", title: routePlannerLabel, "aria-label": routePlannerLabel, onClick: onClickRoutePlanner, children: [_jsx("i", { className: "icon-route-solid", "aria-hidden": "true" }), routePlannerLabel] })), showShare && (_jsx("button", { type: "button", className: "efp-action-button efp-action-button--share", title: shareLabel, "aria-label": shareLabel, onClick: onClickShare, children: _jsx("i", { className: "icon-share", "aria-hidden": "true" }) }))] }));
31
+ };
32
+ export default SidebarActions;
@@ -0,0 +1,3 @@
1
+ export { default } from './SidebarActions';
2
+ export type { SidebarActionsProps } from './SidebarActions';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,2 @@
1
+ /* eslint-disable simple-import-sort/exports */
2
+ export { default } from './SidebarActions';
@@ -0,0 +1,15 @@
1
+ import './SimpleRow.scss';
2
+ import type { CSSProperties, ReactNode } from 'react';
3
+ export interface SimpleRowProps {
4
+ title: ReactNode;
5
+ subtitle: string;
6
+ trailing?: string;
7
+ slug: string;
8
+ active?: boolean;
9
+ className?: string;
10
+ style?: CSSProperties;
11
+ onClick: () => void;
12
+ }
13
+ declare const SimpleRow: ({ title, subtitle, trailing, slug, style, className, active, onClick, }: SimpleRowProps) => import("react").JSX.Element;
14
+ export default SimpleRow;
15
+ //# sourceMappingURL=SimpleRow.d.ts.map
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import './SimpleRow.scss';
3
+ import classNames from 'classnames';
4
+ const SimpleRow = ({ title, subtitle, trailing, slug, style, className, active = false, onClick, }) => {
5
+ const handleClick = (e) => {
6
+ e.preventDefault();
7
+ onClick();
8
+ };
9
+ return (_jsxs("a", { href: '?' + encodeURIComponent(slug), onClick: handleClick, className: classNames('efp-simple-row', { 'efp-simple-row--active': active }, className), style: style, children: [_jsxs("div", { className: "efp-simple-row__col", children: [_jsx("div", { className: "efp-simple-row__main", dir: "auto", children: title }), _jsx("div", { className: "efp-simple-row__sub", dir: "auto", children: subtitle })] }), trailing && _jsx("div", { className: "efp-simple-row__end", children: trailing })] }));
10
+ };
11
+ export default SimpleRow;
@@ -0,0 +1,3 @@
1
+ export { default } from './SimpleRow';
2
+ export type { SimpleRowProps } from './SimpleRow';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,2 @@
1
+ /* eslint-disable simple-import-sort/exports */
2
+ export { default } from './SimpleRow';
@@ -0,0 +1,9 @@
1
+ import './Spinner.scss';
2
+ import React from 'react';
3
+ export interface SpinnerProps {
4
+ active: boolean;
5
+ isCenter?: boolean;
6
+ }
7
+ declare const Spinner: ({ active, isCenter }: SpinnerProps) => React.JSX.Element;
8
+ export default Spinner;
9
+ //# sourceMappingURL=Spinner.d.ts.map
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // @ts-nocheck
3
+ import './Spinner.scss';
4
+ import cn from 'classnames';
5
+ const Spinner = ({ active, isCenter = false }) => {
6
+ return (_jsx("div", { className: cn('efp-spinner', { 'is-hidden': !active }), style: isCenter ? { top: 0, bottom: 0, left: 0, right: 0, margin: 'auto' } : undefined, children: _jsx("svg", { viewBox: "25 25 50 50", children: _jsx("circle", { r: "20", cy: "50", cx: "50" }) }) }));
7
+ };
8
+ export default Spinner;
@@ -0,0 +1,3 @@
1
+ export type { SpinnerProps } from './Spinner';
2
+ export { default } from './Spinner';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export { default } from './Spinner';
@@ -0,0 +1,17 @@
1
+ import './ToggleButton.scss';
2
+ import React from 'react';
3
+ interface ToggleButtonBase {
4
+ toggled: boolean;
5
+ className?: string;
6
+ onClick: () => void;
7
+ }
8
+ export type ToggleButtonProps = (ToggleButtonBase & {
9
+ label: string;
10
+ ariaLabel?: string;
11
+ }) | (ToggleButtonBase & {
12
+ label?: undefined;
13
+ ariaLabel: string;
14
+ });
15
+ declare const ToggleButton: ({ toggled, label, ariaLabel, className, onClick }: ToggleButtonProps) => React.JSX.Element;
16
+ export default ToggleButton;
17
+ //# sourceMappingURL=ToggleButton.d.ts.map
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // @ts-nocheck
3
+ import './ToggleButton.scss';
4
+ import cn from 'classnames';
5
+ const ToggleButton = ({ toggled, label, ariaLabel, className, onClick }) => {
6
+ return (_jsxs("button", { type: "button", className: cn('efp-toggle-button', className, { 'efp-toggle-button--toggled': toggled }), "aria-pressed": toggled, "aria-label": ariaLabel, onClick: onClick, children: [_jsx("div", { className: "efp-toggle-button__switch", children: _jsx("div", { className: "efp-toggle-button__switch-slider" }) }), label && _jsx("span", { className: "efp-toggle-button__label", children: label })] }));
7
+ };
8
+ export default ToggleButton;
@@ -0,0 +1,3 @@
1
+ export type { ToggleButtonProps } from './ToggleButton';
2
+ export { default } from './ToggleButton';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export { default } from './ToggleButton';
@@ -0,0 +1,12 @@
1
+ import './ToggleSwitch.scss';
2
+ import React from 'react';
3
+ export interface ToggleSwitchProps {
4
+ name?: string;
5
+ value: boolean;
6
+ label: string;
7
+ className?: string;
8
+ onChange: (value: boolean) => void;
9
+ }
10
+ declare const ToggleSwitch: ({ name, value, label, className, onChange }: ToggleSwitchProps) => React.JSX.Element;
11
+ export default ToggleSwitch;
12
+ //# sourceMappingURL=ToggleSwitch.d.ts.map
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // @ts-nocheck
3
+ import './ToggleSwitch.scss';
4
+ import classNames from 'classnames';
5
+ import { useId } from 'react';
6
+ const ToggleSwitch = ({ name, value, label, className, onChange }) => {
7
+ const id = useId();
8
+ return (_jsxs("div", { className: classNames('efp-toggle-switch', className), children: [_jsx("input", { type: "checkbox", role: "switch", "aria-checked": value, id: id, name: name, checked: value, onChange: () => onChange(!value) }), _jsx("label", { htmlFor: id, children: _jsx("span", { children: label }) })] }));
9
+ };
10
+ export default ToggleSwitch;
@@ -0,0 +1,3 @@
1
+ export type { ToggleSwitchProps } from './ToggleSwitch';
2
+ export { default } from './ToggleSwitch';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export { default } from './ToggleSwitch';
@@ -0,0 +1,5 @@
1
+ import './TouchHand.scss';
2
+ import React from 'react';
3
+ declare const TouchHand: () => React.JSX.Element;
4
+ export default TouchHand;
5
+ //# sourceMappingURL=TouchHand.d.ts.map
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // @ts-nocheck
3
+ import './TouchHand.scss';
4
+ const TouchHand = () => {
5
+ return (_jsx("div", { className: "efp-touch-hand", "aria-hidden": "true", children: _jsx("svg", { width: "640", height: "640", viewBox: "0 0 640 640", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: "efp-touch-hand-icon", children: _jsxs("g", { className: "touchon", children: [_jsxs("g", { id: "touchon-body", children: [_jsx("circle", { className: "efp-hand-touch-1", cx: "299", cy: "201", r: "50" }), _jsx("circle", { className: "efp-hand-touch-2", cx: "299", cy: "201", r: "110" }), _jsx("circle", { className: "efp-hand-touch-3", cx: "299", cy: "201", r: "160" })] }), _jsxs("g", { id: "touchon-hand-body", children: [_jsx("path", { className: "efp-touchon-hand-fill", d: "M413.525 275.538C400.76 242.513 351.811 260.648 363.064 293.905L330.572 204.634C316.987 171.694 269.344 189.034 280.111 223L311.098 308.137L353.234 423.907C363.94 453.319 361.648 447.023 310.673 433.864C269.832 423.402 247.978 454.874 254.082 468.721C260.187 482.569 368.361 525.989 368.361 525.989C501.073 600.279 573.714 496.368 572.578 437.401C571.407 378.339 533.075 288.002 533.075 288.002C527.073 274.436 512.056 267.025 498.149 272.087C484.241 277.149 477.189 293.444 481.977 306.6L473.153 282.356C460.405 249.962 411.865 266.884 422.521 300.252L413.525 275.538Z" }), _jsx("path", { className: "efp-touchon-hand-stroke", d: "M363.064 293.905C351.811 260.648 400.76 242.513 413.525 275.538L422.521 300.252M363.064 293.905L330.572 204.634C316.987 171.694 269.344 189.034 280.111 223L311.098 308.137L353.234 423.907C363.94 453.319 361.648 447.023 310.673 433.864C269.832 423.402 247.978 454.874 254.082 468.721C260.187 482.569 368.361 525.989 368.361 525.989C501.073 600.279 573.714 496.368 572.578 437.401C571.407 378.339 533.075 288.002 533.075 288.002C527.073 274.436 512.056 267.025 498.149 272.087C484.241 277.149 477.189 293.444 481.977 306.6M363.064 293.905L390.46 369.174M422.521 300.252C411.865 266.884 460.405 249.962 473.153 282.356L481.977 306.6M422.521 300.252L440.921 350.807M481.977 306.6L494.974 342.308M363.064 293.905C351.811 260.648 400.76 242.513 413.525 275.538L422.521 300.252M363.064 293.905L330.572 204.634C316.987 171.694 269.344 189.034 280.111 223L311.098 308.137L353.234 423.907C363.94 453.319 361.648 447.023 310.673 433.864C269.832 423.402 247.978 454.874 254.082 468.721C260.187 482.569 368.361 525.989 368.361 525.989C501.073 600.279 573.714 496.368 572.578 437.401C571.407 378.339 533.075 288.002 533.075 288.002C527.073 274.436 512.056 267.025 498.149 272.087C484.241 277.149 477.189 293.444 481.977 306.6M363.064 293.905L390.46 369.174M422.521 300.252C411.865 266.884 460.405 249.962 473.153 282.356L481.977 306.6M422.521 300.252L440.921 350.807M481.977 306.6L494.974 342.308" })] })] }) }) }));
6
+ };
7
+ export default TouchHand;
@@ -0,0 +1,2 @@
1
+ export { default } from './TouchHand';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ export { default } from './TouchHand';
@@ -0,0 +1,23 @@
1
+ import './VenuePicker.scss';
2
+ import type { SelectorOption } from '../../shared/selector-option.js';
3
+ export interface VenuePickerLabels {
4
+ chooseVenue: string;
5
+ close: string;
6
+ currentVenue: string;
7
+ venueSelection: string;
8
+ viewAllVenues: string;
9
+ }
10
+ export interface VenuePickerProps {
11
+ venues: SelectorOption[];
12
+ labels: VenuePickerLabels;
13
+ renderTarget: HTMLElement | null;
14
+ onSelect: (id: string) => void;
15
+ onViewAllVenues: () => void;
16
+ }
17
+ /**
18
+ * Collapsed combobox naming the current venue, backed by a drawer holding the
19
+ * full list. At campus scale an expanded list crowds the map, so only the
20
+ * current context (or a prompt when there is none) stays on screen.
21
+ */
22
+ export default function VenuePicker({ venues, labels, renderTarget, onSelect, onViewAllVenues, }: VenuePickerProps): import("react").JSX.Element | null;
23
+ //# sourceMappingURL=VenuePicker.d.ts.map
@@ -0,0 +1,70 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import './VenuePicker.scss';
3
+ import classNames from 'classnames';
4
+ import { useRef, useState } from 'react';
5
+ import Modal from '../Modal/Modal.js';
6
+ /**
7
+ * Up to two uppercase letters standing in for a venue on the badge and drawer
8
+ * cards: the first letters of the first two words, or the first two letters of
9
+ * a single-word name. `Array.from` keeps multi-byte characters intact.
10
+ */
11
+ function venueInitials(name) {
12
+ const words = name.trim().split(/\s+/).filter(Boolean);
13
+ if (words.length === 0)
14
+ return '?';
15
+ if (words.length === 1)
16
+ return Array.from(words[0]).slice(0, 2).join('').toUpperCase();
17
+ return (Array.from(words[0])[0] + Array.from(words[1])[0]).toUpperCase();
18
+ }
19
+ /**
20
+ * Collapsed combobox naming the current venue, backed by a drawer holding the
21
+ * full list. At campus scale an expanded list crowds the map, so only the
22
+ * current context (or a prompt when there is none) stays on screen.
23
+ */
24
+ export default function VenuePicker({ venues, labels, renderTarget, onSelect, onViewAllVenues, }) {
25
+ const [chooserOpen, setChooserOpen] = useState(false);
26
+ const [chooserTabStopId, setChooserTabStopId] = useState(null);
27
+ const chooserCardRef = useRef(new Map());
28
+ const defaultChooserTabStopId = venues.find((venue) => venue.active && !venue.disabled)?.id ??
29
+ venues.find((venue) => !venue.disabled)?.id ??
30
+ null;
31
+ const focusAdjacentVenue = (event, currentVenueId) => {
32
+ if (!['ArrowDown', 'ArrowRight', 'ArrowUp', 'ArrowLeft'].includes(event.key))
33
+ return;
34
+ event.preventDefault();
35
+ const direction = event.key === 'ArrowDown' || event.key === 'ArrowRight' ? 1 : -1;
36
+ const currentIndex = venues.findIndex((venue) => venue.id === currentVenueId);
37
+ for (let offset = 1; offset <= venues.length; offset++) {
38
+ const index = (currentIndex + direction * offset + venues.length) % venues.length;
39
+ if (venues[index].disabled)
40
+ continue;
41
+ setChooserTabStopId(venues[index].id);
42
+ chooserCardRef.current.get(venues[index].id)?.focus();
43
+ return;
44
+ }
45
+ };
46
+ // Closing the drawer returns focus to the trigger on its own (Modal restores
47
+ // the previously focused element), so venue entry only has to close it.
48
+ const selectVenue = (id) => {
49
+ setChooserOpen(false);
50
+ onSelect(id);
51
+ };
52
+ const viewAllVenues = () => {
53
+ setChooserOpen(false);
54
+ onViewAllVenues();
55
+ };
56
+ if (venues.length === 0)
57
+ return null;
58
+ const currentVenueLabel = venues.find((venue) => venue.active)?.label ?? null;
59
+ return (_jsxs(_Fragment, { children: [_jsxs("button", { type: "button", className: "efp-venue-picker", "aria-haspopup": "dialog", "aria-expanded": chooserOpen, "aria-label": currentVenueLabel ? `${labels.currentVenue}: ${currentVenueLabel}` : labels.chooseVenue, onClick: () => {
60
+ setChooserTabStopId(defaultChooserTabStopId);
61
+ setChooserOpen(true);
62
+ }, children: [_jsx("i", { className: "icon-layers", "aria-hidden": "true" }), _jsx("span", { dir: "auto", children: currentVenueLabel ?? labels.chooseVenue }), _jsx("i", { className: "icon-chevron-down", "aria-hidden": "true" })] }), _jsxs(Modal, { open: chooserOpen, variant: "drawer", className: "efp-venue-chooser", title: labels.chooseVenue, closeLabel: labels.close, renderTarget: renderTarget, onClose: () => setChooserOpen(false), children: [_jsx("div", { className: "efp-venue-chooser__list", role: "radiogroup", "aria-label": labels.venueSelection, children: venues.map((venue) => (_jsxs("button", { ref: (element) => {
63
+ if (element)
64
+ chooserCardRef.current.set(venue.id, element);
65
+ else
66
+ chooserCardRef.current.delete(venue.id);
67
+ }, type: "button", className: classNames('efp-venue-chooser__card', {
68
+ 'is-active': venue.active,
69
+ }), role: "radio", "aria-checked": venue.active, "aria-disabled": venue.disabled, disabled: venue.disabled, tabIndex: venue.id === (chooserTabStopId ?? defaultChooserTabStopId) ? 0 : -1, onFocus: () => setChooserTabStopId(venue.id), onKeyDown: (event) => focusAdjacentVenue(event, venue.id), onClick: () => selectVenue(venue.id), children: [_jsx("span", { className: "efp-venue-chooser__badge", "aria-hidden": "true", children: venueInitials(venue.label) }), _jsx("span", { className: "efp-venue-chooser__card-name", dir: "auto", children: venue.label })] }, venue.id))) }), _jsxs("button", { type: "button", className: "efp-venue-chooser__view-all", onClick: viewAllVenues, children: [_jsx("i", { className: "icon-zoom-out", "aria-hidden": "true" }), _jsx("span", { children: labels.viewAllVenues })] })] })] }));
70
+ }
@@ -0,0 +1,3 @@
1
+ export { default } from './VenuePicker';
2
+ export type { VenuePickerLabels, VenuePickerProps } from './VenuePicker';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,2 @@
1
+ /* eslint-disable simple-import-sort/exports */
2
+ export { default } from './VenuePicker';
@@ -0,0 +1,24 @@
1
+ import './WayfindingFloorSelector.scss';
2
+ import React from 'react';
3
+ export interface WayfindingFloorSelectorFloor {
4
+ id: number;
5
+ name: string;
6
+ description?: string;
7
+ directionToNext?: 'up' | 'down';
8
+ ariaLabel?: string;
9
+ }
10
+ export interface WayfindingFloorSelectorProps {
11
+ floors: WayfindingFloorSelectorFloor[];
12
+ value?: {
13
+ id: number;
14
+ name: string;
15
+ };
16
+ floorSelectionLabel?: string;
17
+ onSelect?: (floor: {
18
+ id: number;
19
+ name: string;
20
+ }) => void;
21
+ }
22
+ declare const WayfindingFloorSelector: ({ floors, value, floorSelectionLabel, onSelect, }: WayfindingFloorSelectorProps) => React.JSX.Element;
23
+ export default WayfindingFloorSelector;
24
+ //# sourceMappingURL=WayfindingFloorSelector.d.ts.map