@lumx/react 3.20.1-alpha.5 → 3.20.1-alpha.50

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 (518) hide show
  1. package/CONTRIBUTING.md +1 -5
  2. package/README.md +0 -2
  3. package/_internal/{index.js → Cd8LPzmx.js} +78 -102
  4. package/_internal/Cd8LPzmx.js.map +1 -0
  5. package/index.d.ts +75 -390
  6. package/index.js +3960 -4706
  7. package/index.js.map +1 -1
  8. package/package.json +17 -36
  9. package/utils/index.d.ts +61 -8
  10. package/utils/index.js +1 -1
  11. package/_internal/Falsy.d.ts +0 -7
  12. package/_internal/index.js.map +0 -1
  13. package/src/components/alert-dialog/AlertDialog.stories.tsx +0 -127
  14. package/src/components/alert-dialog/AlertDialog.test.tsx +0 -35
  15. package/src/components/alert-dialog/AlertDialog.tsx +0 -189
  16. package/src/components/alert-dialog/index.ts +0 -1
  17. package/src/components/autocomplete/Autocomplete.stories.tsx +0 -75
  18. package/src/components/autocomplete/Autocomplete.test.tsx +0 -101
  19. package/src/components/autocomplete/Autocomplete.tsx +0 -294
  20. package/src/components/autocomplete/AutocompleteMultiple.stories.tsx +0 -167
  21. package/src/components/autocomplete/AutocompleteMultiple.test.tsx +0 -63
  22. package/src/components/autocomplete/AutocompleteMultiple.tsx +0 -156
  23. package/src/components/autocomplete/__mockData__/index.ts +0 -39
  24. package/src/components/autocomplete/index.ts +0 -2
  25. package/src/components/avatar/Avatar.stories.tsx +0 -121
  26. package/src/components/avatar/Avatar.test.tsx +0 -34
  27. package/src/components/avatar/Avatar.tsx +0 -114
  28. package/src/components/avatar/index.ts +0 -1
  29. package/src/components/badge/Badge.stories.tsx +0 -70
  30. package/src/components/badge/Badge.test.tsx +0 -47
  31. package/src/components/badge/Badge.tsx +0 -58
  32. package/src/components/badge/BadgeWrapper.stories.tsx +0 -76
  33. package/src/components/badge/BadgeWrapper.test.tsx +0 -49
  34. package/src/components/badge/BadgeWrapper.tsx +0 -37
  35. package/src/components/badge/index.ts +0 -2
  36. package/src/components/button/Button.stories.tsx +0 -356
  37. package/src/components/button/Button.test.tsx +0 -127
  38. package/src/components/button/Button.tsx +0 -103
  39. package/src/components/button/ButtonGroup.stories.tsx +0 -54
  40. package/src/components/button/ButtonGroup.test.tsx +0 -43
  41. package/src/components/button/ButtonGroup.tsx +0 -52
  42. package/src/components/button/ButtonRoot.tsx +0 -193
  43. package/src/components/button/IconButton.stories.tsx +0 -52
  44. package/src/components/button/IconButton.test.tsx +0 -68
  45. package/src/components/button/IconButton.tsx +0 -93
  46. package/src/components/button/index.ts +0 -4
  47. package/src/components/checkbox/Checkbox.stories.tsx +0 -64
  48. package/src/components/checkbox/Checkbox.test.tsx +0 -156
  49. package/src/components/checkbox/Checkbox.tsx +0 -164
  50. package/src/components/checkbox/index.ts +0 -1
  51. package/src/components/chip/Chip.stories.tsx +0 -166
  52. package/src/components/chip/Chip.test.tsx +0 -243
  53. package/src/components/chip/Chip.tsx +0 -168
  54. package/src/components/chip/ChipGroup.stories.tsx +0 -49
  55. package/src/components/chip/ChipGroup.test.tsx +0 -39
  56. package/src/components/chip/ChipGroup.tsx +0 -60
  57. package/src/components/chip/index.ts +0 -2
  58. package/src/components/comment-block/CommentBlock.stories.tsx +0 -92
  59. package/src/components/comment-block/CommentBlock.test.tsx +0 -29
  60. package/src/components/comment-block/CommentBlock.tsx +0 -172
  61. package/src/components/comment-block/index.ts +0 -1
  62. package/src/components/date-picker/DatePicker.stories.tsx +0 -118
  63. package/src/components/date-picker/DatePicker.test.tsx +0 -36
  64. package/src/components/date-picker/DatePicker.tsx +0 -52
  65. package/src/components/date-picker/DatePickerControlled.test.tsx +0 -93
  66. package/src/components/date-picker/DatePickerControlled.tsx +0 -259
  67. package/src/components/date-picker/DatePickerField.stories.tsx +0 -100
  68. package/src/components/date-picker/DatePickerField.test.tsx +0 -72
  69. package/src/components/date-picker/DatePickerField.tsx +0 -135
  70. package/src/components/date-picker/constants.ts +0 -11
  71. package/src/components/date-picker/index.ts +0 -4
  72. package/src/components/date-picker/types.ts +0 -28
  73. package/src/components/dialog/Dialog.stories.tsx +0 -318
  74. package/src/components/dialog/Dialog.test.tsx +0 -99
  75. package/src/components/dialog/Dialog.tsx +0 -288
  76. package/src/components/dialog/index.ts +0 -1
  77. package/src/components/divider/Divider.test.tsx +0 -53
  78. package/src/components/divider/Divider.tsx +0 -52
  79. package/src/components/divider/index.ts +0 -1
  80. package/src/components/drag-handle/DragHandle.test.tsx +0 -38
  81. package/src/components/drag-handle/DragHandle.tsx +0 -53
  82. package/src/components/drag-handle/index.ts +0 -1
  83. package/src/components/dropdown/Dropdown.stories.tsx +0 -31
  84. package/src/components/dropdown/Dropdown.test.tsx +0 -66
  85. package/src/components/dropdown/Dropdown.tsx +0 -186
  86. package/src/components/dropdown/index.ts +0 -1
  87. package/src/components/expansion-panel/ExpansionPanel.stories.tsx +0 -91
  88. package/src/components/expansion-panel/ExpansionPanel.test.tsx +0 -186
  89. package/src/components/expansion-panel/ExpansionPanel.tsx +0 -195
  90. package/src/components/expansion-panel/index.ts +0 -1
  91. package/src/components/flag/Flag.stories.tsx +0 -48
  92. package/src/components/flag/Flag.test.tsx +0 -64
  93. package/src/components/flag/Flag.tsx +0 -54
  94. package/src/components/flag/index.ts +0 -1
  95. package/src/components/flex-box/FlexBox.stories.tsx +0 -158
  96. package/src/components/flex-box/FlexBox.test.tsx +0 -25
  97. package/src/components/flex-box/FlexBox.tsx +0 -100
  98. package/src/components/flex-box/index.ts +0 -1
  99. package/src/components/generic-block/GenericBlock.stories.jsx +0 -128
  100. package/src/components/generic-block/GenericBlock.test.tsx +0 -156
  101. package/src/components/generic-block/GenericBlock.tsx +0 -225
  102. package/src/components/generic-block/constants.ts +0 -9
  103. package/src/components/generic-block/index.ts +0 -2
  104. package/src/components/grid/Grid.tsx +0 -85
  105. package/src/components/grid/GridItem.tsx +0 -57
  106. package/src/components/grid/index.ts +0 -2
  107. package/src/components/grid-column/GridColumn.stories.tsx +0 -46
  108. package/src/components/grid-column/GridColumn.test.jsx +0 -58
  109. package/src/components/grid-column/GridColumn.tsx +0 -83
  110. package/src/components/grid-column/index.ts +0 -1
  111. package/src/components/heading/Heading.stories.tsx +0 -70
  112. package/src/components/heading/Heading.test.tsx +0 -84
  113. package/src/components/heading/Heading.tsx +0 -67
  114. package/src/components/heading/HeadingLevelProvider.tsx +0 -30
  115. package/src/components/heading/constants.ts +0 -16
  116. package/src/components/heading/context.tsx +0 -13
  117. package/src/components/heading/index.ts +0 -3
  118. package/src/components/heading/useHeadingLevel.tsx +0 -8
  119. package/src/components/icon/Icon.stories.tsx +0 -47
  120. package/src/components/icon/Icon.test.tsx +0 -44
  121. package/src/components/icon/Icon.tsx +0 -24
  122. package/src/components/icon/index.ts +0 -1
  123. package/src/components/image-block/ImageBlock.stories.tsx +0 -119
  124. package/src/components/image-block/ImageBlock.test.tsx +0 -59
  125. package/src/components/image-block/ImageBlock.tsx +0 -142
  126. package/src/components/image-block/ImageCaption.tsx +0 -115
  127. package/src/components/image-block/index.ts +0 -1
  128. package/src/components/image-lightbox/ImageLightbox.stories.tsx +0 -161
  129. package/src/components/image-lightbox/ImageLightbox.test.tsx +0 -252
  130. package/src/components/image-lightbox/ImageLightbox.tsx +0 -90
  131. package/src/components/image-lightbox/constants.ts +0 -11
  132. package/src/components/image-lightbox/index.ts +0 -2
  133. package/src/components/image-lightbox/internal/ImageSlide.tsx +0 -107
  134. package/src/components/image-lightbox/internal/ImageSlideshow.tsx +0 -164
  135. package/src/components/image-lightbox/internal/useAnimateScroll.ts +0 -55
  136. package/src/components/image-lightbox/internal/usePointerZoom.ts +0 -148
  137. package/src/components/image-lightbox/types.ts +0 -50
  138. package/src/components/image-lightbox/useImageLightbox.tsx +0 -141
  139. package/src/components/inline-list/InlineList.stories.tsx +0 -78
  140. package/src/components/inline-list/InlineList.test.tsx +0 -54
  141. package/src/components/inline-list/InlineList.tsx +0 -96
  142. package/src/components/inline-list/index.ts +0 -1
  143. package/src/components/input-helper/InputHelper.stories.tsx +0 -35
  144. package/src/components/input-helper/InputHelper.test.tsx +0 -57
  145. package/src/components/input-helper/InputHelper.tsx +0 -65
  146. package/src/components/input-helper/constants.ts +0 -11
  147. package/src/components/input-helper/index.ts +0 -1
  148. package/src/components/input-label/InputLabel.stories.tsx +0 -47
  149. package/src/components/input-label/InputLabel.test.tsx +0 -61
  150. package/src/components/input-label/InputLabel.tsx +0 -69
  151. package/src/components/input-label/index.ts +0 -1
  152. package/src/components/lightbox/Lightbox.stories.tsx +0 -101
  153. package/src/components/lightbox/Lightbox.test.tsx +0 -55
  154. package/src/components/lightbox/Lightbox.tsx +0 -180
  155. package/src/components/lightbox/index.ts +0 -1
  156. package/src/components/link/Link.stories.tsx +0 -196
  157. package/src/components/link/Link.test.tsx +0 -127
  158. package/src/components/link/Link.tsx +0 -119
  159. package/src/components/link/index.ts +0 -1
  160. package/src/components/link-preview/LinkPreview.stories.tsx +0 -61
  161. package/src/components/link-preview/LinkPreview.test.tsx +0 -107
  162. package/src/components/link-preview/LinkPreview.tsx +0 -160
  163. package/src/components/link-preview/index.ts +0 -1
  164. package/src/components/list/List.stories.tsx +0 -116
  165. package/src/components/list/List.test.tsx +0 -20
  166. package/src/components/list/List.tsx +0 -104
  167. package/src/components/list/ListDivider.stories.tsx +0 -12
  168. package/src/components/list/ListDivider.test.tsx +0 -24
  169. package/src/components/list/ListDivider.tsx +0 -37
  170. package/src/components/list/ListItem.stories.tsx +0 -66
  171. package/src/components/list/ListItem.test.tsx +0 -95
  172. package/src/components/list/ListItem.tsx +0 -157
  173. package/src/components/list/ListSubheader.stories.tsx +0 -11
  174. package/src/components/list/ListSubheader.test.tsx +0 -23
  175. package/src/components/list/ListSubheader.tsx +0 -44
  176. package/src/components/list/index.ts +0 -4
  177. package/src/components/list/useInteractiveList.tsx +0 -202
  178. package/src/components/message/Message.stories.tsx +0 -72
  179. package/src/components/message/Message.test.tsx +0 -77
  180. package/src/components/message/Message.tsx +0 -100
  181. package/src/components/message/index.ts +0 -1
  182. package/src/components/mosaic/Mosaic.stories.tsx +0 -89
  183. package/src/components/mosaic/Mosaic.test.tsx +0 -79
  184. package/src/components/mosaic/Mosaic.tsx +0 -98
  185. package/src/components/mosaic/index.ts +0 -1
  186. package/src/components/navigation/Navigation.stories.tsx +0 -236
  187. package/src/components/navigation/Navigation.test.tsx +0 -67
  188. package/src/components/navigation/Navigation.tsx +0 -81
  189. package/src/components/navigation/NavigationItem.test.tsx +0 -37
  190. package/src/components/navigation/NavigationItem.tsx +0 -86
  191. package/src/components/navigation/NavigationSection.test.tsx +0 -139
  192. package/src/components/navigation/NavigationSection.tsx +0 -107
  193. package/src/components/navigation/context.tsx +0 -7
  194. package/src/components/navigation/index.ts +0 -1
  195. package/src/components/notification/Notification.test.tsx +0 -95
  196. package/src/components/notification/Notification.tsx +0 -138
  197. package/src/components/notification/Notifications.stories.tsx +0 -92
  198. package/src/components/notification/constants.ts +0 -28
  199. package/src/components/notification/index.ts +0 -1
  200. package/src/components/popover/Popover.stories.tsx +0 -264
  201. package/src/components/popover/Popover.test.tsx +0 -64
  202. package/src/components/popover/Popover.tsx +0 -201
  203. package/src/components/popover/constants.ts +0 -62
  204. package/src/components/popover/index.ts +0 -3
  205. package/src/components/popover/usePopoverStyle.tsx +0 -184
  206. package/src/components/popover/useRestoreFocusOnClose.tsx +0 -47
  207. package/src/components/popover-dialog/PopoverDialog.stories.tsx +0 -64
  208. package/src/components/popover-dialog/PopoverDialog.test.tsx +0 -140
  209. package/src/components/popover-dialog/PopoverDialog.tsx +0 -76
  210. package/src/components/popover-dialog/index.tsx +0 -1
  211. package/src/components/post-block/PostBlock.test.tsx +0 -29
  212. package/src/components/post-block/PostBlock.tsx +0 -122
  213. package/src/components/post-block/index.ts +0 -1
  214. package/src/components/progress/Progress.tsx +0 -70
  215. package/src/components/progress/ProgressCircular.stories.tsx +0 -44
  216. package/src/components/progress/ProgressCircular.test.tsx +0 -48
  217. package/src/components/progress/ProgressCircular.tsx +0 -84
  218. package/src/components/progress/ProgressLinear.stories.tsx +0 -12
  219. package/src/components/progress/ProgressLinear.test.tsx +0 -32
  220. package/src/components/progress/ProgressLinear.tsx +0 -52
  221. package/src/components/progress/index.ts +0 -3
  222. package/src/components/progress-tracker/ProgressTracker.stories.tsx +0 -145
  223. package/src/components/progress-tracker/ProgressTracker.test.tsx +0 -44
  224. package/src/components/progress-tracker/ProgressTracker.tsx +0 -87
  225. package/src/components/progress-tracker/ProgressTrackerProvider.test.tsx +0 -67
  226. package/src/components/progress-tracker/ProgressTrackerProvider.tsx +0 -67
  227. package/src/components/progress-tracker/ProgressTrackerStep.test.tsx +0 -38
  228. package/src/components/progress-tracker/ProgressTrackerStep.tsx +0 -159
  229. package/src/components/progress-tracker/ProgressTrackerStepPanel.test.tsx +0 -36
  230. package/src/components/progress-tracker/ProgressTrackerStepPanel.tsx +0 -69
  231. package/src/components/progress-tracker/index.ts +0 -4
  232. package/src/components/radio-button/RadioButton.stories.tsx +0 -71
  233. package/src/components/radio-button/RadioButton.test.tsx +0 -145
  234. package/src/components/radio-button/RadioButton.tsx +0 -143
  235. package/src/components/radio-button/RadioGroup.stories.tsx +0 -39
  236. package/src/components/radio-button/RadioGroup.test.tsx +0 -31
  237. package/src/components/radio-button/RadioGroup.tsx +0 -44
  238. package/src/components/radio-button/index.ts +0 -2
  239. package/src/components/select/Select.stories.tsx +0 -385
  240. package/src/components/select/Select.test.tsx +0 -200
  241. package/src/components/select/Select.tsx +0 -199
  242. package/src/components/select/SelectMultiple.stories.tsx +0 -315
  243. package/src/components/select/SelectMultiple.test.tsx +0 -215
  244. package/src/components/select/SelectMultiple.tsx +0 -206
  245. package/src/components/select/WithSelectContext.tsx +0 -147
  246. package/src/components/select/constants.ts +0 -55
  247. package/src/components/select/index.ts +0 -2
  248. package/src/components/side-navigation/SideNavigation.stories.tsx +0 -191
  249. package/src/components/side-navigation/SideNavigation.test.tsx +0 -39
  250. package/src/components/side-navigation/SideNavigation.tsx +0 -52
  251. package/src/components/side-navigation/SideNavigationItem.stories.tsx +0 -133
  252. package/src/components/side-navigation/SideNavigationItem.test.tsx +0 -138
  253. package/src/components/side-navigation/SideNavigationItem.tsx +0 -170
  254. package/src/components/side-navigation/index.ts +0 -2
  255. package/src/components/skeleton/SkeletonCircle.stories.tsx +0 -41
  256. package/src/components/skeleton/SkeletonCircle.test.tsx +0 -29
  257. package/src/components/skeleton/SkeletonCircle.tsx +0 -54
  258. package/src/components/skeleton/SkeletonRectangle.stories.tsx +0 -82
  259. package/src/components/skeleton/SkeletonRectangle.test.tsx +0 -29
  260. package/src/components/skeleton/SkeletonRectangle.tsx +0 -90
  261. package/src/components/skeleton/SkeletonTypography.stories.tsx +0 -21
  262. package/src/components/skeleton/SkeletonTypography.test.tsx +0 -29
  263. package/src/components/skeleton/SkeletonTypography.tsx +0 -59
  264. package/src/components/skeleton/index.ts +0 -3
  265. package/src/components/slider/Slider.stories.tsx +0 -45
  266. package/src/components/slider/Slider.test.tsx +0 -31
  267. package/src/components/slider/Slider.tsx +0 -299
  268. package/src/components/slider/index.ts +0 -2
  269. package/src/components/slideshow/Slides.tsx +0 -130
  270. package/src/components/slideshow/Slideshow.stories.tsx +0 -180
  271. package/src/components/slideshow/Slideshow.test.tsx +0 -37
  272. package/src/components/slideshow/Slideshow.tsx +0 -173
  273. package/src/components/slideshow/SlideshowControls.stories.tsx +0 -102
  274. package/src/components/slideshow/SlideshowControls.tsx +0 -243
  275. package/src/components/slideshow/SlideshowItem.tsx +0 -46
  276. package/src/components/slideshow/SlideshowItemGroup.tsx +0 -60
  277. package/src/components/slideshow/constants.ts +0 -24
  278. package/src/components/slideshow/index.ts +0 -4
  279. package/src/components/slideshow/useKeyNavigate.ts +0 -28
  280. package/src/components/slideshow/usePaginationVisibleRange.ts +0 -37
  281. package/src/components/slideshow/useSlideFocusManagement.tsx +0 -92
  282. package/src/components/slideshow/useSwipeNavigate.ts +0 -18
  283. package/src/components/switch/Switch.stories.tsx +0 -49
  284. package/src/components/switch/Switch.test.tsx +0 -146
  285. package/src/components/switch/Switch.tsx +0 -145
  286. package/src/components/switch/index.ts +0 -1
  287. package/src/components/table/Table.test.tsx +0 -31
  288. package/src/components/table/Table.tsx +0 -61
  289. package/src/components/table/TableBody.test.tsx +0 -32
  290. package/src/components/table/TableBody.tsx +0 -44
  291. package/src/components/table/TableCell.test.tsx +0 -74
  292. package/src/components/table/TableCell.tsx +0 -132
  293. package/src/components/table/TableHeader.test.tsx +0 -32
  294. package/src/components/table/TableHeader.tsx +0 -50
  295. package/src/components/table/TableRow.test.tsx +0 -42
  296. package/src/components/table/TableRow.tsx +0 -73
  297. package/src/components/table/index.ts +0 -5
  298. package/src/components/tabs/Tab.test.tsx +0 -52
  299. package/src/components/tabs/Tab.tsx +0 -133
  300. package/src/components/tabs/TabList.test.tsx +0 -51
  301. package/src/components/tabs/TabList.tsx +0 -94
  302. package/src/components/tabs/TabPanel.test.tsx +0 -39
  303. package/src/components/tabs/TabPanel.tsx +0 -69
  304. package/src/components/tabs/TabProvider.test.tsx +0 -163
  305. package/src/components/tabs/TabProvider.tsx +0 -67
  306. package/src/components/tabs/Tabs.stories.tsx +0 -170
  307. package/src/components/tabs/index.ts +0 -4
  308. package/src/components/tabs/state.ts +0 -114
  309. package/src/components/tabs/test-utils.ts +0 -39
  310. package/src/components/text/Text.stories.tsx +0 -177
  311. package/src/components/text/Text.test.tsx +0 -94
  312. package/src/components/text/Text.tsx +0 -141
  313. package/src/components/text/index.ts +0 -1
  314. package/src/components/text-field/TextField.stories.tsx +0 -180
  315. package/src/components/text-field/TextField.test.tsx +0 -299
  316. package/src/components/text-field/TextField.tsx +0 -493
  317. package/src/components/text-field/index.ts +0 -1
  318. package/src/components/thumbnail/Thumbnail.stories.tsx +0 -448
  319. package/src/components/thumbnail/Thumbnail.test.tsx +0 -66
  320. package/src/components/thumbnail/Thumbnail.tsx +0 -248
  321. package/src/components/thumbnail/index.ts +0 -3
  322. package/src/components/thumbnail/types.ts +0 -48
  323. package/src/components/thumbnail/useFocusPointStyle.test.ts +0 -92
  324. package/src/components/thumbnail/useFocusPointStyle.tsx +0 -107
  325. package/src/components/thumbnail/useImageLoad.ts +0 -40
  326. package/src/components/toolbar/Toolbar.tsx +0 -68
  327. package/src/components/toolbar/index.ts +0 -1
  328. package/src/components/tooltip/Tooltip.stories.tsx +0 -117
  329. package/src/components/tooltip/Tooltip.test.tsx +0 -411
  330. package/src/components/tooltip/Tooltip.tsx +0 -165
  331. package/src/components/tooltip/constants.ts +0 -8
  332. package/src/components/tooltip/context.tsx +0 -17
  333. package/src/components/tooltip/index.ts +0 -1
  334. package/src/components/tooltip/useInjectTooltipRef.tsx +0 -55
  335. package/src/components/tooltip/useTooltipOpen.tsx +0 -143
  336. package/src/components/uploader/Uploader.stories.tsx +0 -109
  337. package/src/components/uploader/Uploader.test.tsx +0 -148
  338. package/src/components/uploader/Uploader.tsx +0 -177
  339. package/src/components/uploader/index.ts +0 -1
  340. package/src/components/user-block/UserBlock.stories.tsx +0 -135
  341. package/src/components/user-block/UserBlock.test.tsx +0 -108
  342. package/src/components/user-block/UserBlock.tsx +0 -193
  343. package/src/components/user-block/index.ts +0 -1
  344. package/src/constants.ts +0 -27
  345. package/src/hooks/useBooleanState.tsx +0 -13
  346. package/src/hooks/useCallbackOnEscape.ts +0 -34
  347. package/src/hooks/useChipGroupNavigation.tsx +0 -75
  348. package/src/hooks/useClickAway.tsx +0 -48
  349. package/src/hooks/useDisableBodyScroll.ts +0 -28
  350. package/src/hooks/useEventCallback.tsx +0 -17
  351. package/src/hooks/useFocus.tsx +0 -21
  352. package/src/hooks/useFocusTrap.ts +0 -93
  353. package/src/hooks/useFocusWithin.ts +0 -33
  354. package/src/hooks/useId.test.tsx +0 -23
  355. package/src/hooks/useId.ts +0 -15
  356. package/src/hooks/useImageSize.ts +0 -17
  357. package/src/hooks/useInfiniteScroll.tsx +0 -60
  358. package/src/hooks/useIntersectionObserver.tsx +0 -43
  359. package/src/hooks/useInterval.tsx +0 -31
  360. package/src/hooks/useKeyboardListNavigation.tsx +0 -204
  361. package/src/hooks/useListenFocus.tsx +0 -26
  362. package/src/hooks/useOverflowTooltipLabel.tsx +0 -32
  363. package/src/hooks/usePopper.ts +0 -12
  364. package/src/hooks/usePreviousValue.ts +0 -13
  365. package/src/hooks/useRovingTabIndex.tsx +0 -90
  366. package/src/hooks/useSizeOnWindowResize.ts +0 -30
  367. package/src/hooks/useSlideshowControls.ts +0 -246
  368. package/src/hooks/useStopPropagation.ts +0 -21
  369. package/src/hooks/useTransitionVisibility.ts +0 -48
  370. package/src/index.ts +0 -63
  371. package/src/stories/controls/color.ts +0 -7
  372. package/src/stories/controls/element.ts +0 -6
  373. package/src/stories/controls/focusPoint.ts +0 -1
  374. package/src/stories/controls/icons.ts +0 -126
  375. package/src/stories/controls/image.ts +0 -84
  376. package/src/stories/controls/selectArgType.ts +0 -8
  377. package/src/stories/controls/theme.ts +0 -3
  378. package/src/stories/controls/typography.ts +0 -5
  379. package/src/stories/controls/withUndefined.ts +0 -1
  380. package/src/stories/decorators/withChromaticForceScreenSize.tsx +0 -8
  381. package/src/stories/decorators/withCombinations.tsx +0 -132
  382. package/src/stories/decorators/withNestedProps.tsx +0 -23
  383. package/src/stories/decorators/withResizableBox.tsx +0 -21
  384. package/src/stories/decorators/withThemedBackground.tsx +0 -18
  385. package/src/stories/decorators/withValueOnChange.tsx +0 -18
  386. package/src/stories/decorators/withWrapper.tsx +0 -21
  387. package/src/stories/generated/Autocomplete/Demos.stories.tsx +0 -7
  388. package/src/stories/generated/Avatar/Demos.stories.tsx +0 -7
  389. package/src/stories/generated/Badge/Demos.stories.tsx +0 -9
  390. package/src/stories/generated/Button/Demos.stories.tsx +0 -11
  391. package/src/stories/generated/Checkbox/Demos.stories.tsx +0 -6
  392. package/src/stories/generated/Chip/Demos.stories.tsx +0 -11
  393. package/src/stories/generated/CommentBlock/Demos.stories.tsx +0 -8
  394. package/src/stories/generated/DatePicker/Demos.stories.tsx +0 -8
  395. package/src/stories/generated/Dialog/Demos.stories.tsx +0 -10
  396. package/src/stories/generated/Divider/Demos.stories.tsx +0 -6
  397. package/src/stories/generated/Dropdown/Demos.stories.tsx +0 -8
  398. package/src/stories/generated/ExpansionPanel/Demos.stories.tsx +0 -9
  399. package/src/stories/generated/Flag/Demos.stories.tsx +0 -6
  400. package/src/stories/generated/GenericBlock/Demos.stories.tsx +0 -8
  401. package/src/stories/generated/Heading/Demos.stories.tsx +0 -6
  402. package/src/stories/generated/Icon/Demos.stories.tsx +0 -8
  403. package/src/stories/generated/ImageBlock/Demos.stories.tsx +0 -9
  404. package/src/stories/generated/ImageLightbox/Demos.stories.tsx +0 -6
  405. package/src/stories/generated/Lightbox/Demos.stories.tsx +0 -6
  406. package/src/stories/generated/LinkPreview/Demos.stories.tsx +0 -7
  407. package/src/stories/generated/List/Demos.stories.tsx +0 -11
  408. package/src/stories/generated/Message/Demos.stories.tsx +0 -11
  409. package/src/stories/generated/Mosaic/Demos.stories.tsx +0 -10
  410. package/src/stories/generated/Notification/Demos.stories.tsx +0 -6
  411. package/src/stories/generated/Popover/Demos.stories.tsx +0 -11
  412. package/src/stories/generated/PopoverDialog/Demos.stories.tsx +0 -6
  413. package/src/stories/generated/PostBlock/Demos.stories.tsx +0 -6
  414. package/src/stories/generated/Progress/Demos.stories.tsx +0 -7
  415. package/src/stories/generated/ProgressTracker/Demos.stories.tsx +0 -9
  416. package/src/stories/generated/RadioButton/Demos.stories.tsx +0 -6
  417. package/src/stories/generated/Select/Demos.stories.tsx +0 -14
  418. package/src/stories/generated/SideNavigation/Demos.stories.tsx +0 -10
  419. package/src/stories/generated/Skeleton/Demos.stories.tsx +0 -9
  420. package/src/stories/generated/Slider/Demos.stories.tsx +0 -9
  421. package/src/stories/generated/Slideshow/Demos.stories.tsx +0 -8
  422. package/src/stories/generated/Switch/Demos.stories.tsx +0 -6
  423. package/src/stories/generated/Table/Demos.stories.tsx +0 -7
  424. package/src/stories/generated/Tabs/Demos.stories.tsx +0 -8
  425. package/src/stories/generated/TextField/Demos.stories.tsx +0 -20
  426. package/src/stories/generated/Thumbnail/Demos.stories.tsx +0 -12
  427. package/src/stories/generated/Toolbar/Demos.stories.tsx +0 -10
  428. package/src/stories/generated/Tooltip/Demos.stories.tsx +0 -8
  429. package/src/stories/generated/Uploader/Demos.stories.tsx +0 -8
  430. package/src/stories/generated/UserBlock/Demos.stories.tsx +0 -11
  431. package/src/stories/utils/CustomLink.tsx +0 -13
  432. package/src/stories/utils/concatPath.tsx +0 -17
  433. package/src/stories/utils/disableArgTypes.ts +0 -3
  434. package/src/stories/utils/initDemoShadowDOMPortal.ts +0 -10
  435. package/src/stories/utils/lorem.ts +0 -59
  436. package/src/stories/utils/theming.tsx +0 -166
  437. package/src/stories/utils/toFlattenProps.ts +0 -28
  438. package/src/stories/utils/withCategory.ts +0 -12
  439. package/src/testing/utils/ThemeSentinel.tsx +0 -11
  440. package/src/testing/utils/commonTestsSuiteRTL.tsx +0 -193
  441. package/src/testing/utils/index.ts +0 -1
  442. package/src/testing/utils/queries.ts +0 -19
  443. package/src/untypped-modules.d.ts +0 -5
  444. package/src/utils/ClickAwayProvider/ClickAwayProvider.stories.jsx +0 -70
  445. package/src/utils/ClickAwayProvider/ClickAwayProvider.tsx +0 -69
  446. package/src/utils/ClickAwayProvider/index.ts +0 -1
  447. package/src/utils/MaterialThemeSwitcher/MaterialThemeSwitcher.tsx +0 -54
  448. package/src/utils/MaterialThemeSwitcher/index.ts +0 -1
  449. package/src/utils/Portal/Portal.test.tsx +0 -32
  450. package/src/utils/Portal/Portal.tsx +0 -33
  451. package/src/utils/Portal/PortalProvider.stories.jsx +0 -23
  452. package/src/utils/Portal/PortalProvider.test.tsx +0 -73
  453. package/src/utils/Portal/PortalProvider.tsx +0 -24
  454. package/src/utils/Portal/index.tsx +0 -2
  455. package/src/utils/browser/DOM/findImage.tsx +0 -3
  456. package/src/utils/browser/DOM/startViewTransition.ts +0 -68
  457. package/src/utils/browser/focus/constants.ts +0 -7
  458. package/src/utils/browser/focus/getFirstAndLastFocusable.test.ts +0 -134
  459. package/src/utils/browser/focus/getFirstAndLastFocusable.ts +0 -21
  460. package/src/utils/browser/focus/getFocusableElements.test.ts +0 -151
  461. package/src/utils/browser/focus/getFocusableElements.ts +0 -7
  462. package/src/utils/browser/isFocusVisible.ts +0 -9
  463. package/src/utils/browser/isHoverNotSupported.test.js +0 -24
  464. package/src/utils/browser/isHoverNotSupported.ts +0 -2
  465. package/src/utils/browser/isReducedMotion.ts +0 -6
  466. package/src/utils/date/addMonthResetDay.test.ts +0 -13
  467. package/src/utils/date/addMonthResetDay.ts +0 -9
  468. package/src/utils/date/formatDayNumber.test.ts +0 -12
  469. package/src/utils/date/formatDayNumber.ts +0 -5
  470. package/src/utils/date/getFirstDayOfWeek.test.ts +0 -20
  471. package/src/utils/date/getFirstDayOfWeek.ts +0 -59
  472. package/src/utils/date/getMonthCalendar.test.ts +0 -127
  473. package/src/utils/date/getMonthCalendar.ts +0 -69
  474. package/src/utils/date/getWeekDays.test.ts +0 -48
  475. package/src/utils/date/getWeekDays.ts +0 -34
  476. package/src/utils/date/getYearDisplayName.test.ts +0 -20
  477. package/src/utils/date/getYearDisplayName.ts +0 -12
  478. package/src/utils/date/isDateValid.test.ts +0 -15
  479. package/src/utils/date/isDateValid.ts +0 -4
  480. package/src/utils/date/isSameDay.test.ts +0 -37
  481. package/src/utils/date/isSameDay.ts +0 -11
  482. package/src/utils/disabled/DisabledStateContext.tsx +0 -29
  483. package/src/utils/disabled/DisabledStateProvider.stories.tsx +0 -94
  484. package/src/utils/disabled/index.ts +0 -2
  485. package/src/utils/disabled/useDisableStateProps.test.tsx +0 -74
  486. package/src/utils/disabled/useDisableStateProps.tsx +0 -37
  487. package/src/utils/function/makeListenerTowerContext.ts +0 -32
  488. package/src/utils/index.ts +0 -7
  489. package/src/utils/locale/getCurrentLocale.ts +0 -4
  490. package/src/utils/locale/parseLocale.test.ts +0 -17
  491. package/src/utils/locale/parseLocale.ts +0 -23
  492. package/src/utils/locale/types.ts +0 -8
  493. package/src/utils/number/clamp.ts +0 -17
  494. package/src/utils/object/isEqual.test.ts +0 -25
  495. package/src/utils/object/isEqual.ts +0 -11
  496. package/src/utils/partitionMulti.test.ts +0 -27
  497. package/src/utils/partitionMulti.ts +0 -29
  498. package/src/utils/react/OnBeforeUnmount.tsx +0 -20
  499. package/src/utils/react/flattenChildren.ts +0 -32
  500. package/src/utils/react/forwardRef.ts +0 -11
  501. package/src/utils/react/forwardRefPolymorphic.ts +0 -9
  502. package/src/utils/react/mergeRefs.ts +0 -33
  503. package/src/utils/react/renderButtonOrLink.tsx +0 -16
  504. package/src/utils/react/renderLink.tsx +0 -17
  505. package/src/utils/react/skipRender.tsx +0 -18
  506. package/src/utils/react/unref.ts +0 -7
  507. package/src/utils/react/wrapChildrenIconWithSpaces.test.tsx +0 -37
  508. package/src/utils/react/wrapChildrenIconWithSpaces.tsx +0 -22
  509. package/src/utils/theme/ThemeContext.ts +0 -16
  510. package/src/utils/theme/invertTheme.ts +0 -4
  511. package/src/utils/type/Comp.ts +0 -14
  512. package/src/utils/type/ComponentRef.ts +0 -16
  513. package/src/utils/type/HasAriaDisabled.ts +0 -6
  514. package/src/utils/type/HasPolymorphicAs.ts +0 -8
  515. package/src/utils/type/MaybeElementOrRef.ts +0 -6
  516. package/src/utils/type/index.ts +0 -8
  517. package/src/utils/type/isComponent.ts +0 -33
  518. package/src/utils/type/isComponentType.ts +0 -9
