@lumx/react 3.0.2-alpha-react-utils.2 → 3.0.2-alpha-react-utils.3

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 (357) hide show
  1. package/_internal/{6340c129.js → ClickAwayProvider.js} +107 -2
  2. package/_internal/ClickAwayProvider.js.map +1 -0
  3. package/_internal/{eca6d4dc.d.ts → types.d.ts} +1 -1
  4. package/index.d.ts +2627 -56
  5. package/index.js +12438 -56
  6. package/index.js.map +1 -1
  7. package/package.json +4 -4
  8. package/utils/index.d.ts +1 -1
  9. package/utils/index.js +1 -1
  10. package/_internal/0062d1bc.js +0 -220
  11. package/_internal/0062d1bc.js.map +0 -1
  12. package/_internal/03e8323d.d.ts +0 -118
  13. package/_internal/0402f9bc.d.ts +0 -183
  14. package/_internal/0b370acc.js +0 -796
  15. package/_internal/0b370acc.js.map +0 -1
  16. package/_internal/0d154d73.d.ts +0 -67
  17. package/_internal/113e3b40.d.ts +0 -31
  18. package/_internal/12ab39e4.js +0 -58
  19. package/_internal/12ab39e4.js.map +0 -1
  20. package/_internal/13e759f3.js +0 -343
  21. package/_internal/13e759f3.js.map +0 -1
  22. package/_internal/158b46d5.js +0 -151
  23. package/_internal/158b46d5.js.map +0 -1
  24. package/_internal/17b74e16.d.ts +0 -31
  25. package/_internal/1b1530a4.d.ts +0 -43
  26. package/_internal/20976405.js +0 -87
  27. package/_internal/20976405.js.map +0 -1
  28. package/_internal/20b0e9a5.d.ts +0 -77
  29. package/_internal/26cd9c63.js +0 -118
  30. package/_internal/26cd9c63.js.map +0 -1
  31. package/_internal/27f21164.js +0 -79
  32. package/_internal/27f21164.js.map +0 -1
  33. package/_internal/288dfd0f.js +0 -13
  34. package/_internal/288dfd0f.js.map +0 -1
  35. package/_internal/28aaf23a.d.ts +0 -41
  36. package/_internal/2c829c0b.d.ts +0 -57
  37. package/_internal/2cc0aec5.js +0 -86
  38. package/_internal/2cc0aec5.js.map +0 -1
  39. package/_internal/2d0a5b28.js +0 -23
  40. package/_internal/2d0a5b28.js.map +0 -1
  41. package/_internal/2d4b5a5e.d.ts +0 -92
  42. package/_internal/2d770113.d.ts +0 -38
  43. package/_internal/2fe97f00.js +0 -291
  44. package/_internal/2fe97f00.js.map +0 -1
  45. package/_internal/31c16fa0.d.ts +0 -37
  46. package/_internal/329a01d3.js +0 -25
  47. package/_internal/329a01d3.js.map +0 -1
  48. package/_internal/3326e990.js +0 -168
  49. package/_internal/3326e990.js.map +0 -1
  50. package/_internal/377b2f44.js +0 -70
  51. package/_internal/377b2f44.js.map +0 -1
  52. package/_internal/3b8d2a6e.js +0 -124
  53. package/_internal/3b8d2a6e.js.map +0 -1
  54. package/_internal/3bd3186e.d.ts +0 -57
  55. package/_internal/48e40868.js +0 -101
  56. package/_internal/48e40868.js.map +0 -1
  57. package/_internal/490ec1da.js +0 -322
  58. package/_internal/490ec1da.js.map +0 -1
  59. package/_internal/49127d69.d.ts +0 -52
  60. package/_internal/4dcd87cb.js +0 -78
  61. package/_internal/4dcd87cb.js.map +0 -1
  62. package/_internal/4f44d848.js +0 -157
  63. package/_internal/4f44d848.js.map +0 -1
  64. package/_internal/4fc64a2e.js +0 -27
  65. package/_internal/4fc64a2e.js.map +0 -1
  66. package/_internal/53a831be.js +0 -108
  67. package/_internal/53a831be.js.map +0 -1
  68. package/_internal/55271fa1.d.ts +0 -34
  69. package/_internal/55d30377.d.ts +0 -22
  70. package/_internal/56385b04.js +0 -116
  71. package/_internal/56385b04.js.map +0 -1
  72. package/_internal/599e250a.d.ts +0 -88
  73. package/_internal/5a054691.d.ts +0 -33
  74. package/_internal/5a127b58.js +0 -82
  75. package/_internal/5a127b58.js.map +0 -1
  76. package/_internal/5a1c0db4.js +0 -156
  77. package/_internal/5a1c0db4.js.map +0 -1
  78. package/_internal/5babcc39.js +0 -147
  79. package/_internal/5babcc39.js.map +0 -1
  80. package/_internal/5c1bf4d4.d.ts +0 -81
  81. package/_internal/5d8ed4ee.js +0 -113
  82. package/_internal/5d8ed4ee.js.map +0 -1
  83. package/_internal/616f2912.js +0 -301
  84. package/_internal/616f2912.js.map +0 -1
  85. package/_internal/61f915de.d.ts +0 -49
  86. package/_internal/620081fa.js +0 -122
  87. package/_internal/620081fa.js.map +0 -1
  88. package/_internal/6340c129.js.map +0 -1
  89. package/_internal/6581c863.d.ts +0 -34
  90. package/_internal/66de4d45.d.ts +0 -32
  91. package/_internal/6735c5c8.d.ts +0 -62
  92. package/_internal/69dd1472.js +0 -112
  93. package/_internal/69dd1472.js.map +0 -1
  94. package/_internal/6a0e1c77.js +0 -327
  95. package/_internal/6a0e1c77.js.map +0 -1
  96. package/_internal/701c20b0.d.ts +0 -24
  97. package/_internal/7391188a.js +0 -81
  98. package/_internal/7391188a.js.map +0 -1
  99. package/_internal/74cb6c26.js +0 -136
  100. package/_internal/74cb6c26.js.map +0 -1
  101. package/_internal/761031bf.js +0 -314
  102. package/_internal/761031bf.js.map +0 -1
  103. package/_internal/76fed69d.js +0 -50
  104. package/_internal/76fed69d.js.map +0 -1
  105. package/_internal/78ef8e34.js +0 -40
  106. package/_internal/78ef8e34.js.map +0 -1
  107. package/_internal/7b906e16.d.ts +0 -17
  108. package/_internal/7be11ddc.d.ts +0 -35
  109. package/_internal/7d39705e.d.ts +0 -20
  110. package/_internal/7e03266f.js +0 -47
  111. package/_internal/7e03266f.js.map +0 -1
  112. package/_internal/7e8d0ac5.js +0 -84
  113. package/_internal/7e8d0ac5.js.map +0 -1
  114. package/_internal/7ffa45f6.js +0 -48
  115. package/_internal/7ffa45f6.js.map +0 -1
  116. package/_internal/84c1ec44.js +0 -257
  117. package/_internal/84c1ec44.js.map +0 -1
  118. package/_internal/8518279f.js +0 -96
  119. package/_internal/8518279f.js.map +0 -1
  120. package/_internal/853713cd.js +0 -25
  121. package/_internal/853713cd.js.map +0 -1
  122. package/_internal/86566d75.d.ts +0 -27
  123. package/_internal/86d22dde.d.ts +0 -57
  124. package/_internal/8e755ded.d.ts +0 -101
  125. package/_internal/901471f5.d.ts +0 -37
  126. package/_internal/935ce959.d.ts +0 -49
  127. package/_internal/97089888.d.ts +0 -16
  128. package/_internal/97cc728c.d.ts +0 -26
  129. package/_internal/9ab3c637.js +0 -2474
  130. package/_internal/9ab3c637.js.map +0 -1
  131. package/_internal/9ca3f59c.js +0 -60
  132. package/_internal/9ca3f59c.js.map +0 -1
  133. package/_internal/9e95ea38.d.ts +0 -43
  134. package/_internal/a0108f92.js +0 -84
  135. package/_internal/a0108f92.js.map +0 -1
  136. package/_internal/a493a193.d.ts +0 -65
  137. package/_internal/a521723d.js +0 -120
  138. package/_internal/a521723d.js.map +0 -1
  139. package/_internal/a6fad025.d.ts +0 -107
  140. package/_internal/a8fa525f.js +0 -124
  141. package/_internal/a8fa525f.js.map +0 -1
  142. package/_internal/aca2ecf5.js +0 -141
  143. package/_internal/aca2ecf5.js.map +0 -1
  144. package/_internal/aef2ef1c.js +0 -53
  145. package/_internal/aef2ef1c.js.map +0 -1
  146. package/_internal/af048b0c.js +0 -89
  147. package/_internal/af048b0c.js.map +0 -1
  148. package/_internal/af2cd0cd.d.ts +0 -17
  149. package/_internal/afec6b62.js +0 -864
  150. package/_internal/afec6b62.js.map +0 -1
  151. package/_internal/b0eb3a30.js +0 -72
  152. package/_internal/b0eb3a30.js.map +0 -1
  153. package/_internal/b89517ea.js +0 -275
  154. package/_internal/b89517ea.js.map +0 -1
  155. package/_internal/bafa6fcc.js +0 -116
  156. package/_internal/bafa6fcc.js.map +0 -1
  157. package/_internal/bbbeb49e.js +0 -47
  158. package/_internal/bbbeb49e.js.map +0 -1
  159. package/_internal/c11f6162.d.ts +0 -52
  160. package/_internal/c723dab4.js +0 -133
  161. package/_internal/c723dab4.js.map +0 -1
  162. package/_internal/c87cc857.d.ts +0 -42
  163. package/_internal/c97f8d04.js +0 -424
  164. package/_internal/c97f8d04.js.map +0 -1
  165. package/_internal/cbb373ea.d.ts +0 -6
  166. package/_internal/cbef23b6.d.ts +0 -104
  167. package/_internal/cdf77f06.d.ts +0 -88
  168. package/_internal/d350f2ff.js +0 -105
  169. package/_internal/d350f2ff.js.map +0 -1
  170. package/_internal/d71a8cf7.js +0 -54
  171. package/_internal/d71a8cf7.js.map +0 -1
  172. package/_internal/d9337952.js +0 -96
  173. package/_internal/d9337952.js.map +0 -1
  174. package/_internal/def14e1a.d.ts +0 -24
  175. package/_internal/e0cd29c7.d.ts +0 -35
  176. package/_internal/e354228f.js +0 -145
  177. package/_internal/e354228f.js.map +0 -1
  178. package/_internal/e3922a05.d.ts +0 -22
  179. package/_internal/e3cb6177.d.ts +0 -75
  180. package/_internal/e810c841.d.ts +0 -182
  181. package/_internal/ea700b01.d.ts +0 -43
  182. package/_internal/eed07003.js +0 -122
  183. package/_internal/eed07003.js.map +0 -1
  184. package/_internal/f1c9b334.d.ts +0 -22
  185. package/_internal/f3c3a674.js +0 -281
  186. package/_internal/f3c3a674.js.map +0 -1
  187. package/_internal/f571cdcd.js +0 -132
  188. package/_internal/f571cdcd.js.map +0 -1
  189. package/_internal/f5bdff7e.js +0 -282
  190. package/_internal/f5bdff7e.js.map +0 -1
  191. package/_internal/f851fc00.d.ts +0 -34
  192. package/_internal/f859b007.d.ts +0 -49
  193. package/_internal/fb384b79.d.ts +0 -38
  194. package/_internal/fc4c034b.js +0 -63
  195. package/_internal/fc4c034b.js.map +0 -1
  196. package/_internal/fc608bd9.js +0 -16
  197. package/_internal/fc608bd9.js.map +0 -1
  198. package/_internal/fd1f4d68.d.ts +0 -36
  199. package/_internal/fd867c9d.js +0 -346
  200. package/_internal/fd867c9d.js.map +0 -1
  201. package/_internal/ff8081e5.js +0 -57
  202. package/_internal/ff8081e5.js.map +0 -1
  203. package/_internal/ffd1bfe3.js +0 -123
  204. package/_internal/ffd1bfe3.js.map +0 -1
  205. package/components/alert-dialog.d.ts +0 -6
  206. package/components/alert-dialog.js +0 -2
  207. package/components/alert-dialog.js.map +0 -1
  208. package/components/autocomplete.d.ts +0 -8
  209. package/components/autocomplete.js +0 -2
  210. package/components/autocomplete.js.map +0 -1
  211. package/components/avatar.d.ts +0 -4
  212. package/components/avatar.js +0 -2
  213. package/components/avatar.js.map +0 -1
  214. package/components/badge.d.ts +0 -3
  215. package/components/badge.js +0 -2
  216. package/components/badge.js.map +0 -1
  217. package/components/button.d.ts +0 -8
  218. package/components/button.js +0 -4
  219. package/components/button.js.map +0 -1
  220. package/components/checkbox.d.ts +0 -3
  221. package/components/checkbox.js +0 -2
  222. package/components/checkbox.js.map +0 -1
  223. package/components/chip.d.ts +0 -3
  224. package/components/chip.js +0 -3
  225. package/components/chip.js.map +0 -1
  226. package/components/comment-block.d.ts +0 -5
  227. package/components/comment-block.js +0 -2
  228. package/components/comment-block.js.map +0 -1
  229. package/components/date-picker.d.ts +0 -7
  230. package/components/date-picker.js +0 -2
  231. package/components/date-picker.js.map +0 -1
  232. package/components/dialog.d.ts +0 -3
  233. package/components/dialog.js +0 -2
  234. package/components/dialog.js.map +0 -1
  235. package/components/divider.d.ts +0 -3
  236. package/components/divider.js +0 -2
  237. package/components/divider.js.map +0 -1
  238. package/components/drag-handle.d.ts +0 -3
  239. package/components/drag-handle.js +0 -2
  240. package/components/drag-handle.js.map +0 -1
  241. package/components/dropdown.d.ts +0 -4
  242. package/components/dropdown.js +0 -2
  243. package/components/dropdown.js.map +0 -1
  244. package/components/expansion-panel.d.ts +0 -7
  245. package/components/expansion-panel.js +0 -2
  246. package/components/expansion-panel.js.map +0 -1
  247. package/components/flag.d.ts +0 -3
  248. package/components/flag.js +0 -2
  249. package/components/flag.js.map +0 -1
  250. package/components/flex-box.d.ts +0 -3
  251. package/components/flex-box.js +0 -2
  252. package/components/flex-box.js.map +0 -1
  253. package/components/generic-block.d.ts +0 -4
  254. package/components/generic-block.js +0 -2
  255. package/components/generic-block.js.map +0 -1
  256. package/components/grid.d.ts +0 -3
  257. package/components/grid.js +0 -2
  258. package/components/grid.js.map +0 -1
  259. package/components/heading.d.ts +0 -4
  260. package/components/heading.js +0 -2
  261. package/components/heading.js.map +0 -1
  262. package/components/icon.d.ts +0 -3
  263. package/components/icon.js +0 -2
  264. package/components/icon.js.map +0 -1
  265. package/components/image-block.d.ts +0 -4
  266. package/components/image-block.js +0 -2
  267. package/components/image-block.js.map +0 -1
  268. package/components/input-helper.d.ts +0 -3
  269. package/components/input-helper.js +0 -2
  270. package/components/input-helper.js.map +0 -1
  271. package/components/input-label.d.ts +0 -3
  272. package/components/input-label.js +0 -2
  273. package/components/input-label.js.map +0 -1
  274. package/components/lightbox.d.ts +0 -7
  275. package/components/lightbox.js +0 -2
  276. package/components/lightbox.js.map +0 -1
  277. package/components/link-preview.d.ts +0 -5
  278. package/components/link-preview.js +0 -2
  279. package/components/link-preview.js.map +0 -1
  280. package/components/link.d.ts +0 -3
  281. package/components/link.js +0 -2
  282. package/components/link.js.map +0 -1
  283. package/components/list.d.ts +0 -3
  284. package/components/list.js +0 -3
  285. package/components/list.js.map +0 -1
  286. package/components/message.d.ts +0 -3
  287. package/components/message.js +0 -2
  288. package/components/message.js.map +0 -1
  289. package/components/mosaic.d.ts +0 -4
  290. package/components/mosaic.js +0 -2
  291. package/components/mosaic.js.map +0 -1
  292. package/components/notification.d.ts +0 -3
  293. package/components/notification.js +0 -2
  294. package/components/notification.js.map +0 -1
  295. package/components/popover.d.ts +0 -3
  296. package/components/popover.js +0 -2
  297. package/components/popover.js.map +0 -1
  298. package/components/post-block.d.ts +0 -4
  299. package/components/post-block.js +0 -2
  300. package/components/post-block.js.map +0 -1
  301. package/components/progress-tracker.d.ts +0 -3
  302. package/components/progress-tracker.js +0 -2
  303. package/components/progress-tracker.js.map +0 -1
  304. package/components/progress.d.ts +0 -3
  305. package/components/progress.js +0 -2
  306. package/components/progress.js.map +0 -1
  307. package/components/radio-button.d.ts +0 -3
  308. package/components/radio-button.js +0 -2
  309. package/components/radio-button.js.map +0 -1
  310. package/components/select.d.ts +0 -7
  311. package/components/select.js +0 -2
  312. package/components/select.js.map +0 -1
  313. package/components/side-navigation.d.ts +0 -7
  314. package/components/side-navigation.js +0 -2
  315. package/components/side-navigation.js.map +0 -1
  316. package/components/skeleton.d.ts +0 -3
  317. package/components/skeleton.js +0 -2
  318. package/components/skeleton.js.map +0 -1
  319. package/components/slider.d.ts +0 -3
  320. package/components/slider.js +0 -2
  321. package/components/slider.js.map +0 -1
  322. package/components/slideshow.d.ts +0 -7
  323. package/components/slideshow.js +0 -2
  324. package/components/slideshow.js.map +0 -1
  325. package/components/switch.d.ts +0 -3
  326. package/components/switch.js +0 -2
  327. package/components/switch.js.map +0 -1
  328. package/components/table.d.ts +0 -3
  329. package/components/table.js +0 -2
  330. package/components/table.js.map +0 -1
  331. package/components/tabs.d.ts +0 -4
  332. package/components/tabs.js +0 -2
  333. package/components/tabs.js.map +0 -1
  334. package/components/text-field.d.ts +0 -7
  335. package/components/text-field.js +0 -2
  336. package/components/text-field.js.map +0 -1
  337. package/components/text.d.ts +0 -3
  338. package/components/text.js +0 -2
  339. package/components/text.js.map +0 -1
  340. package/components/thumbnail.d.ts +0 -4
  341. package/components/thumbnail.js +0 -3
  342. package/components/thumbnail.js.map +0 -1
  343. package/components/toolbar.d.ts +0 -3
  344. package/components/toolbar.js +0 -2
  345. package/components/toolbar.js.map +0 -1
  346. package/components/tooltip.d.ts +0 -4
  347. package/components/tooltip.js +0 -2
  348. package/components/tooltip.js.map +0 -1
  349. package/components/uploader.d.ts +0 -3
  350. package/components/uploader.js +0 -2
  351. package/components/uploader.js.map +0 -1
  352. package/components/user-block.d.ts +0 -5
  353. package/components/user-block.js +0 -2
  354. package/components/user-block.js.map +0 -1
  355. package/components.d.ts +0 -2
  356. package/components.js +0 -156
  357. package/components.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"afec6b62.js","sources":["../../src/hooks/useInterval.tsx","../../src/components/slideshow/constants.ts","../../src/hooks/useSlideshowControls.ts","../../src/components/slideshow/useSlideFocusManagement.tsx","../../src/components/slideshow/SlideshowItemGroup.tsx","../../src/components/slideshow/Slideshow.tsx","../../src/components/slideshow/SlideshowItem.tsx","../../src/components/slideshow/useSwipeNavigate.ts","../../src/components/slideshow/usePaginationVisibleRange.ts","../../src/components/slideshow/SlideshowControls.tsx","../../src/components/slideshow/Slides.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport isFunction from 'lodash/isFunction';\nimport { Callback } from '@lumx/react/utils/type';\n\n/**\n * Making setInterval Declarative with React Hooks.\n * Credits: https://overreacted.io/making-setinterval-declarative-with-react-hooks/\n *\n * @param callback Function called by setInterval.\n * @param delay Delay for setInterval.\n */\nexport function useInterval(callback: Callback, delay: number | null): void {\n const savedCallback = useRef<Callback>();\n\n useEffect(() => {\n savedCallback.current = callback;\n });\n\n useEffect(() => {\n if (delay === null) return undefined;\n\n function tick() {\n if (isFunction(savedCallback.current)) {\n savedCallback.current();\n }\n }\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }, [delay]);\n}\n","/**\n * Autoplay default interval in ms.\n */\nexport const AUTOPLAY_DEFAULT_INTERVAL = 5000;\n\n/**\n * Full width size in percent.\n */\nexport const FULL_WIDTH_PERCENT = 100;\n\n/**\n * Edge from the active index.\n */\nexport const EDGE_FROM_ACTIVE_INDEX = 2;\n\n/**\n * Max number of pagination items.\n */\nexport const PAGINATION_ITEMS_MAX = 5;\n\n/**\n * Size of a pagination item. Used to translate wrapper.\n */\nexport const PAGINATION_ITEM_SIZE = 12;\n","import { useState, useCallback, useEffect, useMemo } from 'react';\n\nimport { useInterval } from '@lumx/react/hooks/useInterval';\nimport uniqueId from 'lodash/uniqueId';\nimport { AUTOPLAY_DEFAULT_INTERVAL } from '@lumx/react/components/slideshow/constants';\n\nexport interface UseSlideshowControlsOptions {\n /** default active index to be displayed */\n defaultActiveIndex?: number;\n /** total slides to display */\n itemsCount: number;\n /** Index of the current slide. */\n activeIndex?: number;\n /** Whether the automatic rotation of the slideshow is enabled or not. */\n autoPlay?: boolean;\n /** Whether the image has to fill its container height or not. */\n fillHeight?: boolean;\n /** Number of slides to group together. */\n groupBy?: number;\n /** Interval between each slide when automatic rotation is enabled. */\n interval?: number;\n /** Callback when slide changes */\n onChange?(index: number): void;\n /** slideshow HTML id attribute */\n id?: string;\n /** slides wrapper HTML id attribute */\n slidesId?: string;\n}\n\nexport interface UseSlideshowControls {\n /** Index for the first visible slide, should be used when groupBy is passed in */\n startIndexVisible: number;\n /** Index for the last visible slide, should be used when groupBy is passed in */\n endIndexVisible: number;\n /** total slides to be displayed */\n slidesCount: number;\n /** callback to set */\n setSlideshow: (element: HTMLDivElement | null) => void;\n /** reference to the slideshow element */\n slideshow: HTMLDivElement | null;\n /** id to be used for the slideshow */\n slideshowId: string;\n /** id to be used for the wrapper that contains the slides */\n slideshowSlidesId: string;\n /** callback that triggers the previous slide while using the slideshow controls */\n onPreviousClick: (loopback: boolean) => void;\n /** callback that triggers the next slide while using the slideshow controls */\n onNextClick: (loopback: boolean) => void;\n /** callback that triggers a specific page while using the slideshow controls */\n onPaginationClick: (index: number) => void;\n /** whether the slideshow is autoplaying or not */\n isAutoPlaying: boolean;\n /** whether the slideshow was force paused or not */\n isForcePaused: boolean;\n /** callback to change whether the slideshow is autoplaying or not */\n toggleAutoPlay: () => void;\n /** calback to change whether the slideshow should be force paused or not */\n toggleForcePause: () => void;\n /** current active slide index */\n activeIndex: number;\n /** set the current index as the active one */\n setActiveIndex: (index: number) => void;\n /** callback that stops the auto play */\n stopAutoPlay: () => void;\n /** callback that starts the auto play */\n startAutoPlay: () => void;\n}\n\nexport const DEFAULT_OPTIONS: Partial<UseSlideshowControlsOptions> = {\n activeIndex: 0,\n groupBy: 1,\n interval: AUTOPLAY_DEFAULT_INTERVAL,\n};\n\nexport const useSlideshowControls = ({\n activeIndex = DEFAULT_OPTIONS.activeIndex,\n groupBy = DEFAULT_OPTIONS.groupBy,\n interval = DEFAULT_OPTIONS.interval,\n autoPlay,\n defaultActiveIndex,\n onChange,\n itemsCount,\n id,\n slidesId,\n}: UseSlideshowControlsOptions): UseSlideshowControls => {\n const [currentIndex, setCurrentIndex] = useState(activeIndex as number);\n // Use state instead of a ref to make the slideshow controls update directly when the element is set.\n const [element, setElement] = useState<HTMLDivElement | null>(null);\n\n // Number of slides when using groupBy prop.\n const slidesCount = Math.ceil(itemsCount / Math.min(groupBy as number, itemsCount));\n\n // Change current index to display next slide.\n const goToNextSlide = useCallback(\n (loopback = true) => {\n setCurrentIndex((index) => {\n if (loopback && index === slidesCount - 1) {\n // Loopback to the start.\n return 0;\n }\n if (index < slidesCount - 1) {\n // Next slide.\n return index + 1;\n }\n return index;\n });\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Change current index to display previous slide.\n const goToPreviousSlide = useCallback(\n (loopback = true) => {\n setCurrentIndex((index) => {\n if (loopback && index === 0) {\n // Loopback to the end.\n return slidesCount - 1;\n }\n if (index > 0) {\n // Previous slide.\n return index - 1;\n }\n return index;\n });\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Auto play\n const [isAutoPlaying, setIsAutoPlaying] = useState(Boolean(autoPlay));\n const [isForcePaused, setIsForcePaused] = useState(false);\n\n const isSlideshowAutoPlaying = isForcePaused ? false : isAutoPlaying;\n // Start\n useInterval(goToNextSlide, isSlideshowAutoPlaying && slidesCount > 1 ? (interval as number) : null);\n\n // Reset current index if it become invalid.\n useEffect(() => {\n if (currentIndex > slidesCount - 1) {\n setCurrentIndex(defaultActiveIndex as number);\n }\n }, [currentIndex, slidesCount, defaultActiveIndex]);\n\n const startAutoPlay = () => {\n setIsAutoPlaying(Boolean(autoPlay));\n };\n\n const stopAutoPlay = () => {\n setIsAutoPlaying(false);\n };\n\n // Handle click on a bullet to go to a specific slide.\n const onPaginationClick = useCallback(\n (index: number) => {\n stopAutoPlay();\n setIsForcePaused(true);\n\n if (index >= 0 && index < slidesCount) {\n setCurrentIndex(index);\n }\n },\n [slidesCount, setCurrentIndex],\n );\n\n // Handle click or keyboard event to go to next slide.\n const onNextClick = useCallback(\n (loopback = true) => {\n stopAutoPlay();\n setIsForcePaused(true);\n goToNextSlide(loopback);\n },\n [goToNextSlide],\n );\n\n // Handle click or keyboard event to go to previous slide.\n const onPreviousClick = useCallback(\n (loopback = true) => {\n stopAutoPlay();\n setIsForcePaused(true);\n goToPreviousSlide(loopback);\n },\n [goToPreviousSlide],\n );\n\n // If the activeIndex props changes, update the current slide\n useEffect(() => {\n setCurrentIndex(activeIndex as number);\n }, [activeIndex]);\n\n // If the slide changes, with autoplay for example, trigger \"onChange\"\n useEffect(() => {\n if (!onChange) return;\n onChange(currentIndex);\n }, [currentIndex, onChange]);\n\n const slideshowId = useMemo(() => id || uniqueId('slideshow'), [id]);\n const slideshowSlidesId = useMemo(() => slidesId || uniqueId('slideshow-slides'), [slidesId]);\n\n const toggleAutoPlay = () => {\n if (isSlideshowAutoPlaying) {\n stopAutoPlay();\n } else {\n startAutoPlay();\n }\n };\n\n const toggleForcePause = () => {\n const shouldBePaused = !isForcePaused;\n\n setIsForcePaused(shouldBePaused);\n\n if (!shouldBePaused) {\n startAutoPlay();\n } else {\n stopAutoPlay();\n }\n };\n\n // Start index and end index of visible slides.\n const startIndexVisible = currentIndex * (groupBy as number);\n const endIndexVisible = startIndexVisible + (groupBy as number);\n\n return {\n startIndexVisible,\n endIndexVisible,\n setSlideshow: setElement,\n slideshow: element,\n slideshowId,\n slideshowSlidesId,\n onPreviousClick,\n onNextClick,\n onPaginationClick,\n isAutoPlaying: isSlideshowAutoPlaying,\n toggleAutoPlay,\n activeIndex: currentIndex,\n slidesCount,\n setActiveIndex: setCurrentIndex,\n startAutoPlay,\n stopAutoPlay,\n isForcePaused,\n toggleForcePause,\n };\n};\n","import React, { useEffect } from 'react';\nimport { getFocusableElements } from '@lumx/react/utils/focus/getFocusableElements';\n\nexport interface UseSlideFocusManagementProps {\n isSlideDisplayed?: boolean;\n slideRef: React.RefObject<HTMLDivElement>;\n}\n\n/**\n * Classname set on elements whose focus was blocked.\n * This is to easily find elements that have been tempered with,\n * and not elements whose focus was already initially blocked.\n * */\nconst BLOCKED_FOCUS_CLASSNAME = `focus-blocked`;\n\n/**\n * Manage how slides must behave when visible or not.\n * When not visible, they should be hidden from screen readers and not focusable.\n */\nexport const useSlideFocusManagement = ({ isSlideDisplayed, slideRef }: UseSlideFocusManagementProps) => {\n useEffect(() => {\n const element = slideRef?.current;\n\n if (!element) {\n return undefined;\n }\n\n /**\n * Display given slide to screen readers and, if focus was blocked, restore focus on elements.\n */\n const enableSlide = () => {\n // Hide from screen readers\n element.setAttribute('aria-hidden', 'false');\n // Find elements we have blocked focus on\n element.querySelectorAll(`.${BLOCKED_FOCUS_CLASSNAME}`).forEach((focusableElement) => {\n focusableElement.removeAttribute('tabindex');\n focusableElement.classList.remove(BLOCKED_FOCUS_CLASSNAME);\n });\n };\n\n /**\n * Hide given slide from screen readers and block focus on all focusable elements within.\n */\n const blockSlide = () => {\n element.setAttribute('aria-hidden', 'true');\n getFocusableElements(element).forEach((focusableElement) => {\n focusableElement.setAttribute('tabindex', '-1');\n focusableElement.classList.add(BLOCKED_FOCUS_CLASSNAME);\n });\n };\n\n const handleDisplay = () => {\n if (!element) {\n return;\n }\n if (isSlideDisplayed) {\n enableSlide();\n } else {\n blockSlide();\n }\n };\n\n // Callback function to execute when mutations are observed\n const callback: MutationCallback = (mutationsList) => {\n if (element) {\n for (const mutation of mutationsList) {\n if (mutation.type === 'childList') {\n handleDisplay();\n }\n }\n }\n };\n\n // Create an observer instance linked to the callback function\n const observer = new MutationObserver(callback);\n\n if (element) {\n handleDisplay();\n\n /** If slide is hidden, start observing for elements to block focus */\n if (!isSlideDisplayed) {\n observer.observe(element, { attributes: true, childList: true, subtree: true });\n }\n }\n\n return () => {\n if (!isSlideDisplayed) {\n observer.disconnect();\n }\n };\n }, [isSlideDisplayed, slideRef]);\n};\n","import React, { forwardRef } from 'react';\n\nimport classNames from 'classnames';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\n\nimport { Comp, GenericProps } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';\nimport { useSlideFocusManagement } from './useSlideFocusManagement';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowItemGroupProps extends GenericProps {\n role?: 'tabpanel' | 'group';\n label?: string;\n isDisplayed?: boolean;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowItemGroup';\n\n/**\n * Component default class name and class prefix.\n */\nexport const CLASSNAME = getRootClassName(COMPONENT_NAME);\n\nexport const buildSlideShowGroupId = (slidesId: string, index: number) => `${slidesId}-slide-${index}`;\n\n/**\n * SlideshowItemGroup component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SlideshowItemGroup: Comp<SlideshowItemGroupProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { className, children, role = 'group', label, isDisplayed, ...forwardedProps } = props;\n const groupRef = React.useRef<HTMLDivElement>(null);\n\n useSlideFocusManagement({ isSlideDisplayed: isDisplayed, slideRef: groupRef });\n\n return (\n <div\n ref={mergeRefs(groupRef, ref)}\n role={role}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n }),\n )}\n aria-roledescription=\"slide\"\n aria-label={label}\n {...forwardedProps}\n >\n {children}\n </div>\n );\n});\n\nSlideshowItemGroup.displayName = COMPONENT_NAME;\nSlideshowItemGroup.className = CLASSNAME;\n","import React, { forwardRef } from 'react';\n\nimport { SlideshowControls, SlideshowControlsProps, Theme, Slides, SlidesProps } from '@lumx/react';\nimport { DEFAULT_OPTIONS } from '@lumx/react/hooks/useSlideshowControls';\nimport { Comp, GenericProps } from '@lumx/react/utils/type';\nimport { useFocusWithin } from '@lumx/react/hooks/useFocusWithin';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\nimport { buildSlideShowGroupId } from './SlideshowItemGroup';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowProps\n extends GenericProps,\n Pick<SlidesProps, 'autoPlay' | 'slidesId' | 'id' | 'theme' | 'fillHeight' | 'groupBy' | 'slideGroupLabel'> {\n /** current slide active */\n activeIndex?: SlidesProps['activeIndex'];\n /** Interval between each slide when automatic rotation is enabled. */\n interval?: number;\n /** Props to pass to the slideshow controls (minus those already set by the Slideshow props). */\n slideshowControlsProps?: Pick<\n SlideshowControlsProps,\n 'nextButtonProps' | 'previousButtonProps' | 'paginationItemProps'\n > &\n Omit<\n SlideshowControlsProps,\n | 'activeIndex'\n | 'onPaginationClick'\n | 'onNextClick'\n | 'onPreviousClick'\n | 'slidesCount'\n | 'parentRef'\n | 'theme'\n >;\n /** Callback when slide changes */\n onChange?(index: number): void;\n}\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SlideshowProps> = {\n ...DEFAULT_OPTIONS,\n theme: Theme.light,\n};\n\n/**\n * Slideshow component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Slideshow: Comp<SlideshowProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n autoPlay,\n children,\n className,\n fillHeight,\n groupBy,\n interval,\n onChange,\n slideshowControlsProps,\n theme,\n id,\n slidesId,\n slideGroupLabel,\n ...forwardedProps\n } = props;\n // Number of slideshow items.\n const itemsCount = React.Children.count(children);\n\n const {\n activeIndex: currentIndex,\n slideshowId,\n setSlideshow,\n isAutoPlaying,\n slideshowSlidesId,\n slidesCount,\n onNextClick,\n onPaginationClick,\n onPreviousClick,\n slideshow,\n stopAutoPlay,\n startAutoPlay,\n toggleAutoPlay,\n toggleForcePause,\n } = SlideshowControls.useSlideshowControls({\n activeIndex,\n defaultActiveIndex: DEFAULT_PROPS.activeIndex as number,\n autoPlay: Boolean(autoPlay),\n itemsCount,\n groupBy,\n id,\n interval,\n onChange,\n slidesId,\n });\n\n useFocusWithin({\n element: slideshow,\n onFocusIn: stopAutoPlay,\n onFocusOut: startAutoPlay,\n });\n\n const showControls = slideshowControlsProps && slidesCount > 1;\n\n return (\n <Slides\n activeIndex={currentIndex}\n id={slideshowId}\n className={className}\n theme={theme}\n fillHeight={fillHeight}\n groupBy={groupBy}\n isAutoPlaying={isAutoPlaying}\n autoPlay={autoPlay}\n slidesId={slideshowSlidesId}\n toggleAutoPlay={toggleAutoPlay}\n ref={mergeRefs(ref, setSlideshow)}\n hasControls={showControls}\n slideGroupLabel={slideGroupLabel}\n afterSlides={\n slideshowControlsProps && slidesCount > 1 ? (\n <div className={`${Slides.className}__controls`}>\n <SlideshowControls\n {...slideshowControlsProps}\n activeIndex={currentIndex}\n onPaginationClick={onPaginationClick}\n onNextClick={onNextClick}\n onPreviousClick={onPreviousClick}\n slidesCount={slidesCount}\n parentRef={slideshow}\n theme={theme}\n isAutoPlaying={isAutoPlaying}\n nextButtonProps={{\n 'aria-controls': slideshowSlidesId,\n ...slideshowControlsProps.nextButtonProps,\n }}\n previousButtonProps={{\n 'aria-controls': slideshowSlidesId,\n ...slideshowControlsProps.previousButtonProps,\n }}\n playButtonProps={\n autoPlay\n ? {\n 'aria-controls': slideshowSlidesId,\n onClick: toggleForcePause,\n ...slideshowControlsProps.playButtonProps,\n }\n : undefined\n }\n paginationItemProps={(index) => ({\n 'aria-controls': buildSlideShowGroupId(slideshowSlidesId, index),\n ...slideshowControlsProps.paginationItemProps?.(index),\n })}\n />\n </div>\n ) : undefined\n }\n {...forwardedProps}\n >\n {children}\n </Slides>\n );\n});\n\nSlideshow.displayName = 'Slideshow';\nSlideshow.defaultProps = DEFAULT_PROPS;\n","import React, { forwardRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { Comp, GenericProps } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowItemProps extends GenericProps {\n /** interval in which slides are automatically shown */\n interval?: number;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowItem';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * SlideshowItem component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const SlideshowItem: Comp<SlideshowItemProps, HTMLDivElement> = forwardRef((props, ref) => {\n const { className, children, ...forwardedProps } = props;\n return (\n <div\n ref={ref}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n }),\n )}\n {...forwardedProps}\n >\n {children}\n </div>\n );\n});\n\nSlideshowItem.displayName = COMPONENT_NAME;\nSlideshowItem.className = CLASSNAME;\n","import { useEffect } from 'react';\nimport { detectHorizontalSwipe } from '@lumx/core/js/utils';\n\nconst isTouchDevice = () => 'ontouchstart' in window;\n\n/**\n * Listen swipe to navigate left and right.\n */\nexport function useSwipeNavigate(element?: HTMLElement | null, onNext?: () => void, onPrevious?: () => void): void {\n useEffect(() => {\n if (!element || !isTouchDevice()) return undefined;\n\n return detectHorizontalSwipe(element, (swipe) => {\n const callback = swipe === 'right' ? onPrevious : onNext;\n callback?.();\n });\n }, [onPrevious, onNext, element]);\n}\n","import { useMemo, useRef } from 'react';\nimport { EDGE_FROM_ACTIVE_INDEX, PAGINATION_ITEMS_MAX } from '@lumx/react/components/slideshow/constants';\n\ntype Range = { min: number; max: number };\n\n/**\n * Calculate the currently visible pagination \"bullet\" range.\n */\nexport function usePaginationVisibleRange(activeIndex: number, slideCount: number): Range {\n const previousVisibleRangeRef = useRef<Range>();\n return useMemo(() => {\n const lastSlide = slideCount - 1;\n const { current: previousVisibleRange } = previousVisibleRangeRef;\n let newVisibleRange: Range;\n if (activeIndex === previousVisibleRange?.max && activeIndex < lastSlide) {\n newVisibleRange = { min: previousVisibleRange.min + 1, max: previousVisibleRange.max + 1 };\n } else if (activeIndex === previousVisibleRange?.min && activeIndex > 0) {\n newVisibleRange = { min: previousVisibleRange.min - 1, max: previousVisibleRange.max - 1 };\n } else {\n const deltaItems = PAGINATION_ITEMS_MAX - 1;\n let min = activeIndex - EDGE_FROM_ACTIVE_INDEX;\n let max = activeIndex + EDGE_FROM_ACTIVE_INDEX;\n\n if (activeIndex > lastSlide - EDGE_FROM_ACTIVE_INDEX) {\n min = lastSlide - deltaItems;\n max = lastSlide;\n } else if (activeIndex < deltaItems) {\n min = 0;\n max = deltaItems;\n }\n\n newVisibleRange = { min, max };\n }\n previousVisibleRangeRef.current = newVisibleRange;\n return newVisibleRange;\n }, [activeIndex, slideCount]);\n}\n","import React, { forwardRef, RefObject, useCallback, useMemo } from 'react';\n\nimport classNames from 'classnames';\nimport range from 'lodash/range';\n\nimport { mdiChevronLeft, mdiChevronRight, mdiPlayCircleOutline, mdiPauseCircleOutline } from '@lumx/icons';\nimport { Emphasis, IconButton, IconButtonProps, Theme } from '@lumx/react';\nimport { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';\nimport { WINDOW } from '@lumx/react/constants';\nimport { useSlideshowControls, DEFAULT_OPTIONS } from '@lumx/react/hooks/useSlideshowControls';\nimport { useRovingTabIndex } from '@lumx/react/hooks/useRovingTabIndex';\n\nimport { useSwipeNavigate } from './useSwipeNavigate';\nimport { PAGINATION_ITEM_SIZE, PAGINATION_ITEMS_MAX } from './constants';\nimport { usePaginationVisibleRange } from './usePaginationVisibleRange';\n\n/**\n * Defines the props of the component.\n */\nexport interface SlideshowControlsProps extends GenericProps, HasTheme {\n /** Index of the current slide. */\n activeIndex?: number;\n /** Props to pass to the next button (minus those already set by the SlideshowControls props). */\n nextButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Reference to the parent element on which we want to listen touch swipe. */\n parentRef?: RefObject<HTMLDivElement> | HTMLDivElement | null;\n /** Props to pass to the previous button (minus those already set by the SlideshowControls props). */\n previousButtonProps: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Props to pass to the pagination wrapper */\n paginationProps?: Omit<React.HTMLAttributes<HTMLDivElement>, 'className' | 'style' | 'role'>;\n /** Number of slides. */\n slidesCount: number;\n /** On next button click callback. */\n onNextClick?(loopback?: boolean): void;\n /** On pagination change callback. */\n onPaginationClick?(index: number): void;\n /** On previous button click callback. */\n onPreviousClick?(loopback?: boolean): void;\n /** whether the slideshow is currently playing */\n isAutoPlaying?: boolean;\n /**\n * function to be executed in order to retrieve the label for the pagination item\n * @deprecated Use paginationItemProps instead.\n * */\n paginationItemLabel?: (index: number) => string;\n /**\n * function to be executed in order to retrieve the props for a pagination item.\n */\n paginationItemProps?: (itemIndex: number) => React.HTMLAttributes<HTMLButtonElement> & { label?: string };\n /** Props to pass to the lay button (minus those already set by the SlideshowControls props). */\n playButtonProps?: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'SlideshowControls';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<SlideshowControlsProps> = {\n activeIndex: 0,\n theme: Theme.light,\n};\n\n/**\n * SlideshowControls component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nconst InternalSlideshowControls: Comp<SlideshowControlsProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n className,\n nextButtonProps,\n onNextClick,\n onPaginationClick,\n onPreviousClick,\n parentRef,\n previousButtonProps,\n paginationProps,\n slidesCount,\n theme,\n isAutoPlaying = false,\n playButtonProps,\n paginationItemLabel,\n paginationItemProps,\n ...forwardedProps\n } = props;\n\n let parent;\n if (WINDOW) {\n // Checking window object to avoid errors in SSR.\n parent = parentRef instanceof HTMLElement ? parentRef : parentRef?.current;\n }\n const paginationRef = React.useRef(null);\n // Listen to touch swipe navigate left & right.\n useSwipeNavigate(\n parent,\n // Go next without loopback.\n useCallback(() => onNextClick?.(false), [onNextClick]),\n // Go previous without loopback.\n useCallback(() => onPreviousClick?.(false), [onPreviousClick]),\n );\n\n /**\n * Add roving tab index pattern to pagination items and activate slide on focus.\n */\n useRovingTabIndex({\n parentRef: paginationRef,\n elementSelector: 'button',\n keepTabIndex: true,\n onElementFocus: (element) => {\n element.click();\n },\n });\n\n // Pagination \"bullet\" range.\n const visibleRange = usePaginationVisibleRange(activeIndex as number, slidesCount);\n\n // Inline style of wrapper element.\n const wrapperStyle = { transform: `translateX(-${PAGINATION_ITEM_SIZE * visibleRange.min}px)` };\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--has-infinite-pagination`]: slidesCount > PAGINATION_ITEMS_MAX,\n })}\n >\n <IconButton\n {...previousButtonProps}\n icon={mdiChevronLeft}\n className={`${CLASSNAME}__navigation`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n onClick={onPreviousClick}\n />\n <div ref={paginationRef} className={`${CLASSNAME}__pagination`}>\n <div\n className={`${CLASSNAME}__pagination-items`}\n style={wrapperStyle}\n role=\"tablist\"\n {...paginationProps}\n >\n {useMemo(\n () =>\n range(slidesCount).map((index) => {\n const isOnEdge =\n index !== 0 &&\n index !== slidesCount - 1 &&\n (index === visibleRange.min || index === visibleRange.max);\n const isActive = activeIndex === index;\n const isOutRange = index < visibleRange.min || index > visibleRange.max;\n const {\n className: itemClassName = undefined,\n label = undefined,\n ...itemProps\n } = paginationItemProps ? paginationItemProps(index) : {};\n\n const ariaLabel =\n label || paginationItemLabel?.(index) || `${index + 1} / ${slidesCount}`;\n\n return (\n <button\n className={classNames(\n handleBasicClasses({\n prefix: `${CLASSNAME}__pagination-item`,\n isActive,\n isOnEdge,\n isOutRange,\n }),\n itemClassName,\n )}\n key={index}\n type=\"button\"\n tabIndex={isActive ? undefined : -1}\n role=\"tab\"\n aria-selected={isActive}\n onClick={() => onPaginationClick?.(index)}\n aria-label={ariaLabel}\n {...itemProps}\n />\n );\n }),\n [\n slidesCount,\n visibleRange.min,\n visibleRange.max,\n activeIndex,\n paginationItemProps,\n paginationItemLabel,\n onPaginationClick,\n ],\n )}\n </div>\n </div>\n\n {playButtonProps ? (\n <IconButton\n {...playButtonProps}\n icon={isAutoPlaying ? mdiPauseCircleOutline : mdiPlayCircleOutline}\n className={`${CLASSNAME}__play`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n />\n ) : null}\n\n <IconButton\n {...nextButtonProps}\n icon={mdiChevronRight}\n className={`${CLASSNAME}__navigation`}\n color={theme === Theme.dark ? 'light' : 'dark'}\n emphasis={Emphasis.low}\n onClick={onNextClick}\n />\n </div>\n );\n});\n\nInternalSlideshowControls.displayName = COMPONENT_NAME;\nInternalSlideshowControls.className = CLASSNAME;\nInternalSlideshowControls.defaultProps = DEFAULT_PROPS;\n\nexport const SlideshowControls = Object.assign(InternalSlideshowControls, {\n useSlideshowControls,\n useSlideshowControlsDefaultOptions: DEFAULT_OPTIONS,\n});\n","import React, { Children, CSSProperties, forwardRef } from 'react';\nimport chunk from 'lodash/chunk';\n\nimport classNames from 'classnames';\n\nimport { FULL_WIDTH_PERCENT } from '@lumx/react/components/slideshow/constants';\nimport { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';\nimport { buildSlideShowGroupId, SlideshowItemGroup } from './SlideshowItemGroup';\n\nexport interface SlidesProps extends GenericProps, HasTheme {\n /** current slide active */\n activeIndex: number;\n /** slides id to be added to the wrapper */\n id?: string;\n /** Whether the automatic rotation of the slideshow is enabled or not. */\n autoPlay?: boolean;\n /** Whether the image has to fill its container height or not. */\n fillHeight?: boolean;\n /** Number of slides to group together. */\n groupBy?: number;\n /** whether the slides are currently playing or not */\n isAutoPlaying?: boolean;\n /** id to be passed in into the slides */\n slidesId?: string;\n /** callback to change whether the slideshow is playing or not */\n toggleAutoPlay: () => void;\n /** component to be rendered after the slides */\n afterSlides?: React.ReactNode;\n /** Whether the slides have controls linked */\n hasControls?: boolean;\n /**\n * Accessible label to set on a slide group.\n * Receives the group position starting from 1 and the total number of groups.\n * */\n slideGroupLabel?: (groupPosition: number, groupTotal: number) => string;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Slideshow';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Slides component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Slides: Comp<SlidesProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n activeIndex,\n id,\n className,\n theme,\n fillHeight,\n groupBy,\n isAutoPlaying,\n toggleAutoPlay,\n slidesId,\n children,\n afterSlides,\n hasControls,\n slideGroupLabel,\n ...forwardedProps\n } = props;\n const wrapperRef = React.useRef<HTMLDivElement>(null);\n const startIndexVisible = activeIndex;\n const endIndexVisible = startIndexVisible + 1;\n\n // Inline style of wrapper element.\n const wrapperStyle: CSSProperties = { transform: `translateX(-${FULL_WIDTH_PERCENT * activeIndex}%)` };\n\n const groups = React.useMemo(() => {\n const childrenArray = Children.toArray(children);\n return groupBy && groupBy > 1 ? chunk(childrenArray, groupBy) : childrenArray;\n }, [children, groupBy]);\n\n return (\n <section\n id={id}\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, theme }), {\n [`${CLASSNAME}--fill-height`]: fillHeight,\n [`${CLASSNAME}--group-by-${groupBy}`]: Boolean(groupBy),\n })}\n aria-roledescription=\"carousel\"\n >\n <div\n id={slidesId}\n className={`${CLASSNAME}__slides`}\n onMouseEnter={toggleAutoPlay}\n onMouseLeave={toggleAutoPlay}\n aria-live={isAutoPlaying ? 'off' : 'polite'}\n >\n <div ref={wrapperRef} className={`${CLASSNAME}__wrapper`} style={wrapperStyle}>\n {groups.map((group, index) => (\n <SlideshowItemGroup\n key={index}\n id={slidesId && buildSlideShowGroupId(slidesId, index)}\n role={hasControls ? 'tabpanel' : 'group'}\n label={slideGroupLabel ? slideGroupLabel(index + 1, groups.length) : undefined}\n isDisplayed={index >= startIndexVisible && index < endIndexVisible}\n >\n {group}\n </SlideshowItemGroup>\n ))}\n </div>\n </div>\n\n {afterSlides}\n </section>\n );\n});\n\nSlides.displayName = COMPONENT_NAME;\nSlides.className = CLASSNAME;\n"],"names":["useInterval","callback","delay","savedCallback","useRef","useEffect","current","undefined","tick","isFunction","id","setInterval","clearInterval","AUTOPLAY_DEFAULT_INTERVAL","FULL_WIDTH_PERCENT","EDGE_FROM_ACTIVE_INDEX","PAGINATION_ITEMS_MAX","PAGINATION_ITEM_SIZE","DEFAULT_OPTIONS","activeIndex","groupBy","interval","useSlideshowControls","autoPlay","defaultActiveIndex","onChange","itemsCount","slidesId","useState","currentIndex","setCurrentIndex","element","setElement","slidesCount","Math","ceil","min","goToNextSlide","useCallback","loopback","index","goToPreviousSlide","Boolean","isAutoPlaying","setIsAutoPlaying","isForcePaused","setIsForcePaused","isSlideshowAutoPlaying","startAutoPlay","stopAutoPlay","onPaginationClick","onNextClick","onPreviousClick","slideshowId","useMemo","uniqueId","slideshowSlidesId","toggleAutoPlay","toggleForcePause","shouldBePaused","startIndexVisible","endIndexVisible","setSlideshow","slideshow","setActiveIndex","BLOCKED_FOCUS_CLASSNAME","useSlideFocusManagement","isSlideDisplayed","slideRef","enableSlide","setAttribute","querySelectorAll","forEach","focusableElement","removeAttribute","classList","remove","blockSlide","getFocusableElements","add","handleDisplay","mutationsList","mutation","type","observer","MutationObserver","observe","attributes","childList","subtree","disconnect","COMPONENT_NAME","CLASSNAME","getRootClassName","buildSlideShowGroupId","SlideshowItemGroup","forwardRef","props","ref","className","children","role","label","isDisplayed","forwardedProps","groupRef","React","mergeRefs","classNames","handleBasicClasses","prefix","displayName","DEFAULT_PROPS","theme","Theme","light","Slideshow","fillHeight","slideshowControlsProps","slideGroupLabel","Children","count","SlideshowControls","useFocusWithin","onFocusIn","onFocusOut","showControls","Slides","nextButtonProps","previousButtonProps","onClick","playButtonProps","paginationItemProps","defaultProps","SlideshowItem","isTouchDevice","window","useSwipeNavigate","onNext","onPrevious","detectHorizontalSwipe","swipe","usePaginationVisibleRange","slideCount","previousVisibleRangeRef","lastSlide","previousVisibleRange","newVisibleRange","max","deltaItems","InternalSlideshowControls","parentRef","paginationProps","paginationItemLabel","parent","WINDOW","HTMLElement","paginationRef","useRovingTabIndex","elementSelector","keepTabIndex","onElementFocus","click","visibleRange","wrapperStyle","transform","mdiChevronLeft","dark","Emphasis","low","range","map","isOnEdge","isActive","isOutRange","itemClassName","itemProps","ariaLabel","mdiPauseCircleOutline","mdiPlayCircleOutline","mdiChevronRight","Object","assign","useSlideshowControlsDefaultOptions","afterSlides","hasControls","wrapperRef","groups","childrenArray","toArray","chunk","group","length"],"mappings":"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"}
