@lumx/react 3.21.1-alpha.0 → 3.21.2-alpha.0

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 (528) hide show
  1. package/CONTRIBUTING.md +1 -5
  2. package/README.md +0 -2
  3. package/_internal/{index.js → ClSM3-wl.js} +24 -101
  4. package/_internal/ClSM3-wl.js.map +1 -0
  5. package/index.d.ts +45 -385
  6. package/index.js +4551 -5417
  7. package/index.js.map +1 -1
  8. package/package.json +14 -30
  9. package/utils/index.d.ts +10 -9
  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 -36
  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 -163
  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 -245
  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 -187
  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 -73
  120. package/src/components/icon/Icon.test.tsx +0 -127
  121. package/src/components/icon/Icon.tsx +0 -135
  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 -256
  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 -129
  158. package/src/components/link/Link.tsx +0 -108
  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 -82
  191. package/src/components/navigation/NavigationSection.test.tsx +0 -139
  192. package/src/components/navigation/NavigationSection.tsx +0 -108
  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 -96
  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 -201
  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 -165
  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/RawInputText.stories.tsx +0 -18
  315. package/src/components/text-field/RawInputText.test.tsx +0 -59
  316. package/src/components/text-field/RawInputText.tsx +0 -69
  317. package/src/components/text-field/RawInputTextarea.stories.tsx +0 -22
  318. package/src/components/text-field/RawInputTextarea.test.tsx +0 -64
  319. package/src/components/text-field/RawInputTextarea.tsx +0 -74
  320. package/src/components/text-field/TextField.stories.tsx +0 -180
  321. package/src/components/text-field/TextField.test.tsx +0 -307
  322. package/src/components/text-field/TextField.tsx +0 -323
  323. package/src/components/text-field/constants.ts +0 -16
  324. package/src/components/text-field/index.ts +0 -3
  325. package/src/components/text-field/useFitRowsToContent.ts +0 -42
  326. package/src/components/thumbnail/Thumbnail.stories.tsx +0 -448
  327. package/src/components/thumbnail/Thumbnail.test.tsx +0 -90
  328. package/src/components/thumbnail/Thumbnail.tsx +0 -248
  329. package/src/components/thumbnail/index.ts +0 -3
  330. package/src/components/thumbnail/types.ts +0 -48
  331. package/src/components/thumbnail/useFocusPointStyle.test.ts +0 -92
  332. package/src/components/thumbnail/useFocusPointStyle.tsx +0 -107
  333. package/src/components/thumbnail/useImageLoad.ts +0 -40
  334. package/src/components/toolbar/Toolbar.tsx +0 -68
  335. package/src/components/toolbar/index.ts +0 -1
  336. package/src/components/tooltip/Tooltip.stories.tsx +0 -117
  337. package/src/components/tooltip/Tooltip.test.tsx +0 -417
  338. package/src/components/tooltip/Tooltip.tsx +0 -165
  339. package/src/components/tooltip/constants.ts +0 -8
  340. package/src/components/tooltip/context.tsx +0 -17
  341. package/src/components/tooltip/index.ts +0 -1
  342. package/src/components/tooltip/useInjectTooltipRef.tsx +0 -55
  343. package/src/components/tooltip/useTooltipOpen.tsx +0 -143
  344. package/src/components/uploader/Uploader.stories.tsx +0 -109
  345. package/src/components/uploader/Uploader.test.tsx +0 -148
  346. package/src/components/uploader/Uploader.tsx +0 -177
  347. package/src/components/uploader/index.ts +0 -1
  348. package/src/components/user-block/UserBlock.stories.tsx +0 -135
  349. package/src/components/user-block/UserBlock.test.tsx +0 -108
  350. package/src/components/user-block/UserBlock.tsx +0 -193
  351. package/src/components/user-block/index.ts +0 -1
  352. package/src/constants.ts +0 -27
  353. package/src/hooks/useBooleanState.tsx +0 -13
  354. package/src/hooks/useCallbackOnEscape.ts +0 -34
  355. package/src/hooks/useChipGroupNavigation.tsx +0 -75
  356. package/src/hooks/useClickAway.tsx +0 -48
  357. package/src/hooks/useDisableBodyScroll.ts +0 -28
  358. package/src/hooks/useEventCallback.tsx +0 -17
  359. package/src/hooks/useFocus.tsx +0 -21
  360. package/src/hooks/useFocusTrap.ts +0 -93
  361. package/src/hooks/useFocusWithin.ts +0 -33
  362. package/src/hooks/useId.test.tsx +0 -23
  363. package/src/hooks/useId.ts +0 -15
  364. package/src/hooks/useImageSize.ts +0 -17
  365. package/src/hooks/useInfiniteScroll.tsx +0 -60
  366. package/src/hooks/useIntersectionObserver.tsx +0 -43
  367. package/src/hooks/useInterval.tsx +0 -31
  368. package/src/hooks/useKeyboardListNavigation.tsx +0 -204
  369. package/src/hooks/useListenFocus.tsx +0 -26
  370. package/src/hooks/useOverflowTooltipLabel.tsx +0 -32
  371. package/src/hooks/usePopper.ts +0 -12
  372. package/src/hooks/usePreviousValue.ts +0 -13
  373. package/src/hooks/useRovingTabIndex.tsx +0 -90
  374. package/src/hooks/useSizeOnWindowResize.ts +0 -30
  375. package/src/hooks/useSlideshowControls.ts +0 -246
  376. package/src/hooks/useStopPropagation.ts +0 -21
  377. package/src/hooks/useTransitionVisibility.ts +0 -48
  378. package/src/index.ts +0 -63
  379. package/src/stories/controls/color.ts +0 -7
  380. package/src/stories/controls/element.ts +0 -6
  381. package/src/stories/controls/focusPoint.ts +0 -1
  382. package/src/stories/controls/icons.ts +0 -126
  383. package/src/stories/controls/image.ts +0 -84
  384. package/src/stories/controls/selectArgType.ts +0 -8
  385. package/src/stories/controls/theme.ts +0 -3
  386. package/src/stories/controls/typography.ts +0 -5
  387. package/src/stories/controls/withUndefined.ts +0 -1
  388. package/src/stories/decorators/withChromaticForceScreenSize.tsx +0 -8
  389. package/src/stories/decorators/withCombinations.tsx +0 -132
  390. package/src/stories/decorators/withNestedProps.tsx +0 -23
  391. package/src/stories/decorators/withResizableBox.tsx +0 -21
  392. package/src/stories/decorators/withThemedBackground.tsx +0 -18
  393. package/src/stories/decorators/withValueOnChange.tsx +0 -18
  394. package/src/stories/decorators/withWrapper.tsx +0 -21
  395. package/src/stories/generated/Autocomplete/Demos.stories.tsx +0 -7
  396. package/src/stories/generated/Avatar/Demos.stories.tsx +0 -7
  397. package/src/stories/generated/Badge/Demos.stories.tsx +0 -9
  398. package/src/stories/generated/Button/Demos.stories.tsx +0 -11
  399. package/src/stories/generated/Checkbox/Demos.stories.tsx +0 -6
  400. package/src/stories/generated/Chip/Demos.stories.tsx +0 -11
  401. package/src/stories/generated/CommentBlock/Demos.stories.tsx +0 -8
  402. package/src/stories/generated/DatePicker/Demos.stories.tsx +0 -8
  403. package/src/stories/generated/Dialog/Demos.stories.tsx +0 -10
  404. package/src/stories/generated/Divider/Demos.stories.tsx +0 -6
  405. package/src/stories/generated/Dropdown/Demos.stories.tsx +0 -8
  406. package/src/stories/generated/ExpansionPanel/Demos.stories.tsx +0 -9
  407. package/src/stories/generated/Flag/Demos.stories.tsx +0 -6
  408. package/src/stories/generated/GenericBlock/Demos.stories.tsx +0 -8
  409. package/src/stories/generated/Heading/Demos.stories.tsx +0 -6
  410. package/src/stories/generated/Icon/Demos.stories.tsx +0 -8
  411. package/src/stories/generated/ImageBlock/Demos.stories.tsx +0 -9
  412. package/src/stories/generated/ImageLightbox/Demos.stories.tsx +0 -6
  413. package/src/stories/generated/Lightbox/Demos.stories.tsx +0 -6
  414. package/src/stories/generated/LinkPreview/Demos.stories.tsx +0 -7
  415. package/src/stories/generated/List/Demos.stories.tsx +0 -11
  416. package/src/stories/generated/Message/Demos.stories.tsx +0 -11
  417. package/src/stories/generated/Mosaic/Demos.stories.tsx +0 -10
  418. package/src/stories/generated/Notification/Demos.stories.tsx +0 -6
  419. package/src/stories/generated/Popover/Demos.stories.tsx +0 -11
  420. package/src/stories/generated/PopoverDialog/Demos.stories.tsx +0 -6
  421. package/src/stories/generated/PostBlock/Demos.stories.tsx +0 -6
  422. package/src/stories/generated/Progress/Demos.stories.tsx +0 -7
  423. package/src/stories/generated/ProgressTracker/Demos.stories.tsx +0 -9
  424. package/src/stories/generated/RadioButton/Demos.stories.tsx +0 -6
  425. package/src/stories/generated/Select/Demos.stories.tsx +0 -14
  426. package/src/stories/generated/SideNavigation/Demos.stories.tsx +0 -10
  427. package/src/stories/generated/Skeleton/Demos.stories.tsx +0 -9
  428. package/src/stories/generated/Slider/Demos.stories.tsx +0 -9
  429. package/src/stories/generated/Slideshow/Demos.stories.tsx +0 -8
  430. package/src/stories/generated/Switch/Demos.stories.tsx +0 -6
  431. package/src/stories/generated/Table/Demos.stories.tsx +0 -7
  432. package/src/stories/generated/Tabs/Demos.stories.tsx +0 -8
  433. package/src/stories/generated/TextField/Demos.stories.tsx +0 -20
  434. package/src/stories/generated/Thumbnail/Demos.stories.tsx +0 -12
  435. package/src/stories/generated/Toolbar/Demos.stories.tsx +0 -10
  436. package/src/stories/generated/Tooltip/Demos.stories.tsx +0 -8
  437. package/src/stories/generated/Uploader/Demos.stories.tsx +0 -8
  438. package/src/stories/generated/UserBlock/Demos.stories.tsx +0 -11
  439. package/src/stories/utils/CustomLink.tsx +0 -13
  440. package/src/stories/utils/concatPath.tsx +0 -17
  441. package/src/stories/utils/disableArgTypes.ts +0 -3
  442. package/src/stories/utils/initDemoShadowDOMPortal.ts +0 -10
  443. package/src/stories/utils/lorem.ts +0 -59
  444. package/src/stories/utils/theming.tsx +0 -166
  445. package/src/stories/utils/toFlattenProps.ts +0 -28
  446. package/src/stories/utils/withCategory.ts +0 -12
  447. package/src/testing/utils/ThemeSentinel.tsx +0 -11
  448. package/src/testing/utils/commonTestsSuiteRTL.tsx +0 -193
  449. package/src/testing/utils/index.ts +0 -1
  450. package/src/testing/utils/queries.ts +0 -19
  451. package/src/untypped-modules.d.ts +0 -9
  452. package/src/utils/ClickAwayProvider/ClickAwayProvider.stories.jsx +0 -70
  453. package/src/utils/ClickAwayProvider/ClickAwayProvider.tsx +0 -69
  454. package/src/utils/ClickAwayProvider/index.ts +0 -1
  455. package/src/utils/MaterialThemeSwitcher/MaterialThemeSwitcher.tsx +0 -54
  456. package/src/utils/MaterialThemeSwitcher/index.ts +0 -1
  457. package/src/utils/Portal/Portal.test.tsx +0 -32
  458. package/src/utils/Portal/Portal.tsx +0 -33
  459. package/src/utils/Portal/PortalProvider.stories.jsx +0 -23
  460. package/src/utils/Portal/PortalProvider.test.tsx +0 -73
  461. package/src/utils/Portal/PortalProvider.tsx +0 -24
  462. package/src/utils/Portal/index.tsx +0 -2
  463. package/src/utils/browser/DOM/findImage.tsx +0 -3
  464. package/src/utils/browser/DOM/startViewTransition.ts +0 -68
  465. package/src/utils/browser/focus/constants.ts +0 -7
  466. package/src/utils/browser/focus/getFirstAndLastFocusable.test.ts +0 -134
  467. package/src/utils/browser/focus/getFirstAndLastFocusable.ts +0 -21
  468. package/src/utils/browser/focus/getFocusableElements.test.ts +0 -151
  469. package/src/utils/browser/focus/getFocusableElements.ts +0 -7
  470. package/src/utils/browser/isFocusVisible.ts +0 -9
  471. package/src/utils/browser/isHoverNotSupported.test.js +0 -24
  472. package/src/utils/browser/isHoverNotSupported.ts +0 -2
  473. package/src/utils/browser/isReducedMotion.ts +0 -6
  474. package/src/utils/date/addMonthResetDay.test.ts +0 -13
  475. package/src/utils/date/addMonthResetDay.ts +0 -9
  476. package/src/utils/date/formatDayNumber.test.ts +0 -12
  477. package/src/utils/date/formatDayNumber.ts +0 -5
  478. package/src/utils/date/getFirstDayOfWeek.test.ts +0 -20
  479. package/src/utils/date/getFirstDayOfWeek.ts +0 -59
  480. package/src/utils/date/getMonthCalendar.test.ts +0 -127
  481. package/src/utils/date/getMonthCalendar.ts +0 -69
  482. package/src/utils/date/getWeekDays.test.ts +0 -48
  483. package/src/utils/date/getWeekDays.ts +0 -34
  484. package/src/utils/date/getYearDisplayName.test.ts +0 -20
  485. package/src/utils/date/getYearDisplayName.ts +0 -12
  486. package/src/utils/date/isDateValid.test.ts +0 -15
  487. package/src/utils/date/isDateValid.ts +0 -4
  488. package/src/utils/date/isSameDay.test.ts +0 -37
  489. package/src/utils/date/isSameDay.ts +0 -11
  490. package/src/utils/disabled/DisabledStateContext.tsx +0 -29
  491. package/src/utils/disabled/DisabledStateProvider.stories.tsx +0 -94
  492. package/src/utils/disabled/index.ts +0 -2
  493. package/src/utils/disabled/useDisableStateProps.test.tsx +0 -74
  494. package/src/utils/disabled/useDisableStateProps.tsx +0 -37
  495. package/src/utils/function/makeListenerTowerContext.ts +0 -32
  496. package/src/utils/index.ts +0 -7
  497. package/src/utils/locale/getCurrentLocale.ts +0 -4
  498. package/src/utils/locale/parseLocale.test.ts +0 -17
  499. package/src/utils/locale/parseLocale.ts +0 -23
  500. package/src/utils/locale/types.ts +0 -8
  501. package/src/utils/number/clamp.ts +0 -17
  502. package/src/utils/object/isEqual.test.ts +0 -25
  503. package/src/utils/object/isEqual.ts +0 -11
  504. package/src/utils/partitionMulti.test.ts +0 -27
  505. package/src/utils/partitionMulti.ts +0 -29
  506. package/src/utils/react/OnBeforeUnmount.tsx +0 -20
  507. package/src/utils/react/RawClickable.test.tsx +0 -153
  508. package/src/utils/react/RawClickable.tsx +0 -65
  509. package/src/utils/react/flattenChildren.ts +0 -32
  510. package/src/utils/react/forwardRef.ts +0 -11
  511. package/src/utils/react/forwardRefPolymorphic.ts +0 -9
  512. package/src/utils/react/mergeRefs.ts +0 -33
  513. package/src/utils/react/renderLink.tsx +0 -17
  514. package/src/utils/react/skipRender.tsx +0 -18
  515. package/src/utils/react/unref.ts +0 -7
  516. package/src/utils/react/wrapChildrenIconWithSpaces.test.tsx +0 -37
  517. package/src/utils/react/wrapChildrenIconWithSpaces.tsx +0 -22
  518. package/src/utils/theme/ThemeContext.ts +0 -16
  519. package/src/utils/theme/invertTheme.ts +0 -4
  520. package/src/utils/type/Comp.ts +0 -14
  521. package/src/utils/type/ComponentRef.ts +0 -16
  522. package/src/utils/type/HasAriaDisabled.ts +0 -6
  523. package/src/utils/type/HasPolymorphicAs.ts +0 -8
  524. package/src/utils/type/HasRequiredLinkHref.ts +0 -1
  525. package/src/utils/type/MaybeElementOrRef.ts +0 -6
  526. package/src/utils/type/index.ts +0 -9
  527. package/src/utils/type/isComponent.ts +0 -33
  528. package/src/utils/type/isComponentType.ts +0 -9