@@ -1,248 +0,0 @@
1
- import React, {
2
- CSSProperties,
3
- ImgHTMLAttributes,
4
- KeyboardEventHandler,
5
- MouseEventHandler,
6
- ReactElement,
7
- ReactNode,
8
- Ref,
9
- useState,
10
- } from 'react';
11
-
12
- import classNames from 'classnames';
13
-
14
- import { AspectRatio, HorizontalAlignment, Icon, Size, Theme, ThumbnailObjectFit } from '@lumx/react';
15
- import { Falsy, GenericProps, HasTheme } from '@lumx/react/utils/type';
16
- import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
17
- import { mdiImageBroken } from '@lumx/icons';
18
- import { useMergeRefs } from '@lumx/react/utils/react/mergeRefs';
19
- import { useImageLoad } from '@lumx/react/components/thumbnail/useImageLoad';
20
- import { useFocusPointStyle } from '@lumx/react/components/thumbnail/useFocusPointStyle';
21
- import { useTheme } from '@lumx/react/utils/theme/ThemeContext';
22
- import { forwardRef } from '@lumx/react/utils/react/forwardRef';
23
-
24
- import { useDisableStateProps } from '@lumx/react/utils/disabled';
25
- import { FocusPoint, ThumbnailSize, ThumbnailVariant } from './types';
26
-
27
- type ImgHTMLProps = ImgHTMLAttributes<HTMLImageElement>;
28
-
29
- /**
30
- * Defines the props of the component.
31
- */
32
- export interface ThumbnailProps extends GenericProps, HasTheme {
33
- /** Alignment of the thumbnail in it's parent (requires flex parent). */
34
- align?: HorizontalAlignment;
35
- /** Image alternative text. */
36
- alt: string;
37
- /** Image aspect ratio. */
38
- aspectRatio?: AspectRatio;
39
- /** Badge. */
40
- badge?: ReactElement | Falsy;
41
- /** Image cross origin resource policy. */
42
- crossOrigin?: ImgHTMLProps['crossOrigin'];
43
- /** Fallback icon (SVG path) or react node when image fails to load. */
44
- fallback?: string | ReactNode;
45
- /** Whether the thumbnail should fill it's parent size (requires flex parent) or not. */
46
- fillHeight?: boolean;
47
- /** Apply relative vertical and horizontal shift (from -1 to 1) on the image position inside the thumbnail. */
48
- focusPoint?: FocusPoint;
49
- /** Image URL. */
50
- image: string;
51
- /** Props to inject into the native <img> element. */
52
- imgProps?: ImgHTMLProps;
53
- /** Reference to the native <img> element. */
54
- imgRef?: Ref<HTMLImageElement>;
55
- /** Set to true to force the display of the loading skeleton. */
56
- isLoading?: boolean;
57
- /** Set how the image should fit when its aspect ratio is constrained */
58
- objectFit?: ThumbnailObjectFit;
59
- /** Size variant of the component. */
60
- size?: ThumbnailSize;
61
- /** Image loading mode. */
62
- loading?: ImgHTMLProps['loading'];
63
- /** Ref of an existing placeholder image to display while loading. */
64
- loadingPlaceholderImageRef?: React.RefObject<HTMLImageElement>;
65
- /** On click callback. */
66
- onClick?: MouseEventHandler<HTMLDivElement>;
67
- /** On key press callback. */
68
- onKeyPress?: KeyboardEventHandler<HTMLDivElement>;
69
- /** Variant of the component. */
70
- variant?: ThumbnailVariant;
71
- /** Props to pass to the link wrapping the thumbnail. */
72
- linkProps?: React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>;
73
- /** Custom react component for the link (can be used to inject react router Link). */
74
- linkAs?: 'a' | any;
75
- }
76
-
77
- /**
78
- * Component display name.
79
- */
80
- const COMPONENT_NAME = 'Thumbnail';
81
-
82
- /**
83
- * Component default class name and class prefix.
84
- */
85
- const CLASSNAME = getRootClassName(COMPONENT_NAME);
86
-
87
- /**
88
- * Component default props.
89
- */
90
- const DEFAULT_PROPS: Partial<ThumbnailProps> = {
91
- fallback: mdiImageBroken,
92
- loading: 'lazy',
93
- };
94
-
95
- /**
96
- * Thumbnail component.
97
- *
98
- * @param props Component props.
99
- * @param ref Component ref.
100
- * @return React element.
101
- */
102
- export const Thumbnail = forwardRef<ThumbnailProps>((props, ref) => {
103
- const { isAnyDisabled, otherProps } = useDisableStateProps(props);
104
- const defaultTheme = useTheme() || Theme.light;
105
- const {
106
- align,
107
- alt,
108
- aspectRatio = AspectRatio.original,
109
- badge,
110
- className,
111
- crossOrigin,
112
- fallback = DEFAULT_PROPS.fallback,
113
- fillHeight,
114
- // `focusPoint` needs to be here to remove it from `forwardedProps`.
115
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
116
- focusPoint,
117
- image,
118
- imgProps,
119
- imgRef: propImgRef,
120
- isLoading: isLoadingProp,
121
- objectFit,
122
- loading = DEFAULT_PROPS.loading,
123
- loadingPlaceholderImageRef,
124
- size,
125
- theme = defaultTheme,
126
- variant,
127
- linkProps,
128
- linkAs,
129
- ...forwardedProps
130
- } = otherProps;
131
- const [imgElement, setImgElement] = useState<HTMLImageElement>();
132
-
133
- // Image loading state.
134
- const loadingState = useImageLoad(image, imgElement);
135
- const isLoaded = loadingState === 'isLoaded';
136
- const isLoading = isLoadingProp || loadingState === 'isLoading';
137
- const hasError = loadingState === 'hasError';
138
-
139
- // Focus point.
140
- const focusPointStyle = useFocusPointStyle(props, imgElement, isLoaded);
141
-
142
- const hasIconErrorFallback = hasError && typeof fallback === 'string';
143
- const hasCustomErrorFallback = hasError && !hasIconErrorFallback;
144
- const imageErrorStyle: CSSProperties = {};
145
- if (hasIconErrorFallback) {
146
- // Keep the image layout on icon fallback.
147
- imageErrorStyle.visibility = 'hidden';
148
- } else if (hasCustomErrorFallback) {
149
- // Remove the image on custom fallback.
150
- imageErrorStyle.display = 'none';
151
- }
152
-
153
- const isLink = Boolean(linkProps?.href || linkAs);
154
- const isButton = !!forwardedProps.onClick;
155
- const isClickable = !isAnyDisabled && (isButton || isLink);
156
-
157
- let Wrapper: any = 'div';
158
- const wrapperProps = { ...forwardedProps };
159
- if (!isAnyDisabled && isLink) {
160
- Wrapper = linkAs || 'a';
161
- Object.assign(wrapperProps, linkProps);
162
- } else if (!isAnyDisabled && isButton) {
163
- Wrapper = 'button';
164
- wrapperProps.type = forwardedProps.type || 'button';
165
- wrapperProps['aria-label'] = forwardedProps['aria-label'] || alt;
166
- }
167
-
168
- // If we have a loading placeholder image that is really loaded (complete)
169
- const loadingPlaceholderImage =
170
- (isLoading && loadingPlaceholderImageRef?.current?.complete && loadingPlaceholderImageRef?.current) ||
171
- undefined;
172
-
173
- // Set loading placeholder image as background
174
- const loadingStyle = loadingPlaceholderImage
175
- ? { backgroundImage: `url(${loadingPlaceholderImage.src})` }
176
- : undefined;
177
-
178
- return (
179
- <Wrapper
180
- {...wrapperProps}
181
- ref={ref}
182
- className={classNames(
183
- linkProps?.className,
184
- className,
185
- handleBasicClasses({
186
- align,
187
- aspectRatio,
188
- prefix: CLASSNAME,
189
- size,
190
- theme,
191
- variant,
192
- isClickable,
193
- hasError,
194
- hasIconErrorFallback,
195
- hasCustomErrorFallback,
196
- isLoading,
197
- objectFit,
198
- hasBadge: !!badge,
199
- }),
200
- fillHeight && `${CLASSNAME}--fill-height`,
201
- )}
202
- >
203
- <span className={`${CLASSNAME}__background`}>
204
- <img
205
- // Use placeholder image size
206
- width={loadingPlaceholderImage?.naturalWidth}
207
- height={loadingPlaceholderImage?.naturalHeight}
208
- {...imgProps}
209
- style={{
210
- // Reserve space while loading (when possible)
211
- width: isLoading ? imgProps?.width || loadingPlaceholderImage?.naturalWidth : undefined,
212
- ...imgProps?.style,
213
- ...imageErrorStyle,
214
- ...focusPointStyle,
215
- ...loadingStyle,
216
- }}
217
- ref={useMergeRefs(setImgElement, propImgRef)}
218
- className={classNames(
219
- handleBasicClasses({
220
- prefix: `${CLASSNAME}__image`,
221
- isLoading,
222
- hasDefinedSize: Boolean(imgProps?.height && imgProps.width),
223
- }),
224
- imgProps?.className,
225
- )}
226
- crossOrigin={crossOrigin}
227
- src={image}
228
- alt={alt}
229
- loading={loading}
230
- />
231
- {!isLoading && hasError && (
232
- <span className={`${CLASSNAME}__fallback`}>
233
- {hasIconErrorFallback ? (
234
- <Icon icon={fallback as string} size={Size.xxs} theme={theme} />
235
- ) : (
236
- fallback
237
- )}
238
- </span>
239
- )}
240
- </span>
241
- {badge &&
242
- React.cloneElement(badge, { className: classNames(`${CLASSNAME}__badge`, badge.props.className) })}
243
- </Wrapper>
244
- );
245
- });
246
- Thumbnail.displayName = COMPONENT_NAME;
247
- Thumbnail.className = CLASSNAME;
248
- Thumbnail.defaultProps = DEFAULT_PROPS;
@@ -1,3 +0,0 @@
1
- export * from './Thumbnail';
2
- export * from './types';
3
- export { useFocusPointStyle } from '@lumx/react/components/thumbnail/useFocusPointStyle';
@@ -1,48 +0,0 @@
1
- import React from 'react';
2
- import { AspectRatio, Size } from '@lumx/react';
3
- import { ValueOf } from '@lumx/react/utils/type';
4
-
5
- /**
6
- * Focal point using vertical alignment, horizontal alignment or coordinates (from -1 to 1).
7
- */
8
- export type FocusPoint = { x?: number; y?: number };
9
-
10
- /**
11
- * Loading attribute is not yet supported in typescript, so we need
12
- * to add it in order to avoid a ts error.
13
- * https://github.com/typescript-cheatsheets/react-typescript-cheatsheet/blob/master/ADVANCED.md#adding-non-standard-attributes
14
- */
15
- declare module 'react' {
16
- interface ImgHTMLAttributes<T> extends React.HTMLAttributes<T> {
17
- loading?: 'eager' | 'lazy';
18
- }
19
- }
20
-
21
- /**
22
- * All available aspect ratios.
23
- * @deprecated
24
- */
25
- export const ThumbnailAspectRatio: Record<string, AspectRatio> = { ...AspectRatio };
26
-
27
- /**
28
- * Thumbnail sizes.
29
- */
30
- export type ThumbnailSize = Extract<Size, 'xxs' | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl'>;
31
-
32
- /**
33
- * Thumbnail variants.
34
- */
35
- export const ThumbnailVariant = {
36
- squared: 'squared',
37
- rounded: 'rounded',
38
- } as const;
39
- export type ThumbnailVariant = ValueOf<typeof ThumbnailVariant>;
40
-
41
- /**
42
- * Thumbnail object fit.
43
- */
44
- export const ThumbnailObjectFit = {
45
- cover: 'cover',
46
- contain: 'contain',
47
- } as const;
48
- export type ThumbnailObjectFit = ValueOf<typeof ThumbnailObjectFit>;
@@ -1,92 +0,0 @@
1
- import { shiftPosition } from './useFocusPointStyle';
2
-
3
- describe('shiftPosition', () => {
4
- it('should always return 0% if the imageSize fits the containerSize', () => {
5
- expect(
6
- shiftPosition({
7
- scale: 1.5,
8
- focusPoint: 0,
9
- imageSize: 1200,
10
- containerSize: 800,
11
- }),
12
- ).toEqual(0);
13
- expect(
14
- shiftPosition({
15
- scale: 1,
16
- focusPoint: 0.27,
17
- imageSize: 1000,
18
- containerSize: 1000,
19
- }),
20
- ).toEqual(0);
21
- expect(
22
- shiftPosition({
23
- scale: 3,
24
- focusPoint: 0.5,
25
- imageSize: 1200,
26
- containerSize: 400,
27
- }),
28
- ).toEqual(0);
29
- expect(
30
- shiftPosition({
31
- scale: 2.4,
32
- focusPoint: 1,
33
- imageSize: 1200,
34
- containerSize: 500,
35
- }),
36
- ).toEqual(0);
37
- });
38
-
39
- describe('with bigger side than container ', () => {
40
- // This use case will come, for example, if you have an image in width 100%
41
- // but the image after being resized to keep the ratio is higher than the container.
42
- // Then we are calculating the y shift.
43
-
44
- const image = { width: 1000, height: 1200 };
45
- const container = { width: 1000, height: 300 };
46
- // scale is always the minimum scale ratio. Here imagewidth/containerwidth.
47
- const scale = image.width / container.width; // 1
48
- it('should return 0% if focusPoint equals 0', () => {
49
- expect(
50
- shiftPosition({
51
- scale,
52
- focusPoint: 0,
53
- imageSize: image.height,
54
- containerSize: container.height,
55
- }),
56
- ).toEqual(0);
57
- });
58
-
59
- it('should return 100% if focusPoint equals 1', () => {
60
- expect(
61
- shiftPosition({
62
- scale,
63
- focusPoint: 1,
64
- imageSize: image.height,
65
- containerSize: container.height,
66
- }),
67
- ).toEqual(100);
68
- });
69
-
70
- it('should return 50% if focusPoint equals 0.5', () => {
71
- expect(
72
- shiftPosition({
73
- scale,
74
- focusPoint: 0.5,
75
- imageSize: image.height,
76
- containerSize: container.height,
77
- }),
78
- ).toEqual(50);
79
- });
80
-
81
- it('should return 16% if focusPoint equals 0.25', () => {
82
- expect(
83
- shiftPosition({
84
- scale,
85
- focusPoint: 0.25,
86
- imageSize: image.height,
87
- containerSize: container.height,
88
- }),
89
- ).toEqual(16);
90
- });
91
- });
92
- });
@@ -1,107 +0,0 @@
1
- import { CSSProperties, useEffect, useMemo, useState } from 'react';
2
- import { AspectRatio } from '@lumx/core/js/constants';
3
- import { ThumbnailProps } from '@lumx/react/components/thumbnail/Thumbnail';
4
- import { RectSize } from '@lumx/react/utils/type';
5
-
6
- // Calculate shift to center the focus point in the container.
7
- export function shiftPosition({
8
- scale,
9
- focusPoint,
10
- imageSize,
11
- containerSize,
12
- }: {
13
- scale: number;
14
- focusPoint: number;
15
- imageSize: number;
16
- containerSize: number;
17
- }) {
18
- const scaledSize = imageSize / scale;
19
- if (scaledSize === containerSize) return 0;
20
-
21
- const scaledFocusHeight = focusPoint * scaledSize;
22
- const startFocus = scaledFocusHeight - containerSize / 2;
23
- const shift = startFocus / (scaledSize - containerSize);
24
-
25
- return Math.floor(Math.max(Math.min(shift, 1), 0) * 100);
26
- }
27
-
28
- // Compute CSS properties to apply the focus point.
29
- export const useFocusPointStyle = (
30
- { image, aspectRatio, focusPoint, imgProps: { width, height } = {} }: ThumbnailProps,
31
- element: HTMLImageElement | undefined,
32
- isLoaded: boolean,
33
- ): CSSProperties => {
34
- // Get natural image size from imgProps or img element.
35
- const imageSize: RectSize | undefined = useMemo(() => {
36
- // Focus point is not applicable => exit early
37
- if (!image || aspectRatio === AspectRatio.original || (!focusPoint?.x && !focusPoint?.y)) return undefined;
38
- if (typeof width === 'number' && typeof height === 'number') return { width, height };
39
- if (element && isLoaded) return { width: element.naturalWidth, height: element.naturalHeight };
40
- return undefined;
41
- }, [aspectRatio, element, focusPoint?.x, focusPoint?.y, height, image, isLoaded, width]);
42
-
43
- // Get container size (dependant on imageSize).
44
- const [containerSize, setContainerSize] = useState<RectSize | undefined>(undefined);
45
- useEffect(
46
- function updateContainerSize() {
47
- const cWidth = element?.offsetWidth;
48
- const cHeight = element?.offsetHeight;
49
- if (cWidth && cHeight) {
50
- // Update only if needed.
51
- setContainerSize((oldContainerSize) =>
52
- oldContainerSize?.width === cWidth && oldContainerSize.height === cHeight
53
- ? oldContainerSize
54
- : { width: cWidth, height: cHeight },
55
- );
56
- } else if (imageSize) {
57
- // Wait for a render (in case the container size is dependent on the image size).
58
- requestAnimationFrame(updateContainerSize);
59
- }
60
- },
61
- [element?.offsetHeight, element?.offsetWidth, imageSize],
62
- );
63
-
64
- // Compute style.
65
- const style: CSSProperties = useMemo(() => {
66
- // Focus point is not applicable => exit early
67
- if (!image || aspectRatio === AspectRatio.original || (!focusPoint?.x && !focusPoint?.y)) {
68
- return {};
69
- }
70
- if (!element || !imageSize) {
71
- // Focus point can be computed but now right now (image size unknown).
72
- return { visibility: 'hidden' };
73
- }
74
- if (!containerSize || !imageSize.height || !imageSize.width) {
75
- // Missing container or image size abort focus point compute.
76
- return {};
77
- }
78
-
79
- const heightScale = imageSize.height / containerSize.height;
80
- const widthScale = imageSize.width / containerSize.width;
81
- const scale = Math.min(widthScale, heightScale);
82
-
83
- // Focus Y relative to the top (instead of the center)
84
- const focusPointFromTop = Math.abs((focusPoint?.y || 0) - 1) / 2;
85
- const y = shiftPosition({
86
- scale,
87
- focusPoint: focusPointFromTop,
88
- imageSize: imageSize.height,
89
- containerSize: containerSize.height,
90
- });
91
-
92
- // Focus X relative to the left (instead of the center)
93
- const focusPointFromLeft = Math.abs((focusPoint?.x || 0) + 1) / 2;
94
- const x = shiftPosition({
95
- scale,
96
- focusPoint: focusPointFromLeft,
97
- imageSize: imageSize.width,
98
- containerSize: containerSize.width,
99
- });
100
-
101
- const objectPosition = `${x}% ${y}%`;
102
-
103
- return { objectPosition };
104
- }, [aspectRatio, containerSize, element, focusPoint?.x, focusPoint?.y, image, imageSize]);
105
-
106
- return style;
107
- };
@@ -1,40 +0,0 @@
1
- import { useEffect, useState } from 'react';
2
-
3
- export type LoadingState = 'isLoading' | 'isLoaded' | 'hasError';
4
-
5
- function getState(img: HTMLImageElement | null | undefined, event?: Event) {
6
- // Error event occurred or image has no source.
7
- if (event?.type === 'error' || (img?.complete && !img.getAttribute('src'))) {
8
- return 'hasError';
9
- }
10
- // Image is undefined or incomplete.
11
- if (!img || !img.complete) {
12
- return 'isLoading';
13
- }
14
- // Else loaded.
15
- return 'isLoaded';
16
- }
17
-
18
- export function useImageLoad(imageURL: string, imgRef?: HTMLImageElement): LoadingState {
19
- const [state, setState] = useState<LoadingState>(getState(imgRef));
20
-
21
- // Update state when changing image URL or DOM reference.
22
- useEffect(() => {
23
- setState(getState(imgRef));
24
- }, [imageURL, imgRef]);
25
-
26
- // Listen to `load` and `error` event on image
27
- useEffect(() => {
28
- const img = imgRef;
29
- if (!img) return undefined;
30
- const update = (event?: Event) => setState(getState(img, event));
31
- img.addEventListener('load', update);
32
- img.addEventListener('error', update);
33
- return () => {
34
- img.removeEventListener('load', update);
35
- img.removeEventListener('error', update);
36
- };
37
- }, [imgRef, imgRef?.src]);
38
-
39
- return state;
40
- }
@@ -1,68 +0,0 @@
1
- import React, { ReactNode } from 'react';
2
-
3
- import classNames from 'classnames';
4
-
5
- import { GenericProps } from '@lumx/react/utils/type';
6
- import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
7
- import { forwardRef } from '@lumx/react/utils/react/forwardRef';
8
-
9
- /**
10
- * Defines the props of the component.
11
- */
12
- export interface ToolbarProps extends GenericProps {
13
- /** After content (placed after the label). */
14
- after?: ReactNode;
15
- /** Before content (placed before the label). */
16
- before?: ReactNode;
17
- /** Label content. */
18
- label?: ReactNode;
19
- }
20
-
21
- /**
22
- * Component display name.
23
- */
24
- const COMPONENT_NAME = 'Toolbar';
25
-
26
- /**
27
- * Component default class name and class prefix.
28
- */
29
- const CLASSNAME = getRootClassName(COMPONENT_NAME);
30
-
31
- /**
32
- * Component default props.
33
- */
34
- const DEFAULT_PROPS: Partial<ToolbarProps> = {};
35
-
36
- /**
37
- * Toolbar component.
38
- *
39
- * @param props Component props.
40
- * @param ref Component ref.
41
- * @return React element.
42
- */
43
- export const Toolbar = forwardRef<ToolbarProps, HTMLDivElement>((props, ref) => {
44
- const { after, before, className, label, ...forwardedProps } = props;
45
-
46
- return (
47
- <div
48
- ref={ref}
49
- {...forwardedProps}
50
- className={classNames(
51
- className,
52
- handleBasicClasses({
53
- hasAfter: Boolean(after),
54
- hasBefore: Boolean(before),
55
- hasLabel: Boolean(label),
56
- prefix: CLASSNAME,
57
- }),
58
- )}
59
- >
60
- {before && <div className={`${CLASSNAME}__before`}>{before}</div>}
61
- {label && <div className={`${CLASSNAME}__label`}>{label}</div>}
62
- {after && <div className={`${CLASSNAME}__after`}>{after}</div>}
63
- </div>
64
- );
65
- });
66
- Toolbar.displayName = COMPONENT_NAME;
67
- Toolbar.className = CLASSNAME;
68
- Toolbar.defaultProps = DEFAULT_PROPS;
@@ -1 +0,0 @@
1
- export * from './Toolbar';