@@ -1,72 +0,0 @@
1
- import { b as _objectWithoutProperties, c as _extends } from './6340c129.js';
2
- import { Kind, Theme } from '../components.js';
3
- import React, { forwardRef } from 'react';
4
- import { g as getRootClassName, c as classnames, h as handleBasicClasses } from './fd867c9d.js';
5
-
6
- var INPUT_HELPER_CONFIGURATION = {
7
- error: {
8
- color: 'red'
9
- },
10
- success: {
11
- color: 'green'
12
- },
13
- warning: {
14
- color: 'yellow'
15
- }
16
- };
17
-
18
- /**
19
- * Defines the props of the component.
20
- */
21
-
22
- /**
23
- * Component display name.
24
- */
25
- var COMPONENT_NAME = 'InputHelper';
26
- /**
27
- * Component default class name and class prefix.
28
- */
29
-
30
- var CLASSNAME = getRootClassName(COMPONENT_NAME);
31
- /**
32
- * Component default props.
33
- */
34
-
35
- var DEFAULT_PROPS = {
36
- kind: Kind.info,
37
- theme: Theme.light
38
- };
39
- /**
40
- * InputHelper component.
41
- *
42
- * @param props Component props.
43
- * @param ref Component ref.
44
- * @return React element.
45
- */
46
-
47
- var InputHelper = forwardRef(function (props, ref) {
48
- var children = props.children,
49
- className = props.className,
50
- kind = props.kind,
51
- theme = props.theme,
52
- forwardedProps = _objectWithoutProperties(props, ["children", "className", "kind", "theme"]);
53
-
54
- var _ref = INPUT_HELPER_CONFIGURATION[kind] || {},
55
- color = _ref.color;
56
-
57
- return React.createElement("span", _extends({
58
- ref: ref
59
- }, forwardedProps, {
60
- className: classnames(className, handleBasicClasses({
61
- prefix: CLASSNAME,
62
- color: color,
63
- theme: theme
64
- }))
65
- }), children);
66
- });
67
- InputHelper.displayName = COMPONENT_NAME;
68
- InputHelper.className = CLASSNAME;
69
- InputHelper.defaultProps = DEFAULT_PROPS;
70
-
71
- export { InputHelper as I };
72
- //# sourceMappingURL=b0eb3a30.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"b0eb3a30.js","sources":["../../src/components/input-helper/constants.ts","../../src/components/input-helper/InputHelper.tsx"],"sourcesContent":["export const INPUT_HELPER_CONFIGURATION: Record<string, { color: string }> = {\n error: {\n color: 'red',\n },\n success: {\n color: 'green',\n },\n warning: {\n color: 'yellow',\n },\n};\n","import { Kind, Theme } from '@lumx/react';\nimport { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';\nimport classNames from 'classnames';\nimport React, { forwardRef, ReactNode } from 'react';\n\nimport { INPUT_HELPER_CONFIGURATION } from './constants';\n\n/**\n * Defines the props of the component.\n */\nexport interface InputHelperProps extends GenericProps, HasTheme {\n /** Helper content. */\n children: string | ReactNode;\n /** Helper variant. */\n kind?: Kind;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'InputHelper';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<InputHelperProps> = {\n kind: Kind.info,\n theme: Theme.light,\n};\n\n/**\n * InputHelper component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const InputHelper: Comp<InputHelperProps, HTMLSpanElement> = forwardRef((props, ref) => {\n const { children, className, kind, theme, ...forwardedProps } = props;\n const { color } = INPUT_HELPER_CONFIGURATION[kind as any] || {};\n\n return (\n <span\n ref={ref}\n {...forwardedProps}\n className={classNames(className, handleBasicClasses({ prefix: CLASSNAME, color, theme }))}\n >\n {children}\n </span>\n );\n});\n\nInputHelper.displayName = COMPONENT_NAME;\nInputHelper.className = CLASSNAME;\nInputHelper.defaultProps = DEFAULT_PROPS;\n"],"names":["INPUT_HELPER_CONFIGURATION","error","color","success","warning","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","kind","Kind","info","theme","Theme","light","InputHelper","forwardRef","props","ref","children","className","forwardedProps","classNames","handleBasicClasses","prefix","displayName","defaultProps"],"mappings":";;;;;AAAO,IAAMA,0BAA6D,GAAG;AACzEC,EAAAA,KAAK,EAAE;AACHC,IAAAA,KAAK,EAAE;AADJ,GADkE;AAIzEC,EAAAA,OAAO,EAAE;AACLD,IAAAA,KAAK,EAAE;AADF,GAJgE;AAOzEE,EAAAA,OAAO,EAAE;AACLF,IAAAA,KAAK,EAAE;AADF;AAPgE,CAAtE;;ACQP;;;;AAUA;;;AAGA,IAAMG,cAAc,GAAG,aAAvB;AAEA;;;;AAGA,IAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAD,CAAlC;AAEA;;;;AAGA,IAAMG,aAAwC,GAAG;AAC7CC,EAAAA,IAAI,EAAEC,IAAI,CAACC,IADkC;AAE7CC,EAAAA,KAAK,EAAEC,KAAK,CAACC;AAFgC,CAAjD;AAKA;;;;;;;;IAOaC,WAAoD,GAAGC,UAAU,CAAC,UAACC,KAAD,EAAQC,GAAR,EAAgB;AAAA,MACnFC,QADmF,GAC3BF,KAD2B,CACnFE,QADmF;AAAA,MACzEC,SADyE,GAC3BH,KAD2B,CACzEG,SADyE;AAAA,MAC9DX,IAD8D,GAC3BQ,KAD2B,CAC9DR,IAD8D;AAAA,MACxDG,KADwD,GAC3BK,KAD2B,CACxDL,KADwD;AAAA,MAC9CS,cAD8C,4BAC3BJ,KAD2B;;AAAA,aAEzEjB,0BAA0B,CAACS,IAAD,CAA1B,IAA2C,EAF8B;AAAA,MAEnFP,KAFmF,QAEnFA,KAFmF;;AAI3F,SACI;AACI,IAAA,GAAG,EAAEgB;AADT,KAEQG,cAFR;AAGI,IAAA,SAAS,EAAEC,UAAU,CAACF,SAAD,EAAYG,kBAAkB,CAAC;AAAEC,MAAAA,MAAM,EAAElB,SAAV;AAAqBJ,MAAAA,KAAK,EAALA,KAArB;AAA4BU,MAAAA,KAAK,EAALA;AAA5B,KAAD,CAA9B;AAHzB,MAKKO,QALL,CADJ;AASH,CAb6E;AAe9EJ,WAAW,CAACU,WAAZ,GAA0BpB,cAA1B;AACAU,WAAW,CAACK,SAAZ,GAAwBd,SAAxB;AACAS,WAAW,CAACW,YAAZ,GAA2BlB,aAA3B;;;;"}
@@ -1,275 +0,0 @@
1
- import { d as _slicedToArray, e as _toConsumableArray, b as _objectWithoutProperties, c as _extends } from './6340c129.js';
2
- import { Size } from '../components.js';
3
- import React, { useState, useEffect, forwardRef, useRef, useMemo, Children } from 'react';
4
- import { g as getRootClassName, c as classnames, h as handleBasicClasses, D as DIALOG_TRANSITION_DURATION } from './fd867c9d.js';
5
- import { D as DOCUMENT } from './288dfd0f.js';
6
- import { m as mergeRefs } from './853713cd.js';
7
- import { u as useCallbackOnEscape } from './5d8ed4ee.js';
8
- import { u as useFocusTrap } from './2cc0aec5.js';
9
- import { createPortal } from 'react-dom';
10
- import { i as isComponent } from './78ef8e34.js';
11
- import { p as partitionMulti } from './4fc64a2e.js';
12
- import { C as ClickAwayProvider } from './53a831be.js';
13
- import { u as useDelayedVisibility } from './7e03266f.js';
14
- import { u as useDisableBodyScroll } from './0062d1bc.js';
15
- import { a as Progress, P as ProgressVariant } from './7391188a.js';
16
-
17
- /**
18
- * Convenient hook to create interaction observers.
19
- *
20
- * @param elements Elements to observe.
21
- * @param options IntersectionObserver options.
22
- * @return Map of intersections.
23
- */
24
- function useIntersectionObserver(elements, options) {
25
- var _useState = useState(function () {
26
- return new Map();
27
- }),
28
- _useState2 = _slicedToArray(_useState, 2),
29
- intersections = _useState2[0],
30
- setIntersections = _useState2[1];
31
-
32
- useEffect(function () {
33
- if (elements.length < 1 || !elements.some(Boolean)) {
34
- return undefined;
35
- }
36
-
37
- var observer = new IntersectionObserver(function (entries) {
38
- var _iteratorNormalCompletion = true;
39
- var _didIteratorError = false;
40
- var _iteratorError = undefined;
41
-
42
- try {
43
- for (var _iterator = entries[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
44
- var entry = _step.value;
45
- intersections.set(entry.target, entry);
46
- }
47
- } catch (err) {
48
- _didIteratorError = true;
49
- _iteratorError = err;
50
- } finally {
51
- try {
52
- if (!_iteratorNormalCompletion && _iterator.return != null) {
53
- _iterator.return();
54
- }
55
- } finally {
56
- if (_didIteratorError) {
57
- throw _iteratorError;
58
- }
59
- }
60
- }
61
-
62
- setIntersections(new Map(intersections));
63
- }, options);
64
- var _iteratorNormalCompletion2 = true;
65
- var _didIteratorError2 = false;
66
- var _iteratorError2 = undefined;
67
-
68
- try {
69
- for (var _iterator2 = elements[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
70
- var element = _step2.value;
71
-
72
- if (element) {
73
- observer.observe(element);
74
- }
75
- }
76
- } catch (err) {
77
- _didIteratorError2 = true;
78
- _iteratorError2 = err;
79
- } finally {
80
- try {
81
- if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
82
- _iterator2.return();
83
- }
84
- } finally {
85
- if (_didIteratorError2) {
86
- throw _iteratorError2;
87
- }
88
- }
89
- }
90
-
91
- return function () {
92
- return observer.disconnect();
93
- };
94
- }, // eslint-disable-next-line react-hooks/exhaustive-deps
95
- _toConsumableArray(elements));
96
- return intersections;
97
- }
98
-
99
- /**
100
- * Defines the props of the component.
101
- */
102
-
103
- var isHeader = isComponent('header');
104
- var isFooter = isComponent('footer');
105
- /**
106
- * Component display name.
107
- */
108
-
109
- var COMPONENT_NAME = 'Dialog';
110
- /**
111
- * Component default class name and class prefix.
112
- */
113
-
114
- var CLASSNAME = getRootClassName(COMPONENT_NAME);
115
- /**
116
- * Component default props.
117
- */
118
-
119
- var DEFAULT_PROPS = {
120
- size: Size.big
121
- };
122
- /**
123
- * Dialog component.
124
- *
125
- * @param props Component props.
126
- * @param ref Component ref.
127
- * @return React element.
128
- */
129
-
130
- var Dialog = forwardRef(function (props, ref) {
131
- var _ref, _intersections$get, _ref2, _intersections$get2, _ref3, _ref4;
132
-
133
- if (!DOCUMENT) {
134
- // Can't render in SSR.
135
- return null;
136
- }
137
-
138
- var children = props.children,
139
- className = props.className,
140
- header = props.header,
141
- focusElement = props.focusElement,
142
- forceFooterDivider = props.forceFooterDivider,
143
- forceHeaderDivider = props.forceHeaderDivider,
144
- footer = props.footer,
145
- isLoading = props.isLoading,
146
- isOpen = props.isOpen,
147
- onClose = props.onClose,
148
- parentElement = props.parentElement,
149
- contentRef = props.contentRef,
150
- preventAutoClose = props.preventAutoClose,
151
- size = props.size,
152
- zIndex = props.zIndex,
153
- dialogProps = props.dialogProps,
154
- onVisibilityChange = props.onVisibilityChange,
155
- forwardedProps = _objectWithoutProperties(props, ["children", "className", "header", "focusElement", "forceFooterDivider", "forceHeaderDivider", "footer", "isLoading", "isOpen", "onClose", "parentElement", "contentRef", "preventAutoClose", "size", "zIndex", "dialogProps", "onVisibilityChange"]); // eslint-disable-next-line react-hooks/rules-of-hooks
156
-
157
-
158
- var previousOpen = React.useRef(isOpen); // eslint-disable-next-line react-hooks/rules-of-hooks
159
-
160
- React.useEffect(function () {
161
- if (isOpen !== previousOpen.current) {
162
- previousOpen.current = isOpen; // Focus the parent element on close.
163
-
164
- if (!isOpen && parentElement && parentElement.current) {
165
- parentElement.current.focus();
166
- }
167
- }
168
- }, [isOpen, parentElement]); // eslint-disable-next-line react-hooks/rules-of-hooks
169
-
170
- useCallbackOnEscape(onClose, isOpen && !preventAutoClose); // eslint-disable-next-line react-hooks/rules-of-hooks
171
-
172
- var wrapperRef = useRef(null);
173
- /**
174
- * Since the `contentRef` comes from the parent and is optional,
175
- * we need to create a stable contentRef that will always be available.
176
- */
177
- // eslint-disable-next-line react-hooks/rules-of-hooks
178
-
179
- var localContentRef = useRef(null); // Handle focus trap.
180
- // eslint-disable-next-line react-hooks/rules-of-hooks
181
-
182
- useFocusTrap(isOpen && wrapperRef.current, focusElement === null || focusElement === void 0 ? void 0 : focusElement.current); // eslint-disable-next-line react-hooks/rules-of-hooks
183
-
184
- useDisableBodyScroll(isOpen && localContentRef.current); // eslint-disable-next-line react-hooks/rules-of-hooks
185
-
186
- var _useState = useState(null),
187
- _useState2 = _slicedToArray(_useState, 2),
188
- sentinelTop = _useState2[0],
189
- setSentinelTop = _useState2[1]; // eslint-disable-next-line react-hooks/rules-of-hooks
190
-
191
-
192
- var _useState3 = useState(null),
193
- _useState4 = _slicedToArray(_useState3, 2),
194
- sentinelBottom = _useState4[0],
195
- setSentinelBottom = _useState4[1]; // eslint-disable-next-line react-hooks/rules-of-hooks
196
-
197
-
198
- var intersections = useIntersectionObserver([sentinelTop, sentinelBottom], {
199
- threshold: [0, 1]
200
- });
201
- var hasTopIntersection = sentinelTop && !((_ref = (_intersections$get = intersections.get(sentinelTop)) === null || _intersections$get === void 0 ? void 0 : _intersections$get.isIntersecting) !== null && _ref !== void 0 ? _ref : true);
202
- var hasBottomIntersection = sentinelBottom && !((_ref2 = (_intersections$get2 = intersections.get(sentinelBottom)) === null || _intersections$get2 === void 0 ? void 0 : _intersections$get2.isIntersecting) !== null && _ref2 !== void 0 ? _ref2 : true); // Separate header, footer and dialog content from children.
203
- // eslint-disable-next-line react-hooks/rules-of-hooks
204
-
205
- var _useMemo = useMemo(function () {
206
- return partitionMulti(Children.toArray(children), [isHeader, isFooter]);
207
- }, [children]),
208
- _useMemo2 = _slicedToArray(_useMemo, 3),
209
- _useMemo2$ = _slicedToArray(_useMemo2[0], 1),
210
- headerChild = _useMemo2$[0],
211
- _useMemo2$2 = _slicedToArray(_useMemo2[1], 1),
212
- footerChild = _useMemo2$2[0],
213
- content = _useMemo2[2];
214
-
215
- var headerChildProps = (_ref3 = headerChild) === null || _ref3 === void 0 ? void 0 : _ref3.props;
216
- var headerChildContent = headerChildProps === null || headerChildProps === void 0 ? void 0 : headerChildProps.children;
217
- var footerChildProps = (_ref4 = footerChild) === null || _ref4 === void 0 ? void 0 : _ref4.props;
218
- var footerChildContent = footerChildProps === null || footerChildProps === void 0 ? void 0 : footerChildProps.children; // eslint-disable-next-line react-hooks/rules-of-hooks
219
-
220
- var isVisible = useDelayedVisibility(Boolean(isOpen), DIALOG_TRANSITION_DURATION, onVisibilityChange); // eslint-disable-next-line react-hooks/rules-of-hooks
221
-
222
- var clickAwayRefs = useRef([wrapperRef]); // eslint-disable-next-line react-hooks/rules-of-hooks
223
-
224
- var rootRef = useRef(null);
225
- return isOpen || isVisible ? createPortal(React.createElement("div", _extends({
226
- ref: mergeRefs(rootRef, ref)
227
- }, forwardedProps, {
228
- className: classnames(className, handleBasicClasses({
229
- isHidden: !isOpen,
230
- isLoading: isLoading,
231
- isShown: isOpen || isVisible,
232
- prefix: CLASSNAME,
233
- size: size
234
- })),
235
- style: {
236
- zIndex: zIndex
237
- }
238
- }), React.createElement("div", {
239
- className: "".concat(CLASSNAME, "__overlay")
240
- }), React.createElement("section", _extends({
241
- className: "".concat(CLASSNAME, "__container"),
242
- role: "dialog",
243
- "aria-modal": "true"
244
- }, dialogProps), React.createElement(ClickAwayProvider, {
245
- callback: !preventAutoClose && onClose,
246
- childrenRefs: clickAwayRefs,
247
- parentRef: rootRef
248
- }, React.createElement("div", {
249
- className: "".concat(CLASSNAME, "__wrapper"),
250
- ref: wrapperRef
251
- }, (header || headerChildContent) && React.createElement("header", _extends({}, headerChildProps, {
252
- className: classnames("".concat(CLASSNAME, "__header"), (forceHeaderDivider || hasTopIntersection) && "".concat(CLASSNAME, "__header--has-divider"), headerChildProps === null || headerChildProps === void 0 ? void 0 : headerChildProps.className)
253
- }), header, headerChildContent), React.createElement("div", {
254
- ref: mergeRefs(contentRef, localContentRef),
255
- className: "".concat(CLASSNAME, "__content")
256
- }, React.createElement("div", {
257
- className: "".concat(CLASSNAME, "__sentinel ").concat(CLASSNAME, "__sentinel--top"),
258
- ref: setSentinelTop
259
- }), content, React.createElement("div", {
260
- className: "".concat(CLASSNAME, "__sentinel ").concat(CLASSNAME, "__sentinel--bottom"),
261
- ref: setSentinelBottom
262
- })), (footer || footerChildContent) && React.createElement("footer", _extends({}, footerChildProps, {
263
- className: classnames("".concat(CLASSNAME, "__footer"), (forceFooterDivider || hasBottomIntersection) && "".concat(CLASSNAME, "__footer--has-divider"), footerChildProps === null || footerChildProps === void 0 ? void 0 : footerChildProps.className)
264
- }), footer, footerChildContent), isLoading && React.createElement("div", {
265
- className: "".concat(CLASSNAME, "__progress-overlay")
266
- }, React.createElement(Progress, {
267
- variant: ProgressVariant.circular
268
- })))))), document.body) : null;
269
- });
270
- Dialog.displayName = COMPONENT_NAME;
271
- Dialog.className = CLASSNAME;
272
- Dialog.defaultProps = DEFAULT_PROPS;
273
-
274
- export { Dialog as D };
275
- //# sourceMappingURL=b89517ea.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"b89517ea.js","sources":["../../src/hooks/useIntersectionObserver.tsx","../../src/components/dialog/Dialog.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport type Intersections<T> = Map<T, IntersectionObserverEntry>;\n\n/**\n * Convenient hook to create interaction observers.\n *\n * @param elements Elements to observe.\n * @param options IntersectionObserver options.\n * @return Map of intersections.\n */\nexport function useIntersectionObserver<T extends Element>(\n elements: Array<T | null | undefined>,\n options?: IntersectionObserverInit,\n): Intersections<T> {\n const [intersections, setIntersections] = useState<Intersections<T>>(() => new Map());\n\n useEffect(\n () => {\n if (elements.length < 1 || !elements.some(Boolean)) {\n return undefined;\n }\n\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n intersections.set(entry.target as T, entry);\n }\n setIntersections(new Map(intersections));\n }, options);\n\n for (const element of elements) {\n if (element) {\n observer.observe(element);\n }\n }\n return () => observer.disconnect();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [...elements],\n );\n\n return intersections;\n}\n","import React, { Children, forwardRef, ReactElement, ReactNode, Ref, RefObject, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport classNames from 'classnames';\n\nimport { Progress, ProgressVariant, Size } from '@lumx/react';\n\nimport { DIALOG_TRANSITION_DURATION, DOCUMENT } from '@lumx/react/constants';\nimport { useCallbackOnEscape } from '@lumx/react/hooks/useCallbackOnEscape';\nimport { useFocusTrap } from '@lumx/react/hooks/useFocusTrap';\nimport { useIntersectionObserver } from '@lumx/react/hooks/useIntersectionObserver';\n\nimport { Comp, GenericProps, isComponent } from '@lumx/react/utils/type';\nimport { partitionMulti } from '@lumx/react/utils/partitionMulti';\nimport { getRootClassName, handleBasicClasses } from '@lumx/react/utils/className';\nimport { ClickAwayProvider } from '@lumx/react/utils/ClickAwayProvider';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\n\nimport { useDelayedVisibility } from '@lumx/react/hooks/useDelayedVisibility';\nimport { useDisableBodyScroll } from '@lumx/react/hooks/useDisableBodyScroll';\n\n/**\n * Defines the props of the component.\n */\nexport interface DialogProps extends GenericProps {\n /** Footer content. */\n footer?: ReactNode;\n /** Whether the divider between the dialog content and the footer is always displayed (instead of showing it on scroll). */\n forceFooterDivider?: boolean;\n /** Header content. */\n header?: ReactNode;\n /** Whether the divider between the dialog content and the footer is always displayed (instead of showing it on scroll). */\n forceHeaderDivider?: boolean;\n /** Whether the indefinite progress indicator over the dialog content is displayed or not. */\n isLoading?: boolean;\n /** Whether the component is open or not. */\n isOpen?: boolean;\n /** Reference to the parent element that triggered modal opening (will get back focus on close). */\n parentElement?: RefObject<HTMLElement>;\n /** Reference to the dialog content element. */\n contentRef?: Ref<HTMLDivElement>;\n /** Reference to the of the element that should get the focus when the dialogs opens. By default, the first child will take focus. */\n focusElement?: RefObject<HTMLElement>;\n /** Whether to keep the dialog open on clickaway or escape press. */\n preventAutoClose?: boolean;\n /** Size variant. */\n size?: DialogSizes;\n /** Z-axis position. */\n zIndex?: number;\n /** Z-axis position. */\n dialogProps?: GenericProps;\n /** On close callback. */\n onClose?(): void;\n /** Callback called when the open animation starts and the close animation finishes. */\n onVisibilityChange?(isVisible: boolean): void;\n}\n\nexport type DialogSizes = Extract<Size, 'tiny' | 'regular' | 'big' | 'huge'>;\n\nconst isHeader = isComponent('header');\nconst isFooter = isComponent('footer');\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Dialog';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<DialogProps> = {\n size: Size.big,\n};\n\n/**\n * Dialog component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Dialog: Comp<DialogProps, HTMLDivElement> = forwardRef((props, ref) => {\n if (!DOCUMENT) {\n // Can't render in SSR.\n return null;\n }\n\n const {\n children,\n className,\n header,\n focusElement,\n forceFooterDivider,\n forceHeaderDivider,\n footer,\n isLoading,\n isOpen,\n onClose,\n parentElement,\n contentRef,\n preventAutoClose,\n size,\n zIndex,\n dialogProps,\n onVisibilityChange,\n ...forwardedProps\n } = props;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const previousOpen = React.useRef(isOpen);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n if (isOpen !== previousOpen.current) {\n previousOpen.current = isOpen;\n\n // Focus the parent element on close.\n if (!isOpen && parentElement && parentElement.current) {\n parentElement.current.focus();\n }\n }\n }, [isOpen, parentElement]);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useCallbackOnEscape(onClose, isOpen && !preventAutoClose);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const wrapperRef = useRef<HTMLDivElement>(null);\n /**\n * Since the `contentRef` comes from the parent and is optional,\n * we need to create a stable contentRef that will always be available.\n */\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const localContentRef = useRef<HTMLDivElement>(null);\n // Handle focus trap.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFocusTrap(isOpen && wrapperRef.current, focusElement?.current);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useDisableBodyScroll(isOpen && localContentRef.current);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [sentinelTop, setSentinelTop] = useState<Element | null>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [sentinelBottom, setSentinelBottom] = useState<Element | null>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const intersections = useIntersectionObserver([sentinelTop, sentinelBottom], {\n threshold: [0, 1],\n });\n\n const hasTopIntersection = sentinelTop && !(intersections.get(sentinelTop)?.isIntersecting ?? true);\n const hasBottomIntersection = sentinelBottom && !(intersections.get(sentinelBottom)?.isIntersecting ?? true);\n\n // Separate header, footer and dialog content from children.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [[headerChild], [footerChild], content] = useMemo(\n () => partitionMulti(Children.toArray(children), [isHeader, isFooter]),\n [children],\n );\n const headerChildProps = (headerChild as ReactElement)?.props;\n const headerChildContent = headerChildProps?.children;\n const footerChildProps = (footerChild as ReactElement)?.props;\n const footerChildContent = footerChildProps?.children;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const isVisible = useDelayedVisibility(Boolean(isOpen), DIALOG_TRANSITION_DURATION, onVisibilityChange);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const clickAwayRefs = useRef([wrapperRef]);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const rootRef = useRef<HTMLDivElement>(null);\n\n return isOpen || isVisible\n ? createPortal(\n <div\n ref={mergeRefs(rootRef, ref)}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({\n isHidden: !isOpen,\n isLoading,\n isShown: isOpen || isVisible,\n prefix: CLASSNAME,\n size,\n }),\n )}\n style={{ zIndex }}\n >\n <div className={`${CLASSNAME}__overlay`} />\n\n <section className={`${CLASSNAME}__container`} role=\"dialog\" aria-modal=\"true\" {...dialogProps}>\n <ClickAwayProvider\n callback={!preventAutoClose && onClose}\n childrenRefs={clickAwayRefs}\n parentRef={rootRef}\n >\n <div className={`${CLASSNAME}__wrapper`} ref={wrapperRef}>\n {(header || headerChildContent) && (\n <header\n {...headerChildProps}\n className={classNames(\n `${CLASSNAME}__header`,\n (forceHeaderDivider || hasTopIntersection) &&\n `${CLASSNAME}__header--has-divider`,\n headerChildProps?.className,\n )}\n >\n {header}\n {headerChildContent}\n </header>\n )}\n\n <div ref={mergeRefs(contentRef, localContentRef)} className={`${CLASSNAME}__content`}>\n <div\n className={`${CLASSNAME}__sentinel ${CLASSNAME}__sentinel--top`}\n ref={setSentinelTop}\n />\n\n {content}\n\n <div\n className={`${CLASSNAME}__sentinel ${CLASSNAME}__sentinel--bottom`}\n ref={setSentinelBottom}\n />\n </div>\n\n {(footer || footerChildContent) && (\n <footer\n {...footerChildProps}\n className={classNames(\n `${CLASSNAME}__footer`,\n (forceFooterDivider || hasBottomIntersection) &&\n `${CLASSNAME}__footer--has-divider`,\n footerChildProps?.className,\n )}\n >\n {footer}\n {footerChildContent}\n </footer>\n )}\n\n {isLoading && (\n <div className={`${CLASSNAME}__progress-overlay`}>\n <Progress variant={ProgressVariant.circular} />\n </div>\n )}\n </div>\n </ClickAwayProvider>\n </section>\n </div>,\n document.body,\n )\n : null;\n});\nDialog.displayName = COMPONENT_NAME;\nDialog.className = CLASSNAME;\nDialog.defaultProps = DEFAULT_PROPS;\n"],"names":["useIntersectionObserver","elements","options","useState","Map","intersections","setIntersections","useEffect","length","some","Boolean","undefined","observer","IntersectionObserver","entries","entry","set","target","element","observe","disconnect","isHeader","isComponent","isFooter","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","size","Size","big","Dialog","forwardRef","props","ref","DOCUMENT","children","className","header","focusElement","forceFooterDivider","forceHeaderDivider","footer","isLoading","isOpen","onClose","parentElement","contentRef","preventAutoClose","zIndex","dialogProps","onVisibilityChange","forwardedProps","previousOpen","React","useRef","current","focus","useCallbackOnEscape","wrapperRef","localContentRef","useFocusTrap","useDisableBodyScroll","sentinelTop","setSentinelTop","sentinelBottom","setSentinelBottom","threshold","hasTopIntersection","get","isIntersecting","hasBottomIntersection","useMemo","partitionMulti","Children","toArray","headerChild","footerChild","content","headerChildProps","headerChildContent","footerChildProps","footerChildContent","isVisible","useDelayedVisibility","DIALOG_TRANSITION_DURATION","clickAwayRefs","rootRef","createPortal","mergeRefs","classNames","handleBasicClasses","isHidden","isShown","prefix","ProgressVariant","circular","document","body","displayName","defaultProps"],"mappings":"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"}