@amboss/design-system 1.9.1 → 1.9.5

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 (279) hide show
  1. package/build/cjs/build-tokens/_breakpoints.json.js +7 -0
  2. package/build/cjs/build-tokens/_icon_sizes_map.json.js +5 -0
  3. package/build/cjs/build-tokens/assets/icons.json.js +76 -0
  4. package/build/cjs/build-tokens/assets/icons16.json.js +80 -0
  5. package/build/cjs/build-tokens/assets/logo.json.js +7 -0
  6. package/build/cjs/build-tokens/visualConfig.js +1464 -0
  7. package/build/cjs/src/components/Badge/Badge.js +62 -0
  8. package/build/cjs/src/components/Box/Box.js +88 -0
  9. package/build/cjs/src/components/Button/Button.js +246 -0
  10. package/build/cjs/src/components/Callout/Callout.js +86 -0
  11. package/build/cjs/src/components/Card/Card.js +68 -0
  12. package/build/cjs/src/components/Card/CardBox.js +22 -0
  13. package/build/cjs/src/components/Card/CardHeader/CardHeader.js +59 -0
  14. package/build/cjs/src/components/Collapsible/Collapsible.js +115 -0
  15. package/build/cjs/src/components/Column/Columns.js +145 -0
  16. package/build/cjs/src/components/Container/Container.js +55 -0
  17. package/build/cjs/src/components/Divider/Divider.js +67 -0
  18. package/build/cjs/src/components/DropdownMenu/DropdownMenu.js +226 -0
  19. package/build/cjs/src/components/DropdownMenu/MenuItem.js +102 -0
  20. package/build/cjs/src/components/Form/Checkbox/Checkbox.js +146 -0
  21. package/build/cjs/src/components/Form/FormErrorMessages/FormErrorMessages.js +26 -0
  22. package/build/cjs/src/components/Form/FormField/FormField.js +56 -0
  23. package/build/cjs/src/components/Form/FormFieldGroup/FormFieldGroup.js +54 -0
  24. package/build/cjs/src/components/Form/FormLabelText/FormLabelText.js +41 -0
  25. package/build/cjs/src/components/Form/Input/Input.js +181 -0
  26. package/build/cjs/src/components/Form/PasswordInput/PasswordInput.js +224 -0
  27. package/build/cjs/src/components/Form/Radio/Radio.js +137 -0
  28. package/build/cjs/src/components/Form/RadioButton/RadioButton.js +137 -0
  29. package/build/cjs/src/components/Form/Select/Select.js +287 -0
  30. package/build/cjs/src/components/Form/Textarea/Textarea.js +89 -0
  31. package/build/cjs/src/components/Form/Toggle/Toggle.js +178 -0
  32. package/build/cjs/src/components/Form/ToggleButton/ToggleButton.js +142 -0
  33. package/build/cjs/src/components/Icon/Icon.js +91 -0
  34. package/build/cjs/src/components/Inline/Inline.js +110 -0
  35. package/build/cjs/src/components/Link/Link.js +78 -0
  36. package/build/cjs/src/components/Logo/Logo.js +43 -0
  37. package/build/cjs/src/components/MediaItem/MediaItem.js +124 -0
  38. package/build/cjs/src/components/MediaViewerBar/MediaViewerBar.js +72 -0
  39. package/build/cjs/src/components/Notification/Notification.js +106 -0
  40. package/build/cjs/src/components/Patterns/ButtonGroup/ButtonGroup.js +43 -0
  41. package/build/cjs/src/components/Patterns/Modal/Modal.js +220 -0
  42. package/build/cjs/src/components/PictogramButton/PictogramButton.js +118 -0
  43. package/build/cjs/src/components/Portal/Portal.js +22 -0
  44. package/build/cjs/src/components/ProgressBar/ProgressBar.js +38 -0
  45. package/build/cjs/src/components/RoundButton/RoundButton.js +116 -0
  46. package/build/cjs/src/components/SearchResult/SearchResult.js +177 -0
  47. package/build/cjs/src/components/SegmentedProgressBar/SegmentedProgressBar.js +107 -0
  48. package/build/cjs/src/components/SegmentedProgressBar/SegmentedProgressBarUtil.js +42 -0
  49. package/build/cjs/src/components/Stack/Stack.js +77 -0
  50. package/build/cjs/src/components/SubThemeProvider/SubThemeProvider.js +54 -0
  51. package/build/cjs/src/components/Tabs/Tabs.js +132 -0
  52. package/build/cjs/src/components/Typography/Header/Header.js +114 -0
  53. package/build/cjs/src/components/Typography/StyledText/StyledText.js +167 -0
  54. package/build/cjs/src/components/Typography/Text/Text.js +61 -0
  55. package/build/cjs/src/components/Typography/TextClamped/TextClamped.js +53 -0
  56. package/build/cjs/src/components/VirtualScrollList/VirtualScrollList.js +115 -0
  57. package/build/cjs/src/components/VirtualScrollList/VirtualScrollListReducer.js +131 -0
  58. package/build/cjs/src/index.js +120 -0
  59. package/build/cjs/src/shared/flattenChildren.js +33 -0
  60. package/build/cjs/src/shared/informDeprecation.js +12 -0
  61. package/build/cjs/src/shared/mediaQueries.js +68 -0
  62. package/build/cjs/src/shared/useAutoPosition.js +42 -0
  63. package/build/cjs/src/shared/useDocument.js +7 -0
  64. package/build/cjs/src/shared/useHover.js +26 -0
  65. package/build/cjs/src/shared/useKeyboard.js +43 -0
  66. package/build/cjs/src/shared/useOnEscapePress.js +52 -0
  67. package/build/cjs/src/shared/useOutsideClick.js +33 -0
  68. package/build/cjs/src/shared/useWindow.js +7 -0
  69. package/build/esm/build-tokens/_breakpoints.json.js +4 -0
  70. package/build/esm/build-tokens/_breakpoints.json.js.map +1 -0
  71. package/build/esm/build-tokens/_icon_sizes_map.json.js +4 -0
  72. package/build/esm/build-tokens/_icon_sizes_map.json.js.map +1 -0
  73. package/build/esm/build-tokens/assets/icons.json.js +4 -0
  74. package/build/esm/build-tokens/assets/icons.json.js.map +1 -0
  75. package/build/esm/build-tokens/assets/icons16.json.js +4 -0
  76. package/build/esm/build-tokens/assets/icons16.json.js.map +1 -0
  77. package/build/esm/build-tokens/assets/logo.json.js +4 -0
  78. package/build/esm/build-tokens/assets/logo.json.js.map +1 -0
  79. package/build/esm/build-tokens/visualConfig.js +1463 -0
  80. package/build/esm/build-tokens/visualConfig.js.map +1 -0
  81. package/build/esm/src/components/Badge/Badge.js +56 -0
  82. package/build/esm/src/components/Badge/Badge.js.map +1 -0
  83. package/build/esm/src/components/Box/Box.js +81 -0
  84. package/build/esm/src/components/Box/Box.js.map +1 -0
  85. package/build/esm/src/components/Button/Button.js +238 -0
  86. package/build/esm/src/components/Button/Button.js.map +1 -0
  87. package/build/esm/src/components/Callout/Callout.js +80 -0
  88. package/build/esm/src/components/Callout/Callout.js.map +1 -0
  89. package/build/esm/src/components/Card/Card.js +62 -0
  90. package/build/esm/src/components/Card/Card.js.map +1 -0
  91. package/build/esm/src/components/Card/CardBox.js +17 -0
  92. package/build/esm/src/components/Card/CardBox.js.map +1 -0
  93. package/build/esm/src/components/Card/CardHeader/CardHeader.js +52 -0
  94. package/build/esm/src/components/Card/CardHeader/CardHeader.js.map +1 -0
  95. package/build/esm/src/components/Collapsible/Collapsible.js +107 -0
  96. package/build/esm/src/components/Collapsible/Collapsible.js.map +1 -0
  97. package/build/esm/src/components/Column/Columns.js +139 -0
  98. package/build/esm/src/components/Column/Columns.js.map +1 -0
  99. package/build/esm/src/components/Container/Container.js +49 -0
  100. package/build/esm/src/components/Container/Container.js.map +1 -0
  101. package/build/esm/src/components/Divider/Divider.js +61 -0
  102. package/build/esm/src/components/Divider/Divider.js.map +1 -0
  103. package/build/esm/src/components/DropdownMenu/DropdownMenu.js +220 -0
  104. package/build/esm/src/components/DropdownMenu/DropdownMenu.js.map +1 -0
  105. package/build/esm/src/components/DropdownMenu/MenuItem.js +96 -0
  106. package/build/esm/src/components/DropdownMenu/MenuItem.js.map +1 -0
  107. package/build/esm/src/components/Form/Checkbox/Checkbox.js +139 -0
  108. package/build/esm/src/components/Form/Checkbox/Checkbox.js.map +1 -0
  109. package/build/esm/src/components/Form/FormErrorMessages/FormErrorMessages.js +21 -0
  110. package/build/esm/src/components/Form/FormErrorMessages/FormErrorMessages.js.map +1 -0
  111. package/build/esm/src/components/Form/FormField/FormField.js +50 -0
  112. package/build/esm/src/components/Form/FormField/FormField.js.map +1 -0
  113. package/build/esm/src/components/Form/FormFieldGroup/FormFieldGroup.js +48 -0
  114. package/build/esm/src/components/Form/FormFieldGroup/FormFieldGroup.js.map +1 -0
  115. package/build/esm/src/components/Form/FormLabelText/FormLabelText.js +35 -0
  116. package/build/esm/src/components/Form/FormLabelText/FormLabelText.js.map +1 -0
  117. package/build/esm/src/components/Form/Input/Input.js +174 -0
  118. package/build/esm/src/components/Form/Input/Input.js.map +1 -0
  119. package/build/esm/src/components/Form/PasswordInput/PasswordInput.js +217 -0
  120. package/build/esm/src/components/Form/PasswordInput/PasswordInput.js.map +1 -0
  121. package/build/esm/src/components/Form/Radio/Radio.js +130 -0
  122. package/build/esm/src/components/Form/Radio/Radio.js.map +1 -0
  123. package/build/esm/src/components/Form/RadioButton/RadioButton.js +130 -0
  124. package/build/esm/src/components/Form/RadioButton/RadioButton.js.map +1 -0
  125. package/build/esm/src/components/Form/Select/Select.js +281 -0
  126. package/build/esm/src/components/Form/Select/Select.js.map +1 -0
  127. package/build/esm/src/components/Form/Textarea/Textarea.js +83 -0
  128. package/build/esm/src/components/Form/Textarea/Textarea.js.map +1 -0
  129. package/build/esm/src/components/Form/Toggle/Toggle.js +171 -0
  130. package/build/esm/src/components/Form/Toggle/Toggle.js.map +1 -0
  131. package/build/esm/src/components/Form/ToggleButton/ToggleButton.js +135 -0
  132. package/build/esm/src/components/Form/ToggleButton/ToggleButton.js.map +1 -0
  133. package/build/esm/src/components/Icon/Icon.js +85 -0
  134. package/build/esm/src/components/Icon/Icon.js.map +1 -0
  135. package/build/esm/src/components/Inline/Inline.js +104 -0
  136. package/build/esm/src/components/Inline/Inline.js.map +1 -0
  137. package/build/esm/src/components/Link/Link.js +71 -0
  138. package/build/esm/src/components/Link/Link.js.map +1 -0
  139. package/build/esm/src/components/Logo/Logo.js +37 -0
  140. package/build/esm/src/components/Logo/Logo.js.map +1 -0
  141. package/build/esm/src/components/MediaItem/MediaItem.js +118 -0
  142. package/build/esm/src/components/MediaItem/MediaItem.js.map +1 -0
  143. package/build/esm/src/components/MediaViewerBar/MediaViewerBar.js +66 -0
  144. package/build/esm/src/components/MediaViewerBar/MediaViewerBar.js.map +1 -0
  145. package/build/esm/src/components/Notification/Notification.js +100 -0
  146. package/build/esm/src/components/Notification/Notification.js.map +1 -0
  147. package/build/esm/src/components/Patterns/ButtonGroup/ButtonGroup.js +38 -0
  148. package/build/esm/src/components/Patterns/ButtonGroup/ButtonGroup.js.map +1 -0
  149. package/build/esm/src/components/Patterns/Modal/Modal.js +213 -0
  150. package/build/esm/src/components/Patterns/Modal/Modal.js.map +1 -0
  151. package/build/esm/src/components/PictogramButton/PictogramButton.js +111 -0
  152. package/build/esm/src/components/PictogramButton/PictogramButton.js.map +1 -0
  153. package/build/esm/src/components/Portal/Portal.js +16 -0
  154. package/build/esm/src/components/Portal/Portal.js.map +1 -0
  155. package/build/esm/src/components/ProgressBar/ProgressBar.js +33 -0
  156. package/build/esm/src/components/ProgressBar/ProgressBar.js.map +1 -0
  157. package/build/esm/src/components/RoundButton/RoundButton.js +109 -0
  158. package/build/esm/src/components/RoundButton/RoundButton.js.map +1 -0
  159. package/build/esm/src/components/SearchResult/SearchResult.js +171 -0
  160. package/build/esm/src/components/SearchResult/SearchResult.js.map +1 -0
  161. package/build/esm/src/components/SegmentedProgressBar/SegmentedProgressBar.js +101 -0
  162. package/build/esm/src/components/SegmentedProgressBar/SegmentedProgressBar.js.map +1 -0
  163. package/build/esm/src/components/SegmentedProgressBar/SegmentedProgressBarUtil.js +40 -0
  164. package/build/esm/src/components/SegmentedProgressBar/SegmentedProgressBarUtil.js.map +1 -0
  165. package/build/esm/src/components/Stack/Stack.js +71 -0
  166. package/build/esm/src/components/Stack/Stack.js.map +1 -0
  167. package/build/esm/src/components/SubThemeProvider/SubThemeProvider.js +49 -0
  168. package/build/esm/src/components/SubThemeProvider/SubThemeProvider.js.map +1 -0
  169. package/build/esm/src/components/Tabs/Tabs.js +125 -0
  170. package/build/esm/src/components/Tabs/Tabs.js.map +1 -0
  171. package/build/esm/src/components/Typography/Header/Header.js +104 -0
  172. package/build/esm/src/components/Typography/Header/Header.js.map +1 -0
  173. package/build/esm/src/components/Typography/StyledText/StyledText.js +160 -0
  174. package/build/esm/src/components/Typography/StyledText/StyledText.js.map +1 -0
  175. package/build/esm/src/components/Typography/Text/Text.js +55 -0
  176. package/build/esm/src/components/Typography/Text/Text.js.map +1 -0
  177. package/build/esm/src/components/Typography/TextClamped/TextClamped.js +46 -0
  178. package/build/esm/src/components/Typography/TextClamped/TextClamped.js.map +1 -0
  179. package/build/esm/src/components/VirtualScrollList/VirtualScrollList.js +109 -0
  180. package/build/esm/src/components/VirtualScrollList/VirtualScrollList.js.map +1 -0
  181. package/build/esm/src/components/VirtualScrollList/VirtualScrollListReducer.js +130 -0
  182. package/build/esm/src/components/VirtualScrollList/VirtualScrollListReducer.js.map +1 -0
  183. package/build/esm/src/index.js +53 -0
  184. package/build/esm/src/index.js.map +1 -0
  185. package/build/esm/src/shared/flattenChildren.d.ts +11 -0
  186. package/build/esm/src/shared/flattenChildren.js +32 -0
  187. package/build/esm/src/shared/flattenChildren.js.map +1 -0
  188. package/build/esm/src/shared/informDeprecation.js +11 -0
  189. package/build/esm/src/shared/informDeprecation.js.map +1 -0
  190. package/build/esm/src/shared/mediaQueries.js +66 -0
  191. package/build/esm/src/shared/mediaQueries.js.map +1 -0
  192. package/build/esm/src/shared/useAutoPosition.js +41 -0
  193. package/build/esm/src/shared/useAutoPosition.js.map +1 -0
  194. package/build/esm/src/shared/useDocument.js +6 -0
  195. package/build/esm/src/shared/useDocument.js.map +1 -0
  196. package/build/esm/src/shared/useHover.js +25 -0
  197. package/build/esm/src/shared/useHover.js.map +1 -0
  198. package/build/esm/src/shared/useKeyboard.js +42 -0
  199. package/build/esm/src/shared/useKeyboard.js.map +1 -0
  200. package/build/esm/src/shared/useOnEscapePress.js +51 -0
  201. package/build/esm/src/shared/useOnEscapePress.js.map +1 -0
  202. package/build/esm/src/shared/useOutsideClick.js +32 -0
  203. package/build/esm/src/shared/useOutsideClick.js.map +1 -0
  204. package/build/esm/src/shared/useWindow.js +6 -0
  205. package/build/esm/src/shared/useWindow.js.map +1 -0
  206. package/package.json +27 -9
  207. package/build/build-tokens/assets/icons.json +0 -131
  208. package/build/build-tokens/assets/icons16.json +0 -142
  209. package/build/build-tokens/assets/logo.json +0 -3
  210. package/build/index.js +0 -3
  211. package/build/index.js.LICENSE.txt +0 -8
  212. package/build/index.js.map +0 -1
  213. /package/build/{build-tokens → esm/build-tokens}/_subThemeType.d.ts +0 -0
  214. /package/build/{build-tokens → esm/build-tokens}/visualConfig.d.ts +0 -0
  215. /package/build/{src → esm/src}/components/Badge/Badge.d.ts +0 -0
  216. /package/build/{src → esm/src}/components/Box/Box.d.ts +0 -0
  217. /package/build/{src → esm/src}/components/Button/Button.d.ts +0 -0
  218. /package/build/{src → esm/src}/components/Callout/Callout.d.ts +0 -0
  219. /package/build/{src → esm/src}/components/Card/Card.d.ts +0 -0
  220. /package/build/{src → esm/src}/components/Card/CardBox.d.ts +0 -0
  221. /package/build/{src → esm/src}/components/Card/CardHeader/CardHeader.d.ts +0 -0
  222. /package/build/{src → esm/src}/components/Collapsible/Collapsible.d.ts +0 -0
  223. /package/build/{src → esm/src}/components/Column/Columns.d.ts +0 -0
  224. /package/build/{src → esm/src}/components/Container/Container.d.ts +0 -0
  225. /package/build/{src → esm/src}/components/Divider/Divider.d.ts +0 -0
  226. /package/build/{src → esm/src}/components/DropdownMenu/DropdownMenu.d.ts +0 -0
  227. /package/build/{src → esm/src}/components/DropdownMenu/MenuItem.d.ts +0 -0
  228. /package/build/{src → esm/src}/components/Form/Checkbox/Checkbox.d.ts +0 -0
  229. /package/build/{src → esm/src}/components/Form/FormErrorMessages/FormErrorMessages.d.ts +0 -0
  230. /package/build/{src → esm/src}/components/Form/FormField/FormField.d.ts +0 -0
  231. /package/build/{src → esm/src}/components/Form/FormFieldGroup/FormFieldGroup.d.ts +0 -0
  232. /package/build/{src → esm/src}/components/Form/FormLabelText/FormLabelText.d.ts +0 -0
  233. /package/build/{src → esm/src}/components/Form/Input/Input.d.ts +0 -0
  234. /package/build/{src → esm/src}/components/Form/PasswordInput/PasswordInput.d.ts +0 -0
  235. /package/build/{src → esm/src}/components/Form/Radio/Radio.d.ts +0 -0
  236. /package/build/{src → esm/src}/components/Form/RadioButton/RadioButton.d.ts +0 -0
  237. /package/build/{src → esm/src}/components/Form/Select/Select.d.ts +0 -0
  238. /package/build/{src → esm/src}/components/Form/Textarea/Textarea.d.ts +0 -0
  239. /package/build/{src → esm/src}/components/Form/Toggle/Toggle.d.ts +0 -0
  240. /package/build/{src → esm/src}/components/Form/ToggleButton/ToggleButton.d.ts +0 -0
  241. /package/build/{src → esm/src}/components/Icon/Icon.d.ts +0 -0
  242. /package/build/{src → esm/src}/components/Inline/Inline.d.ts +0 -0
  243. /package/build/{src → esm/src}/components/Link/Link.d.ts +0 -0
  244. /package/build/{src → esm/src}/components/Logo/Logo.d.ts +0 -0
  245. /package/build/{src → esm/src}/components/MediaItem/MediaItem.d.ts +0 -0
  246. /package/build/{src → esm/src}/components/MediaViewerBar/MediaViewerBar.d.ts +0 -0
  247. /package/build/{src → esm/src}/components/Notification/ExpandedContent.d.ts +0 -0
  248. /package/build/{src → esm/src}/components/Notification/Notification.d.ts +0 -0
  249. /package/build/{src → esm/src}/components/Patterns/ButtonGroup/ButtonGroup.d.ts +0 -0
  250. /package/build/{src → esm/src}/components/Patterns/Modal/Modal.d.ts +0 -0
  251. /package/build/{src → esm/src}/components/PictogramButton/PictogramButton.d.ts +0 -0
  252. /package/build/{src → esm/src}/components/Portal/Portal.d.ts +0 -0
  253. /package/build/{src → esm/src}/components/ProgressBar/ProgressBar.d.ts +0 -0
  254. /package/build/{src → esm/src}/components/RoundButton/RoundButton.d.ts +0 -0
  255. /package/build/{src → esm/src}/components/SearchResult/SearchResult.d.ts +0 -0
  256. /package/build/{src → esm/src}/components/SegmentedProgressBar/SegmentedProgressBar.d.ts +0 -0
  257. /package/build/{src → esm/src}/components/SegmentedProgressBar/SegmentedProgressBarUtil.d.ts +0 -0
  258. /package/build/{src → esm/src}/components/ShadowWebComponent/ShadowWebComponent.d.ts +0 -0
  259. /package/build/{src → esm/src}/components/Stack/Stack.d.ts +0 -0
  260. /package/build/{src → esm/src}/components/SubThemeProvider/SubThemeProvider.d.ts +0 -0
  261. /package/build/{src → esm/src}/components/Tabs/Tabs.d.ts +0 -0
  262. /package/build/{src → esm/src}/components/Typography/Header/Header.d.ts +0 -0
  263. /package/build/{src → esm/src}/components/Typography/StyledText/StyledText.d.ts +0 -0
  264. /package/build/{src → esm/src}/components/Typography/Text/Text.d.ts +0 -0
  265. /package/build/{src → esm/src}/components/Typography/TextClamped/TextClamped.d.ts +0 -0
  266. /package/build/{src → esm/src}/components/VirtualScrollList/VirtualScrollList.d.ts +0 -0
  267. /package/build/{src → esm/src}/components/VirtualScrollList/VirtualScrollListReducer.d.ts +0 -0
  268. /package/build/{src → esm/src}/index.d.ts +0 -0
  269. /package/build/{src → esm/src}/shared/informDeprecation.d.ts +0 -0
  270. /package/build/{src → esm/src}/shared/mediaQueries.d.ts +0 -0
  271. /package/build/{src → esm/src}/shared/replaceDeprecated.d.ts +0 -0
  272. /package/build/{src → esm/src}/shared/useAutoPosition.d.ts +0 -0
  273. /package/build/{src → esm/src}/shared/useDocument.d.ts +0 -0
  274. /package/build/{src → esm/src}/shared/useHover.d.ts +0 -0
  275. /package/build/{src → esm/src}/shared/useKeyboard.d.ts +0 -0
  276. /package/build/{src → esm/src}/shared/useOnEscapePress.d.ts +0 -0
  277. /package/build/{src → esm/src}/shared/useOutsideClick.d.ts +0 -0
  278. /package/build/{src → esm/src}/shared/useWindow.d.ts +0 -0
  279. /package/build/{src → esm/src}/types/index.d.ts +0 -0
