@lumx/react 3.20.1-alpha.20 → 3.20.1-alpha.21

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 -4
  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-1f227024.js +0 -98
  520. package/_internal/Button-1f227024.js.map +0 -1
  521. package/_internal/ButtonRoot-823f3e9c.js +0 -117
  522. package/_internal/ButtonRoot-823f3e9c.js.map +0 -1
  523. package/_internal/Chip-a34f6905.js +0 -146
  524. package/_internal/Chip-a34f6905.js.map +0 -1
  525. package/_internal/ClickAwayProvider-7093ba23.js +0 -95
  526. package/_internal/ClickAwayProvider-7093ba23.js.map +0 -1
  527. package/_internal/DisabledStateContext-ea04260d.js +0 -29
  528. package/_internal/DisabledStateContext-ea04260d.js.map +0 -1
  529. package/_internal/HeadingLevelProvider-ebdcb0c7.js +0 -61
  530. package/_internal/HeadingLevelProvider-ebdcb0c7.js.map +0 -1
  531. package/_internal/IconButton-f4df224c.js +0 -77
  532. package/_internal/IconButton-f4df224c.js.map +0 -1
  533. package/_internal/ImageCaption-8134a3aa.js +0 -75
  534. package/_internal/ImageCaption-8134a3aa.js.map +0 -1
  535. package/_internal/List-54237e0e.js +0 -793
  536. package/_internal/List-54237e0e.js.map +0 -1
  537. package/_internal/PopoverDialog-e0967e5f.js +0 -655
  538. package/_internal/PopoverDialog-e0967e5f.js.map +0 -1
  539. package/_internal/Portal-3f86608e.js +0 -45
  540. package/_internal/Portal-3f86608e.js.map +0 -1
  541. package/_internal/RawClickable-2c2b6a89.js +0 -52
  542. package/_internal/RawClickable-2c2b6a89.js.map +0 -1
  543. package/_internal/Slides-b7a67f32.js +0 -678
  544. package/_internal/Slides-b7a67f32.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-b5dea0af.js +0 -313
  548. package/_internal/Thumbnail-b5dea0af.js.map +0 -1
  549. package/_internal/components/alert-dialog-b284b191.js +0 -162
  550. package/_internal/components/alert-dialog-b284b191.js.map +0 -1
  551. package/_internal/components/autocomplete-8d3f37ea.js +0 -261
  552. package/_internal/components/autocomplete-8d3f37ea.js.map +0 -1
  553. package/_internal/components/avatar-5fc70e00.js +0 -83
  554. package/_internal/components/avatar-5fc70e00.js.map +0 -1
  555. package/_internal/components/badge-8390e590.js +0 -81
  556. package/_internal/components/badge-8390e590.js.map +0 -1
  557. package/_internal/components/button-e3c7f2eb.js +0 -47
  558. package/_internal/components/button-e3c7f2eb.js.map +0 -1
  559. package/_internal/components/checkbox-d1ca9748.js +0 -140
  560. package/_internal/components/checkbox-d1ca9748.js.map +0 -1
  561. package/_internal/components/chip-e40c5521.js +0 -102
  562. package/_internal/components/chip-e40c5521.js.map +0 -1
  563. package/_internal/components/comment-block-a3cf7b9b.js +0 -138
  564. package/_internal/components/comment-block-a3cf7b9b.js.map +0 -1
  565. package/_internal/components/date-picker-6c1b14e4.js +0 -2
  566. package/_internal/components/date-picker-6c1b14e4.js.map +0 -1
  567. package/_internal/components/dialog-ebdb9500.js +0 -238
  568. package/_internal/components/dialog-ebdb9500.js.map +0 -1
  569. package/_internal/components/divider-116af6b9.js +0 -50
  570. package/_internal/components/divider-116af6b9.js.map +0 -1
  571. package/_internal/components/drag-handle-5215cd21.js +0 -51
  572. package/_internal/components/drag-handle-5215cd21.js.map +0 -1
  573. package/_internal/components/dropdown-0baed51b.js +0 -147
  574. package/_internal/components/dropdown-0baed51b.js.map +0 -1
  575. package/_internal/components/expansion-panel-5533a680.js +0 -167
  576. package/_internal/components/expansion-panel-5533a680.js.map +0 -1
  577. package/_internal/components/flag-8d4a7e72.js +0 -59
  578. package/_internal/components/flag-8d4a7e72.js.map +0 -1
  579. package/_internal/components/flex-box-55144e5f.js +0 -56
  580. package/_internal/components/flex-box-55144e5f.js.map +0 -1
  581. package/_internal/components/generic-block-ff0509ee.js +0 -124
  582. package/_internal/components/generic-block-ff0509ee.js.map +0 -1
  583. package/_internal/components/grid-6f1b5a41.js +0 -104
  584. package/_internal/components/grid-6f1b5a41.js.map +0 -1
  585. package/_internal/components/grid-column-f01df853.js +0 -59
  586. package/_internal/components/grid-column-f01df853.js.map +0 -1
  587. package/_internal/components/heading-89239843.js +0 -53
  588. package/_internal/components/heading-89239843.js.map +0 -1
  589. package/_internal/components/icon-b708cca4.js +0 -102
  590. package/_internal/components/icon-b708cca4.js.map +0 -1
  591. package/_internal/components/image-block-7938422d.js +0 -110
  592. package/_internal/components/image-block-7938422d.js.map +0 -1
  593. package/_internal/components/image-lightbox-58331704.js +0 -756
  594. package/_internal/components/image-lightbox-58331704.js.map +0 -1
  595. package/_internal/components/inline-list-e6f19a98.js +0 -74
  596. package/_internal/components/inline-list-e6f19a98.js.map +0 -1
  597. package/_internal/components/input-helper-64153099.js +0 -71
  598. package/_internal/components/input-helper-64153099.js.map +0 -1
  599. package/_internal/components/input-label-2feb0bb0.js +0 -59
  600. package/_internal/components/input-label-2feb0bb0.js.map +0 -1
  601. package/_internal/components/lightbox-570ad9e5.js +0 -155
  602. package/_internal/components/lightbox-570ad9e5.js.map +0 -1
  603. package/_internal/components/link-91f76477.js +0 -72
  604. package/_internal/components/link-91f76477.js.map +0 -1
  605. package/_internal/components/link-preview-fdd8d738.js +0 -117
  606. package/_internal/components/link-preview-fdd8d738.js.map +0 -1
  607. package/_internal/components/list-b08d8423.js +0 -71
  608. package/_internal/components/list-b08d8423.js.map +0 -1
  609. package/_internal/components/message-29cb9181.js +0 -96
  610. package/_internal/components/message-29cb9181.js.map +0 -1
  611. package/_internal/components/mosaic-cdb9f563.js +0 -95
  612. package/_internal/components/mosaic-cdb9f563.js.map +0 -1
  613. package/_internal/components/navigation-8b7d9bd8.js +0 -225
  614. package/_internal/components/navigation-8b7d9bd8.js.map +0 -1
  615. package/_internal/components/notification-a45fda96.js +0 -145
  616. package/_internal/components/notification-a45fda96.js.map +0 -1
  617. package/_internal/components/popover-65bfbc57.js +0 -3
  618. package/_internal/components/popover-65bfbc57.js.map +0 -1
  619. package/_internal/components/post-block-52e58dd5.js +0 -109
  620. package/_internal/components/post-block-52e58dd5.js.map +0 -1
  621. package/_internal/components/progress-f39c3fa2.js +0 -182
  622. package/_internal/components/progress-f39c3fa2.js.map +0 -1
  623. package/_internal/components/progress-tracker-512d7a08.js +0 -305
  624. package/_internal/components/progress-tracker-512d7a08.js.map +0 -1
  625. package/_internal/components/radio-button-559a4863.js +0 -149
  626. package/_internal/components/radio-button-559a4863.js.map +0 -1
  627. package/_internal/components/select-48d4fa8c.js +0 -454
  628. package/_internal/components/select-48d4fa8c.js.map +0 -1
  629. package/_internal/components/side-navigation-f9bc5b4e.js +0 -165
  630. package/_internal/components/side-navigation-f9bc5b4e.js.map +0 -1
  631. package/_internal/components/skeleton-c66516ee.js +0 -166
  632. package/_internal/components/skeleton-c66516ee.js.map +0 -1
  633. package/_internal/components/slider-efbfbc45.js +0 -311
  634. package/_internal/components/slider-efbfbc45.js.map +0 -1
  635. package/_internal/components/slideshow-dd312470.js +0 -151
  636. package/_internal/components/slideshow-dd312470.js.map +0 -1
  637. package/_internal/components/switch-769a2a04.js +0 -122
  638. package/_internal/components/switch-769a2a04.js.map +0 -1
  639. package/_internal/components/table-8617b1ba.js +0 -294
  640. package/_internal/components/table-8617b1ba.js.map +0 -1
  641. package/_internal/components/tabs-884c57b6.js +0 -298
  642. package/_internal/components/tabs-884c57b6.js.map +0 -1
  643. package/_internal/components/text-c7b1e079.js +0 -2
  644. package/_internal/components/text-c7b1e079.js.map +0 -1
  645. package/_internal/components/text-field-478acd86.js +0 -359
  646. package/_internal/components/text-field-478acd86.js.map +0 -1
  647. package/_internal/components/thumbnail-310a4c4b.js +0 -42
  648. package/_internal/components/thumbnail-310a4c4b.js.map +0 -1
  649. package/_internal/components/toolbar-a43533a2.js +0 -61
  650. package/_internal/components/toolbar-a43533a2.js.map +0 -1
  651. package/_internal/components/tooltip-2885ab2e.js +0 -327
  652. package/_internal/components/tooltip-2885ab2e.js.map +0 -1
  653. package/_internal/components/uploader-1e7f5bbb.js +0 -153
  654. package/_internal/components/uploader-1e7f5bbb.js.map +0 -1
  655. package/_internal/components/user-block-68a51ed0.js +0 -145
  656. package/_internal/components/user-block-68a51ed0.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-9d1336a1.js +0 -19
  662. package/_internal/context-9d1336a1.js.map +0 -1
  663. package/_internal/forwardRef-15f62847.js +0 -70
  664. package/_internal/forwardRef-15f62847.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-9df37c0d.js +0 -436
  668. package/_internal/index-9df37c0d.js.map +0 -1
  669. package/_internal/index-a9c5cd69.js +0 -117
  670. package/_internal/index-a9c5cd69.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-69e16b7c.js +0 -36
  687. package/_internal/useDisableStateProps-69e16b7c.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-c1faaae4.js +0 -20
  697. package/_internal/wrapChildrenIconWithSpaces-c1faaae4.js.map +0 -1
