@lumx/react 3.20.1-alpha.13 → 3.20.1-alpha.14

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 (697) hide show
  1. package/_internal/Falsy.d.ts +7 -0
  2. package/_internal/index.js +236 -0
  3. package/_internal/index.js.map +1 -0
  4. package/index.d.ts +352 -7
  5. package/index.js +14486 -65
  6. package/index.js.map +1 -1
  7. package/package.json +11 -3
  8. package/src/components/alert-dialog/AlertDialog.stories.tsx +127 -0
  9. package/src/components/alert-dialog/AlertDialog.test.tsx +34 -0
  10. package/src/components/alert-dialog/AlertDialog.tsx +189 -0
  11. package/src/components/alert-dialog/index.ts +1 -0
  12. package/src/components/autocomplete/Autocomplete.stories.tsx +75 -0
  13. package/src/components/autocomplete/Autocomplete.test.tsx +99 -0
  14. package/src/components/autocomplete/Autocomplete.tsx +294 -0
  15. package/src/components/autocomplete/AutocompleteMultiple.stories.tsx +167 -0
  16. package/src/components/autocomplete/AutocompleteMultiple.test.tsx +61 -0
  17. package/src/components/autocomplete/AutocompleteMultiple.tsx +156 -0
  18. package/src/components/autocomplete/__mockData__/index.ts +39 -0
  19. package/src/components/autocomplete/index.ts +2 -0
  20. package/src/components/avatar/Avatar.stories.tsx +119 -0
  21. package/src/components/avatar/Avatar.test.tsx +32 -0
  22. package/src/components/avatar/Avatar.tsx +114 -0
  23. package/src/components/avatar/index.ts +1 -0
  24. package/src/components/badge/Badge.stories.tsx +69 -0
  25. package/src/components/badge/Badge.test.tsx +45 -0
  26. package/src/components/badge/Badge.tsx +58 -0
  27. package/src/components/badge/BadgeWrapper.stories.tsx +75 -0
  28. package/src/components/badge/BadgeWrapper.test.tsx +47 -0
  29. package/src/components/badge/BadgeWrapper.tsx +37 -0
  30. package/src/components/badge/index.ts +2 -0
  31. package/src/components/button/Button.stories.tsx +355 -0
  32. package/src/components/button/Button.test.tsx +125 -0
  33. package/src/components/button/Button.tsx +101 -0
  34. package/src/components/button/ButtonGroup.stories.tsx +52 -0
  35. package/src/components/button/ButtonGroup.test.tsx +41 -0
  36. package/src/components/button/ButtonGroup.tsx +50 -0
  37. package/src/components/button/ButtonRoot.tsx +163 -0
  38. package/src/components/button/IconButton.stories.tsx +52 -0
  39. package/src/components/button/IconButton.test.tsx +66 -0
  40. package/src/components/button/IconButton.tsx +91 -0
  41. package/src/components/button/index.ts +4 -0
  42. package/src/components/checkbox/Checkbox.stories.tsx +64 -0
  43. package/src/components/checkbox/Checkbox.test.tsx +154 -0
  44. package/src/components/checkbox/Checkbox.tsx +164 -0
  45. package/src/components/checkbox/index.ts +1 -0
  46. package/src/components/chip/Chip.stories.tsx +164 -0
  47. package/src/components/chip/Chip.test.tsx +243 -0
  48. package/src/components/chip/Chip.tsx +168 -0
  49. package/src/components/chip/ChipGroup.stories.tsx +47 -0
  50. package/src/components/chip/ChipGroup.test.tsx +37 -0
  51. package/src/components/chip/ChipGroup.tsx +60 -0
  52. package/src/components/chip/index.ts +2 -0
  53. package/src/components/comment-block/CommentBlock.stories.tsx +91 -0
  54. package/src/components/comment-block/CommentBlock.test.tsx +28 -0
  55. package/src/components/comment-block/CommentBlock.tsx +172 -0
  56. package/src/components/comment-block/index.ts +1 -0
  57. package/src/components/date-picker/DatePicker.stories.tsx +118 -0
  58. package/src/components/date-picker/DatePicker.test.tsx +34 -0
  59. package/src/components/date-picker/DatePicker.tsx +52 -0
  60. package/src/components/date-picker/DatePickerControlled.test.tsx +91 -0
  61. package/src/components/date-picker/DatePickerControlled.tsx +259 -0
  62. package/src/components/date-picker/DatePickerField.stories.tsx +100 -0
  63. package/src/components/date-picker/DatePickerField.test.tsx +70 -0
  64. package/src/components/date-picker/DatePickerField.tsx +135 -0
  65. package/src/components/date-picker/constants.ts +11 -0
  66. package/src/components/date-picker/index.ts +4 -0
  67. package/src/components/date-picker/types.ts +28 -0
  68. package/src/components/dialog/Dialog.stories.tsx +318 -0
  69. package/src/components/dialog/Dialog.test.tsx +97 -0
  70. package/src/components/dialog/Dialog.tsx +288 -0
  71. package/src/components/dialog/index.ts +1 -0
  72. package/src/components/divider/Divider.test.tsx +51 -0
  73. package/src/components/divider/Divider.tsx +50 -0
  74. package/src/components/divider/index.ts +1 -0
  75. package/src/components/drag-handle/DragHandle.test.tsx +36 -0
  76. package/src/components/drag-handle/DragHandle.tsx +51 -0
  77. package/src/components/drag-handle/index.ts +1 -0
  78. package/src/components/dropdown/Dropdown.stories.tsx +31 -0
  79. package/src/components/dropdown/Dropdown.test.tsx +66 -0
  80. package/src/components/dropdown/Dropdown.tsx +186 -0
  81. package/src/components/dropdown/index.ts +1 -0
  82. package/src/components/expansion-panel/ExpansionPanel.stories.tsx +91 -0
  83. package/src/components/expansion-panel/ExpansionPanel.test.tsx +185 -0
  84. package/src/components/expansion-panel/ExpansionPanel.tsx +195 -0
  85. package/src/components/expansion-panel/index.ts +1 -0
  86. package/src/components/flag/Flag.stories.tsx +48 -0
  87. package/src/components/flag/Flag.test.tsx +62 -0
  88. package/src/components/flag/Flag.tsx +52 -0
  89. package/src/components/flag/index.ts +1 -0
  90. package/src/components/flex-box/FlexBox.stories.tsx +156 -0
  91. package/src/components/flex-box/FlexBox.test.tsx +24 -0
  92. package/src/components/flex-box/FlexBox.tsx +100 -0
  93. package/src/components/flex-box/index.ts +1 -0
  94. package/src/components/generic-block/GenericBlock.stories.jsx +128 -0
  95. package/src/components/generic-block/GenericBlock.test.tsx +156 -0
  96. package/src/components/generic-block/GenericBlock.tsx +225 -0
  97. package/src/components/generic-block/constants.ts +9 -0
  98. package/src/components/generic-block/index.ts +2 -0
  99. package/src/components/grid/Grid.tsx +83 -0
  100. package/src/components/grid/GridItem.tsx +55 -0
  101. package/src/components/grid/index.ts +2 -0
  102. package/src/components/grid-column/GridColumn.stories.tsx +45 -0
  103. package/src/components/grid-column/GridColumn.test.jsx +56 -0
  104. package/src/components/grid-column/GridColumn.tsx +83 -0
  105. package/src/components/grid-column/index.ts +1 -0
  106. package/src/components/heading/Heading.stories.tsx +69 -0
  107. package/src/components/heading/Heading.test.tsx +82 -0
  108. package/src/components/heading/Heading.tsx +65 -0
  109. package/src/components/heading/HeadingLevelProvider.tsx +30 -0
  110. package/src/components/heading/constants.ts +16 -0
  111. package/src/components/heading/context.tsx +13 -0
  112. package/src/components/heading/index.ts +3 -0
  113. package/src/components/heading/useHeadingLevel.tsx +8 -0
  114. package/src/components/icon/Icon.stories.tsx +73 -0
  115. package/src/components/icon/Icon.test.tsx +125 -0
  116. package/src/components/icon/Icon.tsx +133 -0
  117. package/src/components/icon/index.ts +1 -0
  118. package/src/components/image-block/ImageBlock.stories.tsx +117 -0
  119. package/src/components/image-block/ImageBlock.test.tsx +58 -0
  120. package/src/components/image-block/ImageBlock.tsx +142 -0
  121. package/src/components/image-block/ImageCaption.tsx +115 -0
  122. package/src/components/image-block/index.ts +1 -0
  123. package/src/components/image-lightbox/ImageLightbox.stories.tsx +160 -0
  124. package/src/components/image-lightbox/ImageLightbox.test.tsx +254 -0
  125. package/src/components/image-lightbox/ImageLightbox.tsx +90 -0
  126. package/src/components/image-lightbox/constants.ts +11 -0
  127. package/src/components/image-lightbox/index.ts +2 -0
  128. package/src/components/image-lightbox/internal/ImageSlide.tsx +107 -0
  129. package/src/components/image-lightbox/internal/ImageSlideshow.tsx +164 -0
  130. package/src/components/image-lightbox/internal/useAnimateScroll.ts +55 -0
  131. package/src/components/image-lightbox/internal/usePointerZoom.ts +148 -0
  132. package/src/components/image-lightbox/types.ts +48 -0
  133. package/src/components/image-lightbox/useImageLightbox.tsx +141 -0
  134. package/src/components/inline-list/InlineList.stories.tsx +77 -0
  135. package/src/components/inline-list/InlineList.test.tsx +52 -0
  136. package/src/components/inline-list/InlineList.tsx +96 -0
  137. package/src/components/inline-list/index.ts +1 -0
  138. package/src/components/input-helper/InputHelper.stories.tsx +35 -0
  139. package/src/components/input-helper/InputHelper.test.tsx +55 -0
  140. package/src/components/input-helper/InputHelper.tsx +65 -0
  141. package/src/components/input-helper/constants.ts +11 -0
  142. package/src/components/input-helper/index.ts +1 -0
  143. package/src/components/input-label/InputLabel.stories.tsx +45 -0
  144. package/src/components/input-label/InputLabel.test.tsx +59 -0
  145. package/src/components/input-label/InputLabel.tsx +69 -0
  146. package/src/components/input-label/index.ts +1 -0
  147. package/src/components/lightbox/Lightbox.stories.tsx +101 -0
  148. package/src/components/lightbox/Lightbox.test.tsx +53 -0
  149. package/src/components/lightbox/Lightbox.tsx +180 -0
  150. package/src/components/lightbox/index.ts +1 -0
  151. package/src/components/link/Link.stories.tsx +195 -0
  152. package/src/components/link/Link.test.tsx +127 -0
  153. package/src/components/link/Link.tsx +106 -0
  154. package/src/components/link/index.ts +1 -0
  155. package/src/components/link-preview/LinkPreview.stories.tsx +61 -0
  156. package/src/components/link-preview/LinkPreview.test.tsx +105 -0
  157. package/src/components/link-preview/LinkPreview.tsx +158 -0
  158. package/src/components/link-preview/index.ts +1 -0
  159. package/src/components/list/List.stories.tsx +116 -0
  160. package/src/components/list/List.test.tsx +18 -0
  161. package/src/components/list/List.tsx +104 -0
  162. package/src/components/list/ListDivider.stories.tsx +12 -0
  163. package/src/components/list/ListDivider.test.tsx +22 -0
  164. package/src/components/list/ListDivider.tsx +35 -0
  165. package/src/components/list/ListItem.stories.tsx +66 -0
  166. package/src/components/list/ListItem.test.tsx +93 -0
  167. package/src/components/list/ListItem.tsx +157 -0
  168. package/src/components/list/ListSubheader.stories.tsx +11 -0
  169. package/src/components/list/ListSubheader.test.tsx +21 -0
  170. package/src/components/list/ListSubheader.tsx +44 -0
  171. package/src/components/list/index.ts +4 -0
  172. package/src/components/list/useInteractiveList.tsx +202 -0
  173. package/src/components/message/Message.stories.tsx +72 -0
  174. package/src/components/message/Message.test.tsx +76 -0
  175. package/src/components/message/Message.tsx +100 -0
  176. package/src/components/message/index.ts +1 -0
  177. package/src/components/mosaic/Mosaic.stories.tsx +89 -0
  178. package/src/components/mosaic/Mosaic.test.tsx +77 -0
  179. package/src/components/mosaic/Mosaic.tsx +98 -0
  180. package/src/components/mosaic/index.ts +1 -0
  181. package/src/components/navigation/Navigation.stories.tsx +234 -0
  182. package/src/components/navigation/Navigation.test.tsx +65 -0
  183. package/src/components/navigation/Navigation.tsx +79 -0
  184. package/src/components/navigation/NavigationItem.test.tsx +35 -0
  185. package/src/components/navigation/NavigationItem.tsx +82 -0
  186. package/src/components/navigation/NavigationSection.test.tsx +137 -0
  187. package/src/components/navigation/NavigationSection.tsx +108 -0
  188. package/src/components/navigation/context.tsx +7 -0
  189. package/src/components/navigation/index.ts +1 -0
  190. package/src/components/notification/Notification.test.tsx +94 -0
  191. package/src/components/notification/Notification.tsx +138 -0
  192. package/src/components/notification/Notifications.stories.tsx +92 -0
  193. package/src/components/notification/constants.ts +28 -0
  194. package/src/components/notification/index.ts +1 -0
  195. package/src/components/popover/Popover.stories.tsx +264 -0
  196. package/src/components/popover/Popover.test.tsx +62 -0
  197. package/src/components/popover/Popover.tsx +201 -0
  198. package/src/components/popover/constants.ts +62 -0
  199. package/src/components/popover/index.ts +3 -0
  200. package/src/components/popover/usePopoverStyle.tsx +184 -0
  201. package/src/components/popover/useRestoreFocusOnClose.tsx +47 -0
  202. package/src/components/popover-dialog/PopoverDialog.stories.tsx +64 -0
  203. package/src/components/popover-dialog/PopoverDialog.test.tsx +139 -0
  204. package/src/components/popover-dialog/PopoverDialog.tsx +74 -0
  205. package/src/components/popover-dialog/index.tsx +1 -0
  206. package/src/components/post-block/PostBlock.test.tsx +27 -0
  207. package/src/components/post-block/PostBlock.tsx +122 -0
  208. package/src/components/post-block/index.ts +1 -0
  209. package/src/components/progress/Progress.tsx +68 -0
  210. package/src/components/progress/ProgressCircular.stories.tsx +43 -0
  211. package/src/components/progress/ProgressCircular.test.tsx +46 -0
  212. package/src/components/progress/ProgressCircular.tsx +82 -0
  213. package/src/components/progress/ProgressLinear.stories.tsx +12 -0
  214. package/src/components/progress/ProgressLinear.test.tsx +30 -0
  215. package/src/components/progress/ProgressLinear.tsx +50 -0
  216. package/src/components/progress/index.ts +3 -0
  217. package/src/components/progress-tracker/ProgressTracker.stories.tsx +145 -0
  218. package/src/components/progress-tracker/ProgressTracker.test.tsx +42 -0
  219. package/src/components/progress-tracker/ProgressTracker.tsx +87 -0
  220. package/src/components/progress-tracker/ProgressTrackerProvider.test.tsx +65 -0
  221. package/src/components/progress-tracker/ProgressTrackerProvider.tsx +67 -0
  222. package/src/components/progress-tracker/ProgressTrackerStep.test.tsx +36 -0
  223. package/src/components/progress-tracker/ProgressTrackerStep.tsx +159 -0
  224. package/src/components/progress-tracker/ProgressTrackerStepPanel.test.tsx +34 -0
  225. package/src/components/progress-tracker/ProgressTrackerStepPanel.tsx +67 -0
  226. package/src/components/progress-tracker/index.ts +4 -0
  227. package/src/components/radio-button/RadioButton.stories.tsx +71 -0
  228. package/src/components/radio-button/RadioButton.test.tsx +143 -0
  229. package/src/components/radio-button/RadioButton.tsx +143 -0
  230. package/src/components/radio-button/RadioGroup.stories.tsx +39 -0
  231. package/src/components/radio-button/RadioGroup.test.tsx +29 -0
  232. package/src/components/radio-button/RadioGroup.tsx +44 -0
  233. package/src/components/radio-button/index.ts +2 -0
  234. package/src/components/select/Select.stories.tsx +385 -0
  235. package/src/components/select/Select.test.tsx +199 -0
  236. package/src/components/select/Select.tsx +199 -0
  237. package/src/components/select/SelectMultiple.stories.tsx +315 -0
  238. package/src/components/select/SelectMultiple.test.tsx +213 -0
  239. package/src/components/select/SelectMultiple.tsx +206 -0
  240. package/src/components/select/WithSelectContext.tsx +147 -0
  241. package/src/components/select/constants.ts +55 -0
  242. package/src/components/select/index.ts +2 -0
  243. package/src/components/side-navigation/SideNavigation.stories.tsx +191 -0
  244. package/src/components/side-navigation/SideNavigation.test.tsx +37 -0
  245. package/src/components/side-navigation/SideNavigation.tsx +52 -0
  246. package/src/components/side-navigation/SideNavigationItem.stories.tsx +133 -0
  247. package/src/components/side-navigation/SideNavigationItem.test.tsx +136 -0
  248. package/src/components/side-navigation/SideNavigationItem.tsx +165 -0
  249. package/src/components/side-navigation/index.ts +2 -0
  250. package/src/components/skeleton/SkeletonCircle.stories.tsx +41 -0
  251. package/src/components/skeleton/SkeletonCircle.test.tsx +27 -0
  252. package/src/components/skeleton/SkeletonCircle.tsx +52 -0
  253. package/src/components/skeleton/SkeletonRectangle.stories.tsx +82 -0
  254. package/src/components/skeleton/SkeletonRectangle.test.tsx +27 -0
  255. package/src/components/skeleton/SkeletonRectangle.tsx +88 -0
  256. package/src/components/skeleton/SkeletonTypography.stories.tsx +19 -0
  257. package/src/components/skeleton/SkeletonTypography.test.tsx +27 -0
  258. package/src/components/skeleton/SkeletonTypography.tsx +59 -0
  259. package/src/components/skeleton/index.ts +3 -0
  260. package/src/components/slider/Slider.stories.tsx +45 -0
  261. package/src/components/slider/Slider.test.tsx +29 -0
  262. package/src/components/slider/Slider.tsx +299 -0
  263. package/src/components/slider/index.ts +2 -0
  264. package/src/components/slideshow/Slides.tsx +130 -0
  265. package/src/components/slideshow/Slideshow.stories.tsx +179 -0
  266. package/src/components/slideshow/Slideshow.test.tsx +35 -0
  267. package/src/components/slideshow/Slideshow.tsx +173 -0
  268. package/src/components/slideshow/SlideshowControls.stories.tsx +100 -0
  269. package/src/components/slideshow/SlideshowControls.tsx +243 -0
  270. package/src/components/slideshow/SlideshowItem.tsx +44 -0
  271. package/src/components/slideshow/SlideshowItemGroup.tsx +60 -0
  272. package/src/components/slideshow/constants.ts +24 -0
  273. package/src/components/slideshow/index.ts +4 -0
  274. package/src/components/slideshow/useKeyNavigate.ts +28 -0
  275. package/src/components/slideshow/usePaginationVisibleRange.ts +37 -0
  276. package/src/components/slideshow/useSlideFocusManagement.tsx +92 -0
  277. package/src/components/slideshow/useSwipeNavigate.ts +18 -0
  278. package/src/components/switch/Switch.stories.tsx +49 -0
  279. package/src/components/switch/Switch.test.tsx +144 -0
  280. package/src/components/switch/Switch.tsx +145 -0
  281. package/src/components/switch/index.ts +1 -0
  282. package/src/components/table/Table.test.tsx +29 -0
  283. package/src/components/table/Table.tsx +59 -0
  284. package/src/components/table/TableBody.test.tsx +30 -0
  285. package/src/components/table/TableBody.tsx +42 -0
  286. package/src/components/table/TableCell.test.tsx +72 -0
  287. package/src/components/table/TableCell.tsx +130 -0
  288. package/src/components/table/TableHeader.test.tsx +30 -0
  289. package/src/components/table/TableHeader.tsx +48 -0
  290. package/src/components/table/TableRow.test.tsx +40 -0
  291. package/src/components/table/TableRow.tsx +71 -0
  292. package/src/components/table/index.ts +5 -0
  293. package/src/components/tabs/Tab.test.tsx +50 -0
  294. package/src/components/tabs/Tab.tsx +133 -0
  295. package/src/components/tabs/TabList.test.tsx +49 -0
  296. package/src/components/tabs/TabList.tsx +94 -0
  297. package/src/components/tabs/TabPanel.test.tsx +37 -0
  298. package/src/components/tabs/TabPanel.tsx +67 -0
  299. package/src/components/tabs/TabProvider.test.tsx +161 -0
  300. package/src/components/tabs/TabProvider.tsx +67 -0
  301. package/src/components/tabs/Tabs.stories.tsx +170 -0
  302. package/src/components/tabs/index.ts +4 -0
  303. package/src/components/tabs/state.ts +114 -0
  304. package/src/components/tabs/test-utils.ts +39 -0
  305. package/src/components/text/Text.stories.tsx +177 -0
  306. package/src/components/text/Text.test.tsx +92 -0
  307. package/src/components/text/Text.tsx +139 -0
  308. package/src/components/text/index.ts +1 -0
  309. package/src/components/text-field/TextField.stories.tsx +180 -0
  310. package/src/components/text-field/TextField.test.tsx +298 -0
  311. package/src/components/text-field/TextField.tsx +493 -0
  312. package/src/components/text-field/index.ts +1 -0
  313. package/src/components/thumbnail/Thumbnail.stories.tsx +448 -0
  314. package/src/components/thumbnail/Thumbnail.test.tsx +88 -0
  315. package/src/components/thumbnail/Thumbnail.tsx +248 -0
  316. package/src/components/thumbnail/index.ts +3 -0
  317. package/src/components/thumbnail/types.ts +48 -0
  318. package/src/components/thumbnail/useFocusPointStyle.test.ts +92 -0
  319. package/src/components/thumbnail/useFocusPointStyle.tsx +107 -0
  320. package/src/components/thumbnail/useImageLoad.ts +40 -0
  321. package/src/components/toolbar/Toolbar.tsx +68 -0
  322. package/src/components/toolbar/index.ts +1 -0
  323. package/src/components/tooltip/Tooltip.stories.tsx +118 -0
  324. package/src/components/tooltip/Tooltip.test.tsx +417 -0
  325. package/src/components/tooltip/Tooltip.tsx +165 -0
  326. package/src/components/tooltip/constants.ts +8 -0
  327. package/src/components/tooltip/context.tsx +17 -0
  328. package/src/components/tooltip/index.ts +1 -0
  329. package/src/components/tooltip/useInjectTooltipRef.tsx +55 -0
  330. package/src/components/tooltip/useTooltipOpen.tsx +143 -0
  331. package/src/components/uploader/Uploader.stories.tsx +109 -0
  332. package/src/components/uploader/Uploader.test.tsx +146 -0
  333. package/src/components/uploader/Uploader.tsx +177 -0
  334. package/src/components/uploader/index.ts +1 -0
  335. package/src/components/user-block/UserBlock.stories.tsx +133 -0
  336. package/src/components/user-block/UserBlock.test.tsx +106 -0
  337. package/src/components/user-block/UserBlock.tsx +193 -0
  338. package/src/components/user-block/index.ts +1 -0
  339. package/src/constants.ts +27 -0
  340. package/src/hooks/useBooleanState.tsx +13 -0
  341. package/src/hooks/useCallbackOnEscape.ts +34 -0
  342. package/src/hooks/useChipGroupNavigation.tsx +75 -0
  343. package/src/hooks/useClickAway.tsx +48 -0
  344. package/src/hooks/useDisableBodyScroll.ts +28 -0
  345. package/src/hooks/useEventCallback.tsx +17 -0
  346. package/src/hooks/useFocus.tsx +21 -0
  347. package/src/hooks/useFocusTrap.ts +93 -0
  348. package/src/hooks/useFocusWithin.ts +33 -0
  349. package/src/hooks/useId.test.tsx +22 -0
  350. package/src/hooks/useId.ts +15 -0
  351. package/src/hooks/useImageSize.ts +17 -0
  352. package/src/hooks/useInfiniteScroll.tsx +60 -0
  353. package/src/hooks/useIntersectionObserver.tsx +43 -0
  354. package/src/hooks/useInterval.tsx +31 -0
  355. package/src/hooks/useKeyboardListNavigation.tsx +204 -0
  356. package/src/hooks/useListenFocus.tsx +26 -0
  357. package/src/hooks/useOverflowTooltipLabel.tsx +32 -0
  358. package/src/hooks/usePopper.ts +12 -0
  359. package/src/hooks/usePreviousValue.ts +12 -0
  360. package/src/hooks/useRovingTabIndex.tsx +90 -0
  361. package/src/hooks/useSizeOnWindowResize.ts +30 -0
  362. package/src/hooks/useSlideshowControls.ts +246 -0
  363. package/src/hooks/useStopPropagation.ts +21 -0
  364. package/src/hooks/useTransitionVisibility.ts +48 -0
  365. package/src/index.ts +63 -0
  366. package/src/stories/controls/color.ts +7 -0
  367. package/src/stories/controls/element.ts +6 -0
  368. package/src/stories/controls/focusPoint.ts +1 -0
  369. package/src/stories/controls/icons.ts +126 -0
  370. package/src/stories/controls/image.ts +84 -0
  371. package/src/stories/controls/selectArgType.ts +8 -0
  372. package/src/stories/controls/theme.ts +3 -0
  373. package/src/stories/controls/typography.ts +5 -0
  374. package/src/stories/controls/withUndefined.ts +1 -0
  375. package/src/stories/decorators/withChromaticForceScreenSize.tsx +7 -0
  376. package/src/stories/decorators/withCombinations.tsx +132 -0
  377. package/src/stories/decorators/withNestedProps.tsx +22 -0
  378. package/src/stories/decorators/withResizableBox.tsx +21 -0
  379. package/src/stories/decorators/withThemedBackground.tsx +16 -0
  380. package/src/stories/decorators/withValueOnChange.tsx +18 -0
  381. package/src/stories/decorators/withWrapper.tsx +19 -0
  382. package/src/stories/generated/Autocomplete/Demos.stories.tsx +7 -0
  383. package/src/stories/generated/Avatar/Demos.stories.tsx +7 -0
  384. package/src/stories/generated/Badge/Demos.stories.tsx +9 -0
  385. package/src/stories/generated/Button/Demos.stories.tsx +11 -0
  386. package/src/stories/generated/Checkbox/Demos.stories.tsx +6 -0
  387. package/src/stories/generated/Chip/Demos.stories.tsx +11 -0
  388. package/src/stories/generated/CommentBlock/Demos.stories.tsx +8 -0
  389. package/src/stories/generated/DatePicker/Demos.stories.tsx +8 -0
  390. package/src/stories/generated/Dialog/Demos.stories.tsx +10 -0
  391. package/src/stories/generated/Divider/Demos.stories.tsx +6 -0
  392. package/src/stories/generated/Dropdown/Demos.stories.tsx +8 -0
  393. package/src/stories/generated/ExpansionPanel/Demos.stories.tsx +9 -0
  394. package/src/stories/generated/Flag/Demos.stories.tsx +6 -0
  395. package/src/stories/generated/GenericBlock/Demos.stories.tsx +8 -0
  396. package/src/stories/generated/Heading/Demos.stories.tsx +6 -0
  397. package/src/stories/generated/Icon/Demos.stories.tsx +8 -0
  398. package/src/stories/generated/ImageBlock/Demos.stories.tsx +9 -0
  399. package/src/stories/generated/ImageLightbox/Demos.stories.tsx +6 -0
  400. package/src/stories/generated/Lightbox/Demos.stories.tsx +6 -0
  401. package/src/stories/generated/LinkPreview/Demos.stories.tsx +7 -0
  402. package/src/stories/generated/List/Demos.stories.tsx +11 -0
  403. package/src/stories/generated/Message/Demos.stories.tsx +11 -0
  404. package/src/stories/generated/Mosaic/Demos.stories.tsx +10 -0
  405. package/src/stories/generated/Notification/Demos.stories.tsx +6 -0
  406. package/src/stories/generated/Popover/Demos.stories.tsx +11 -0
  407. package/src/stories/generated/PopoverDialog/Demos.stories.tsx +6 -0
  408. package/src/stories/generated/PostBlock/Demos.stories.tsx +6 -0
  409. package/src/stories/generated/Progress/Demos.stories.tsx +7 -0
  410. package/src/stories/generated/ProgressTracker/Demos.stories.tsx +9 -0
  411. package/src/stories/generated/RadioButton/Demos.stories.tsx +6 -0
  412. package/src/stories/generated/Select/Demos.stories.tsx +14 -0
  413. package/src/stories/generated/SideNavigation/Demos.stories.tsx +10 -0
  414. package/src/stories/generated/Skeleton/Demos.stories.tsx +9 -0
  415. package/src/stories/generated/Slider/Demos.stories.tsx +9 -0
  416. package/src/stories/generated/Slideshow/Demos.stories.tsx +8 -0
  417. package/src/stories/generated/Switch/Demos.stories.tsx +6 -0
  418. package/src/stories/generated/Table/Demos.stories.tsx +7 -0
  419. package/src/stories/generated/Tabs/Demos.stories.tsx +8 -0
  420. package/src/stories/generated/TextField/Demos.stories.tsx +20 -0
  421. package/src/stories/generated/Thumbnail/Demos.stories.tsx +12 -0
  422. package/src/stories/generated/Toolbar/Demos.stories.tsx +10 -0
  423. package/src/stories/generated/Tooltip/Demos.stories.tsx +8 -0
  424. package/src/stories/generated/Uploader/Demos.stories.tsx +8 -0
  425. package/src/stories/generated/UserBlock/Demos.stories.tsx +11 -0
  426. package/src/stories/utils/CustomLink.tsx +12 -0
  427. package/src/stories/utils/concatPath.tsx +17 -0
  428. package/src/stories/utils/disableArgTypes.ts +3 -0
  429. package/src/stories/utils/initDemoShadowDOMPortal.ts +10 -0
  430. package/src/stories/utils/lorem.ts +59 -0
  431. package/src/stories/utils/theming.tsx +166 -0
  432. package/src/stories/utils/toFlattenProps.ts +28 -0
  433. package/src/stories/utils/withCategory.ts +12 -0
  434. package/src/testing/utils/ThemeSentinel.tsx +10 -0
  435. package/src/testing/utils/commonTestsSuiteRTL.tsx +193 -0
  436. package/src/testing/utils/index.ts +1 -0
  437. package/src/testing/utils/queries.ts +19 -0
  438. package/src/untypped-modules.d.ts +9 -0
  439. package/src/utils/ClickAwayProvider/ClickAwayProvider.stories.jsx +70 -0
  440. package/src/utils/ClickAwayProvider/ClickAwayProvider.tsx +69 -0
  441. package/src/utils/ClickAwayProvider/index.ts +1 -0
  442. package/src/utils/MaterialThemeSwitcher/MaterialThemeSwitcher.tsx +54 -0
  443. package/src/utils/MaterialThemeSwitcher/index.ts +1 -0
  444. package/src/utils/Portal/Portal.test.tsx +31 -0
  445. package/src/utils/Portal/Portal.tsx +33 -0
  446. package/src/utils/Portal/PortalProvider.stories.jsx +22 -0
  447. package/src/utils/Portal/PortalProvider.test.tsx +72 -0
  448. package/src/utils/Portal/PortalProvider.tsx +24 -0
  449. package/src/utils/Portal/index.tsx +2 -0
  450. package/src/utils/browser/DOM/findImage.tsx +3 -0
  451. package/src/utils/browser/DOM/startViewTransition.ts +68 -0
  452. package/src/utils/browser/focus/constants.ts +7 -0
  453. package/src/utils/browser/focus/getFirstAndLastFocusable.test.ts +134 -0
  454. package/src/utils/browser/focus/getFirstAndLastFocusable.ts +21 -0
  455. package/src/utils/browser/focus/getFocusableElements.test.ts +151 -0
  456. package/src/utils/browser/focus/getFocusableElements.ts +7 -0
  457. package/src/utils/browser/isFocusVisible.ts +9 -0
  458. package/src/utils/browser/isHoverNotSupported.test.js +24 -0
  459. package/src/utils/browser/isHoverNotSupported.ts +2 -0
  460. package/src/utils/browser/isReducedMotion.ts +6 -0
  461. package/src/utils/date/addMonthResetDay.test.ts +13 -0
  462. package/src/utils/date/addMonthResetDay.ts +9 -0
  463. package/src/utils/date/formatDayNumber.test.ts +12 -0
  464. package/src/utils/date/formatDayNumber.ts +5 -0
  465. package/src/utils/date/getFirstDayOfWeek.test.ts +20 -0
  466. package/src/utils/date/getFirstDayOfWeek.ts +59 -0
  467. package/src/utils/date/getMonthCalendar.test.ts +127 -0
  468. package/src/utils/date/getMonthCalendar.ts +69 -0
  469. package/src/utils/date/getWeekDays.test.ts +48 -0
  470. package/src/utils/date/getWeekDays.ts +34 -0
  471. package/src/utils/date/getYearDisplayName.test.ts +20 -0
  472. package/src/utils/date/getYearDisplayName.ts +12 -0
  473. package/src/utils/date/isDateValid.test.ts +15 -0
  474. package/src/utils/date/isDateValid.ts +4 -0
  475. package/src/utils/date/isSameDay.test.ts +37 -0
  476. package/src/utils/date/isSameDay.ts +11 -0
  477. package/src/utils/disabled/DisabledStateContext.tsx +29 -0
  478. package/src/utils/disabled/DisabledStateProvider.stories.tsx +92 -0
  479. package/src/utils/disabled/index.ts +2 -0
  480. package/src/utils/disabled/useDisableStateProps.test.tsx +74 -0
  481. package/src/utils/disabled/useDisableStateProps.tsx +37 -0
  482. package/src/utils/function/makeListenerTowerContext.ts +32 -0
  483. package/src/utils/index.ts +7 -0
  484. package/src/utils/locale/getCurrentLocale.ts +4 -0
  485. package/src/utils/locale/parseLocale.test.ts +17 -0
  486. package/src/utils/locale/parseLocale.ts +23 -0
  487. package/src/utils/locale/types.ts +8 -0
  488. package/src/utils/number/clamp.ts +17 -0
  489. package/src/utils/object/isEqual.test.ts +25 -0
  490. package/src/utils/object/isEqual.ts +11 -0
  491. package/src/utils/partitionMulti.test.ts +27 -0
  492. package/{_internal/partitionMulti-4daccdd5.js → src/utils/partitionMulti.ts} +9 -5
  493. package/src/utils/react/OnBeforeUnmount.tsx +20 -0
  494. package/src/utils/react/RawClickable.test.tsx +153 -0
  495. package/src/utils/react/RawClickable.tsx +65 -0
  496. package/src/utils/react/flattenChildren.ts +32 -0
  497. package/src/utils/react/forwardRef.ts +11 -0
  498. package/src/utils/react/forwardRefPolymorphic.ts +9 -0
  499. package/src/utils/react/mergeRefs.ts +33 -0
  500. package/src/utils/react/renderLink.tsx +17 -0
  501. package/src/utils/react/skipRender.tsx +18 -0
  502. package/src/utils/react/unref.ts +7 -0
  503. package/src/utils/react/wrapChildrenIconWithSpaces.test.tsx +37 -0
  504. package/src/utils/react/wrapChildrenIconWithSpaces.tsx +22 -0
  505. package/src/utils/theme/ThemeContext.ts +16 -0
  506. package/src/utils/theme/invertTheme.ts +4 -0
  507. package/src/utils/type/Comp.ts +14 -0
  508. package/src/utils/type/ComponentRef.ts +16 -0
  509. package/src/utils/type/HasAriaDisabled.ts +6 -0
  510. package/src/utils/type/HasPolymorphicAs.ts +6 -0
  511. package/src/utils/type/HasRequiredLinkHref.ts +1 -0
  512. package/src/utils/type/MaybeElementOrRef.ts +6 -0
  513. package/src/utils/type/index.ts +9 -0
  514. package/src/utils/type/isComponent.ts +33 -0
  515. package/src/utils/type/isComponentType.ts +9 -0
  516. package/utils/index.d.ts +1 -1
  517. package/utils/index.js +1 -3
  518. package/utils/index.js.map +1 -1
  519. package/_internal/Button-f19e18df.js +0 -96
  520. package/_internal/Button-f19e18df.js.map +0 -1
  521. package/_internal/ButtonRoot-ab633b1d.js +0 -115
  522. package/_internal/ButtonRoot-ab633b1d.js.map +0 -1
  523. package/_internal/Chip-4c572eec.js +0 -149
  524. package/_internal/Chip-4c572eec.js.map +0 -1
  525. package/_internal/ClickAwayProvider-bcce6ceb.js +0 -93
  526. package/_internal/ClickAwayProvider-bcce6ceb.js.map +0 -1
  527. package/_internal/DisabledStateContext-077b7bef.js +0 -29
  528. package/_internal/DisabledStateContext-077b7bef.js.map +0 -1
  529. package/_internal/HeadingLevelProvider-e4817816.js +0 -59
  530. package/_internal/HeadingLevelProvider-e4817816.js.map +0 -1
  531. package/_internal/IconButton-10585058.js +0 -72
  532. package/_internal/IconButton-10585058.js.map +0 -1
  533. package/_internal/ImageCaption-4279b2b6.js +0 -65
  534. package/_internal/ImageCaption-4279b2b6.js.map +0 -1
  535. package/_internal/List-d5f5d465.js +0 -791
  536. package/_internal/List-d5f5d465.js.map +0 -1
  537. package/_internal/PopoverDialog-21e5c9dd.js +0 -647
  538. package/_internal/PopoverDialog-21e5c9dd.js.map +0 -1
  539. package/_internal/Portal-c43d098b.js +0 -42
  540. package/_internal/Portal-c43d098b.js.map +0 -1
  541. package/_internal/RawClickable-c76bbc4c.js +0 -50
  542. package/_internal/RawClickable-c76bbc4c.js.map +0 -1
  543. package/_internal/Slides-01f513ce.js +0 -675
  544. package/_internal/Slides-01f513ce.js.map +0 -1
  545. package/_internal/ThemeContext-3181f000.js +0 -14
  546. package/_internal/ThemeContext-3181f000.js.map +0 -1
  547. package/_internal/Thumbnail-30d2a781.js +0 -312
  548. package/_internal/Thumbnail-30d2a781.js.map +0 -1
  549. package/_internal/components/alert-dialog-8f1c163c.js +0 -147
  550. package/_internal/components/alert-dialog-8f1c163c.js.map +0 -1
  551. package/_internal/components/autocomplete-bfbdeb3c.js +0 -264
  552. package/_internal/components/autocomplete-bfbdeb3c.js.map +0 -1
  553. package/_internal/components/avatar-6990e3e9.js +0 -87
  554. package/_internal/components/avatar-6990e3e9.js.map +0 -1
  555. package/_internal/components/badge-81543bc7.js +0 -81
  556. package/_internal/components/badge-81543bc7.js.map +0 -1
  557. package/_internal/components/button-927abe71.js +0 -49
  558. package/_internal/components/button-927abe71.js.map +0 -1
  559. package/_internal/components/checkbox-dc4caec8.js +0 -131
  560. package/_internal/components/checkbox-dc4caec8.js.map +0 -1
  561. package/_internal/components/chip-fb3d0c76.js +0 -104
  562. package/_internal/components/chip-fb3d0c76.js.map +0 -1
  563. package/_internal/components/comment-block-b84c4694.js +0 -121
  564. package/_internal/components/comment-block-b84c4694.js.map +0 -1
  565. package/_internal/components/date-picker-a425534c.js +0 -2
  566. package/_internal/components/date-picker-a425534c.js.map +0 -1
  567. package/_internal/components/dialog-7dbcb485.js +0 -226
  568. package/_internal/components/dialog-7dbcb485.js.map +0 -1
  569. package/_internal/components/divider-12e9b6a0.js +0 -53
  570. package/_internal/components/divider-12e9b6a0.js.map +0 -1
  571. package/_internal/components/drag-handle-a38ff757.js +0 -53
  572. package/_internal/components/drag-handle-a38ff757.js.map +0 -1
  573. package/_internal/components/dropdown-38b0b6a0.js +0 -148
  574. package/_internal/components/dropdown-38b0b6a0.js.map +0 -1
  575. package/_internal/components/expansion-panel-c4b93653.js +0 -158
  576. package/_internal/components/expansion-panel-c4b93653.js.map +0 -1
  577. package/_internal/components/flag-c5e2f5f0.js +0 -55
  578. package/_internal/components/flag-c5e2f5f0.js.map +0 -1
  579. package/_internal/components/flex-box-c8701a85.js +0 -58
  580. package/_internal/components/flex-box-c8701a85.js.map +0 -1
  581. package/_internal/components/generic-block-0d6ad5a6.js +0 -115
  582. package/_internal/components/generic-block-0d6ad5a6.js.map +0 -1
  583. package/_internal/components/grid-3b194fe8.js +0 -109
  584. package/_internal/components/grid-3b194fe8.js.map +0 -1
  585. package/_internal/components/grid-column-985b9327.js +0 -60
  586. package/_internal/components/grid-column-985b9327.js.map +0 -1
  587. package/_internal/components/heading-5e954dfc.js +0 -54
  588. package/_internal/components/heading-5e954dfc.js.map +0 -1
  589. package/_internal/components/icon-2e7345ad.js +0 -103
  590. package/_internal/components/icon-2e7345ad.js.map +0 -1
  591. package/_internal/components/image-block-8d21dd7e.js +0 -109
  592. package/_internal/components/image-block-8d21dd7e.js.map +0 -1
  593. package/_internal/components/image-lightbox-4a5ab962.js +0 -743
  594. package/_internal/components/image-lightbox-4a5ab962.js.map +0 -1
  595. package/_internal/components/inline-list-4884f004.js +0 -74
  596. package/_internal/components/inline-list-4884f004.js.map +0 -1
  597. package/_internal/components/input-helper-e644e05e.js +0 -73
  598. package/_internal/components/input-helper-e644e05e.js.map +0 -1
  599. package/_internal/components/input-label-5e509a1b.js +0 -61
  600. package/_internal/components/input-label-5e509a1b.js.map +0 -1
  601. package/_internal/components/lightbox-bec1b95f.js +0 -149
  602. package/_internal/components/lightbox-bec1b95f.js.map +0 -1
  603. package/_internal/components/link-9637b9e4.js +0 -70
  604. package/_internal/components/link-9637b9e4.js.map +0 -1
  605. package/_internal/components/link-preview-7a4a6e4b.js +0 -108
  606. package/_internal/components/link-preview-7a4a6e4b.js.map +0 -1
  607. package/_internal/components/list-5c8f7122.js +0 -77
  608. package/_internal/components/list-5c8f7122.js.map +0 -1
  609. package/_internal/components/message-a67067d9.js +0 -96
  610. package/_internal/components/message-a67067d9.js.map +0 -1
  611. package/_internal/components/mosaic-92b66c80.js +0 -92
  612. package/_internal/components/mosaic-92b66c80.js.map +0 -1
  613. package/_internal/components/navigation-4fd3917d.js +0 -210
  614. package/_internal/components/navigation-4fd3917d.js.map +0 -1
  615. package/_internal/components/notification-9063c963.js +0 -140
  616. package/_internal/components/notification-9063c963.js.map +0 -1
  617. package/_internal/components/popover-3c4c54bd.js +0 -3
  618. package/_internal/components/popover-3c4c54bd.js.map +0 -1
  619. package/_internal/components/post-block-0cfc2206.js +0 -99
  620. package/_internal/components/post-block-0cfc2206.js.map +0 -1
  621. package/_internal/components/progress-eaf5b33d.js +0 -188
  622. package/_internal/components/progress-eaf5b33d.js.map +0 -1
  623. package/_internal/components/progress-tracker-4a65718d.js +0 -309
  624. package/_internal/components/progress-tracker-4a65718d.js.map +0 -1
  625. package/_internal/components/radio-button-3ef8a325.js +0 -148
  626. package/_internal/components/radio-button-3ef8a325.js.map +0 -1
  627. package/_internal/components/select-d46cfe35.js +0 -404
  628. package/_internal/components/select-d46cfe35.js.map +0 -1
  629. package/_internal/components/side-navigation-75b22f19.js +0 -159
  630. package/_internal/components/side-navigation-75b22f19.js.map +0 -1
  631. package/_internal/components/skeleton-361ce335.js +0 -174
  632. package/_internal/components/skeleton-361ce335.js.map +0 -1
  633. package/_internal/components/slider-8094cb5c.js +0 -305
  634. package/_internal/components/slider-8094cb5c.js.map +0 -1
  635. package/_internal/components/slideshow-2e8cd372.js +0 -150
  636. package/_internal/components/slideshow-2e8cd372.js.map +0 -1
  637. package/_internal/components/switch-5516949b.js +0 -118
  638. package/_internal/components/switch-5516949b.js.map +0 -1
  639. package/_internal/components/table-fa198ee6.js +0 -299
  640. package/_internal/components/table-fa198ee6.js.map +0 -1
  641. package/_internal/components/tabs-bb9bc2a5.js +0 -298
  642. package/_internal/components/tabs-bb9bc2a5.js.map +0 -1
  643. package/_internal/components/text-289c0526.js +0 -2
  644. package/_internal/components/text-289c0526.js.map +0 -1
  645. package/_internal/components/text-field-82733568.js +0 -346
  646. package/_internal/components/text-field-82733568.js.map +0 -1
  647. package/_internal/components/thumbnail-e3acff82.js +0 -42
  648. package/_internal/components/thumbnail-e3acff82.js.map +0 -1
  649. package/_internal/components/toolbar-155562be.js +0 -60
  650. package/_internal/components/toolbar-155562be.js.map +0 -1
  651. package/_internal/components/tooltip-84ffb4f9.js +0 -318
  652. package/_internal/components/tooltip-84ffb4f9.js.map +0 -1
  653. package/_internal/components/uploader-896a1d89.js +0 -150
  654. package/_internal/components/uploader-896a1d89.js.map +0 -1
  655. package/_internal/components/user-block-8fd15895.js +0 -143
  656. package/_internal/components/user-block-8fd15895.js.map +0 -1
  657. package/_internal/constants-b9e57936.js +0 -2155
  658. package/_internal/constants-b9e57936.js.map +0 -1
  659. package/_internal/constants-d0e3f49e.js +0 -24
  660. package/_internal/constants-d0e3f49e.js.map +0 -1
  661. package/_internal/context-21aeb1c7.js +0 -19
  662. package/_internal/context-21aeb1c7.js.map +0 -1
  663. package/_internal/forwardRef-49d2bb84.js +0 -80
  664. package/_internal/forwardRef-49d2bb84.js.map +0 -1
  665. package/_internal/getFocusableElements-230173a8.js +0 -13
  666. package/_internal/getFocusableElements-230173a8.js.map +0 -1
  667. package/_internal/index-b4d256e7.js +0 -118
  668. package/_internal/index-b4d256e7.js.map +0 -1
  669. package/_internal/index-f415b08e.js +0 -430
  670. package/_internal/index-f415b08e.js.map +0 -1
  671. package/_internal/isComponent-78df9309.js +0 -20
  672. package/_internal/isComponent-78df9309.js.map +0 -1
  673. package/_internal/isComponentType-e806b848.js +0 -9
  674. package/_internal/isComponentType-e806b848.js.map +0 -1
  675. package/_internal/mergeRefs-f0d7d6ea.js +0 -30
  676. package/_internal/mergeRefs-f0d7d6ea.js.map +0 -1
  677. package/_internal/partitionMulti-4daccdd5.js.map +0 -1
  678. package/_internal/state-db358714.js +0 -130
  679. package/_internal/state-db358714.js.map +0 -1
  680. package/_internal/useBooleanState-2a3d237c.js +0 -12
  681. package/_internal/useBooleanState-2a3d237c.js.map +0 -1
  682. package/_internal/useCallbackOnEscape-ea4d9eb4.js +0 -62
  683. package/_internal/useCallbackOnEscape-ea4d9eb4.js.map +0 -1
  684. package/_internal/useDisableBodyScroll-36bd7352.js +0 -219
  685. package/_internal/useDisableBodyScroll-36bd7352.js.map +0 -1
  686. package/_internal/useDisableStateProps-fffc365f.js +0 -36
  687. package/_internal/useDisableStateProps-fffc365f.js.map +0 -1
  688. package/_internal/useFocusTrap-c3c6378b.js +0 -112
  689. package/_internal/useFocusTrap-c3c6378b.js.map +0 -1
  690. package/_internal/useId-3a1facc0.js +0 -18
  691. package/_internal/useId-3a1facc0.js.map +0 -1
  692. package/_internal/useRovingTabIndex-7daf0f24.js +0 -77
  693. package/_internal/useRovingTabIndex-7daf0f24.js.map +0 -1
  694. package/_internal/useTransitionVisibility-321fdbfa.js +0 -50
  695. package/_internal/useTransitionVisibility-321fdbfa.js.map +0 -1
  696. package/_internal/wrapChildrenIconWithSpaces-f86106ce.js +0 -20
  697. package/_internal/wrapChildrenIconWithSpaces-f86106ce.js.map +0 -1