@@ -0,0 +1,130 @@
1
+ const findClosestOffsetIndex = (arr, val) => {
2
+ let start = 0;
3
+ let end = arr.length - 1;
4
+ let mid = Math.floor((start + end) / 2);
5
+ while (start <= end) {
6
+ mid = Math.floor((start + end) / 2);
7
+ if (arr[mid].amount === val) {
8
+ return mid;
9
+ }
10
+ if (val < arr[mid].amount) {
11
+ end = mid - 1;
12
+ } else {
13
+ start = mid + 1;
14
+ }
15
+ }
16
+ return mid;
17
+ };
18
+ const getMaxHeight = function (maxAmountOfItems, offsets) {
19
+ let lastItemHeight = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
20
+ const amountOfOffsets = Math.min(offsets.length, maxAmountOfItems);
21
+ const maxOffset = offsets[amountOfOffsets - 1]?.amount || 0;
22
+ const result = maxOffset + lastItemHeight;
23
+ return result;
24
+ };
25
+ const reduceScroll = (prevState, scrollTop) => {
26
+ const {
27
+ topOffsets,
28
+ overscan: tolerance
29
+ } = prevState;
30
+ const scrolledItemCount = Math.max(0, findClosestOffsetIndex(topOffsets, scrollTop) - tolerance / 2);
31
+ const scrolledInPx = topOffsets[scrolledItemCount]?.amount || 0;
32
+ return {
33
+ ...prevState,
34
+ scrolledItemCount,
35
+ scrolledInPx
36
+ };
37
+ };
38
+ const reduceUpdateViewport = (prevState, viewportNode, itemAmount) => {
39
+ const {
40
+ topOffsets = [],
41
+ scrolledInPx,
42
+ scrolledItemCount,
43
+ avgItemHeight,
44
+ lastItemHeight,
45
+ maxHeight,
46
+ overscan: tolerance
47
+ } = prevState;
48
+ const newTopOffsets = [...topOffsets];
49
+ let updatedLastItemHeight = lastItemHeight;
50
+ Array.from(viewportNode.children).forEach((child, i) => {
51
+ newTopOffsets[i + scrolledItemCount] = {
52
+ amount: scrolledInPx + child.offsetTop,
53
+ isInterpolated: false
54
+ };
55
+ if (i + scrolledItemCount === itemAmount - 1 && !lastItemHeight) {
56
+ updatedLastItemHeight = child.getBoundingClientRect().height;
57
+ }
58
+ });
59
+ for (let i = 0; i < itemAmount; i += 1) {
60
+ if (!newTopOffsets[i] || newTopOffsets[i].isInterpolated) {
61
+ newTopOffsets[i] = {
62
+ amount: newTopOffsets[i - 1].amount + avgItemHeight,
63
+ isInterpolated: true
64
+ };
65
+ }
66
+ }
67
+ const newAvgItemHeight = Math.max(avgItemHeight, viewportNode.getBoundingClientRect().height / (viewportNode.childElementCount || 1));
68
+ const maxContentHeight = getMaxHeight(itemAmount, newTopOffsets, updatedLastItemHeight);
69
+ return {
70
+ ...prevState,
71
+ lastItemHeight: updatedLastItemHeight,
72
+ avgItemHeight,
73
+ topOffsets: newTopOffsets,
74
+ amountOfItemsInView: Math.round(maxHeight / newAvgItemHeight) + tolerance,
75
+ maxContentHeight
76
+ };
77
+ };
78
+ const reduceReset = (prevState, itemHeight, maxHeight, overscan) => ({
79
+ ...prevState,
80
+ lastItemHeight: null,
81
+ topOffsets: [{
82
+ amount: 0,
83
+ isInterpolated: false
84
+ }],
85
+ scrolledInPx: 0,
86
+ scrolledItemCount: 0,
87
+ maxHeight,
88
+ avgItemHeight: itemHeight,
89
+ overscan
90
+ });
91
+ const reduceRecommendScrollPosition = (prevState, scrollTop, itemToBeInView) => {
92
+ const {
93
+ topOffsets,
94
+ maxHeight
95
+ } = prevState;
96
+ if (!topOffsets) return prevState;
97
+ const bottomOfTarget = topOffsets[itemToBeInView + 1]?.amount;
98
+ const topOfTarget = topOffsets[itemToBeInView]?.amount;
99
+ let recommendedScrollPosition = null;
100
+ if (topOfTarget < scrollTop) {
101
+ recommendedScrollPosition = topOfTarget;
102
+ }
103
+ if (bottomOfTarget >= scrollTop + maxHeight) {
104
+ recommendedScrollPosition = bottomOfTarget - maxHeight;
105
+ }
106
+ if (itemToBeInView === topOffsets.length - 1) {
107
+ recommendedScrollPosition = topOffsets[itemToBeInView].amount;
108
+ }
109
+ return {
110
+ ...prevState,
111
+ recommendedScrollPosition
112
+ };
113
+ };
114
+ const VirtualScrollReducer = (prevState, action) => {
115
+ switch (action.type) {
116
+ case "reset":
117
+ return reduceReset(prevState, action.itemHeight, action.maxHeight, action.overscan);
118
+ case "scroll":
119
+ return reduceScroll(prevState, action.scrollTop);
120
+ case "updateViewport":
121
+ return reduceUpdateViewport(prevState, action.viewportNode, action.itemAmount);
122
+ case "recommendScrollPosition":
123
+ return reduceRecommendScrollPosition(prevState, action.scrollTop, action.itemToBeInView);
124
+ default:
125
+ throw new Error();
126
+ }
127
+ };
128
+
129
+ export { VirtualScrollReducer };
130
+ //# sourceMappingURL=VirtualScrollListReducer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VirtualScrollListReducer.js","sources":["../../../../../src/components/VirtualScrollList/VirtualScrollListReducer.ts"],"sourcesContent":["type Offset = { amount: number; isInterpolated: boolean };\n\ntype State = {\n avgItemHeight?: number;\n overscan?: number;\n maxHeight?: number;\n topOffsets?: Offset[];\n renderFrom?: number;\n scrolledItemCount?: number;\n scrolledInPx?: number;\n lastItemHeight?: number;\n amountOfItemsInView?: number;\n maxContentHeight?: number;\n recommendedScrollPosition?: number;\n};\n\ntype Action =\n | {\n type: \"scroll\";\n scrollTop: number;\n }\n | {\n type: \"updateViewport\";\n viewportNode: HTMLDivElement;\n itemAmount: number;\n }\n | {\n type: \"reset\";\n itemHeight: number;\n maxHeight: number;\n overscan: number;\n }\n | {\n type: \"recommendScrollPosition\";\n scrollTop: number;\n itemToBeInView: number;\n };\n\nconst findClosestOffsetIndex = (arr: Offset[], val: number): number => {\n let start = 0;\n let end = arr.length - 1;\n let mid = Math.floor((start + end) / 2);\n\n while (start <= end) {\n mid = Math.floor((start + end) / 2);\n if (arr[mid].amount === val) {\n return mid;\n }\n\n if (val < arr[mid].amount) {\n end = mid - 1;\n } else {\n start = mid + 1;\n }\n }\n return mid;\n};\n\nconst getMaxHeight = (\n maxAmountOfItems: number,\n offsets: Offset[],\n lastItemHeight = 0\n): number => {\n const amountOfOffsets = Math.min(offsets.length, maxAmountOfItems);\n const maxOffset = offsets[amountOfOffsets - 1]?.amount || 0;\n const result = maxOffset + lastItemHeight;\n\n return result;\n};\n\nconst reduceScroll = (prevState: State, scrollTop: number): State => {\n const { topOffsets, overscan: tolerance } = prevState;\n const scrolledItemCount = Math.max(\n 0,\n findClosestOffsetIndex(topOffsets, scrollTop) - tolerance / 2\n );\n const scrolledInPx = topOffsets[scrolledItemCount]?.amount || 0;\n\n return {\n ...prevState,\n scrolledItemCount,\n scrolledInPx,\n };\n};\n\nconst reduceUpdateViewport = (\n prevState: State,\n viewportNode: HTMLDivElement,\n itemAmount: number\n): State => {\n const {\n topOffsets = [],\n scrolledInPx,\n scrolledItemCount,\n avgItemHeight,\n lastItemHeight,\n maxHeight,\n overscan: tolerance,\n } = prevState;\n const newTopOffsets = [...topOffsets];\n let updatedLastItemHeight = lastItemHeight;\n\n Array.from(viewportNode.children).forEach((child: HTMLElement, i: number) => {\n newTopOffsets[i + scrolledItemCount] = {\n amount: scrolledInPx + child.offsetTop,\n isInterpolated: false,\n };\n\n if (i + scrolledItemCount === itemAmount - 1 && !lastItemHeight) {\n updatedLastItemHeight = child.getBoundingClientRect().height;\n }\n });\n\n for (let i = 0; i < itemAmount; i += 1) {\n if (!newTopOffsets[i] || newTopOffsets[i].isInterpolated) {\n newTopOffsets[i] = {\n amount: newTopOffsets[i - 1].amount + avgItemHeight,\n isInterpolated: true,\n };\n }\n }\n\n const newAvgItemHeight = Math.max(\n avgItemHeight,\n viewportNode.getBoundingClientRect().height /\n (viewportNode.childElementCount || 1)\n );\n\n const maxContentHeight = getMaxHeight(\n itemAmount,\n newTopOffsets,\n updatedLastItemHeight\n );\n\n return {\n ...prevState,\n lastItemHeight: updatedLastItemHeight,\n avgItemHeight,\n topOffsets: newTopOffsets,\n amountOfItemsInView: Math.round(maxHeight / newAvgItemHeight) + tolerance,\n maxContentHeight,\n };\n};\n\nconst reduceReset = (\n prevState: State,\n itemHeight: number,\n maxHeight: number,\n overscan: number\n): State => ({\n ...prevState,\n lastItemHeight: null,\n topOffsets: [{ amount: 0, isInterpolated: false }],\n scrolledInPx: 0,\n scrolledItemCount: 0,\n maxHeight,\n avgItemHeight: itemHeight,\n overscan,\n});\n\nconst reduceRecommendScrollPosition = (\n prevState: State,\n scrollTop: number,\n itemToBeInView: number\n): State => {\n const { topOffsets, maxHeight } = prevState;\n if (!topOffsets) return prevState;\n\n const bottomOfTarget = topOffsets[itemToBeInView + 1]?.amount;\n const topOfTarget = topOffsets[itemToBeInView]?.amount;\n let recommendedScrollPosition = null;\n\n if (topOfTarget < scrollTop) {\n recommendedScrollPosition = topOfTarget;\n }\n\n if (bottomOfTarget >= scrollTop + maxHeight) {\n recommendedScrollPosition = bottomOfTarget - maxHeight;\n }\n\n if (itemToBeInView === topOffsets.length - 1) {\n recommendedScrollPosition = topOffsets[itemToBeInView].amount;\n }\n\n return {\n ...prevState,\n recommendedScrollPosition,\n };\n};\n\nexport const VirtualScrollReducer = (\n prevState: State,\n action: Action\n): State => {\n switch (action.type) {\n case \"reset\":\n return reduceReset(\n prevState,\n action.itemHeight,\n action.maxHeight,\n action.overscan\n );\n case \"scroll\":\n return reduceScroll(prevState, action.scrollTop);\n case \"updateViewport\":\n return reduceUpdateViewport(\n prevState,\n action.viewportNode,\n action.itemAmount\n );\n case \"recommendScrollPosition\":\n return reduceRecommendScrollPosition(\n prevState,\n action.scrollTop,\n action.itemToBeInView\n );\n default:\n throw new Error();\n }\n};\n"],"names":["findClosestOffsetIndex","arr","val","start","end","length","mid","Math","floor","amount","getMaxHeight","maxAmountOfItems","offsets","lastItemHeight","arguments","undefined","amountOfOffsets","min","maxOffset","result","reduceScroll","prevState","scrollTop","topOffsets","overscan","tolerance","scrolledItemCount","max","scrolledInPx","reduceUpdateViewport","viewportNode","itemAmount","avgItemHeight","maxHeight","newTopOffsets","updatedLastItemHeight","Array","from","children","forEach","child","i","offsetTop","isInterpolated","getBoundingClientRect","height","newAvgItemHeight","childElementCount","maxContentHeight","amountOfItemsInView","round","reduceReset","itemHeight","reduceRecommendScrollPosition","itemToBeInView","bottomOfTarget","topOfTarget","recommendedScrollPosition","VirtualScrollReducer","action","type","Error"],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { ambossVisualConfiguration } from '../build-tokens/visualConfig.js';
2
+ export { CacheProvider, ThemeProvider } from '@emotion/react';
3
+ export { default as createCache } from '@emotion/cache';
4
+ export { Card } from './components/Card/Card.js';
5
+ export { CardBox } from './components/Card/CardBox.js';
6
+ export { Box } from './components/Box/Box.js';
7
+ export { Inline } from './components/Inline/Inline.js';
8
+ export { Stack } from './components/Stack/Stack.js';
9
+ export { H1, H2, H3, H4, H5, H6 } from './components/Typography/Header/Header.js';
10
+ export { Text } from './components/Typography/Text/Text.js';
11
+ export { TextClamped } from './components/Typography/TextClamped/TextClamped.js';
12
+ export { StyledText } from './components/Typography/StyledText/StyledText.js';
13
+ export { Link } from './components/Link/Link.js';
14
+ export { Icon } from './components/Icon/Icon.js';
15
+ export { Button } from './components/Button/Button.js';
16
+ export { Divider } from './components/Divider/Divider.js';
17
+ export { Column, Columns } from './components/Column/Columns.js';
18
+ export { Tabs } from './components/Tabs/Tabs.js';
19
+ export { Badge } from './components/Badge/Badge.js';
20
+ export { SearchResult } from './components/SearchResult/SearchResult.js';
21
+ export { ToggleButton } from './components/Form/ToggleButton/ToggleButton.js';
22
+ export { DropdownMenu } from './components/DropdownMenu/DropdownMenu.js';
23
+ export { FormFieldGroup } from './components/Form/FormFieldGroup/FormFieldGroup.js';
24
+ export { Input } from './components/Form/Input/Input.js';
25
+ export { Checkbox } from './components/Form/Checkbox/Checkbox.js';
26
+ export { Toggle } from './components/Form/Toggle/Toggle.js';
27
+ export { Radio } from './components/Form/Radio/Radio.js';
28
+ export { RadioButton } from './components/Form/RadioButton/RadioButton.js';
29
+ export { Textarea } from './components/Form/Textarea/Textarea.js';
30
+ export { Select } from './components/Form/Select/Select.js';
31
+ export { SubThemeProvider } from './components/SubThemeProvider/SubThemeProvider.js';
32
+ export { PictogramButton } from './components/PictogramButton/PictogramButton.js';
33
+ export { MediaViewerBar } from './components/MediaViewerBar/MediaViewerBar.js';
34
+ export { SegmentedProgressBar } from './components/SegmentedProgressBar/SegmentedProgressBar.js';
35
+ export { ProgressBar } from './components/ProgressBar/ProgressBar.js';
36
+ export { Container } from './components/Container/Container.js';
37
+ export { PasswordInput } from './components/Form/PasswordInput/PasswordInput.js';
38
+ export { RoundButton } from './components/RoundButton/RoundButton.js';
39
+ export { Notification } from './components/Notification/Notification.js';
40
+ export { Logo } from './components/Logo/Logo.js';
41
+ export { MediaItem } from './components/MediaItem/MediaItem.js';
42
+ export { Callout } from './components/Callout/Callout.js';
43
+ export { Modal } from './components/Patterns/Modal/Modal.js';
44
+ export { ButtonGroup } from './components/Patterns/ButtonGroup/ButtonGroup.js';
45
+ export { Collapsible, CollapsibleHeader } from './components/Collapsible/Collapsible.js';
46
+
47
+ const {
48
+ dark,
49
+ light
50
+ } = ambossVisualConfiguration;
51
+
52
+ export { dark, light };
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/index.ts"],"sourcesContent":["import { ambossVisualConfiguration } from \"../build-tokens/visualConfig\";\n\nexport const { dark, light } = ambossVisualConfiguration;\nexport { ThemeProvider, CacheProvider } from \"@emotion/react\";\nexport { default as createCache } from \"@emotion/cache\";\nexport { Card } from \"./components/Card/Card\";\nexport { CardBox } from \"./components/Card/CardBox\";\nexport { Box } from \"./components/Box/Box\";\nexport { Inline } from \"./components/Inline/Inline\";\nexport { Stack } from \"./components/Stack/Stack\";\nexport { H1, H2, H3, H4, H5, H6 } from \"./components/Typography/Header/Header\";\nexport { Text } from \"./components/Typography/Text/Text\";\nexport { TextClamped } from \"./components/Typography/TextClamped/TextClamped\";\nexport { StyledText } from \"./components/Typography/StyledText/StyledText\";\nexport { Link } from \"./components/Link/Link\";\nexport { Icon } from \"./components/Icon/Icon\";\nexport { Button } from \"./components/Button/Button\";\nexport { Divider } from \"./components/Divider/Divider\";\nexport { Column, Columns } from \"./components/Column/Columns\";\nexport { Tabs } from \"./components/Tabs/Tabs\";\nexport { Badge } from \"./components/Badge/Badge\";\nexport { SearchResult } from \"./components/SearchResult/SearchResult\";\nexport { ToggleButton } from \"./components/Form/ToggleButton/ToggleButton\";\nexport { DropdownMenu } from \"./components/DropdownMenu/DropdownMenu\";\nexport { FormFieldGroup } from \"./components/Form/FormFieldGroup/FormFieldGroup\";\nexport { Input } from \"./components/Form/Input/Input\";\nexport { Checkbox } from \"./components/Form/Checkbox/Checkbox\";\nexport { Toggle } from \"./components/Form/Toggle/Toggle\";\nexport { Radio } from \"./components/Form/Radio/Radio\";\nexport { RadioButton } from \"./components/Form/RadioButton/RadioButton\";\nexport { Textarea } from \"./components/Form/Textarea/Textarea\";\nexport { Select } from \"./components/Form/Select/Select\";\nexport { SubThemeProvider } from \"./components/SubThemeProvider/SubThemeProvider\";\nexport { PictogramButton } from \"./components/PictogramButton/PictogramButton\";\nexport { MediaViewerBar } from \"./components/MediaViewerBar/MediaViewerBar\";\nexport { SegmentedProgressBar } from \"./components/SegmentedProgressBar/SegmentedProgressBar\";\nexport { ProgressBar } from \"./components/ProgressBar/ProgressBar\";\nexport { Container } from \"./components/Container/Container\";\nexport { PasswordInput } from \"./components/Form/PasswordInput/PasswordInput\";\nexport { RoundButton } from \"./components/RoundButton/RoundButton\";\nexport { Notification } from \"./components/Notification/Notification\";\nexport { Logo } from \"./components/Logo/Logo\";\nexport { MediaItem } from \"./components/MediaItem/MediaItem\";\nexport { Callout } from \"./components/Callout/Callout\";\nexport { Modal } from \"./components/Patterns/Modal/Modal\";\nexport { ButtonGroup } from \"./components/Patterns/ButtonGroup/ButtonGroup\";\nexport {\n Collapsible,\n CollapsibleHeader,\n} from \"./components/Collapsible/Collapsible\";\n"],"names":["dark","light","ambossVisualConfiguration"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEa,MAAA;EAAEA,IAAI;AAAEC,EAAAA,KAAAA;AAAM,CAAC,GAAGC;;;;"}
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ /**
3
+ * Copied from https://github.com/grrowl/react-keyed-flatten-children (since ESM import doesn't work with the module)
4
+ *
5
+ * Similar to [React's built-in `Children.toArray` method](https://reactjs.org/docs/react-api.html#reactchildrentoarray),
6
+ * this utility takes children and returns them as an array for introspection or filtering.
7
+ *
8
+ * Different from `Children.toArray`, it will flatten arrays and `React.Fragment`s into a regular, one-dimensional
9
+ * array while ensuring element and fragment keys are preserved, unique, and stable between renders.
10
+ */
11
+ export declare const flattenChildren: (children: React.ReactNode, depth?: number, keys?: string[]) => any;
@@ -0,0 +1,32 @@
1
+ import { Children, isValidElement, cloneElement } from 'react';
2
+ import { isFragment } from 'react-is';
3
+
4
+ /**
5
+ * Copied from https://github.com/grrowl/react-keyed-flatten-children (since ESM import doesn't work with the module)
6
+ *
7
+ * Similar to [React's built-in `Children.toArray` method](https://reactjs.org/docs/react-api.html#reactchildrentoarray),
8
+ * this utility takes children and returns them as an array for introspection or filtering.
9
+ *
10
+ * Different from `Children.toArray`, it will flatten arrays and `React.Fragment`s into a regular, one-dimensional
11
+ * array while ensuring element and fragment keys are preserved, unique, and stable between renders.
12
+ */
13
+
14
+ const flattenChildren = function (children) {
15
+ let depth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
16
+ let keys = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
17
+ return Children.toArray(children).reduce((acc, node, nodeIndex) => {
18
+ if (isFragment(node)) {
19
+ acc.push(...flattenChildren(node.props.children, depth + 1, keys.concat(String(node.key || nodeIndex))));
20
+ } else if ( /*#__PURE__*/isValidElement(node)) {
21
+ acc.push( /*#__PURE__*/cloneElement(node, {
22
+ key: keys.concat(String(node.key)).join(".")
23
+ }));
24
+ } else if (typeof node === "string" || typeof node === "number") {
25
+ acc.push(node);
26
+ }
27
+ return acc;
28
+ }, []);
29
+ };
30
+
31
+ export { flattenChildren };
32
+ //# sourceMappingURL=flattenChildren.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flattenChildren.js","sources":["../../../../src/shared/flattenChildren.ts"],"sourcesContent":["import React, {\n Children,\n isValidElement,\n cloneElement,\n ReactChild,\n} from \"react\";\nimport { isFragment } from \"react-is\";\n\n/**\n * Copied from https://github.com/grrowl/react-keyed-flatten-children (since ESM import doesn't work with the module)\n *\n * Similar to [React's built-in `Children.toArray` method](https://reactjs.org/docs/react-api.html#reactchildrentoarray),\n * this utility takes children and returns them as an array for introspection or filtering.\n *\n * Different from `Children.toArray`, it will flatten arrays and `React.Fragment`s into a regular, one-dimensional\n * array while ensuring element and fragment keys are preserved, unique, and stable between renders.\n */\n\nexport const flattenChildren = (\n children: React.ReactNode,\n depth = 0,\n keys: string[] = []\n): any =>\n Children.toArray(children).reduce((acc: ReactChild[], node, nodeIndex) => {\n if (isFragment(node)) {\n acc.push(\n ...flattenChildren(\n node.props.children,\n depth + 1,\n keys.concat(String(node.key || nodeIndex))\n )\n );\n } else if (isValidElement(node)) {\n acc.push(\n cloneElement(node, {\n key: keys.concat(String(node.key)).join(\".\"),\n })\n );\n } else if (typeof node === \"string\" || typeof node === \"number\") {\n acc.push(node);\n }\n return acc;\n }, []);\n"],"names":["flattenChildren","children","depth","arguments","length","undefined","keys","Children","toArray","reduce","acc","node","nodeIndex","isFragment","push","props","concat","String","key","isValidElement","cloneElement","join"],"mappings":";;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEaA,MAAAA,eAAe,GAAG,UAC7BC,QAAyB,EAAA;AAAA,EAAA,IACzBC,KAAK,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,CAAC,CAAA;AAAA,EAAA,IACTG,IAAc,GAAAH,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;AAAA,EAAA,OAEnBI,QAAQ,CAACC,OAAO,CAACP,QAAQ,CAAC,CAACQ,MAAM,CAAC,CAACC,GAAiB,EAAEC,IAAI,EAAEC,SAAS,KAAK;AACxE,IAAA,IAAIC,UAAU,CAACF,IAAI,CAAC,EAAE;AACpBD,MAAAA,GAAG,CAACI,IAAI,CACN,GAAGd,eAAe,CAChBW,IAAI,CAACI,KAAK,CAACd,QAAQ,EACnBC,KAAK,GAAG,CAAC,EACTI,IAAI,CAACU,MAAM,CAACC,MAAM,CAACN,IAAI,CAACO,GAAG,IAAIN,SAAS,CAAC,CAAC,CAC3C,CACF,CAAA;AACH,KAAC,MAAM,kBAAIO,cAAc,CAACR,IAAI,CAAC,EAAE;AAC/BD,MAAAA,GAAG,CAACI,IAAI,eACNM,YAAY,CAACT,IAAI,EAAE;AACjBO,QAAAA,GAAG,EAAEZ,IAAI,CAACU,MAAM,CAACC,MAAM,CAACN,IAAI,CAACO,GAAG,CAAC,CAAC,CAACG,IAAI,CAAC,GAAG,CAAA;AAC7C,OAAC,CAAC,CACH,CAAA;KACF,MAAM,IAAI,OAAOV,IAAI,KAAK,QAAQ,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;AAC/DD,MAAAA,GAAG,CAACI,IAAI,CAACH,IAAI,CAAC,CAAA;AAChB,KAAA;AACA,IAAA,OAAOD,GAAG,CAAA;GACX,EAAE,EAAE,CAAC,CAAA;AAAA;;;;"}
@@ -0,0 +1,11 @@
1
+ const informDeprecation = function (property, value, location) {
2
+ let details = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
3
+ if (property === undefined) return;
4
+ if (property === value) {
5
+ // eslint-disable-next-line no-console
6
+ console.error(`value ${JSON.stringify(value)} is depricated in ${location} \n ${details}`);
7
+ }
8
+ };
9
+
10
+ export { informDeprecation };
11
+ //# sourceMappingURL=informDeprecation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"informDeprecation.js","sources":["../../../../src/shared/informDeprecation.ts"],"sourcesContent":["export const informDeprecation = (\n property: unknown,\n value: unknown,\n location: string,\n details = \"\"\n): void => {\n if (property === undefined) return;\n if (property === value) {\n // eslint-disable-next-line no-console\n console.error(\n `value ${JSON.stringify(\n value\n )} is depricated in ${location} \\n ${details}`\n );\n }\n};\n"],"names":["informDeprecation","property","value","location","details","arguments","length","undefined","console","error","JSON","stringify"],"mappings":"AAAO,MAAMA,iBAAiB,GAAG,UAC/BC,QAAiB,EACjBC,KAAc,EACdC,QAAgB,EAEP;AAAA,EAAA,IADTC,OAAO,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;EAEZ,IAAIJ,QAAQ,KAAKM,SAAS,EAAE,OAAA;EAC5B,IAAIN,QAAQ,KAAKC,KAAK,EAAE;AACtB;AACAM,IAAAA,OAAO,CAACC,KAAK,CACV,CAAA,MAAA,EAAQC,IAAI,CAACC,SAAS,CACrBT,KAAK,CACL,CAAoBC,kBAAAA,EAAAA,QAAS,CAAMC,IAAAA,EAAAA,OAAQ,EAAC,CAC/C,CAAA;AACH,GAAA;AACF;;;;"}
@@ -0,0 +1,66 @@
1
+ import breakpoints from '../../build-tokens/_breakpoints.json.js';
2
+
3
+ /* eslint-disable @typescript-eslint/no-explicit-any */
4
+
5
+ /*
6
+ Although, mq implementation supports any property type, the following types are specified to provide type safety. If you need support for a new type, add it here.
7
+ */
8
+
9
+ // this thing probably deserves to be a separate library, like facepaint for emotion
10
+ function getMq(breakpointRules) {
11
+ const keys = breakpointRules;
12
+ return rules => {
13
+ const res = {};
14
+ keys.forEach(key => {
15
+ res[key] = {};
16
+ });
17
+ res[`@media screen`] = {};
18
+
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ Object.entries(rules).forEach(_ref => {
21
+ let [cssProperty, [prop, map]] = _ref;
22
+ if (Array.isArray(prop)) {
23
+ const sm = prop[0];
24
+ const md = prop[1] || prop[0];
25
+ const lg = prop[2] || prop[1] || prop[0];
26
+ const [s, m, l] = keys;
27
+ res[s][cssProperty] = map[sm];
28
+ res[m][cssProperty] = map[md];
29
+ res[l][cssProperty] = map[lg];
30
+ } else {
31
+ res[`@media screen`][cssProperty] = map[prop];
32
+ }
33
+ });
34
+ return res;
35
+ };
36
+ }
37
+ const mq = getMq([`@media (max-width: ${breakpoints[1].value}px)`, `@media (min-width: ${breakpoints[1].value}px) and (max-width: ${breakpoints[2].value}px)`, `@media (min-width: ${breakpoints[2].value}px)`]);
38
+ function getMqValue(breakpointRules) {
39
+ const keys = breakpointRules;
40
+ return rules => {
41
+ const res = {};
42
+ keys.forEach(key => {
43
+ res[key] = {};
44
+ });
45
+ res[`@media screen`] = {};
46
+ Object.entries(rules).forEach(_ref2 => {
47
+ let [cssProperty, cssValues] = _ref2;
48
+ if (Array.isArray(cssValues)) {
49
+ breakpointRules.forEach((breakpoint, index) => {
50
+ let i = index;
51
+ while (!cssValues[i] && i !== 0) {
52
+ i -= 1;
53
+ }
54
+ res[breakpoint][cssProperty] = cssValues[i];
55
+ });
56
+ } else {
57
+ res[`@media screen`][cssProperty] = cssValues;
58
+ }
59
+ });
60
+ return res;
61
+ };
62
+ }
63
+ const mqValue = getMqValue([`@media (max-width: ${breakpoints[1].value}px)`, `@media (min-width: ${breakpoints[1].value}px) and (max-width: ${breakpoints[2].value}px)`, `@media (min-width: ${breakpoints[2].value}px)`]);
64
+
65
+ export { mq, mqValue };
66
+ //# sourceMappingURL=mediaQueries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mediaQueries.js","sources":["../../../../src/shared/mediaQueries.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport {\n ColumnSizes,\n HorizontalAlignment,\n MQ,\n SpaceSizes,\n TextAlignment,\n VerticalAlignment,\n Order,\n ColumnAlignment,\n Hyphens,\n} from \"../types\";\nimport breakpoints from \"../../build-tokens/_breakpoints.json\";\n\ntype MqProp<T> = [\n T | MQ<T>,\n Record<T extends string ? T : never, string | number>\n];\n\n/*\n Although, mq implementation supports any property type, the following types are specified to provide type safety. If you need support for a new type, add it here.\n*/\ntype MqRules = Record<\n string,\n | MqProp<TextAlignment>\n | MqProp<SpaceSizes>\n | MqProp<HorizontalAlignment>\n | MqProp<VerticalAlignment>\n | MqProp<ColumnSizes>\n | MqProp<Order>\n | MqProp<ColumnAlignment>\n | MqProp<Hyphens>\n>;\n\ntype EmotionCssPropertyName = string;\ntype EmotionCssValue = string | number;\ntype EmotionCssDescription = Record<EmotionCssPropertyName, EmotionCssValue>;\ntype MqFunc = (\n rules: MqRules\n) => Record<string, EmotionCssValue | EmotionCssDescription>;\n\n// this thing probably deserves to be a separate library, like facepaint for emotion\nfunction getMq(breakpointRules: string[]): MqFunc {\n const keys = breakpointRules;\n\n return (rules) => {\n const res: Record<string, EmotionCssValue | EmotionCssDescription> = {};\n\n keys.forEach((key: string) => {\n res[key] = {};\n });\n res[`@media screen`] = {};\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Object.entries(rules).forEach(([cssProperty, [prop, map]]: any) => {\n if (Array.isArray(prop)) {\n const sm = prop[0];\n const md = prop[1] || prop[0];\n const lg = prop[2] || prop[1] || prop[0];\n const [s, m, l]: string[] = keys;\n\n (res[s] as EmotionCssDescription)[cssProperty] = map[sm];\n (res[m] as EmotionCssDescription)[cssProperty] = map[md];\n (res[l] as EmotionCssDescription)[cssProperty] = map[lg];\n } else {\n (res[`@media screen`] as EmotionCssDescription)[cssProperty] = map[\n prop as string\n ] as string;\n }\n });\n\n return res;\n };\n}\n\nexport const mq = getMq([\n `@media (max-width: ${breakpoints[1].value}px)`,\n `@media (min-width: ${breakpoints[1].value}px) and (max-width: ${breakpoints[2].value}px)`,\n `@media (min-width: ${breakpoints[2].value}px)`,\n]);\n\nfunction getMqValue(breakpointRules: string[]) {\n const keys = breakpointRules;\n return (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rules: Record<EmotionCssPropertyName, EmotionCssValue[] | EmotionCssValue>\n ): Record<string, EmotionCssValue | EmotionCssDescription> => {\n const res: Record<string, EmotionCssValue | EmotionCssDescription> = {};\n keys.forEach((key: string) => {\n res[key] = {};\n });\n res[`@media screen`] = {};\n\n Object.entries(rules).forEach(([cssProperty, cssValues]) => {\n if (Array.isArray(cssValues)) {\n breakpointRules.forEach((breakpoint, index) => {\n let i = index;\n while (!cssValues[i] && i !== 0) {\n i -= 1;\n }\n\n (res[breakpoint] as EmotionCssDescription)[cssProperty] =\n cssValues[i];\n });\n } else {\n (res[`@media screen`] as EmotionCssDescription)[\n cssProperty\n ] = cssValues;\n }\n });\n\n return res;\n };\n}\n\nexport const mqValue = getMqValue([\n `@media (max-width: ${breakpoints[1].value}px)`,\n `@media (min-width: ${breakpoints[1].value}px) and (max-width: ${breakpoints[2].value}px)`,\n `@media (min-width: ${breakpoints[2].value}px)`,\n]);\n\nexport function getMediaQueryClasses<T>(\n s: T | MQ<T> | undefined,\n styles: Record<string, string>,\n prefix = \"\"\n): string[] {\n if (s === undefined) return [];\n\n let res;\n if (Array.isArray(s)) {\n const sm = s[0];\n const md = s[1] || s[0];\n const lg = s[2] || s[1] || s[0];\n\n res = [`${sm}-small`, `${md}-medium`, `${lg}-large`];\n } else {\n res = [(s as unknown) as string];\n }\n\n return res.map((cl) => `${prefix}${cl}`).map((cl) => styles[cl]);\n}\n"],"names":["getMq","breakpointRules","keys","rules","res","forEach","key","Object","entries","_ref","cssProperty","prop","map","Array","isArray","sm","md","lg","s","m","l","mq","breakpoints","value","getMqValue","_ref2","cssValues","breakpoint","index","i","mqValue"],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { useState, useLayoutEffect } from 'react';
2
+ import { useWindow } from './useWindow.js';
3
+ import { useDocument } from './useDocument.js';
4
+
5
+ const useAutoPosition = (anchorRef, contentRef, isActive) => {
6
+ const [verticalPosition, setVerticalPosition] = useState("down");
7
+ const [horizontalPosition, setHorizontalPosition] = useState("left");
8
+ const document = useDocument();
9
+ const window = useWindow();
10
+ useLayoutEffect(() => {
11
+ if (!contentRef) return;
12
+ if (isActive) {
13
+ const maxHeight = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);
14
+ const rect = contentRef.current.getBoundingClientRect();
15
+ const anchorHeight = anchorRef.current.getBoundingClientRect().height;
16
+ const anchorX = anchorRef.current.getBoundingClientRect().x;
17
+ const screenWidth = window.innerWidth;
18
+ const isUp = rect.top + rect.height > maxHeight;
19
+ const isDown = rect.top - anchorHeight < rect.height;
20
+ const isLeft = anchorX > screenWidth / 2;
21
+ const isRight = anchorX < screenWidth / 2;
22
+ if (isUp) {
23
+ setVerticalPosition("up");
24
+ } else if (isDown) {
25
+ setVerticalPosition("down");
26
+ }
27
+ if (isLeft) {
28
+ setHorizontalPosition("left");
29
+ } else if (isRight) {
30
+ setHorizontalPosition("right");
31
+ }
32
+ } else {
33
+ setVerticalPosition("down");
34
+ setHorizontalPosition("left");
35
+ }
36
+ }, [anchorRef, contentRef, document.documentElement.clientHeight, isActive, window.innerHeight, window.innerWidth]);
37
+ return [verticalPosition, horizontalPosition];
38
+ };
39
+
40
+ export { useAutoPosition };
41
+ //# sourceMappingURL=useAutoPosition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAutoPosition.js","sources":["../../../../src/shared/useAutoPosition.ts"],"sourcesContent":["import { useState, useLayoutEffect, RefObject } from \"react\";\n\nimport { useWindow } from \"./useWindow\";\nimport { useDocument } from \"./useDocument\";\n\nexport type VerticalPosition = \"up\" | \"down\";\nexport type HorizontalPosition = \"left\" | \"right\";\nexport type Position = [VerticalPosition, HorizontalPosition];\n\nexport const useAutoPosition = (\n anchorRef: RefObject<HTMLElement>,\n contentRef: RefObject<HTMLElement>,\n isActive: boolean\n): Position => {\n const [verticalPosition, setVerticalPosition] = useState(\n \"down\" as VerticalPosition\n );\n const [horizontalPosition, setHorizontalPosition] = useState(\n \"left\" as HorizontalPosition\n );\n const document = useDocument();\n const window = useWindow();\n\n useLayoutEffect(() => {\n if (!contentRef) return;\n\n if (isActive) {\n const maxHeight = Math.max(\n document.documentElement.clientHeight || 0,\n window.innerHeight || 0\n );\n\n const rect: DOMRect = contentRef.current.getBoundingClientRect();\n const anchorHeight = anchorRef.current.getBoundingClientRect().height;\n const anchorX = anchorRef.current.getBoundingClientRect().x;\n const screenWidth = window.innerWidth;\n\n const isUp = rect.top + rect.height > maxHeight;\n const isDown = rect.top - anchorHeight < rect.height;\n const isLeft = anchorX > screenWidth / 2;\n const isRight = anchorX < screenWidth / 2;\n\n if (isUp) {\n setVerticalPosition(\"up\");\n } else if (isDown) {\n setVerticalPosition(\"down\");\n }\n\n if (isLeft) {\n setHorizontalPosition(\"left\");\n } else if (isRight) {\n setHorizontalPosition(\"right\");\n }\n } else {\n setVerticalPosition(\"down\");\n setHorizontalPosition(\"left\");\n }\n }, [\n anchorRef,\n contentRef,\n document.documentElement.clientHeight,\n isActive,\n window.innerHeight,\n window.innerWidth,\n ]);\n\n return [verticalPosition, horizontalPosition];\n};\n"],"names":["useAutoPosition","anchorRef","contentRef","isActive","verticalPosition","setVerticalPosition","useState","horizontalPosition","setHorizontalPosition","document","useDocument","window","useWindow","useLayoutEffect","maxHeight","Math","max","documentElement","clientHeight","innerHeight","rect","current","getBoundingClientRect","anchorHeight","height","anchorX","x","screenWidth","innerWidth","isUp","top","isDown","isLeft","isRight"],"mappings":";;;;AASO,MAAMA,eAAe,GAAGA,CAC7BC,SAAiC,EACjCC,UAAkC,EAClCC,QAAiB,KACJ;EACb,MAAM,CAACC,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGC,QAAQ,CACtD,MAAM,CACP,CAAA;EACD,MAAM,CAACC,kBAAkB,EAAEC,qBAAqB,CAAC,GAAGF,QAAQ,CAC1D,MAAM,CACP,CAAA;EACD,MAAMG,QAAQ,GAAGC,WAAW,EAAE,CAAA;EAC9B,MAAMC,MAAM,GAAGC,SAAS,EAAE,CAAA;AAE1BC,EAAAA,eAAe,CAAC,MAAM;IACpB,IAAI,CAACX,UAAU,EAAE,OAAA;AAEjB,IAAA,IAAIC,QAAQ,EAAE;AACZ,MAAA,MAAMW,SAAS,GAAGC,IAAI,CAACC,GAAG,CACxBP,QAAQ,CAACQ,eAAe,CAACC,YAAY,IAAI,CAAC,EAC1CP,MAAM,CAACQ,WAAW,IAAI,CAAC,CACxB,CAAA;AAED,MAAA,MAAMC,IAAa,GAAGlB,UAAU,CAACmB,OAAO,CAACC,qBAAqB,EAAE,CAAA;MAChE,MAAMC,YAAY,GAAGtB,SAAS,CAACoB,OAAO,CAACC,qBAAqB,EAAE,CAACE,MAAM,CAAA;MACrE,MAAMC,OAAO,GAAGxB,SAAS,CAACoB,OAAO,CAACC,qBAAqB,EAAE,CAACI,CAAC,CAAA;AAC3D,MAAA,MAAMC,WAAW,GAAGhB,MAAM,CAACiB,UAAU,CAAA;MAErC,MAAMC,IAAI,GAAGT,IAAI,CAACU,GAAG,GAAGV,IAAI,CAACI,MAAM,GAAGV,SAAS,CAAA;MAC/C,MAAMiB,MAAM,GAAGX,IAAI,CAACU,GAAG,GAAGP,YAAY,GAAGH,IAAI,CAACI,MAAM,CAAA;AACpD,MAAA,MAAMQ,MAAM,GAAGP,OAAO,GAAGE,WAAW,GAAG,CAAC,CAAA;AACxC,MAAA,MAAMM,OAAO,GAAGR,OAAO,GAAGE,WAAW,GAAG,CAAC,CAAA;AAEzC,MAAA,IAAIE,IAAI,EAAE;QACRxB,mBAAmB,CAAC,IAAI,CAAC,CAAA;OAC1B,MAAM,IAAI0B,MAAM,EAAE;QACjB1B,mBAAmB,CAAC,MAAM,CAAC,CAAA;AAC7B,OAAA;AAEA,MAAA,IAAI2B,MAAM,EAAE;QACVxB,qBAAqB,CAAC,MAAM,CAAC,CAAA;OAC9B,MAAM,IAAIyB,OAAO,EAAE;QAClBzB,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAChC,OAAA;AACF,KAAC,MAAM;MACLH,mBAAmB,CAAC,MAAM,CAAC,CAAA;MAC3BG,qBAAqB,CAAC,MAAM,CAAC,CAAA;AAC/B,KAAA;GACD,EAAE,CACDP,SAAS,EACTC,UAAU,EACVO,QAAQ,CAACQ,eAAe,CAACC,YAAY,EACrCf,QAAQ,EACRQ,MAAM,CAACQ,WAAW,EAClBR,MAAM,CAACiB,UAAU,CAClB,CAAC,CAAA;AAEF,EAAA,OAAO,CAACxB,gBAAgB,EAAEG,kBAAkB,CAAC,CAAA;AAC/C;;;;"}
@@ -0,0 +1,6 @@
1
+ function useDocument() {
2
+ return document;
3
+ }
4
+
5
+ export { useDocument };
6
+ //# sourceMappingURL=useDocument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDocument.js","sources":["../../../../src/shared/useDocument.ts"],"sourcesContent":["export function useDocument(): Document {\n return document;\n}\n"],"names":["useDocument","document"],"mappings":"AAAO,SAASA,WAAWA,GAAa;AACtC,EAAA,OAAOC,QAAQ,CAAA;AACjB;;;;"}
@@ -0,0 +1,25 @@
1
+ import { useState, useEffect } from 'react';
2
+
3
+ function useHover(ref) {
4
+ const [hovered, setHovered] = useState(false);
5
+ const handleMouseOver = () => setHovered(true);
6
+ const handleMouseOut = () => setHovered(false);
7
+ useEffect(() => {
8
+ if (!ref) return undefined;
9
+ const node = ref.current;
10
+ if (node) {
11
+ node.addEventListener("mouseover", handleMouseOver);
12
+ node.addEventListener("mouseout", handleMouseOut);
13
+ return () => {
14
+ node.removeEventListener("mouseover", handleMouseOver);
15
+ node.removeEventListener("mouseout", handleMouseOut);
16
+ };
17
+ }
18
+ return undefined;
19
+ }, [ref]);
20
+ if (!ref) return null;
21
+ return hovered;
22
+ }
23
+
24
+ export { useHover };
25
+ //# sourceMappingURL=useHover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHover.js","sources":["../../../../src/shared/useHover.ts"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\n\nexport function useHover(ref: React.MutableRefObject<any>): boolean {\n const [hovered, setHovered] = useState(false);\n\n const handleMouseOver = () => setHovered(true);\n const handleMouseOut = () => setHovered(false);\n\n useEffect(() => {\n if (!ref) return undefined;\n const node = ref.current;\n if (node) {\n node.addEventListener(\"mouseover\", handleMouseOver);\n node.addEventListener(\"mouseout\", handleMouseOut);\n\n return () => {\n node.removeEventListener(\"mouseover\", handleMouseOver);\n node.removeEventListener(\"mouseout\", handleMouseOut);\n };\n }\n return undefined;\n }, [ref]);\n\n if (!ref) return null;\n return hovered;\n}\n"],"names":["useHover","ref","hovered","setHovered","useState","handleMouseOver","handleMouseOut","useEffect","undefined","node","current","addEventListener","removeEventListener"],"mappings":";;AAEO,SAASA,QAAQA,CAACC,GAAgC,EAAW;EAClE,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAE7C,EAAA,MAAMC,eAAe,GAAGA,MAAMF,UAAU,CAAC,IAAI,CAAC,CAAA;AAC9C,EAAA,MAAMG,cAAc,GAAGA,MAAMH,UAAU,CAAC,KAAK,CAAC,CAAA;AAE9CI,EAAAA,SAAS,CAAC,MAAM;AACd,IAAA,IAAI,CAACN,GAAG,EAAE,OAAOO,SAAS,CAAA;AAC1B,IAAA,MAAMC,IAAI,GAAGR,GAAG,CAACS,OAAO,CAAA;AACxB,IAAA,IAAID,IAAI,EAAE;AACRA,MAAAA,IAAI,CAACE,gBAAgB,CAAC,WAAW,EAAEN,eAAe,CAAC,CAAA;AACnDI,MAAAA,IAAI,CAACE,gBAAgB,CAAC,UAAU,EAAEL,cAAc,CAAC,CAAA;AAEjD,MAAA,OAAO,MAAM;AACXG,QAAAA,IAAI,CAACG,mBAAmB,CAAC,WAAW,EAAEP,eAAe,CAAC,CAAA;AACtDI,QAAAA,IAAI,CAACG,mBAAmB,CAAC,UAAU,EAAEN,cAAc,CAAC,CAAA;OACrD,CAAA;AACH,KAAA;AACA,IAAA,OAAOE,SAAS,CAAA;AAClB,GAAC,EAAE,CAACP,GAAG,CAAC,CAAC,CAAA;AAET,EAAA,IAAI,CAACA,GAAG,EAAE,OAAO,IAAI,CAAA;AACrB,EAAA,OAAOC,OAAO,CAAA;AAChB;;;;"}
@@ -0,0 +1,42 @@
1
+ import { useEffect } from 'react';
2
+ import { useDocument } from './useDocument.js';
3
+
4
+ /**
5
+ * useKeyboard handles activation of keyboard hotkeys on a given element.
6
+ * @param {Record<string, (e: KeyboardEvent) => {}} config - A map of keyboardEvent code to function.
7
+ * @param {RefObject} ref - The element which the keyboard config has to apply on.
8
+ * @param {boolean} isActive - A flag to determine when the keyboard config has to be applied.
9
+ *
10
+ * Example:
11
+ * useKeyboard({
12
+ * Escape: closeMenu,
13
+ * ArrowUp: () => { doSomething() },
14
+ * KeyB: () => { console.log("bagi") },
15
+ * }, menuRef, menuOpen)
16
+ *
17
+ * This mean that these keyboard shortcuts will be applied on menuRef when the menu is opened.
18
+ */
19
+
20
+ function useKeyboard(config, ref, isActive) {
21
+ const document = useDocument();
22
+ const handleKeyboard = event => {
23
+ if (!isActive) return;
24
+ if (document.activeElement !== ref.current && !ref.current.contains(document.activeElement)) return;
25
+ const targetConfigKey = Object.keys(config).find(targetKeys => targetKeys.split(" ").includes(event.code));
26
+ if (!targetConfigKey) return;
27
+ event.preventDefault();
28
+ const res = config[targetConfigKey](event);
29
+ if (res === false) {
30
+ event.stopPropagation();
31
+ }
32
+ };
33
+ useEffect(() => {
34
+ document.addEventListener("keydown", handleKeyboard);
35
+ return () => {
36
+ document.removeEventListener("keydown", handleKeyboard);
37
+ };
38
+ });
39
+ }
40
+
41
+ export { useKeyboard };
42
+ //# sourceMappingURL=useKeyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyboard.js","sources":["../../../../src/shared/useKeyboard.ts"],"sourcesContent":["import { useEffect, RefObject } from \"react\";\nimport { useDocument } from \"./useDocument\";\n\n/**\n * useKeyboard handles activation of keyboard hotkeys on a given element.\n * @param {Record<string, (e: KeyboardEvent) => {}} config - A map of keyboardEvent code to function.\n * @param {RefObject} ref - The element which the keyboard config has to apply on.\n * @param {boolean} isActive - A flag to determine when the keyboard config has to be applied.\n *\n * Example:\n * useKeyboard({\n * Escape: closeMenu,\n * ArrowUp: () => { doSomething() },\n * KeyB: () => { console.log(\"bagi\") },\n * }, menuRef, menuOpen)\n *\n * This mean that these keyboard shortcuts will be applied on menuRef when the menu is opened.\n */\n\nexport function useKeyboard(\n config: Record<string, (e: KeyboardEvent) => void | boolean>,\n ref: RefObject<any>,\n isActive: boolean\n): void {\n const document = useDocument();\n const handleKeyboard = (event: KeyboardEvent) => {\n if (!isActive) return;\n\n if (\n document.activeElement !== ref.current &&\n !ref.current.contains(document.activeElement)\n )\n return;\n\n const targetConfigKey = Object.keys(config).find((targetKeys: string) =>\n targetKeys.split(\" \").includes(event.code)\n );\n if (!targetConfigKey) return;\n\n event.preventDefault();\n const res = config[targetConfigKey](event);\n if (res === false) {\n event.stopPropagation();\n }\n };\n\n useEffect(() => {\n document.addEventListener(\"keydown\", handleKeyboard);\n\n return () => {\n document.removeEventListener(\"keydown\", handleKeyboard);\n };\n });\n}\n"],"names":["useKeyboard","config","ref","isActive","document","useDocument","handleKeyboard","event","activeElement","current","contains","targetConfigKey","Object","keys","find","targetKeys","split","includes","code","preventDefault","res","stopPropagation","useEffect","addEventListener","removeEventListener"],"mappings":";;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,SAASA,WAAWA,CACzBC,MAA4D,EAC5DC,GAAmB,EACnBC,QAAiB,EACX;EACN,MAAMC,QAAQ,GAAGC,WAAW,EAAE,CAAA;EAC9B,MAAMC,cAAc,GAAIC,KAAoB,IAAK;IAC/C,IAAI,CAACJ,QAAQ,EAAE,OAAA;AAEf,IAAA,IACEC,QAAQ,CAACI,aAAa,KAAKN,GAAG,CAACO,OAAO,IACtC,CAACP,GAAG,CAACO,OAAO,CAACC,QAAQ,CAACN,QAAQ,CAACI,aAAa,CAAC,EAE7C,OAAA;IAEF,MAAMG,eAAe,GAAGC,MAAM,CAACC,IAAI,CAACZ,MAAM,CAAC,CAACa,IAAI,CAAEC,UAAkB,IAClEA,UAAU,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,QAAQ,CAACV,KAAK,CAACW,IAAI,CAAC,CAC3C,CAAA;IACD,IAAI,CAACP,eAAe,EAAE,OAAA;IAEtBJ,KAAK,CAACY,cAAc,EAAE,CAAA;IACtB,MAAMC,GAAG,GAAGnB,MAAM,CAACU,eAAe,CAAC,CAACJ,KAAK,CAAC,CAAA;IAC1C,IAAIa,GAAG,KAAK,KAAK,EAAE;MACjBb,KAAK,CAACc,eAAe,EAAE,CAAA;AACzB,KAAA;GACD,CAAA;AAEDC,EAAAA,SAAS,CAAC,MAAM;AACdlB,IAAAA,QAAQ,CAACmB,gBAAgB,CAAC,SAAS,EAAEjB,cAAc,CAAC,CAAA;AAEpD,IAAA,OAAO,MAAM;AACXF,MAAAA,QAAQ,CAACoB,mBAAmB,CAAC,SAAS,EAAElB,cAAc,CAAC,CAAA;KACxD,CAAA;AACH,GAAC,CAAC,CAAA;AACJ;;;;"}
@@ -0,0 +1,51 @@
1
+ import { useCallback, useMemo, useEffect } from 'react';
2
+ import { useDocument } from './useDocument.js';
3
+
4
+ const registry = {};
5
+ const handleEscape = event => {
6
+ if (!event.defaultPrevented) {
7
+ const handlers = Object.values(registry).reverse();
8
+ for (let i = 0; i < handlers.length; i += 1) {
9
+ const handler = handlers[i];
10
+ handler(event);
11
+ if (event.defaultPrevented) break;
12
+ }
13
+ }
14
+ };
15
+ const register = (id, handler) => {
16
+ registry[id] = handler;
17
+ };
18
+ const deregister = id => {
19
+ delete registry[id];
20
+ };
21
+
22
+ // For auto-incrementing unique identifiers for registered different handlers.
23
+ let handlerId = 0;
24
+ const useOnEscapePress = function (onEscape) {
25
+ let callbackDependencies = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [onEscape];
26
+ // eslint-disable-next-line react-hooks/exhaustive-deps
27
+ const escapeCallback = useCallback(onEscape, callbackDependencies);
28
+ const document = useDocument();
29
+ const handler = useCallback(event => {
30
+ if (event.key === "Escape") escapeCallback(event);
31
+ }, [escapeCallback]);
32
+ const id = useMemo(() => {
33
+ handlerId += 1;
34
+ return handlerId;
35
+ }, []);
36
+ useEffect(() => {
37
+ if (Object.keys(registry).length === 0) {
38
+ document.addEventListener("keydown", handleEscape);
39
+ }
40
+ register(id, handler);
41
+ return () => {
42
+ deregister(id);
43
+ if (Object.keys(registry).length === 0) {
44
+ document.removeEventListener("keydown", handleEscape);
45
+ }
46
+ };
47
+ }, [id, handler, document]);
48
+ };
49
+
50
+ export { useOnEscapePress };
51
+ //# sourceMappingURL=useOnEscapePress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOnEscapePress.js","sources":["../../../../src/shared/useOnEscapePress.ts"],"sourcesContent":["import { useEffect, useCallback, useMemo } from \"react\";\nimport { useDocument } from \"./useDocument\";\n\ntype KeyboardEventCallback = (event: KeyboardEvent) => void;\n\nconst registry: { [id: number]: KeyboardEventCallback } = {};\n\nconst handleEscape = (event: KeyboardEvent) => {\n if (!event.defaultPrevented) {\n const handlers = Object.values(registry).reverse();\n\n for (let i = 0; i < handlers.length; i += 1) {\n const handler = handlers[i];\n\n handler(event);\n\n if (event.defaultPrevented) break;\n }\n }\n};\n\nconst register = (id: number, handler: KeyboardEventCallback): void => {\n registry[id] = handler;\n};\n\nconst deregister = (id: number) => {\n delete registry[id];\n};\n\n// For auto-incrementing unique identifiers for registered different handlers.\nlet handlerId = 0;\n\nexport const useOnEscapePress = (\n onEscape: (e: KeyboardEvent) => void,\n callbackDependencies: React.DependencyList = [onEscape]\n): void => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const escapeCallback = useCallback(onEscape, callbackDependencies);\n const document = useDocument();\n\n const handler = useCallback<KeyboardEventCallback>(\n (event) => {\n if (event.key === \"Escape\") escapeCallback(event);\n },\n [escapeCallback]\n );\n\n const id = useMemo(() => {\n handlerId += 1;\n return handlerId;\n }, []);\n\n useEffect(() => {\n if (Object.keys(registry).length === 0) {\n document.addEventListener(\"keydown\", handleEscape);\n }\n register(id, handler);\n\n return () => {\n deregister(id);\n if (Object.keys(registry).length === 0) {\n document.removeEventListener(\"keydown\", handleEscape);\n }\n };\n }, [id, handler, document]);\n};\n"],"names":["registry","handleEscape","event","defaultPrevented","handlers","Object","values","reverse","i","length","handler","register","id","deregister","handlerId","useOnEscapePress","onEscape","callbackDependencies","arguments","undefined","escapeCallback","useCallback","document","useDocument","key","useMemo","useEffect","keys","addEventListener","removeEventListener"],"mappings":";;;AAKA,MAAMA,QAAiD,GAAG,EAAE,CAAA;AAE5D,MAAMC,YAAY,GAAIC,KAAoB,IAAK;AAC7C,EAAA,IAAI,CAACA,KAAK,CAACC,gBAAgB,EAAE;IAC3B,MAAMC,QAAQ,GAAGC,MAAM,CAACC,MAAM,CAACN,QAAQ,CAAC,CAACO,OAAO,EAAE,CAAA;AAElD,IAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,QAAQ,CAACK,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;AAC3C,MAAA,MAAME,OAAO,GAAGN,QAAQ,CAACI,CAAC,CAAC,CAAA;MAE3BE,OAAO,CAACR,KAAK,CAAC,CAAA;MAEd,IAAIA,KAAK,CAACC,gBAAgB,EAAE,MAAA;AAC9B,KAAA;AACF,GAAA;AACF,CAAC,CAAA;AAED,MAAMQ,QAAQ,GAAGA,CAACC,EAAU,EAAEF,OAA8B,KAAW;AACrEV,EAAAA,QAAQ,CAACY,EAAE,CAAC,GAAGF,OAAO,CAAA;AACxB,CAAC,CAAA;AAED,MAAMG,UAAU,GAAID,EAAU,IAAK;EACjC,OAAOZ,QAAQ,CAACY,EAAE,CAAC,CAAA;AACrB,CAAC,CAAA;;AAED;AACA,IAAIE,SAAS,GAAG,CAAC,CAAA;MAEJC,gBAAgB,GAAG,UAC9BC,QAAoC,EAE3B;AAAA,EAAA,IADTC,oBAA0C,GAAAC,SAAA,CAAAT,MAAA,GAAAS,CAAAA,IAAAA,SAAA,CAAAC,CAAAA,CAAAA,KAAAA,SAAA,GAAAD,SAAA,CAAG,CAAA,CAAA,GAAA,CAACF,QAAQ,CAAC,CAAA;AAEvD;AACA,EAAA,MAAMI,cAAc,GAAGC,WAAW,CAACL,QAAQ,EAAEC,oBAAoB,CAAC,CAAA;EAClE,MAAMK,QAAQ,GAAGC,WAAW,EAAE,CAAA;AAE9B,EAAA,MAAMb,OAAO,GAAGW,WAAW,CACxBnB,KAAK,IAAK;IACT,IAAIA,KAAK,CAACsB,GAAG,KAAK,QAAQ,EAAEJ,cAAc,CAAClB,KAAK,CAAC,CAAA;AACnD,GAAC,EACD,CAACkB,cAAc,CAAC,CACjB,CAAA;AAED,EAAA,MAAMR,EAAE,GAAGa,OAAO,CAAC,MAAM;AACvBX,IAAAA,SAAS,IAAI,CAAC,CAAA;AACd,IAAA,OAAOA,SAAS,CAAA;GACjB,EAAE,EAAE,CAAC,CAAA;AAENY,EAAAA,SAAS,CAAC,MAAM;IACd,IAAIrB,MAAM,CAACsB,IAAI,CAAC3B,QAAQ,CAAC,CAACS,MAAM,KAAK,CAAC,EAAE;AACtCa,MAAAA,QAAQ,CAACM,gBAAgB,CAAC,SAAS,EAAE3B,YAAY,CAAC,CAAA;AACpD,KAAA;AACAU,IAAAA,QAAQ,CAACC,EAAE,EAAEF,OAAO,CAAC,CAAA;AAErB,IAAA,OAAO,MAAM;MACXG,UAAU,CAACD,EAAE,CAAC,CAAA;MACd,IAAIP,MAAM,CAACsB,IAAI,CAAC3B,QAAQ,CAAC,CAACS,MAAM,KAAK,CAAC,EAAE;AACtCa,QAAAA,QAAQ,CAACO,mBAAmB,CAAC,SAAS,EAAE5B,YAAY,CAAC,CAAA;AACvD,OAAA;KACD,CAAA;GACF,EAAE,CAACW,EAAE,EAAEF,OAAO,EAAEY,QAAQ,CAAC,CAAC,CAAA;AAC7B;;;;"}
@@ -0,0 +1,32 @@
1
+ import { useCallback, useEffect } from 'react';
2
+ import { useWindow } from './useWindow.js';
3
+
4
+ /**
5
+ * useOutsideClick handles outside click of a given element.
6
+ * @param {RefObject} ref - Reference to a DOM element.
7
+ * @param {e: Event) => void} handler - Function invoked when a click is triggered outside the referenced element.
8
+ * @param {boolean} isActive - A flag to determine when the outside click event needs to be applied.
9
+ *
10
+ * Example: useOutsideClick(menuRef, closeMenu, menuIsOpen)
11
+ * Means that when a menu is opened, clicking outside of the menu will close the mneu.
12
+ */
13
+
14
+ const useOutsideClick = (ref, handler, isActive) => {
15
+ const window = useWindow();
16
+ const outsideClickEvent = useCallback(e => {
17
+ if (ref && ref.current && !ref.current.contains(e.target)) {
18
+ handler(e);
19
+ }
20
+ }, [handler, ref]);
21
+ useEffect(() => {
22
+ if (isActive) {
23
+ window.addEventListener("click", outsideClickEvent);
24
+ }
25
+ return () => {
26
+ window.removeEventListener("click", outsideClickEvent);
27
+ };
28
+ }, [isActive, window, outsideClickEvent]);
29
+ };
30
+
31
+ export { useOutsideClick };
32
+ //# sourceMappingURL=useOutsideClick.js.map