@@ -1,166 +0,0 @@
1
- import React from 'react';
2
- import { Predicate } from '@lumx/react/utils/type';
3
- import { FlexBox } from '@lumx/react';
4
-
5
- type Property = string | { value: string };
6
- interface PropertyTree {
7
- [key: string]: PropertyTree | Property;
8
- }
9
- type Entry = [key: string, value: string];
10
- type Variables = Record<string, string>;
11
-
12
- function asValue(prop?: PropertyTree | Property): string | undefined {
13
- if (typeof prop === 'string') {
14
- return prop;
15
- }
16
- if (typeof prop === 'object' && 'value' in prop) {
17
- return prop.value as string;
18
- }
19
- return undefined;
20
- }
21
-
22
- /** Convert property tree into a list of args entries ([key, value]) */
23
- function* toArgEntries(props: PropertyTree | Property, parent = ''): Iterable<Entry> {
24
- const value = asValue(props);
25
- if (value) {
26
- yield [parent, value];
27
- } else {
28
- for (const [key, prop] of Object.entries(props)) {
29
- const newParent = parent ? `${parent}-${key}` : key;
30
- yield* toArgEntries(prop, newParent);
31
- }
32
- }
33
- }
34
- function* parseVariableEntries(cssString: string, strict = false) {
35
- for (const line of cssString.split(/(?<=;)/)) {
36
- if (!line.trim()) continue;
37
- const match = line.match(/^\s*(--lumx[^:]+)\s*:\s*([^;]+);/m);
38
- if (!match) {
39
- if (strict) throw new Error(`Could not parse \`${line}\``);
40
- else continue;
41
- }
42
- const [, variableName, variableValue] = match;
43
- yield [variableName, variableValue];
44
- }
45
- }
46
-
47
- function VariableEditor({
48
- variable: [key, value],
49
- setVariable,
50
- defaultStyle,
51
- }: {
52
- variable: Entry;
53
- setVariable: (newVariable: Entry) => void;
54
- defaultStyle: Variables;
55
- }) {
56
- const onChange = React.useCallback<React.ChangeEventHandler<HTMLInputElement>>(
57
- (evt) => {
58
- setVariable([evt.target.name, evt.target.value]);
59
- },
60
- [setVariable],
61
- );
62
-
63
- return (
64
- <FlexBox as="label" orientation="horizontal" hAlign="center" style={{ whiteSpace: 'nowrap' }}>
65
- <span style={{ flexShrink: 0 }}>{key}</span>:
66
- <input
67
- name={key}
68
- onChange={onChange}
69
- style={{ border: 0, padding: 8, fieldSizing: 'content', display: 'inline' } as any}
70
- value={defaultStyle[key] === value ? '' : value}
71
- placeholder={value}
72
- />
73
- ;
74
- </FlexBox>
75
- );
76
- }
77
-
78
- function VariablesEditor({
79
- style,
80
- defaultStyle,
81
- setStyle,
82
- }: {
83
- style: Variables;
84
- defaultStyle: Variables;
85
- setStyle: (fn: (newStyle: Variables) => Variables) => void;
86
- }) {
87
- const setVariable = React.useCallback(
88
- ([key, value]: Entry) => {
89
- setStyle((prevStyle) => ({ ...prevStyle, [key]: value }));
90
- },
91
- [setStyle],
92
- );
93
- return (
94
- <details style={{ fontFamily: 'monospace' }} className="lumx-spacing-margin-vertical-huge">
95
- <summary className="lumx-typography-subtitle2">Edit variables</summary>
96
- {Object.entries(style).map((variable) => (
97
- <VariableEditor
98
- key={variable[0]}
99
- defaultStyle={defaultStyle}
100
- variable={variable}
101
- setVariable={setVariable}
102
- />
103
- ))}
104
- </details>
105
- );
106
- }
107
-
108
- const FILTER_PROPS = ['theme', 'emphasis', 'size'];
109
-
110
- export function withTheming<P extends PropertyTree>({
111
- properties,
112
- values,
113
- }: {
114
- properties?: P;
115
- values?: string | Partial<P>;
116
- }) {
117
- const initialStyle = values
118
- ? Object.fromEntries(
119
- typeof values === 'string'
120
- ? parseVariableEntries(values)
121
- : toArgEntries(values as PropertyTree, '--lumx'),
122
- )
123
- : [];
124
- const defaultStyle = Object.fromEntries(properties ? Array.from(toArgEntries(properties, '--lumx')) : []);
125
-
126
- const varNames = new Set(Object.keys(initialStyle).concat(Object.keys(defaultStyle)));
127
-
128
- function filteredStyles(args: any) {
129
- // Create predicate
130
- const filterArgs = Object.entries(args)
131
- .map(([argName, argValue]) => {
132
- if (typeof argValue === 'string' && FILTER_PROPS.includes(argName)) {
133
- return (varName: string) =>
134
- // Has the given arg with value
135
- varName.match(new RegExp(`${argName}-${argValue}`)) ||
136
- (argName === 'emphasis' &&
137
- (argValue === 'medium' || argValue === 'low') &&
138
- varName.match(/emphasis-selected/)) ||
139
- // Or does not have the arg at all
140
- !varName.match(new RegExp(`${argName}-\\w+`));
141
- }
142
- return false;
143
- })
144
- .filter(Boolean) as Array<Predicate<string>>;
145
- const styles = Object.fromEntries(
146
- Array.from(varNames.values())
147
- .map((varName) => {
148
- if (!filterArgs.every((filter) => filter(varName))) return null as any;
149
- return [varName, initialStyle[varName] || defaultStyle[varName]];
150
- })
151
- .filter(Boolean),
152
- );
153
- return () => styles;
154
- }
155
-
156
- return (Story: any, ctx: any) => {
157
- const [style, setStyle] = React.useState<Variables>(filteredStyles(ctx.args));
158
-
159
- return (
160
- <>
161
- <Story args={{ ...ctx.args, style: { ...ctx.args.style, ...style } }} />
162
- <VariablesEditor style={style} defaultStyle={defaultStyle} setStyle={setStyle} />
163
- </>
164
- );
165
- };
166
- }
@@ -1,28 +0,0 @@
1
- import castArray from 'lodash/castArray';
2
- import { concatPath } from './concatPath';
3
-
4
- type Props = Record<string, any>;
5
- type OneOrMoreProps = Props | Array<Props>;
6
-
7
- /**
8
- * Build a flat props object from the given nested props
9
- *
10
- * @example toFlattenProps({ foo: { bar: 4 } }) // => { 'foo.bar': 4 }
11
- * @example toFlattenProps({ foo: [{ bar: 4 }, { bar: 5 }] }) // => { 'foo[0].bar': 4, 'foo[0].bar': 5 }
12
- */
13
- export function toFlattenProps(props: { [prefix: string]: OneOrMoreProps }): Props {
14
- const out: Props = {};
15
- for (const [prefix, oneOrMoreProps] of Object.entries(props)) {
16
- const propsArray = castArray(oneOrMoreProps);
17
-
18
- for (let i = 0; i < propsArray.length; i += 1) {
19
- const path = Array.isArray(oneOrMoreProps) ? concatPath(prefix, i) : prefix;
20
- const subProps = propsArray[i];
21
-
22
- for (const [key, value] of Object.entries(subProps)) {
23
- out[concatPath(path, key)] = value;
24
- }
25
- }
26
- }
27
- return out;
28
- }
@@ -1,12 +0,0 @@
1
- import setWith from 'lodash/setWith';
2
-
3
- /**
4
- * Add table.category to the provided argTypes
5
- */
6
- export function withCategory(category: string, argTypes: Record<string, any>) {
7
- const out: typeof argTypes = {};
8
- for (const [key, value] of Object.entries(argTypes)) {
9
- out[key] = setWith({ ...value }, 'table.category', category);
10
- }
11
- return out;
12
- }
@@ -1,11 +0,0 @@
1
- import React from 'react';
2
- import { useTheme } from '@lumx/react/utils/theme/ThemeContext';
3
-
4
- const TEST_ID = 'theme-sentinel';
5
-
6
- /** Test component used as sentinel to detect the value of the theme context */
7
- export function ThemeSentinel() {
8
- const theme = useTheme();
9
- return <div data-testid={TEST_ID} className={`--theme-${theme}`} />;
10
- }
11
- ThemeSentinel.testId = TEST_ID;
@@ -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,9 +0,0 @@
1
- // Extend CSSStyleDeclaration to support viewTransitionName for view transitions
2
- interface CSSStyleDeclaration {
3
- viewTransitionName: string | null;
4
- }
5
- /**
6
- * List untypped modules here to declare them as explicit any.
7
- */
8
- declare module 'test-data-bot';
9
- 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
- });