@@ -1,743 +0,0 @@
1
- import { _ as _extends, f as forwardRef, c as classNames } from '../forwardRef-49d2bb84.js';
2
- import React__default from 'react';
3
- import { u as useMergeRefs, m as mergeRefs } from '../mergeRefs-f0d7d6ea.js';
4
- import { mdiMagnifyPlusOutline, mdiMagnifyMinusOutline } from '@lumx/icons';
5
- import memoize from 'lodash/memoize';
6
- import { I as ImageCaption } from '../ImageCaption-4279b2b6.js';
7
- import { getRootClassName } from '@lumx/core/js/utils/className';
8
- import throttle from 'lodash/throttle';
9
- import { i as isReducedMotion } from '../useTransitionVisibility-321fdbfa.js';
10
- import { S as SlideshowItem, a as SlideshowControls, b as Slides } from '../Slides-01f513ce.js';
11
- import { T as Thumbnail } from '../Thumbnail-30d2a781.js';
12
- import { I as IconButton } from '../IconButton-10585058.js';
13
- import { FlexBox } from './flex-box-c8701a85.js';
14
- import ReactDOM from 'react-dom';
15
- import { Lightbox } from './lightbox-bec1b95f.js';
16
- import { T as ThemeProvider } from '../ThemeContext-3181f000.js';
17
- import { C as ClickAwayProvider } from '../ClickAwayProvider-bcce6ceb.js';
18
-
19
- /**
20
- * Component display name.
21
- */
22
- const COMPONENT_NAME = 'ImageLightbox';
23
-
24
- /**
25
- * Component default class name and class prefix.
26
- */
27
- const CLASSNAME = getRootClassName(COMPONENT_NAME);
28
-
29
- /**
30
- * Observe element size (only works if it's size depends on the window size).
31
- *
32
- * (Not using ResizeObserver for better browser backward compat)
33
- *
34
- * @param elementRef Element to observe
35
- * @return the size and a manual update callback
36
- */
37
- function useSizeOnWindowResize(elementRef) {
38
- const [size, setSize] = React__default.useState(null);
39
- const updateSize = React__default.useMemo(() => throttle(() => {
40
- const newSize = elementRef.current?.getBoundingClientRect();
41
- if (newSize) setSize(newSize);
42
- }, 10), [elementRef]);
43
- React__default.useEffect(() => {
44
- updateSize();
45
- window.addEventListener('resize', updateSize);
46
- return () => window.removeEventListener('resize', updateSize);
47
- }, [updateSize]);
48
- return [size, updateSize];
49
- }
50
-
51
- /** Get natural image size after load. */
52
- function useImageSize(imgRef, getInitialSize) {
53
- const [imageSize, setImageSize] = React__default.useState(getInitialSize || null);
54
- React__default.useEffect(() => {
55
- const {
56
- current: img
57
- } = imgRef;
58
- if (!img) {
59
- return undefined;
60
- }
61
- const onLoad = () => setImageSize({
62
- width: img.naturalWidth,
63
- height: img.naturalHeight
64
- });
65
- img.addEventListener('load', onLoad);
66
- return () => img.removeEventListener('load', onLoad);
67
- }, [imgRef]);
68
- return imageSize;
69
- }
70
-
71
- /** Minimal recursive deep equal of JS values */
72
- function isEqual(obj1, obj2) {
73
- if (obj1 === obj2) return true;
74
- if (typeof obj1 === 'object' && typeof obj2 === 'object') {
75
- const keys1 = Object.keys(obj1);
76
- const keys2 = Object.keys(obj2);
77
- if (keys1.length !== keys2.length) return false;
78
- return keys1.every(key1 => isEqual(obj1[key1], obj2[key1]));
79
- }
80
- return false;
81
- }
82
-
83
- /**
84
- * Listen to mouse wheel + ctrl and multi-pointer pinch to zoom
85
- */
86
- function usePointerZoom(scrollAreaRef, onScaleChange, animateScroll) {
87
- const [isPointerZooming, setPointerZooming] = React__default.useState(false);
88
- React__default.useEffect(() => {
89
- const scrollArea = scrollAreaRef.current;
90
- if (!scrollArea || !onScaleChange) {
91
- return undefined;
92
- }
93
- let animationFrame;
94
- let zoomStateTimeoutId;
95
- function updateScaleOnNextFrame(newScale, mousePosition) {
96
- // Cancel previously scheduled frame
97
- if (animationFrame) cancelAnimationFrame(animationFrame);
98
-
99
- // Cancel previously scheduled zoom state change
100
- if (zoomStateTimeoutId) clearTimeout(zoomStateTimeoutId);
101
- function nextFrame() {
102
- setPointerZooming(true);
103
- onScaleChange?.(newScale);
104
- animationFrame = null;
105
- // Wait a bit before indicating the pointer zooming is finished
106
- zoomStateTimeoutId = setTimeout(() => setPointerZooming(false), 100);
107
- }
108
- animationFrame = requestAnimationFrame(nextFrame);
109
-
110
- // Animate scroll in parallel (centering on the current mouse position)
111
- animateScroll(mousePosition, {
112
- width: scrollArea.scrollWidth,
113
- height: scrollArea.scrollHeight
114
- });
115
- }
116
- function onWheel(event) {
117
- if (!event.ctrlKey) {
118
- return;
119
- }
120
- event.preventDefault();
121
- const newScale = Math.exp(-event.deltaY / 50);
122
-
123
- // Update scale on next frame (focused on the mouse position)
124
- updateScaleOnNextFrame(newScale, {
125
- x: event.clientX,
126
- y: event.clientY
127
- });
128
- }
129
- const activePointers = {};
130
- let prevDistance = null;
131
- let previousCenterPoint = null;
132
- function onPointerDown(event) {
133
- activePointers[event.pointerId] = event;
134
- }
135
- function onPointerMove(event) {
136
- // Update pointer in cache
137
- if (activePointers[event.pointerId]) {
138
- activePointers[event.pointerId] = event;
139
- }
140
- const pointers = Object.values(activePointers);
141
-
142
- // Make sure we run computation on one of the pointer in the group
143
- if (pointers[0]?.pointerId !== event.pointerId) {
144
- return;
145
- }
146
-
147
- // Centered point between all pointers
148
- const centerPoint = {
149
- x: pointers.reduce((x, {
150
- clientX
151
- }) => x + clientX, 0) / pointers.length,
152
- y: pointers.reduce((y, {
153
- clientY
154
- }) => y + clientY, 0) / pointers.length
155
- };
156
-
157
- // Movement of the center point
158
- const deltaCenterPoint = previousCenterPoint && {
159
- left: previousCenterPoint.x - centerPoint.x,
160
- top: previousCenterPoint.y - centerPoint.y
161
- };
162
-
163
- // Pan X & Y
164
- if (deltaCenterPoint) {
165
- // Apply movement of the center point to the scroll
166
- scrollArea.scrollBy({
167
- top: deltaCenterPoint.top / 2,
168
- left: deltaCenterPoint.left / 2
169
- });
170
- }
171
-
172
- // Pinch to zoom
173
- if (pointers.length === 2) {
174
- const [pointer1, pointer2] = pointers;
175
- const distance = Math.hypot(pointer2.clientX - pointer1.clientX, pointer2.clientY - pointer1.clientY);
176
- if (prevDistance && deltaCenterPoint) {
177
- const delta = prevDistance - distance;
178
- const absDelta = Math.abs(delta);
179
-
180
- // Zoom only if we are "pinching" more than we are moving the pointers
181
- if (absDelta > Math.abs(deltaCenterPoint.left) && absDelta > Math.abs(deltaCenterPoint.top)) {
182
- // Update scale on next frame (focused on the center point between the two pointers)
183
- const newScale = Math.exp(-delta / 100);
184
- updateScaleOnNextFrame(newScale, centerPoint);
185
- }
186
- }
187
- prevDistance = distance;
188
- }
189
- previousCenterPoint = centerPoint;
190
- }
191
- function onPointerUp(event) {
192
- prevDistance = null;
193
- previousCenterPoint = null;
194
- delete activePointers[event.pointerId];
195
- }
196
- scrollArea.addEventListener('wheel', onWheel, {
197
- passive: false
198
- });
199
- const isMultiTouch = navigator.maxTouchPoints >= 2;
200
- if (isMultiTouch) {
201
- scrollArea.addEventListener('pointerdown', onPointerDown);
202
- scrollArea.addEventListener('pointermove', onPointerMove);
203
- scrollArea.addEventListener('pointerup', onPointerUp);
204
- }
205
- return () => {
206
- scrollArea.removeEventListener('wheel', onWheel);
207
- if (isMultiTouch) {
208
- scrollArea.removeEventListener('pointerdown', onPointerDown);
209
- scrollArea.removeEventListener('pointermove', onPointerMove);
210
- scrollArea.removeEventListener('pointerup', onPointerUp);
211
- }
212
- };
213
- }, [animateScroll, onScaleChange, scrollAreaRef]);
214
- return isPointerZooming;
215
- }
216
-
217
- /** Maintains the scroll position centered relative to the original scroll area's dimensions when the content scales. */
218
- function useAnimateScroll(scrollAreaRef) {
219
- return React__default.useMemo(() => {
220
- let animationFrame = null;
221
- return function animate(centerPoint, initialScrollAreaSize) {
222
- const scrollArea = scrollAreaRef.current;
223
- if (!scrollArea) {
224
- return;
225
- }
226
-
227
- // Cancel previously running animation
228
- if (animationFrame) cancelAnimationFrame(animationFrame);
229
-
230
- // Center on the given point or else on the scroll area visual center
231
- const clientHeightRatio = centerPoint?.y ? centerPoint.y / scrollArea.clientHeight : 0.5;
232
- const clientWidthRatio = centerPoint?.x ? centerPoint.x / scrollArea.clientWidth : 0.5;
233
- const initialScrollHeight = initialScrollAreaSize?.height || scrollArea.scrollHeight;
234
- const initialScrollWidth = initialScrollAreaSize?.width || scrollArea.scrollWidth;
235
- const heightCenter = scrollArea.scrollTop + scrollArea.clientHeight * clientHeightRatio;
236
- const heightRatio = heightCenter / initialScrollHeight;
237
- const widthCenter = scrollArea.scrollLeft + scrollArea.clientWidth * clientWidthRatio;
238
- const widthRatio = widthCenter / initialScrollWidth;
239
- let prevScrollHeight = 0;
240
- let prevScrollWidth = 0;
241
- function nextFrame() {
242
- const {
243
- scrollHeight,
244
- scrollWidth,
245
- clientHeight,
246
- clientWidth
247
- } = scrollArea;
248
-
249
- // Scroll area stopped expanding => stop animation
250
- if (scrollHeight === prevScrollHeight && scrollWidth === prevScrollWidth) {
251
- animationFrame = null;
252
- return;
253
- }
254
-
255
- // Compute next scroll position
256
- const top = heightRatio * scrollHeight - clientHeight * clientHeightRatio;
257
- const left = widthRatio * scrollWidth - clientWidth * clientWidthRatio;
258
- scrollArea.scrollTo({
259
- top,
260
- left
261
- });
262
- prevScrollHeight = scrollHeight;
263
- prevScrollWidth = scrollWidth;
264
- animationFrame = requestAnimationFrame(nextFrame);
265
- }
266
- animationFrame = requestAnimationFrame(nextFrame);
267
- };
268
- }, [scrollAreaRef]);
269
- }
270
-
271
- /** Internal image slide component for ImageLightbox */
272
- const ImageSlide = /*#__PURE__*/React__default.memo(props => {
273
- const {
274
- isActive,
275
- scale,
276
- onScaleChange,
277
- image: {
278
- image,
279
- imgRef: propImgRef,
280
- imgProps,
281
- alt,
282
- loadingPlaceholderImageRef
283
- }
284
- } = props;
285
-
286
- // Get scroll area size
287
- const scrollAreaRef = React__default.useRef(null);
288
- const [scrollAreaSize, updateSize] = useSizeOnWindowResize(scrollAreaRef);
289
- React__default.useEffect(() => {
290
- // Update size when active
291
- if (isActive) updateSize();
292
- }, [isActive, updateSize]);
293
-
294
- // Get image size
295
- const imgRef = React__default.useRef(null);
296
- const imageSize = useImageSize(imgRef, () => {
297
- const width = Number.parseInt(imgProps?.width, 10);
298
- const height = Number.parseInt(imgProps?.height, 10);
299
- return width && height ? {
300
- width,
301
- height
302
- } : null;
303
- });
304
-
305
- // Calculate new image size with scale
306
- const scaledImageSize = React__default.useMemo(() => {
307
- if (!scrollAreaSize || !imageSize) {
308
- return null;
309
- }
310
- const horizontalScale = scrollAreaSize.width / imageSize.width;
311
- const verticalScale = scrollAreaSize.height / imageSize.height;
312
- const baseScale = Math.min(1, Math.min(horizontalScale, verticalScale));
313
- return {
314
- width: imageSize.width * baseScale * (scale ?? 1),
315
- height: imageSize.height * baseScale * (scale ?? 1)
316
- };
317
- }, [scrollAreaSize, imageSize, scale]);
318
-
319
- // Animate scroll to preserve the center of the current visible window in the scroll area
320
- const animateScroll = useAnimateScroll(scrollAreaRef);
321
-
322
- // Zoom via mouse wheel or multi-touch pinch zoom
323
- const isPointerZooming = usePointerZoom(scrollAreaRef, onScaleChange, animateScroll);
324
-
325
- // Animate scroll on scale change
326
- React__default.useLayoutEffect(() => {
327
- if (scale && !isPointerZooming) {
328
- animateScroll();
329
- }
330
- }, [isPointerZooming, scale, animateScroll]);
331
- const isScrollable = scaledImageSize && scrollAreaSize && (scaledImageSize.width > scrollAreaSize.width || scaledImageSize.height > scrollAreaSize.height);
332
- return /*#__PURE__*/React__default.createElement(SlideshowItem, {
333
- ref: scrollAreaRef
334
- // Make it accessible to keyboard nav when the zone is scrollable
335
- ,
336
- tabIndex: isScrollable ? 0 : undefined,
337
- className: `${CLASSNAME}__image-slide`
338
- }, /*#__PURE__*/React__default.createElement(Thumbnail, {
339
- imgRef: useMergeRefs(imgRef, propImgRef),
340
- image: image,
341
- alt: alt,
342
- className: `${CLASSNAME}__thumbnail`,
343
- imgProps: {
344
- ...imgProps,
345
- style: {
346
- ...imgProps?.style,
347
- ...(scaledImageSize || {
348
- maxHeight: scrollAreaSize?.height,
349
- maxWidth: scrollAreaSize?.width
350
- }),
351
- // Only animate when scale is set, and we are not pointer zooming and the user does not prefer reduced motion
352
- transition: scale && !isPointerZooming && !isReducedMotion() ? 'all 250ms' : undefined
353
- }
354
- },
355
- loadingPlaceholderImageRef: loadingPlaceholderImageRef
356
- }));
357
- }, isEqual);
358
-
359
- /** Internal image slideshow component for ImageLightbox */
360
- const ImageSlideshow = ({
361
- activeImageIndex,
362
- images,
363
- slideGroupLabel,
364
- zoomInButtonProps,
365
- zoomOutButtonProps,
366
- slideshowControlsProps,
367
- currentPaginationItemRef,
368
- footerRef,
369
- activeImageRef
370
- }) => {
371
- const {
372
- activeIndex,
373
- slideshowId,
374
- setSlideshow,
375
- slideshowSlidesId,
376
- slidesCount,
377
- onNextClick,
378
- onPaginationClick,
379
- onPreviousClick,
380
- toggleAutoPlay
381
- } = SlideshowControls.useSlideshowControls({
382
- itemsCount: images.length,
383
- activeIndex: activeImageIndex
384
- });
385
-
386
- // Image metadata (caption)
387
- const title = images[activeIndex]?.title;
388
- const description = images[activeIndex]?.description;
389
- const tags = images[activeIndex]?.tags;
390
- const metadata = title || description || tags ? /*#__PURE__*/React__default.createElement(ImageCaption, {
391
- as: "div",
392
- title: title,
393
- description: description,
394
- tags: tags,
395
- align: "center"
396
- }) : null;
397
-
398
- // Slideshow controls
399
- const slideShowControls = slidesCount > 1 && slideshowControlsProps ? /*#__PURE__*/React__default.createElement(SlideshowControls, _extends({
400
- activeIndex: activeIndex,
401
- slidesCount: slidesCount,
402
- onNextClick: onNextClick,
403
- onPreviousClick: onPreviousClick,
404
- onPaginationClick: onPaginationClick
405
- }, slideshowControlsProps, {
406
- paginationItemProps: index => {
407
- const props = slideshowControlsProps?.paginationItemProps?.(index) || {};
408
- return {
409
- ...props,
410
- ref: mergeRefs(props?.ref,
411
- // Focus the active pagination item once on mount
412
- activeIndex === index ? currentPaginationItemRef : undefined)
413
- };
414
- }
415
- })) : null;
416
-
417
- // Zoom controls
418
- const [scale, setScale] = React__default.useState(undefined);
419
- const zoomEnabled = zoomInButtonProps && zoomOutButtonProps;
420
- const onScaleChange = React__default.useMemo(() => {
421
- if (!zoomEnabled) return undefined;
422
- return newScale => {
423
- setScale((prevScale = 1) => Math.max(1, newScale * prevScale));
424
- };
425
- }, [zoomEnabled]);
426
- const zoomIn = React__default.useCallback(() => onScaleChange?.(1.5), [onScaleChange]);
427
- const zoomOut = React__default.useCallback(() => onScaleChange?.(0.5), [onScaleChange]);
428
- React__default.useEffect(() => {
429
- // Reset scale on slide change
430
- if (typeof activeIndex === 'number') setScale(undefined);
431
- }, [activeIndex]);
432
- const zoomControls = zoomEnabled && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(IconButton, _extends({}, zoomInButtonProps, {
433
- emphasis: "low",
434
- icon: mdiMagnifyPlusOutline,
435
- onClick: zoomIn
436
- })), /*#__PURE__*/React__default.createElement(IconButton, _extends({}, zoomOutButtonProps, {
437
- emphasis: "low",
438
- isDisabled: !scale || scale <= 1,
439
- icon: mdiMagnifyMinusOutline,
440
- onClick: zoomOut
441
- })));
442
- const getImgRef = React__default.useMemo(() => memoize((index, isActive) => {
443
- return mergeRefs(images?.[index].imgRef, isActive ? activeImageRef : undefined);
444
- },
445
- // memoize based on both arguments
446
- (...args) => args.join()), [images, activeImageRef]);
447
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement(Slides, {
448
- activeIndex: activeIndex,
449
- slideGroupLabel: slideGroupLabel,
450
- fillHeight: true,
451
- id: slideshowId,
452
- ref: setSlideshow,
453
- slidesId: slideshowSlidesId,
454
- toggleAutoPlay: toggleAutoPlay
455
- }, images.map(({
456
- image,
457
- imgRef,
458
- ...imageProps
459
- }, index) => {
460
- const isActive = index === activeIndex;
461
- return /*#__PURE__*/React__default.createElement(ImageSlide, {
462
- isActive: isActive,
463
- key: image,
464
- image: {
465
- ...imageProps,
466
- image,
467
- imgRef: getImgRef(index, isActive)
468
- },
469
- scale: isActive ? scale : undefined,
470
- onScaleChange: onScaleChange
471
- });
472
- })), (metadata || slideShowControls || zoomControls) && /*#__PURE__*/React__default.createElement(FlexBox, {
473
- ref: footerRef,
474
- className: `${CLASSNAME}__footer`,
475
- orientation: "vertical",
476
- vAlign: "center",
477
- gap: "big"
478
- }, metadata, /*#__PURE__*/React__default.createElement(FlexBox, {
479
- className: `${CLASSNAME}__footer-actions`,
480
- orientation: "horizontal",
481
- gap: "regular"
482
- }, slideShowControls, zoomControls)));
483
- };
484
-
485
- /** Unref a react ref or element */
486
- function unref(maybeElement) {
487
- if (maybeElement instanceof HTMLElement) return maybeElement;
488
- return maybeElement?.current;
489
- }
490
-
491
- function setupViewTransitionName(elementRef, name) {
492
- let originalName = null;
493
- return {
494
- set() {
495
- const element = unref(elementRef);
496
- if (!element) return;
497
- originalName = element.style.viewTransitionName;
498
- element.style.viewTransitionName = name;
499
- },
500
- unset() {
501
- const element = unref(elementRef);
502
- if (!element || originalName === null) return;
503
- element.style.viewTransitionName = originalName;
504
- }
505
- };
506
- }
507
-
508
- /**
509
- * Wrapper around the `document.startViewTransition` handling browser incompatibilities, react DOM flush and
510
- * user preference.
511
- *
512
- * @param changes callback containing the changes to apply within the view transition.
513
- * @param setViewTransitionName set the `viewTransitionName` style on a `source` & `target` to morph these elements.
514
- */
515
- async function startViewTransition({
516
- changes,
517
- viewTransitionName
518
- }) {
519
- const start = document?.startViewTransition?.bind(document);
520
- const prefersReducedMotion = isReducedMotion();
521
- const {
522
- flushSync
523
- } = ReactDOM;
524
- if (prefersReducedMotion || !start || !flushSync || !viewTransitionName?.source || !viewTransitionName?.target) {
525
- // Skip, apply changes without a transition
526
- changes();
527
- return;
528
- }
529
-
530
- // Setup set/unset transition name on source & target
531
- const sourceTransitionName = setupViewTransitionName(viewTransitionName.source, viewTransitionName.name);
532
- const targetTransitionName = setupViewTransitionName(viewTransitionName.target, viewTransitionName.name);
533
- sourceTransitionName.set();
534
-
535
- // Start view transition, apply changes & flush to DOM
536
- await start(() => {
537
- sourceTransitionName.unset();
538
- flushSync(changes);
539
- targetTransitionName.set();
540
- }).updateCallbackDone;
541
- targetTransitionName.unset();
542
- }
543
-
544
- /** Find image in element including the element */
545
- const findImage = element => element?.matches('img') ? element : element?.querySelector('img') || null;
546
-
547
- /** Subset of the ImageLightboxProps managed by the useImageLightbox hook */
548
-
549
- const EMPTY_PROPS = {
550
- isOpen: false,
551
- images: [],
552
- parentElement: /*#__PURE__*/React__default.createRef()
553
- };
554
- /**
555
- * Set up an ImageLightbox with images and triggers.
556
- *
557
- * - Associate a trigger with the lightbox to properly focus the trigger on close
558
- * - Associate a trigger with an image to display on open
559
- * - Automatically provide a view transition between an image trigger and the displayed image on open & close
560
- *
561
- * @param props Images to display in the image lightbox
562
- */
563
- function useImageLightbox(props) {
564
- const propsRef = React__default.useRef(props);
565
- React__default.useEffect(() => {
566
- propsRef.current = props;
567
- }, [props]);
568
-
569
- // Keep reference for each image elements
570
- const imageRefsRef = React__default.useRef([]);
571
- const currentImageRef = React__default.useRef(null);
572
- const [imageLightboxProps, setImageLightboxProps] = React__default.useState(() => ({
573
- ...EMPTY_PROPS,
574
- ...props
575
- }));
576
- const getTriggerProps = React__default.useMemo(() => {
577
- const triggerImageRefs = {};
578
- async function close() {
579
- const currentImage = currentImageRef.current;
580
- if (!currentImage) {
581
- return;
582
- }
583
- const currentIndex = imageRefsRef.current.findIndex(imageRef => imageRef.current === currentImage);
584
- await startViewTransition({
585
- changes() {
586
- // Close lightbox
587
- setImageLightboxProps(prevProps => ({
588
- ...prevProps,
589
- isOpen: false
590
- }));
591
- },
592
- // Morph from the image in lightbox to the image in trigger
593
- viewTransitionName: {
594
- source: currentImageRef,
595
- target: triggerImageRefs[currentIndex],
596
- name: CLASSNAME
597
- }
598
- });
599
- }
600
- async function open(triggerElement, {
601
- activeImageIndex
602
- } = {}) {
603
- // If we find an image inside the trigger, animate it in transition with the opening image
604
- const triggerImage = triggerImageRefs[activeImageIndex]?.current || findImage(triggerElement);
605
-
606
- // Inject refs to improve transition and loading style
607
- const images = propsRef.current?.images?.map((image, idx) => {
608
- // Get or create image reference
609
- let imgRef = imageRefsRef.current[idx];
610
- if (!imgRef) {
611
- imgRef = /*#__PURE__*/React__default.createRef();
612
- imageRefsRef.current[idx] = imgRef;
613
- }
614
-
615
- // Try to use the trigger image as the loading placeholder
616
- const loadingPlaceholderImageRef = triggerImage && idx === activeImageIndex ? {
617
- current: triggerImage
618
- } : undefined;
619
- return {
620
- loadingPlaceholderImageRef,
621
- ...image,
622
- imgRef
623
- };
624
- });
625
- await startViewTransition({
626
- changes: () => {
627
- // Open lightbox with setup props
628
- setImageLightboxProps(prevProps => ({
629
- ...prevProps,
630
- ...propsRef.current,
631
- activeImageRef: currentImageRef,
632
- parentElement: {
633
- current: triggerElement
634
- },
635
- isOpen: true,
636
- onClose: () => {
637
- close();
638
- propsRef.current?.onClose?.();
639
- },
640
- images,
641
- activeImageIndex: activeImageIndex || 0
642
- }));
643
- },
644
- // Morph from the image in trigger to the image in lightbox
645
- viewTransitionName: {
646
- source: triggerImage,
647
- target: currentImageRef,
648
- name: CLASSNAME
649
- }
650
- });
651
- }
652
- return memoize(options => ({
653
- ref(element) {
654
- // Track trigger image ref if any
655
- if (options?.activeImageIndex !== undefined && element) {
656
- triggerImageRefs[options.activeImageIndex] = {
657
- current: findImage(element)
658
- };
659
- }
660
- },
661
- onClick(e) {
662
- open(e.target, options);
663
- }
664
- }));
665
- }, []);
666
- return {
667
- getTriggerProps,
668
- imageLightboxProps
669
- };
670
- }
671
-
672
- const Inner = forwardRef((props, ref) => {
673
- const {
674
- className,
675
- isOpen,
676
- closeButtonProps,
677
- onClose,
678
- parentElement,
679
- activeImageIndex,
680
- slideshowControlsProps,
681
- slideGroupLabel,
682
- images,
683
- zoomOutButtonProps,
684
- zoomInButtonProps,
685
- activeImageRef: propImageRef,
686
- ...forwardedProps
687
- } = props;
688
- const currentPaginationItemRef = React__default.useRef(null);
689
- const footerRef = React__default.useRef(null);
690
- const imageRef = React__default.useRef(null);
691
- const clickAwayChildrenRefs = React__default.useRef([imageRef, footerRef]);
692
- const onClickAway = React__default.useCallback(evt => {
693
- const targetElement = evt.target;
694
- if (!(targetElement instanceof HTMLElement) || !(evt instanceof MouseEvent)) return;
695
-
696
- // Skip click away if clicking on the scrollbar
697
- if (targetElement.clientWidth < evt.clientX || targetElement.clientHeight < evt.clientY) return;
698
- onClose?.();
699
- }, [onClose]);
700
- return /*#__PURE__*/React__default.createElement(Lightbox, _extends({
701
- ref: ref,
702
- className: classNames(className, CLASSNAME),
703
- parentElement: parentElement,
704
- isOpen: isOpen,
705
- onClose: onClose,
706
- closeButtonProps: closeButtonProps,
707
- focusElement: currentPaginationItemRef
708
- }, forwardedProps, {
709
- // Disable the close on click away as we want a custom one here
710
- preventAutoClose: true
711
- }), /*#__PURE__*/React__default.createElement(ClickAwayProvider, {
712
- childrenRefs: clickAwayChildrenRefs,
713
- callback: onClickAway
714
- }, /*#__PURE__*/React__default.createElement(ThemeProvider, {
715
- value: "dark"
716
- }, /*#__PURE__*/React__default.createElement(ImageSlideshow, {
717
- activeImageIndex: activeImageIndex,
718
- slideGroupLabel: slideGroupLabel,
719
- slideshowControlsProps: slideshowControlsProps,
720
- images: images,
721
- zoomInButtonProps: zoomInButtonProps,
722
- zoomOutButtonProps: zoomOutButtonProps,
723
- footerRef: footerRef,
724
- activeImageRef: useMergeRefs(propImageRef, imageRef),
725
- currentPaginationItemRef: currentPaginationItemRef
726
- }))));
727
- });
728
- Inner.displayName = COMPONENT_NAME;
729
- Inner.className = CLASSNAME;
730
-
731
- /**
732
- * ImageLightbox component.
733
- *
734
- * @param props Component props.
735
- * @param ref Component ref.
736
- * @return React element.
737
- */
738
- const ImageLightbox = Object.assign(Inner, {
739
- useImageLightbox
740
- });
741
-
742
- export { ImageLightbox };
743
- //# sourceMappingURL=image-lightbox-4a5ab962.js.map