@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,193 +0,0 @@
1
- import isEmpty from 'lodash/isEmpty';
2
-
3
- import { GenericProps } from '@lumx/react/utils/type';
4
- import { queryByClassName } from '@lumx/react/testing/utils/queries';
5
- import React from 'react';
6
- import { Theme } from '@lumx/react';
7
- import { RenderOptions } from '@testing-library/react';
8
- import { ThemeProvider } from '@lumx/react/utils/theme/ThemeContext';
9
- import castArray from 'lodash/castArray';
10
- import { invertTheme } from '@lumx/react/utils/theme/invertTheme';
11
-
12
- interface CommonSetup {
13
- props: GenericProps;
14
- }
15
-
16
- type AffectConfig<E> = { element: E; classModifier?: 'color' | 'theme'; inverted?: boolean };
17
- type Not<E> = { not: E };
18
-
19
- interface Options<S extends CommonSetup> {
20
- baseClassName: string;
21
- forwardClassName?: keyof S;
22
- forwardAttributes?: keyof S;
23
- forwardRef?: keyof S;
24
- applyTheme?: {
25
- /** Element(s) to which we apply the theme class */
26
- affects: Array<AffectConfig<keyof S> | Not<AffectConfig<keyof S>>>;
27
- /** Apply theme via theme prop */
28
- viaProp: boolean;
29
- /** Apply theme via theme context */
30
- viaContext: boolean;
31
- /** Apply a default theme if no prop or context was provided */
32
- defaultTheme?: Theme;
33
- /** Default props to apply when testing theme */
34
- defaultProps?: S['props'];
35
- };
36
- }
37
-
38
- export type RenderWrapper = RenderOptions['wrapper'];
39
- export type SetupRenderOptions = { wrapper?: RenderWrapper };
40
- export type SetupFunction<S extends CommonSetup> = (
41
- props?: GenericProps,
42
- options?: SetupRenderOptions,
43
- ) => S | Promise<S>;
44
-
45
- /**
46
- * Common tests on components
47
- * - Check base class name and class name forwarding
48
- * - Check props forwarding
49
- */
50
- export function commonTestsSuiteRTL<S extends CommonSetup>(setup: SetupFunction<S>, options: Options<S>): void {
51
- if (isEmpty(options)) {
52
- return;
53
- }
54
- const { baseClassName, forwardClassName, forwardAttributes, forwardRef, applyTheme } = options;
55
- describe('Common tests suite', () => {
56
- it('should render with base class name', async () => {
57
- await setup();
58
- expect(queryByClassName(document.body, baseClassName)).toBeInTheDocument();
59
- });
60
-
61
- if (forwardClassName) {
62
- it('should forward any CSS class', async () => {
63
- const modifiedProps = {
64
- className: 'component component--is-tested',
65
- };
66
- const wrappers = await setup(modifiedProps);
67
- expect(wrappers[forwardClassName]).toHaveClass(modifiedProps.className);
68
- });
69
- }
70
-
71
- if (forwardAttributes) {
72
- it('should forward any other prop', async () => {
73
- const modifiedProps = {
74
- winter: 'is coming',
75
- };
76
- const wrappers = await setup(modifiedProps);
77
- expect(wrappers[forwardAttributes]).toHaveAttribute('winter', modifiedProps.winter);
78
- });
79
- }
80
-
81
- if (forwardRef) {
82
- it('should forward ref', async () => {
83
- const ref = React.createRef();
84
- const wrappers = await setup({ ref });
85
- expect(ref.current).toBe(wrappers[forwardRef]);
86
- });
87
- }
88
-
89
- if (applyTheme) {
90
- describe('theme', () => {
91
- const { affects, defaultTheme, viaProp, viaContext } = applyTheme;
92
- const testElements = affects.map((configOrNot) => {
93
- let shouldHaveModifier: boolean = true;
94
- let config: AffectConfig<any>;
95
- if ('not' in configOrNot) {
96
- shouldHaveModifier = false;
97
- config = configOrNot.not;
98
- } else config = configOrNot;
99
-
100
- const {
101
- element,
102
- classModifier = 'theme',
103
- inverted = false,
104
- }: AffectConfig<any> = typeof config === 'object' ? config : { element: config };
105
- return {
106
- element,
107
- getExpectedClassModifier: (theme: Theme) =>
108
- `--${classModifier}-${inverted ? invertTheme(theme) : theme}`,
109
- shouldHaveModifier,
110
- apply: shouldHaveModifier ? 'apply' : 'not apply',
111
- };
112
- });
113
-
114
- const expectTheme = (
115
- wrappers: any,
116
- { element, getExpectedClassModifier, shouldHaveModifier }: any,
117
- theme: Theme,
118
- override: { shouldHaveModifier?: boolean } = {},
119
- ) => {
120
- for (const wrapper of castArray(wrappers[element])) {
121
- let expected: any = expect(wrapper.className);
122
- if (override.shouldHaveModifier === false || !shouldHaveModifier) {
123
- expected = expected.not;
124
- }
125
- expected.toContain(getExpectedClassModifier(theme));
126
- }
127
- };
128
-
129
- if (defaultTheme) {
130
- it.each(testElements)(
131
- `should $apply default theme (${defaultTheme}) to \`$element\``,
132
- async (affectedElement) => {
133
- const wrappers = await setup(applyTheme.defaultProps);
134
- expectTheme(wrappers, affectedElement, defaultTheme);
135
- },
136
- );
137
- }
138
-
139
- // Only the elements that are affected by theme
140
- const affectedElements = testElements.filter((e) => e.shouldHaveModifier);
141
- if (!defaultTheme && affectedElements.length) {
142
- it.each(affectedElements)(
143
- `should not apply default theme (${defaultTheme}) to \`$element\``,
144
- async (affectedElement) => {
145
- const wrappers = await setup(applyTheme.defaultProps);
146
- expectTheme(wrappers, affectedElement, Theme.light, { shouldHaveModifier: false });
147
- expectTheme(wrappers, affectedElement, Theme.dark, { shouldHaveModifier: false });
148
- },
149
- );
150
- }
151
-
152
- if (viaProp) {
153
- const theme = invertTheme(defaultTheme || Theme.light);
154
- it.each(testElements)(
155
- `should $apply prop theme=${theme} to \`$element\``,
156
- async (affectedElement) => {
157
- const wrappers = await setup({ ...applyTheme.defaultProps, theme });
158
- expectTheme(wrappers, affectedElement, theme);
159
- },
160
- );
161
- }
162
-
163
- const contextTheme = invertTheme(defaultTheme || Theme.light);
164
- it.each(testElements)(
165
- `should $apply context theme=${contextTheme} to \`$element\``,
166
- async (affectedElement) => {
167
- const Wrapper = ({ children }: any) => (
168
- <ThemeProvider value={contextTheme}>{children}</ThemeProvider>
169
- );
170
- const wrappers = await setup({}, { wrapper: Wrapper });
171
- expectTheme(wrappers, affectedElement, contextTheme, {
172
- shouldHaveModifier: !viaContext ? false : undefined,
173
- });
174
- },
175
- );
176
-
177
- if (viaProp && viaContext) {
178
- const propTheme = invertTheme(contextTheme);
179
- it.each(testElements)(
180
- `should $apply prop theme=${propTheme} to \`$element\` overriding the context theme=${contextTheme}`,
181
- async (affectedElement) => {
182
- const Wrapper = ({ children }: any) => (
183
- <ThemeProvider value={contextTheme}>{children}</ThemeProvider>
184
- );
185
- const wrappers = await setup({ theme: propTheme }, { wrapper: Wrapper });
186
- expectTheme(wrappers, affectedElement, propTheme);
187
- },
188
- );
189
- }
190
- });
191
- }
192
- });
193
- }
@@ -1 +0,0 @@
1
- export * from './commonTestsSuiteRTL';
@@ -1,19 +0,0 @@
1
- import { buildQueries } from '@testing-library/dom';
2
-
3
- export const queryAllByClassName = (container: HTMLElement, className: string) =>
4
- Array.from(container.getElementsByClassName(className) as HTMLCollectionOf<HTMLElement>);
5
-
6
- export const [queryByClassName, getAllByClassName, getByClassName, findAllByClassName, findByClassName] = buildQueries(
7
- queryAllByClassName,
8
- (_, className) => `Multiple \`.${className}\` found`,
9
- (_, className) => `No \`.${className}\` found`,
10
- );
11
-
12
- export const queryAllByTagName = (container: HTMLElement, tagName: string) =>
13
- Array.from(container.getElementsByTagName(tagName) as HTMLCollectionOf<HTMLElement>);
14
-
15
- export const [queryByTagName, getAllByTagName, getByTagName, findAllByTagName, findByTagName] = buildQueries(
16
- queryAllByTagName,
17
- (_, tagName) => `Multiple \`${tagName}\` found`,
18
- (_, tagName) => `No \`${tagName}\` found`,
19
- );
@@ -1,5 +0,0 @@
1
- /**
2
- * List untypped modules here to declare them as explicit any.
3
- */
4
- declare module 'test-data-bot';
5
- declare module '*.jpg';
@@ -1,70 +0,0 @@
1
- /* eslint-disable react-hooks/rules-of-hooks */
2
- /* eslint-disable @typescript-eslint/no-use-before-define */
3
- import React, { useCallback, useRef, useState } from 'react';
4
- import { Button } from '@lumx/react';
5
- import { ClickAwayProvider } from '@lumx/react/utils/ClickAwayProvider';
6
- import { initDemoShadowDOMPortal } from '@lumx/react/stories/utils/initDemoShadowDOMPortal';
7
- import { PortalProvider, Portal } from '@lumx/react/utils/Portal';
8
-
9
- export default {
10
- title: 'LumX components/ClickAwayProvider',
11
- parameters: {
12
- // Disables Chromatic snapshot (not relevant for this story).
13
- chromatic: { disable: true },
14
- },
15
- };
16
-
17
- // eslint-disable-next-line react/display-name
18
- const Card = React.forwardRef(({ top, children, close }, ref) => (
19
- <ClickAwayProvider callback={close} childrenRefs={useRef([ref])}>
20
- <Portal>
21
- <div
22
- className="lumx-spacing-padding"
23
- ref={ref}
24
- style={{ position: 'absolute', top, border: '1px solid red' }}
25
- >
26
- {children}
27
- </div>
28
- </Portal>
29
- </ClickAwayProvider>
30
- ));
31
-
32
- const ButtonWithCard = ({ level, parentRef }) => {
33
- const ref3 = useRef();
34
- const [isOpen3, setOpen3] = useState(false);
35
- const open3 = useCallback(() => setOpen3(true), []);
36
- const close3 = useCallback(() => setOpen3(false), []);
37
- const nextLevel = level + 1;
38
-
39
- return (
40
- <>
41
- Level {level} - <Button onClick={open3}>Open level {nextLevel}</Button>
42
- {isOpen3 && (
43
- <Card ref={ref3} close={close3} top={parentRef?.current?.getBoundingClientRect().bottom || '130px'}>
44
- {nextLevel === 4 ? `Level ${nextLevel}` : <ButtonWithCard level={nextLevel} parentRef={ref3} />}
45
- </Card>
46
- )}
47
- </>
48
- );
49
- };
50
-
51
- /**
52
- * This story showcases the detection of click away inside a nested React portal tree (i.e. not nested in the DOM)
53
- */
54
- export const NestedClickAway = () => (
55
- <>
56
- <p>Clicking inside a level should close all child levels but not parent levels</p>
57
- <ButtonWithCard level={0} />
58
- </>
59
- );
60
-
61
- /**
62
- * Testing close on click away for a popover rendered in a shadow DOM
63
- */
64
- export const InShadowDOM = () => {
65
- return (
66
- <PortalProvider value={initDemoShadowDOMPortal}>
67
- <NestedClickAway />
68
- </PortalProvider>
69
- );
70
- };
@@ -1,69 +0,0 @@
1
- import React, { createContext, RefObject, useContext, useEffect, useMemo, useRef } from 'react';
2
- import { ClickAwayParameters, useClickAway } from '@lumx/react/hooks/useClickAway';
3
-
4
- interface ContextValue {
5
- childrenRefs: Array<RefObject<HTMLElement>>;
6
- addRefs(...newChildrenRefs: Array<RefObject<HTMLElement>>): void;
7
- }
8
-
9
- const ClickAwayAncestorContext = createContext<ContextValue | null>(null);
10
-
11
- interface ClickAwayProviderProps extends ClickAwayParameters {
12
- /**
13
- * (Optional) Element that should be considered as part of the parent
14
- */
15
- parentRef?: RefObject<HTMLElement>;
16
- /**
17
- * Children
18
- */
19
- children?: React.ReactNode;
20
- }
21
-
22
- /**
23
- * Component combining the `useClickAway` hook with a React context to hook into the React component tree and make sure
24
- * we take into account both the DOM tree and the React tree to detect click away.
25
- *
26
- * @return the react component.
27
- */
28
- export const ClickAwayProvider: React.FC<ClickAwayProviderProps> = ({
29
- children,
30
- callback,
31
- childrenRefs,
32
- parentRef,
33
- }) => {
34
- const parentContext = useContext(ClickAwayAncestorContext);
35
- const currentContext = useMemo(() => {
36
- const context: ContextValue = {
37
- childrenRefs: [],
38
- /**
39
- * Add element refs to the current context and propagate to the parent context.
40
- */
41
- addRefs(...newChildrenRefs) {
42
- // Add element refs that should be considered as inside the click away context.
43
- context.childrenRefs.push(...newChildrenRefs);
44
-
45
- if (parentContext) {
46
- // Also add then to the parent context
47
- parentContext.addRefs(...newChildrenRefs);
48
- if (parentRef) {
49
- // The parent element is also considered as inside the parent click away context but not inside the current context
50
- parentContext.addRefs(parentRef);
51
- }
52
- }
53
- },
54
- };
55
- return context;
56
- }, [parentContext, parentRef]);
57
-
58
- useEffect(() => {
59
- const { current: currentRefs } = childrenRefs;
60
- if (!currentRefs) {
61
- return;
62
- }
63
- currentContext.addRefs(...currentRefs);
64
- }, [currentContext, childrenRefs]);
65
-
66
- useClickAway({ callback, childrenRefs: useRef(currentContext.childrenRefs) });
67
- return <ClickAwayAncestorContext.Provider value={currentContext}>{children}</ClickAwayAncestorContext.Provider>;
68
- };
69
- ClickAwayProvider.displayName = 'ClickAwayProvider';
@@ -1 +0,0 @@
1
- export * from './ClickAwayProvider';
@@ -1,54 +0,0 @@
1
- import React, { useCallback, useState } from 'react';
2
- import { Switch } from '@lumx/react/components/switch';
3
- import { Alignment } from '@lumx/react';
4
-
5
- // Global state used to
6
- const globalState = {
7
- isEnabled: false,
8
- styleSheet: null as any,
9
- };
10
-
11
- /** Toggle apply the material CSS override. */
12
- export async function toggleMaterialTheme(wasEnabled: boolean) {
13
- globalState.isEnabled = !wasEnabled;
14
-
15
- // Inject the material theme CSS file.
16
- if (!globalState.styleSheet) {
17
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
18
- // @ts-ignore
19
- const cssCode = await import('!!raw-loader!@lumx/core/css/material.css');
20
-
21
- // Inject CSS override in a <style> node in <head>
22
- const style = document.createElement('style');
23
- style.textContent = cssCode.default;
24
- document.head.appendChild(style);
25
-
26
- globalState.styleSheet = style.sheet;
27
- }
28
- // Disable/Enable stylesheet
29
- globalState.styleSheet.disabled = !globalState.isEnabled;
30
- }
31
-
32
- export const MaterialThemeSwitcher: React.FC<any> = ({ theme }) => {
33
- const [isEnabled, setEnabled] = useState(globalState.isEnabled);
34
- const toggleTheme = useCallback(
35
- () =>
36
- setEnabled((wasEnabled) => {
37
- toggleMaterialTheme(wasEnabled);
38
- return !wasEnabled;
39
- }),
40
- [],
41
- );
42
-
43
- return (
44
- <Switch
45
- className="material-theme-switcher"
46
- isChecked={isEnabled}
47
- onChange={toggleTheme}
48
- position={Alignment.right}
49
- theme={theme}
50
- >
51
- Material theme
52
- </Switch>
53
- );
54
- };
@@ -1 +0,0 @@
1
- export * from './MaterialThemeSwitcher';
@@ -1,32 +0,0 @@
1
- import React from 'react';
2
- import { render, screen } from '@testing-library/react';
3
- import { Portal } from './Portal';
4
-
5
- const TEST_ID = 'portal-child';
6
- const PortalChild = () => <div data-testid={TEST_ID}>Hello from portal</div>;
7
-
8
- describe(Portal, () => {
9
- it('should render portal content in document.body by default', () => {
10
- render(
11
- <Portal>
12
- <PortalChild />
13
- </Portal>,
14
- );
15
-
16
- const child = screen.getByTestId(TEST_ID);
17
- expect(child.parentElement).toBe(document.body);
18
- });
19
-
20
- it('should render inline when enabled is false', () => {
21
- const { container } = render(
22
- <div id="wrapper">
23
- <Portal enabled={false}>
24
- <PortalChild />
25
- </Portal>
26
- </div>,
27
- );
28
-
29
- const child = screen.getByTestId(TEST_ID);
30
- expect(child.parentElement).toBe(container.querySelector('#wrapper'));
31
- });
32
- });
@@ -1,33 +0,0 @@
1
- import React from 'react';
2
- import { createPortal } from 'react-dom';
3
- import { PortalContext } from './PortalProvider';
4
-
5
- export interface PortalProps {
6
- enabled?: boolean;
7
- children: React.ReactNode;
8
- }
9
-
10
- /**
11
- * Render children in a portal outside the current DOM position
12
- * (defaults to `document.body` but can be customized with the PortalContextProvider)
13
- */
14
- export const Portal: React.FC<PortalProps> = ({ children, enabled = true }) => {
15
- const init = React.useContext(PortalContext);
16
- const context = React.useMemo(
17
- () => {
18
- return enabled ? init() : null;
19
- },
20
- // Only update on 'enabled'
21
- // eslint-disable-next-line react-hooks/exhaustive-deps
22
- [enabled],
23
- );
24
-
25
- React.useLayoutEffect(() => {
26
- return context?.teardown;
27
- }, [context?.teardown, enabled]);
28
-
29
- if (!context?.container) {
30
- return <>{children}</>;
31
- }
32
- return createPortal(children, context.container);
33
- };
@@ -1,23 +0,0 @@
1
- import React from 'react';
2
- import { Button } from '@lumx/react';
3
- import { initDemoShadowDOMPortal } from '@lumx/react/stories/utils/initDemoShadowDOMPortal';
4
- import { PortalProvider } from './PortalProvider';
5
- import { Portal } from './Portal';
6
-
7
- export default {
8
- title: 'LumX components/PortalProvider',
9
- component: PortalProvider,
10
- args: { enabled: true },
11
- parameters: { chromatic: { disable: true } },
12
- };
13
-
14
- /**
15
- * Demonstrate how to customize portals to render into a custom shadow root
16
- */
17
- export const RenderInShadowDOM = ({ enabled }) => (
18
- <PortalProvider value={initDemoShadowDOMPortal}>
19
- <Portal enabled={enabled}>
20
- <Button>My button {!enabled && 'not'} in a shadow DOM portal</Button>
21
- </Portal>
22
- </PortalProvider>
23
- );
@@ -1,73 +0,0 @@
1
- import React from 'react';
2
- import { render, screen } from '@testing-library/react';
3
- import { PortalInit, PortalProvider } from './PortalProvider';
4
- import { Portal } from './Portal';
5
-
6
- const TEST_ID = 'portal-child';
7
- const PORTAL_CONTAINER_ID = 'portal-container';
8
-
9
- const PortalChild = () => <div data-testid={TEST_ID}>Hello from portal</div>;
10
-
11
- describe('PortalProvider', () => {
12
- it('should render portal content in the provided container', () => {
13
- const portalContainer = document.createElement('div');
14
- portalContainer.id = PORTAL_CONTAINER_ID;
15
- document.body.appendChild(portalContainer);
16
-
17
- const getContainer: PortalInit = () => ({ container: portalContainer });
18
-
19
- render(
20
- <PortalProvider value={getContainer}>
21
- <Portal>
22
- <PortalChild />
23
- </Portal>
24
- </PortalProvider>,
25
- );
26
-
27
- const child = screen.getByTestId(TEST_ID);
28
- expect(child.parentElement).toBe(portalContainer);
29
- portalContainer.remove();
30
- });
31
-
32
- it('should call teardown on unmount', () => {
33
- const teardownMock = jest.fn();
34
- const portalContainer = document.createElement('div');
35
- portalContainer.id = PORTAL_CONTAINER_ID;
36
- document.body.appendChild(portalContainer);
37
-
38
- const getContainer: PortalInit = () => ({
39
- container: portalContainer,
40
- teardown: teardownMock,
41
- });
42
-
43
- const { unmount } = render(
44
- <PortalProvider value={getContainer}>
45
- <Portal>
46
- <PortalChild />
47
- </Portal>
48
- </PortalProvider>,
49
- );
50
-
51
- expect(teardownMock).not.toHaveBeenCalled();
52
- unmount();
53
- expect(teardownMock).toHaveBeenCalledTimes(1);
54
- portalContainer.remove();
55
- });
56
-
57
- it('should render inline if provider does not return a container', () => {
58
- const getContainer: PortalInit = () => ({}); // No container
59
-
60
- const { container } = render(
61
- <div id="wrapper">
62
- <PortalProvider value={getContainer}>
63
- <Portal>
64
- <PortalChild />
65
- </Portal>
66
- </PortalProvider>
67
- </div>,
68
- );
69
-
70
- const child = screen.getByTestId(TEST_ID);
71
- expect(child.parentElement).toBe(container.querySelector('#wrapper'));
72
- });
73
- });
@@ -1,24 +0,0 @@
1
- import React from 'react';
2
-
3
- type Container = DocumentFragment | Element;
4
-
5
- /**
6
- * Portal initializing function.
7
- * If it does not provide a container, the Portal children will render in classic React tree and not in a portal.
8
- */
9
- export type PortalInit = () => {
10
- container?: Container;
11
- teardown?: () => void;
12
- };
13
-
14
- export const PortalContext = React.createContext<PortalInit>(() => ({ container: document.body }));
15
-
16
- export interface PortalProviderProps {
17
- children?: React.ReactNode;
18
- value: PortalInit;
19
- }
20
-
21
- /**
22
- * Customize where <Portal> wrapped elements render (tooltip, popover, dialog, etc.)
23
- */
24
- export const PortalProvider: React.FC<PortalProviderProps> = PortalContext.Provider;
@@ -1,2 +0,0 @@
1
- export { type PortalInit, PortalProvider, type PortalProviderProps } from './PortalProvider';
2
- export { type PortalProps, Portal } from './Portal';
@@ -1,3 +0,0 @@
1
- /** Find image in element including the element */
2
- export const findImage = (element: HTMLElement | null): HTMLImageElement | null =>
3
- element?.matches('img') ? (element as HTMLImageElement) : element?.querySelector('img') || null;