@lumx/react 3.21.1 → 3.21.2-alpha.1

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 +42 -385
  6. package/index.js +4455 -5351
  7. package/index.js.map +1 -1
  8. package/package.json +14 -29
  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,117 +0,0 @@
1
- import { Button, Dialog, Dropdown, Placement, Tooltip } from '@lumx/react';
2
- import React, { useState } from 'react';
3
- import { getSelectArgType } from '@lumx/react/stories/controls/selectArgType';
4
- import { withChromaticForceScreenSize } from '@lumx/react/stories/decorators/withChromaticForceScreenSize';
5
- import { ARIA_LINK_MODES } from '@lumx/react/components/tooltip/constants';
6
-
7
- const placements = [Placement.TOP, Placement.BOTTOM, Placement.RIGHT, Placement.LEFT];
8
- const CLOSE_MODES = ['hide', 'unmount'];
9
-
10
- export default {
11
- title: 'LumX components/tooltip/Tooltip',
12
- component: Tooltip,
13
- args: Tooltip.defaultProps,
14
- argTypes: {
15
- placement: getSelectArgType(placements),
16
- children: { control: false },
17
- closeMode: { control: { type: 'inline-radio' }, options: CLOSE_MODES },
18
- ariaLinkMode: { control: { type: 'inline-radio' }, options: ARIA_LINK_MODES },
19
- },
20
- decorators: [
21
- // Force minimum chromatic screen size to make sure the dialog appears in view.
22
- withChromaticForceScreenSize(),
23
- ],
24
- };
25
-
26
- /** Simple tooltip on a button*/
27
- export const OnAButton = {
28
- args: {
29
- label: 'Tooltip label',
30
- children: <Button>Button</Button>,
31
- },
32
- };
33
-
34
- /** Simple tooltip on a button*/
35
- export const OnADisabledButton = {
36
- args: {
37
- ...OnAButton.args,
38
- children: <Button isDisabled>Button</Button>,
39
- },
40
- };
41
-
42
- /** Forcing the tooltip to appear */
43
- export const ForceOpen = {
44
- args: {
45
- ...OnAButton.args,
46
- forceOpen: true,
47
- },
48
- };
49
-
50
- /** Hide on close instead of unmounting */
51
- export const CloseModeHide = {
52
- args: {
53
- ...OnAButton.args,
54
- closeMode: 'hide',
55
- },
56
- };
57
-
58
- /** Display a multiline tooltip */
59
- export const MultilineTooltip = {
60
- args: {
61
- ...OnAButton.args,
62
- label: 'First sentence.\nSecond sentence.\nThird sentence.\n',
63
- },
64
- };
65
-
66
- /** Tooltip should hide when a dropdown opens */
67
- export const TooltipWithDropdown = (props: any) => {
68
- const [button, setButton] = useState<HTMLElement | null>(null);
69
- const [isOpen, setOpen] = useState(false);
70
- return (
71
- <>
72
- <br />
73
- <Tooltip label={!isOpen && 'Tooltip'} {...props} placement="top">
74
- <Button ref={setButton} onClick={() => setOpen((o) => !o)}>
75
- Anchor
76
- </Button>
77
- </Tooltip>
78
- <Dropdown anchorRef={{ current: button }} isOpen={isOpen} onClose={() => setOpen(false)}>
79
- Dropdown
80
- </Dropdown>
81
- </>
82
- );
83
- };
84
-
85
- /** Tooltip should hide when the anchor is hidden */
86
- export const HideTooltipOnHiddenAnchor = () => {
87
- const [isOpen, setOpen] = useState(false);
88
- return (
89
- <>
90
- The tooltip should show when the button is hovered but it should disappear when the dialog get in-between
91
- the mouse and the button
92
- <br />
93
- <Tooltip label="Tooltip label">
94
- <Button onClick={() => setOpen((wasOpen) => !wasOpen)}>Open dialog</Button>
95
- </Tooltip>
96
- <Dialog isOpen={isOpen} onClose={() => setOpen(false)}>
97
- Dialog
98
- </Dialog>
99
- </>
100
- );
101
- };
102
- HideTooltipOnHiddenAnchor.parameters = { chromatic: { disableSnapshot: true } };
103
-
104
- /** Test focusing a tooltip anchor programmatically */
105
- export const TestProgrammaticFocus = () => {
106
- const anchorRef = React.useRef<HTMLButtonElement>(null);
107
- return (
108
- <>
109
- <p>The tooltip should open on keyboard focus but not on programmatic focus (ex: after a click)</p>
110
- <Tooltip label="label">
111
- <Button ref={anchorRef}>button with label</Button>
112
- </Tooltip>
113
- <Button onClick={() => anchorRef.current?.focus()}>focus the button</Button>
114
- </>
115
- );
116
- };
117
- TestProgrammaticFocus.parameters = { chromatic: { disableSnapshot: true } };
@@ -1,417 +0,0 @@
1
- import { MockInstance } from 'vitest';
2
- import React from 'react';
3
-
4
- import { Button } from '@lumx/react';
5
- import { screen, render } from '@testing-library/react';
6
- import { queryAllByTagName, queryByClassName } from '@lumx/react/testing/utils/queries';
7
- import { commonTestsSuiteRTL } from '@lumx/react/testing/utils';
8
- import userEvent from '@testing-library/user-event';
9
- import { isFocusVisible } from '@lumx/react/utils/browser/isFocusVisible';
10
- import { VISUALLY_HIDDEN } from '@lumx/react/constants';
11
-
12
- import { Tooltip, TooltipProps } from './Tooltip';
13
-
14
- const CLASSNAME = Tooltip.className as string;
15
-
16
- vi.mock('@lumx/react/utils/browser/isFocusVisible');
17
- vi.mock('@lumx/react/hooks/useId', () => ({ useId: () => ':r1:' }));
18
- // Skip delays
19
- vi.mock('@lumx/react/constants', async (importActual) => {
20
- const actual = (await importActual()) as Record<string, any>;
21
- return {
22
- ...actual,
23
- TOOLTIP_HOVER_DELAY: { open: 0, close: 0 },
24
- VISUALLY_HIDDEN: actual.VISUALLY_HIDDEN,
25
- CSS_PREFIX: actual.CSS_PREFIX,
26
- };
27
- });
28
-
29
- /**
30
- * Mounts the component and returns common DOM elements / data needed in multiple tests further down.
31
- */
32
- const setup = async (propsOverride: Partial<TooltipProps> = {}) => {
33
- const props: any = { forceOpen: true, label: 'Tooltip label', children: 'Anchor', ...propsOverride };
34
- const result = render(<Tooltip {...props} />);
35
- const tooltip = screen.queryByRole('tooltip');
36
- const anchorWrapper = queryByClassName(document.body, 'lumx-tooltip-anchor-wrapper');
37
- return { props, tooltip, anchorWrapper, result };
38
- };
39
-
40
- describe(`<${Tooltip.displayName}>`, () => {
41
- describe('render', () => {
42
- it('should not render with empty label', async () => {
43
- const { tooltip, anchorWrapper } = await setup({
44
- label: undefined,
45
- forceOpen: true,
46
- });
47
- expect(tooltip).not.toBeInTheDocument();
48
- expect(anchorWrapper).not.toBeInTheDocument();
49
- });
50
-
51
- it('should wrap unknown children', async () => {
52
- const { tooltip, anchorWrapper } = await setup({
53
- label: 'Tooltip label',
54
- children: 'Anchor',
55
- forceOpen: true,
56
- });
57
- expect(tooltip).toBeInTheDocument();
58
- // Default placement
59
- expect(tooltip).toHaveAttribute('data-popper-placement', 'bottom');
60
- expect(anchorWrapper).toBeInTheDocument();
61
- });
62
-
63
- it('should render with custom placement', async () => {
64
- const { tooltip } = await setup({
65
- label: 'Tooltip label',
66
- children: 'Anchor',
67
- forceOpen: true,
68
- placement: 'top',
69
- });
70
- // Custom placement
71
- expect(tooltip).toHaveAttribute('data-popper-placement', 'top');
72
- });
73
-
74
- it('should not wrap Button', async () => {
75
- const { tooltip, anchorWrapper } = await setup({
76
- label: 'Tooltip label',
77
- children: <Button>Anchor</Button>,
78
- forceOpen: true,
79
- });
80
- expect(tooltip).toBeInTheDocument();
81
- expect(anchorWrapper).not.toBeInTheDocument();
82
- const button = screen.queryByRole('button', { name: 'Anchor' });
83
- expect(button).toHaveAttribute('aria-describedby', tooltip?.id);
84
- });
85
-
86
- it('should wrap disabled Button', async () => {
87
- const { tooltip, anchorWrapper } = await setup({
88
- label: 'Tooltip label',
89
- children: <Button isDisabled>Anchor</Button>,
90
- forceOpen: true,
91
- });
92
- expect(tooltip).toBeInTheDocument();
93
- expect(anchorWrapper).toBeInTheDocument();
94
- expect(anchorWrapper).toHaveAttribute('aria-describedby', tooltip?.id);
95
- const button = screen.queryByRole('button', { name: 'Anchor' });
96
- expect(button?.parentElement).toBe(anchorWrapper);
97
- });
98
-
99
- it('should render multiline', async () => {
100
- const { tooltip } = await setup({
101
- label: 'First line\nSecond line',
102
- forceOpen: true,
103
- });
104
- expect(tooltip).toBeInTheDocument();
105
- const lines = queryAllByTagName(tooltip as any, 'p');
106
- expect(lines.length).toBe(2);
107
- expect(lines[0]).toHaveTextContent('First line');
108
- expect(lines[1]).toHaveTextContent('Second line');
109
- });
110
-
111
- it('should have a stable ref', async () => {
112
- const ref = React.createRef() as any;
113
-
114
- // Render without a label
115
- const result = render(
116
- <Tooltip label="">
117
- <span ref={ref}>some text</span>
118
- </Tooltip>,
119
- );
120
- const element = ref.current;
121
- expect(element).not.toBeFalsy();
122
-
123
- // Re-render with a label
124
- result.rerender(
125
- <Tooltip label="Some tooltip">
126
- <span ref={ref}>some updated text</span>
127
- </Tooltip>,
128
- );
129
- // Children ref is stable
130
- expect(ref.current === element).toBe(true);
131
- });
132
-
133
- describe('closeMode="hide"', () => {
134
- it('should not render with empty label', async () => {
135
- const { tooltip, anchorWrapper } = await setup({
136
- label: undefined,
137
- forceOpen: true,
138
- closeMode: 'hide',
139
- });
140
- expect(tooltip).not.toBeInTheDocument();
141
- expect(anchorWrapper).not.toBeInTheDocument();
142
- });
143
-
144
- it('should render hidden', async () => {
145
- const { tooltip } = await setup({
146
- label: 'Tooltip label',
147
- children: <Button>Anchor</Button>,
148
- closeMode: 'hide',
149
- forceOpen: false,
150
- });
151
- expect(tooltip).toBeInTheDocument();
152
- expect(tooltip).toHaveClass(VISUALLY_HIDDEN);
153
- // Popper styles should not be applied when closed.
154
- expect(tooltip?.style?.transform).toBe('');
155
-
156
- const anchor = screen.getByRole('button', { name: 'Anchor' });
157
- await userEvent.hover(anchor);
158
- expect(tooltip).not.toHaveClass(VISUALLY_HIDDEN);
159
- });
160
- });
161
-
162
- describe('ariaLinkMode="aria-describedby"', () => {
163
- it('should add aria-describedby on anchor on open', async () => {
164
- await setup({
165
- label: 'Tooltip label',
166
- forceOpen: false,
167
- children: <Button aria-describedby=":description1:">Anchor</Button>,
168
- });
169
- const anchor = screen.getByRole('button', { name: 'Anchor' });
170
- expect(anchor).toHaveAttribute('aria-describedby', ':description1:');
171
-
172
- await userEvent.hover(anchor);
173
- const tooltip = screen.queryByRole('tooltip');
174
- expect(anchor).toHaveAttribute('aria-describedby', `:description1: ${tooltip?.id}`);
175
- });
176
-
177
- it('should always add aria-describedby on anchor with closeMode="hide"', async () => {
178
- const { tooltip } = await setup({
179
- label: 'Tooltip label',
180
- forceOpen: false,
181
- children: <Button aria-describedby=":description1:">Anchor</Button>,
182
- closeMode: 'hide',
183
- });
184
- const anchor = screen.getByRole('button', { name: 'Anchor' });
185
- expect(anchor).toHaveAttribute('aria-describedby', `:description1: ${tooltip?.id}`);
186
- });
187
-
188
- it('should skip aria-describedby if anchor has label', async () => {
189
- const { tooltip } = await setup({
190
- label: 'Tooltip label',
191
- forceOpen: true,
192
- children: (
193
- <Button aria-describedby=":description1:" aria-label="Tooltip label">
194
- Anchor
195
- </Button>
196
- ),
197
- });
198
- expect(tooltip).toBeInTheDocument();
199
- expect(screen.getByRole('button')).toHaveAttribute('aria-describedby', `:description1:`);
200
- });
201
-
202
- it('should add aria-describedby on anchor wrapper on open', async () => {
203
- const { anchorWrapper } = await setup({
204
- label: 'Tooltip label',
205
- forceOpen: false,
206
- children: 'Anchor',
207
- });
208
- expect(anchorWrapper).not.toHaveAttribute('aria-describedby');
209
-
210
- await userEvent.hover(anchorWrapper as any);
211
- const tooltip = screen.queryByRole('tooltip');
212
- expect(anchorWrapper).toHaveAttribute('aria-describedby', tooltip?.id);
213
- });
214
-
215
- it('should always add aria-describedby on anchor wrapper with closeMode="hide"', async () => {
216
- const { tooltip, anchorWrapper } = await setup({
217
- label: 'Tooltip label',
218
- forceOpen: false,
219
- children: 'Anchor',
220
- closeMode: 'hide',
221
- });
222
- expect(anchorWrapper).toHaveAttribute('aria-describedby', `${tooltip?.id}`);
223
- });
224
- });
225
-
226
- describe('ariaLinkMode="aria-labelledby"', () => {
227
- it('should add aria-labelledby on anchor on open', async () => {
228
- await setup({
229
- label: 'Tooltip label',
230
- forceOpen: false,
231
- children: <Button aria-labelledby=":label1:">Anchor</Button>,
232
- ariaLinkMode: 'aria-labelledby',
233
- });
234
- const anchor = screen.getByRole('button', { name: 'Anchor' });
235
- expect(anchor).toHaveAttribute('aria-labelledby', ':label1:');
236
-
237
- await userEvent.hover(anchor);
238
- const tooltip = screen.queryByRole('tooltip');
239
- expect(anchor).toHaveAttribute('aria-labelledby', `:label1: ${tooltip?.id}`);
240
- });
241
-
242
- it('should always add aria-labelledby on anchor with closeMode="hide"', async () => {
243
- const label = 'Tooltip label';
244
- const { tooltip } = await setup({
245
- label,
246
- forceOpen: false,
247
- children: <Button aria-labelledby=":label1:">Anchor</Button>,
248
- ariaLinkMode: 'aria-labelledby',
249
- closeMode: 'hide',
250
- });
251
- const anchor = screen.queryByRole('button', { name: label });
252
- expect(anchor).toBeInTheDocument();
253
- expect(anchor).toHaveAttribute('aria-labelledby', `:label1: ${tooltip?.id}`);
254
- });
255
-
256
- it('should skip aria-labelledby if anchor has label', async () => {
257
- const { tooltip } = await setup({
258
- label: 'Tooltip label',
259
- forceOpen: true,
260
- children: (
261
- <Button aria-labelledby=":label1:" aria-label="Tooltip label">
262
- Anchor
263
- </Button>
264
- ),
265
- ariaLinkMode: 'aria-labelledby',
266
- });
267
- expect(tooltip).toBeInTheDocument();
268
- expect(screen.getByRole('button')).toHaveAttribute('aria-labelledby', `:label1:`);
269
- });
270
-
271
- it('should add aria-labelledby on anchor wrapper on open', async () => {
272
- const { anchorWrapper } = await setup({
273
- label: 'Tooltip label',
274
- forceOpen: false,
275
- children: 'Anchor',
276
- ariaLinkMode: 'aria-labelledby',
277
- });
278
- expect(anchorWrapper).not.toHaveAttribute('aria-labelledby');
279
-
280
- await userEvent.hover(anchorWrapper as any);
281
- const tooltip = screen.queryByRole('tooltip');
282
- expect(anchorWrapper).toHaveAttribute('aria-labelledby', tooltip?.id);
283
- });
284
-
285
- it('should always add aria-labelledby on anchor wrapper with closeMode="hide"', async () => {
286
- const { tooltip, anchorWrapper } = await setup({
287
- label: 'Tooltip label',
288
- forceOpen: false,
289
- children: 'Anchor',
290
- ariaLinkMode: 'aria-labelledby',
291
- closeMode: 'hide',
292
- });
293
- expect(anchorWrapper).toHaveAttribute('aria-labelledby', `${tooltip?.id}`);
294
- });
295
- });
296
- });
297
-
298
- describe('activation', () => {
299
- it('should activate on anchor hover', async () => {
300
- let { tooltip } = await setup({
301
- label: 'Tooltip label',
302
- children: <Button>Anchor</Button>,
303
- forceOpen: false,
304
- });
305
-
306
- expect(tooltip).not.toBeInTheDocument();
307
-
308
- // Hover anchor button
309
- const button = screen.getByRole('button', { name: 'Anchor' });
310
- await userEvent.hover(button);
311
-
312
- // Tooltip opened
313
- tooltip = await screen.findByRole('tooltip', { name: 'Tooltip label' });
314
- expect(tooltip).toBeInTheDocument();
315
-
316
- // Un-hover anchor button
317
- await userEvent.unhover(button);
318
-
319
- expect(button).not.toHaveFocus();
320
- // Tooltip closed
321
- expect(tooltip).not.toBeInTheDocument();
322
- });
323
-
324
- it('should activate on hover anchor and then tooltip', async () => {
325
- let { tooltip } = await setup({
326
- label: 'Tooltip label',
327
- children: <Button>Anchor</Button>,
328
- forceOpen: false,
329
- });
330
-
331
- expect(tooltip).not.toBeInTheDocument();
332
-
333
- // Hover anchor button
334
- const button = screen.getByRole('button', { name: 'Anchor' });
335
- await userEvent.hover(button);
336
-
337
- // Tooltip opened
338
- tooltip = await screen.findByRole('tooltip', { name: 'Tooltip label' });
339
- expect(tooltip).toBeInTheDocument();
340
- expect(button).toHaveAttribute('aria-describedby', tooltip?.id);
341
-
342
- // Hover tooltip
343
- await userEvent.hover(tooltip);
344
- expect(tooltip).toBeInTheDocument();
345
- expect(button).toHaveAttribute('aria-describedby', tooltip?.id);
346
-
347
- // Un-hover tooltip
348
- await userEvent.unhover(tooltip);
349
- expect(button).not.toHaveFocus();
350
- // Tooltip closed
351
- expect(tooltip).not.toBeInTheDocument();
352
- });
353
-
354
- it('should activate on anchor focus visible and close on escape', async () => {
355
- (isFocusVisible as unknown as MockInstance).mockReturnValue(true);
356
- let { tooltip } = await setup({
357
- label: 'Tooltip label',
358
- children: <Button>Anchor</Button>,
359
- forceOpen: false,
360
- });
361
-
362
- expect(tooltip).not.toBeInTheDocument();
363
-
364
- // Focus anchor button
365
- await userEvent.tab();
366
- const button = screen.getByRole('button', { name: 'Anchor' });
367
- expect(button).toHaveFocus();
368
-
369
- // Tooltip opened
370
- tooltip = await screen.findByRole('tooltip', { name: 'Tooltip label' });
371
- expect(tooltip).toBeInTheDocument();
372
- expect(button).toHaveAttribute('aria-describedby', tooltip?.id);
373
-
374
- // Focus next element => close tooltip
375
- await userEvent.tab();
376
- expect(button).not.toHaveFocus();
377
- expect(tooltip).not.toBeInTheDocument();
378
-
379
- // Focus again
380
- await userEvent.tab({ shift: true });
381
- tooltip = await screen.findByRole('tooltip', { name: 'Tooltip label' });
382
- expect(tooltip).toBeInTheDocument();
383
-
384
- // Escape pressed => close tooltip
385
- await userEvent.keyboard('{Escape}');
386
- expect(tooltip).not.toBeInTheDocument();
387
- });
388
-
389
- it('should not activate on anchor focus if not visible', async () => {
390
- (isFocusVisible as unknown as MockInstance).mockReturnValue(false);
391
- let { tooltip } = await setup({
392
- label: 'Tooltip label',
393
- children: <Button>Anchor</Button>,
394
- forceOpen: false,
395
- });
396
-
397
- expect(tooltip).not.toBeInTheDocument();
398
-
399
- // Focus anchor button
400
- await userEvent.tab();
401
- const button = screen.getByRole('button', { name: 'Anchor' });
402
- expect(button).toHaveFocus();
403
-
404
- // Tooltip not opening
405
- tooltip = screen.queryByRole('tooltip', { name: 'Tooltip label' });
406
- expect(tooltip).not.toBeInTheDocument();
407
- });
408
- });
409
-
410
- // Common tests suite.
411
- commonTestsSuiteRTL(setup, {
412
- baseClassName: CLASSNAME,
413
- forwardClassName: 'tooltip',
414
- forwardAttributes: 'tooltip',
415
- forwardRef: 'tooltip',
416
- });
417
- });