@@ -1,756 +0,0 @@
1
- import React__default from 'react';
2
- import { f as forwardRef, c as classNames } from '../forwardRef-15f62847.js';
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-8134a3aa.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 { jsx, jsxs, Fragment } from 'react/jsx-runtime';
11
- import { S as SlideshowItem, a as SlideshowControls, b as Slides } from '../Slides-b7a67f32.js';
12
- import { T as Thumbnail } from '../Thumbnail-b5dea0af.js';
13
- import { I as IconButton } from '../IconButton-f4df224c.js';
14
- import { FlexBox } from './flex-box-55144e5f.js';
15
- import ReactDOM from 'react-dom';
16
- import { Lightbox } from './lightbox-570ad9e5.js';
17
- import { T as ThemeProvider } from '../ThemeContext-3181f000.js';
18
- import { C as ClickAwayProvider } from '../ClickAwayProvider-7093ba23.js';
19
-
20
- /**
21
- * Component display name.
22
- */
23
- const COMPONENT_NAME = 'ImageLightbox';
24
-
25
- /**
26
- * Component default class name and class prefix.
27
- */
28
- const CLASSNAME = getRootClassName(COMPONENT_NAME);
29
-
30
- /**
31
- * Observe element size (only works if it's size depends on the window size).
32
- *
33
- * (Not using ResizeObserver for better browser backward compat)
34
- *
35
- * @param elementRef Element to observe
36
- * @return the size and a manual update callback
37
- */
38
- function useSizeOnWindowResize(elementRef) {
39
- const [size, setSize] = React__default.useState(null);
40
- const updateSize = React__default.useMemo(() => throttle(() => {
41
- const newSize = elementRef.current?.getBoundingClientRect();
42
- if (newSize) setSize(newSize);
43
- }, 10), [elementRef]);
44
- React__default.useEffect(() => {
45
- updateSize();
46
- window.addEventListener('resize', updateSize);
47
- return () => window.removeEventListener('resize', updateSize);
48
- }, [updateSize]);
49
- return [size, updateSize];
50
- }
51
-
52
- /** Get natural image size after load. */
53
- function useImageSize(imgRef, getInitialSize) {
54
- const [imageSize, setImageSize] = React__default.useState(getInitialSize || null);
55
- React__default.useEffect(() => {
56
- const {
57
- current: img
58
- } = imgRef;
59
- if (!img) {
60
- return undefined;
61
- }
62
- const onLoad = () => setImageSize({
63
- width: img.naturalWidth,
64
- height: img.naturalHeight
65
- });
66
- img.addEventListener('load', onLoad);
67
- return () => img.removeEventListener('load', onLoad);
68
- }, [imgRef]);
69
- return imageSize;
70
- }
71
-
72
- /** Minimal recursive deep equal of JS values */
73
- function isEqual(obj1, obj2) {
74
- if (obj1 === obj2) return true;
75
- if (typeof obj1 === 'object' && typeof obj2 === 'object') {
76
- const keys1 = Object.keys(obj1);
77
- const keys2 = Object.keys(obj2);
78
- if (keys1.length !== keys2.length) return false;
79
- return keys1.every(key1 => isEqual(obj1[key1], obj2[key1]));
80
- }
81
- return false;
82
- }
83
-
84
- /**
85
- * Listen to mouse wheel + ctrl and multi-pointer pinch to zoom
86
- */
87
- function usePointerZoom(scrollAreaRef, onScaleChange, animateScroll) {
88
- const [isPointerZooming, setPointerZooming] = React__default.useState(false);
89
- React__default.useEffect(() => {
90
- const scrollArea = scrollAreaRef.current;
91
- if (!scrollArea || !onScaleChange) {
92
- return undefined;
93
- }
94
- let animationFrame;
95
- let zoomStateTimeoutId;
96
- function updateScaleOnNextFrame(newScale, mousePosition) {
97
- // Cancel previously scheduled frame
98
- if (animationFrame) cancelAnimationFrame(animationFrame);
99
-
100
- // Cancel previously scheduled zoom state change
101
- if (zoomStateTimeoutId) clearTimeout(zoomStateTimeoutId);
102
- function nextFrame() {
103
- setPointerZooming(true);
104
- onScaleChange?.(newScale);
105
- animationFrame = null;
106
- // Wait a bit before indicating the pointer zooming is finished
107
- zoomStateTimeoutId = setTimeout(() => setPointerZooming(false), 100);
108
- }
109
- animationFrame = requestAnimationFrame(nextFrame);
110
-
111
- // Animate scroll in parallel (centering on the current mouse position)
112
- animateScroll(mousePosition, {
113
- width: scrollArea.scrollWidth,
114
- height: scrollArea.scrollHeight
115
- });
116
- }
117
- function onWheel(event) {
118
- if (!event.ctrlKey) {
119
- return;
120
- }
121
- event.preventDefault();
122
- const newScale = Math.exp(-event.deltaY / 50);
123
-
124
- // Update scale on next frame (focused on the mouse position)
125
- updateScaleOnNextFrame(newScale, {
126
- x: event.clientX,
127
- y: event.clientY
128
- });
129
- }
130
- const activePointers = {};
131
- let prevDistance = null;
132
- let previousCenterPoint = null;
133
- function onPointerDown(event) {
134
- activePointers[event.pointerId] = event;
135
- }
136
- function onPointerMove(event) {
137
- // Update pointer in cache
138
- if (activePointers[event.pointerId]) {
139
- activePointers[event.pointerId] = event;
140
- }
141
- const pointers = Object.values(activePointers);
142
-
143
- // Make sure we run computation on one of the pointer in the group
144
- if (pointers[0]?.pointerId !== event.pointerId) {
145
- return;
146
- }
147
-
148
- // Centered point between all pointers
149
- const centerPoint = {
150
- x: pointers.reduce((x, {
151
- clientX
152
- }) => x + clientX, 0) / pointers.length,
153
- y: pointers.reduce((y, {
154
- clientY
155
- }) => y + clientY, 0) / pointers.length
156
- };
157
-
158
- // Movement of the center point
159
- const deltaCenterPoint = previousCenterPoint && {
160
- left: previousCenterPoint.x - centerPoint.x,
161
- top: previousCenterPoint.y - centerPoint.y
162
- };
163
-
164
- // Pan X & Y
165
- if (deltaCenterPoint) {
166
- // Apply movement of the center point to the scroll
167
- scrollArea.scrollBy({
168
- top: deltaCenterPoint.top / 2,
169
- left: deltaCenterPoint.left / 2
170
- });
171
- }
172
-
173
- // Pinch to zoom
174
- if (pointers.length === 2) {
175
- const [pointer1, pointer2] = pointers;
176
- const distance = Math.hypot(pointer2.clientX - pointer1.clientX, pointer2.clientY - pointer1.clientY);
177
- if (prevDistance && deltaCenterPoint) {
178
- const delta = prevDistance - distance;
179
- const absDelta = Math.abs(delta);
180
-
181
- // Zoom only if we are "pinching" more than we are moving the pointers
182
- if (absDelta > Math.abs(deltaCenterPoint.left) && absDelta > Math.abs(deltaCenterPoint.top)) {
183
- // Update scale on next frame (focused on the center point between the two pointers)
184
- const newScale = Math.exp(-delta / 100);
185
- updateScaleOnNextFrame(newScale, centerPoint);
186
- }
187
- }
188
- prevDistance = distance;
189
- }
190
- previousCenterPoint = centerPoint;
191
- }
192
- function onPointerUp(event) {
193
- prevDistance = null;
194
- previousCenterPoint = null;
195
- delete activePointers[event.pointerId];
196
- }
197
- scrollArea.addEventListener('wheel', onWheel, {
198
- passive: false
199
- });
200
- const isMultiTouch = navigator.maxTouchPoints >= 2;
201
- if (isMultiTouch) {
202
- scrollArea.addEventListener('pointerdown', onPointerDown);
203
- scrollArea.addEventListener('pointermove', onPointerMove);
204
- scrollArea.addEventListener('pointerup', onPointerUp);
205
- }
206
- return () => {
207
- scrollArea.removeEventListener('wheel', onWheel);
208
- if (isMultiTouch) {
209
- scrollArea.removeEventListener('pointerdown', onPointerDown);
210
- scrollArea.removeEventListener('pointermove', onPointerMove);
211
- scrollArea.removeEventListener('pointerup', onPointerUp);
212
- }
213
- };
214
- }, [animateScroll, onScaleChange, scrollAreaRef]);
215
- return isPointerZooming;
216
- }
217
-
218
- /** Maintains the scroll position centered relative to the original scroll area's dimensions when the content scales. */
219
- function useAnimateScroll(scrollAreaRef) {
220
- return React__default.useMemo(() => {
221
- let animationFrame = null;
222
- return function animate(centerPoint, initialScrollAreaSize) {
223
- const scrollArea = scrollAreaRef.current;
224
- if (!scrollArea) {
225
- return;
226
- }
227
-
228
- // Cancel previously running animation
229
- if (animationFrame) cancelAnimationFrame(animationFrame);
230
-
231
- // Center on the given point or else on the scroll area visual center
232
- const clientHeightRatio = centerPoint?.y ? centerPoint.y / scrollArea.clientHeight : 0.5;
233
- const clientWidthRatio = centerPoint?.x ? centerPoint.x / scrollArea.clientWidth : 0.5;
234
- const initialScrollHeight = initialScrollAreaSize?.height || scrollArea.scrollHeight;
235
- const initialScrollWidth = initialScrollAreaSize?.width || scrollArea.scrollWidth;
236
- const heightCenter = scrollArea.scrollTop + scrollArea.clientHeight * clientHeightRatio;
237
- const heightRatio = heightCenter / initialScrollHeight;
238
- const widthCenter = scrollArea.scrollLeft + scrollArea.clientWidth * clientWidthRatio;
239
- const widthRatio = widthCenter / initialScrollWidth;
240
- let prevScrollHeight = 0;
241
- let prevScrollWidth = 0;
242
- function nextFrame() {
243
- const {
244
- scrollHeight,
245
- scrollWidth,
246
- clientHeight,
247
- clientWidth
248
- } = scrollArea;
249
-
250
- // Scroll area stopped expanding => stop animation
251
- if (scrollHeight === prevScrollHeight && scrollWidth === prevScrollWidth) {
252
- animationFrame = null;
253
- return;
254
- }
255
-
256
- // Compute next scroll position
257
- const top = heightRatio * scrollHeight - clientHeight * clientHeightRatio;
258
- const left = widthRatio * scrollWidth - clientWidth * clientWidthRatio;
259
- scrollArea.scrollTo({
260
- top,
261
- left
262
- });
263
- prevScrollHeight = scrollHeight;
264
- prevScrollWidth = scrollWidth;
265
- animationFrame = requestAnimationFrame(nextFrame);
266
- }
267
- animationFrame = requestAnimationFrame(nextFrame);
268
- };
269
- }, [scrollAreaRef]);
270
- }
271
-
272
- /** Internal image slide component for ImageLightbox */
273
- const ImageSlide = /*#__PURE__*/React__default.memo(props => {
274
- const {
275
- isActive,
276
- scale,
277
- onScaleChange,
278
- image: {
279
- image,
280
- imgRef: propImgRef,
281
- imgProps,
282
- alt,
283
- loadingPlaceholderImageRef
284
- }
285
- } = props;
286
-
287
- // Get scroll area size
288
- const scrollAreaRef = React__default.useRef(null);
289
- const [scrollAreaSize, updateSize] = useSizeOnWindowResize(scrollAreaRef);
290
- React__default.useEffect(() => {
291
- // Update size when active
292
- if (isActive) updateSize();
293
- }, [isActive, updateSize]);
294
-
295
- // Get image size
296
- const imgRef = React__default.useRef(null);
297
- const imageSize = useImageSize(imgRef, () => {
298
- const width = Number.parseInt(imgProps?.width, 10);
299
- const height = Number.parseInt(imgProps?.height, 10);
300
- return width && height ? {
301
- width,
302
- height
303
- } : null;
304
- });
305
-
306
- // Calculate new image size with scale
307
- const scaledImageSize = React__default.useMemo(() => {
308
- if (!scrollAreaSize || !imageSize) {
309
- return null;
310
- }
311
- const horizontalScale = scrollAreaSize.width / imageSize.width;
312
- const verticalScale = scrollAreaSize.height / imageSize.height;
313
- const baseScale = Math.min(1, Math.min(horizontalScale, verticalScale));
314
- return {
315
- width: imageSize.width * baseScale * (scale ?? 1),
316
- height: imageSize.height * baseScale * (scale ?? 1)
317
- };
318
- }, [scrollAreaSize, imageSize, scale]);
319
-
320
- // Animate scroll to preserve the center of the current visible window in the scroll area
321
- const animateScroll = useAnimateScroll(scrollAreaRef);
322
-
323
- // Zoom via mouse wheel or multi-touch pinch zoom
324
- const isPointerZooming = usePointerZoom(scrollAreaRef, onScaleChange, animateScroll);
325
-
326
- // Animate scroll on scale change
327
- React__default.useLayoutEffect(() => {
328
- if (scale && !isPointerZooming) {
329
- animateScroll();
330
- }
331
- }, [isPointerZooming, scale, animateScroll]);
332
- const isScrollable = scaledImageSize && scrollAreaSize && (scaledImageSize.width > scrollAreaSize.width || scaledImageSize.height > scrollAreaSize.height);
333
- return /*#__PURE__*/jsx(SlideshowItem, {
334
- ref: scrollAreaRef
335
- // Make it accessible to keyboard nav when the zone is scrollable
336
- ,
337
- tabIndex: isScrollable ? 0 : undefined,
338
- className: `${CLASSNAME}__image-slide`,
339
- children: /*#__PURE__*/jsx(Thumbnail, {
340
- imgRef: useMergeRefs(imgRef, propImgRef),
341
- image: image,
342
- alt: alt,
343
- className: `${CLASSNAME}__thumbnail`,
344
- imgProps: {
345
- ...imgProps,
346
- style: {
347
- ...imgProps?.style,
348
- ...(scaledImageSize || {
349
- maxHeight: scrollAreaSize?.height,
350
- maxWidth: scrollAreaSize?.width
351
- }),
352
- // Only animate when scale is set, and we are not pointer zooming and the user does not prefer reduced motion
353
- transition: scale && !isPointerZooming && !isReducedMotion() ? 'all 250ms' : undefined
354
- }
355
- },
356
- loadingPlaceholderImageRef: loadingPlaceholderImageRef
357
- })
358
- });
359
- }, isEqual);
360
-
361
- /** Internal image slideshow component for ImageLightbox */
362
- const ImageSlideshow = ({
363
- activeImageIndex,
364
- images,
365
- slideGroupLabel,
366
- zoomInButtonProps,
367
- zoomOutButtonProps,
368
- slideshowControlsProps,
369
- currentPaginationItemRef,
370
- footerRef,
371
- activeImageRef
372
- }) => {
373
- const {
374
- activeIndex,
375
- slideshowId,
376
- setSlideshow,
377
- slideshowSlidesId,
378
- slidesCount,
379
- onNextClick,
380
- onPaginationClick,
381
- onPreviousClick,
382
- toggleAutoPlay
383
- } = SlideshowControls.useSlideshowControls({
384
- itemsCount: images.length,
385
- activeIndex: activeImageIndex
386
- });
387
-
388
- // Image metadata (caption)
389
- const title = images[activeIndex]?.title;
390
- const description = images[activeIndex]?.description;
391
- const tags = images[activeIndex]?.tags;
392
- const metadata = title || description || tags ? /*#__PURE__*/jsx(ImageCaption, {
393
- as: "div",
394
- title: title,
395
- description: description,
396
- tags: tags,
397
- align: "center"
398
- }) : null;
399
-
400
- // Slideshow controls
401
- const slideShowControls = slidesCount > 1 && slideshowControlsProps ? /*#__PURE__*/jsx(SlideshowControls, {
402
- activeIndex: activeIndex,
403
- slidesCount: slidesCount,
404
- onNextClick: onNextClick,
405
- onPreviousClick: onPreviousClick,
406
- onPaginationClick: onPaginationClick,
407
- ...slideshowControlsProps,
408
- paginationItemProps: index => {
409
- const props = slideshowControlsProps?.paginationItemProps?.(index) || {};
410
- return {
411
- ...props,
412
- ref: mergeRefs(props?.ref,
413
- // Focus the active pagination item once on mount
414
- activeIndex === index ? currentPaginationItemRef : undefined)
415
- };
416
- }
417
- }) : null;
418
-
419
- // Zoom controls
420
- const [scale, setScale] = React__default.useState(undefined);
421
- const zoomEnabled = zoomInButtonProps && zoomOutButtonProps;
422
- const onScaleChange = React__default.useMemo(() => {
423
- if (!zoomEnabled) return undefined;
424
- return newScale => {
425
- setScale((prevScale = 1) => Math.max(1, newScale * prevScale));
426
- };
427
- }, [zoomEnabled]);
428
- const zoomIn = React__default.useCallback(() => onScaleChange?.(1.5), [onScaleChange]);
429
- const zoomOut = React__default.useCallback(() => onScaleChange?.(0.5), [onScaleChange]);
430
- React__default.useEffect(() => {
431
- // Reset scale on slide change
432
- if (typeof activeIndex === 'number') setScale(undefined);
433
- }, [activeIndex]);
434
- const zoomControls = zoomEnabled && /*#__PURE__*/jsxs(Fragment, {
435
- children: [/*#__PURE__*/jsx(IconButton, {
436
- ...zoomInButtonProps,
437
- emphasis: "low",
438
- icon: mdiMagnifyPlusOutline,
439
- onClick: zoomIn
440
- }), /*#__PURE__*/jsx(IconButton, {
441
- ...zoomOutButtonProps,
442
- emphasis: "low",
443
- isDisabled: !scale || scale <= 1,
444
- icon: mdiMagnifyMinusOutline,
445
- onClick: zoomOut
446
- })]
447
- });
448
- const getImgRef = React__default.useMemo(() => memoize((index, isActive) => {
449
- return mergeRefs(images?.[index].imgRef, isActive ? activeImageRef : undefined);
450
- },
451
- // memoize based on both arguments
452
- (...args) => args.join()), [images, activeImageRef]);
453
- return /*#__PURE__*/jsxs(Fragment, {
454
- children: [/*#__PURE__*/jsx(Slides, {
455
- activeIndex: activeIndex,
456
- slideGroupLabel: slideGroupLabel,
457
- fillHeight: true,
458
- id: slideshowId,
459
- ref: setSlideshow,
460
- slidesId: slideshowSlidesId,
461
- toggleAutoPlay: toggleAutoPlay,
462
- children: images.map(({
463
- image,
464
- imgRef,
465
- ...imageProps
466
- }, index) => {
467
- const isActive = index === activeIndex;
468
- return /*#__PURE__*/jsx(ImageSlide, {
469
- isActive: isActive,
470
- image: {
471
- ...imageProps,
472
- image,
473
- imgRef: getImgRef(index, isActive)
474
- },
475
- scale: isActive ? scale : undefined,
476
- onScaleChange: onScaleChange
477
- }, image);
478
- })
479
- }), (metadata || slideShowControls || zoomControls) && /*#__PURE__*/jsxs(FlexBox, {
480
- ref: footerRef,
481
- className: `${CLASSNAME}__footer`,
482
- orientation: "vertical",
483
- vAlign: "center",
484
- gap: "big",
485
- children: [metadata, /*#__PURE__*/jsxs(FlexBox, {
486
- className: `${CLASSNAME}__footer-actions`,
487
- orientation: "horizontal",
488
- gap: "regular",
489
- children: [slideShowControls, zoomControls]
490
- })]
491
- })]
492
- });
493
- };
494
-
495
- /** Unref a react ref or element */
496
- function unref(maybeElement) {
497
- if (maybeElement instanceof HTMLElement) return maybeElement;
498
- return maybeElement?.current;
499
- }
500
-
501
- function setupViewTransitionName(elementRef, name) {
502
- let originalName = null;
503
- return {
504
- set() {
505
- const element = unref(elementRef);
506
- if (!element) return;
507
- originalName = element.style.viewTransitionName;
508
- element.style.viewTransitionName = name;
509
- },
510
- unset() {
511
- const element = unref(elementRef);
512
- if (!element || originalName === null) return;
513
- element.style.viewTransitionName = originalName;
514
- }
515
- };
516
- }
517
-
518
- /**
519
- * Wrapper around the `document.startViewTransition` handling browser incompatibilities, react DOM flush and
520
- * user preference.
521
- *
522
- * @param changes callback containing the changes to apply within the view transition.
523
- * @param setViewTransitionName set the `viewTransitionName` style on a `source` & `target` to morph these elements.
524
- */
525
- async function startViewTransition({
526
- changes,
527
- viewTransitionName
528
- }) {
529
- const start = document?.startViewTransition?.bind(document);
530
- const prefersReducedMotion = isReducedMotion();
531
- const {
532
- flushSync
533
- } = ReactDOM;
534
- if (prefersReducedMotion || !start || !flushSync || !viewTransitionName?.source || !viewTransitionName?.target) {
535
- // Skip, apply changes without a transition
536
- changes();
537
- return;
538
- }
539
-
540
- // Setup set/unset transition name on source & target
541
- const sourceTransitionName = setupViewTransitionName(viewTransitionName.source, viewTransitionName.name);
542
- const targetTransitionName = setupViewTransitionName(viewTransitionName.target, viewTransitionName.name);
543
- sourceTransitionName.set();
544
-
545
- // Start view transition, apply changes & flush to DOM
546
- await start(() => {
547
- sourceTransitionName.unset();
548
- flushSync(changes);
549
- targetTransitionName.set();
550
- }).updateCallbackDone;
551
- targetTransitionName.unset();
552
- }
553
-
554
- /** Find image in element including the element */
555
- const findImage = element => element?.matches('img') ? element : element?.querySelector('img') || null;
556
-
557
- /** Subset of the ImageLightboxProps managed by the useImageLightbox hook */
558
-
559
- const EMPTY_PROPS = {
560
- isOpen: false,
561
- images: [],
562
- parentElement: /*#__PURE__*/React__default.createRef()
563
- };
564
- /**
565
- * Set up an ImageLightbox with images and triggers.
566
- *
567
- * - Associate a trigger with the lightbox to properly focus the trigger on close
568
- * - Associate a trigger with an image to display on open
569
- * - Automatically provide a view transition between an image trigger and the displayed image on open & close
570
- *
571
- * @param props Images to display in the image lightbox
572
- */
573
- function useImageLightbox(props) {
574
- const propsRef = React__default.useRef(props);
575
- React__default.useEffect(() => {
576
- propsRef.current = props;
577
- }, [props]);
578
-
579
- // Keep reference for each image elements
580
- const imageRefsRef = React__default.useRef([]);
581
- const currentImageRef = React__default.useRef(null);
582
- const [imageLightboxProps, setImageLightboxProps] = React__default.useState(() => ({
583
- ...EMPTY_PROPS,
584
- ...props
585
- }));
586
- const getTriggerProps = React__default.useMemo(() => {
587
- const triggerImageRefs = {};
588
- async function close() {
589
- const currentImage = currentImageRef.current;
590
- if (!currentImage) {
591
- return;
592
- }
593
- const currentIndex = imageRefsRef.current.findIndex(imageRef => imageRef.current === currentImage);
594
- await startViewTransition({
595
- changes() {
596
- // Close lightbox
597
- setImageLightboxProps(prevProps => ({
598
- ...prevProps,
599
- isOpen: false
600
- }));
601
- },
602
- // Morph from the image in lightbox to the image in trigger
603
- viewTransitionName: {
604
- source: currentImageRef,
605
- target: triggerImageRefs[currentIndex],
606
- name: CLASSNAME
607
- }
608
- });
609
- }
610
- async function open(triggerElement, {
611
- activeImageIndex
612
- } = {}) {
613
- // If we find an image inside the trigger, animate it in transition with the opening image
614
- const triggerImage = triggerImageRefs[activeImageIndex]?.current || findImage(triggerElement);
615
-
616
- // Inject refs to improve transition and loading style
617
- const images = propsRef.current?.images?.map((image, idx) => {
618
- // Get or create image reference
619
- let imgRef = imageRefsRef.current[idx];
620
- if (!imgRef) {
621
- imgRef = /*#__PURE__*/React__default.createRef();
622
- imageRefsRef.current[idx] = imgRef;
623
- }
624
-
625
- // Try to use the trigger image as the loading placeholder
626
- const loadingPlaceholderImageRef = triggerImage && idx === activeImageIndex ? {
627
- current: triggerImage
628
- } : undefined;
629
- return {
630
- loadingPlaceholderImageRef,
631
- ...image,
632
- imgRef
633
- };
634
- });
635
- await startViewTransition({
636
- changes: () => {
637
- // Open lightbox with setup props
638
- setImageLightboxProps(prevProps => ({
639
- ...prevProps,
640
- ...propsRef.current,
641
- activeImageRef: currentImageRef,
642
- parentElement: {
643
- current: triggerElement
644
- },
645
- isOpen: true,
646
- onClose: () => {
647
- close();
648
- propsRef.current?.onClose?.();
649
- },
650
- images,
651
- activeImageIndex: activeImageIndex || 0
652
- }));
653
- },
654
- // Morph from the image in trigger to the image in lightbox
655
- viewTransitionName: {
656
- source: triggerImage,
657
- target: currentImageRef,
658
- name: CLASSNAME
659
- }
660
- });
661
- }
662
- return memoize(options => ({
663
- ref(element) {
664
- // Track trigger image ref if any
665
- if (options?.activeImageIndex !== undefined && element) {
666
- triggerImageRefs[options.activeImageIndex] = {
667
- current: findImage(element)
668
- };
669
- }
670
- },
671
- onClick(e) {
672
- open(e.target, options);
673
- }
674
- }));
675
- }, []);
676
- return {
677
- getTriggerProps,
678
- imageLightboxProps
679
- };
680
- }
681
-
682
- const Inner = forwardRef((props, ref) => {
683
- const {
684
- className,
685
- isOpen,
686
- closeButtonProps,
687
- onClose,
688
- parentElement,
689
- activeImageIndex,
690
- slideshowControlsProps,
691
- slideGroupLabel,
692
- images,
693
- zoomOutButtonProps,
694
- zoomInButtonProps,
695
- activeImageRef: propImageRef,
696
- ...forwardedProps
697
- } = props;
698
- const currentPaginationItemRef = React__default.useRef(null);
699
- const footerRef = React__default.useRef(null);
700
- const imageRef = React__default.useRef(null);
701
- const clickAwayChildrenRefs = React__default.useRef([imageRef, footerRef]);
702
- const onClickAway = React__default.useCallback(evt => {
703
- const targetElement = evt.target;
704
- if (!(targetElement instanceof HTMLElement) || !(evt instanceof MouseEvent)) return;
705
-
706
- // Skip click away if clicking on the scrollbar
707
- if (targetElement.clientWidth < evt.clientX || targetElement.clientHeight < evt.clientY) return;
708
- onClose?.();
709
- }, [onClose]);
710
- return /*#__PURE__*/jsx(Lightbox, {
711
- ref: ref,
712
- className: classNames(className, CLASSNAME),
713
- parentElement: parentElement,
714
- isOpen: isOpen,
715
- onClose: onClose,
716
- closeButtonProps: closeButtonProps,
717
- focusElement: currentPaginationItemRef,
718
- ...forwardedProps,
719
- // Disable the close on click away as we want a custom one here
720
- preventAutoClose: true,
721
- children: /*#__PURE__*/jsx(ClickAwayProvider, {
722
- childrenRefs: clickAwayChildrenRefs,
723
- callback: onClickAway,
724
- children: /*#__PURE__*/jsx(ThemeProvider, {
725
- value: "dark",
726
- children: /*#__PURE__*/jsx(ImageSlideshow, {
727
- activeImageIndex: activeImageIndex,
728
- slideGroupLabel: slideGroupLabel,
729
- slideshowControlsProps: slideshowControlsProps,
730
- images: images,
731
- zoomInButtonProps: zoomInButtonProps,
732
- zoomOutButtonProps: zoomOutButtonProps,
733
- footerRef: footerRef,
734
- activeImageRef: useMergeRefs(propImageRef, imageRef),
735
- currentPaginationItemRef: currentPaginationItemRef
736
- })
737
- })
738
- })
739
- });
740
- });
741
- Inner.displayName = COMPONENT_NAME;
742
- Inner.className = CLASSNAME;
743
-
744
- /**
745
- * ImageLightbox component.
746
- *
747
- * @param props Component props.
748
- * @param ref Component ref.
749
- * @return React element.
750
- */
751
- const ImageLightbox = Object.assign(Inner, {
752
- useImageLightbox
753
- });
754
-
755
- export { ImageLightbox };
756
- //# sourceMappingURL=image-lightbox-58331704.js.map