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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/CONTRIBUTING.md +1 -5
  2. package/README.md +0 -2
  3. package/_internal/index.js +20 -13
  4. package/_internal/index.js.map +1 -1
  5. package/index.d.ts +35 -35
  6. package/index.js +2407 -2447
  7. package/index.js.map +1 -1
  8. package/package.json +10 -13
  9. package/src/components/alert-dialog/AlertDialog.stories.tsx +1 -1
  10. package/src/components/alert-dialog/AlertDialog.test.tsx +3 -4
  11. package/src/components/autocomplete/Autocomplete.stories.tsx +1 -1
  12. package/src/components/autocomplete/Autocomplete.test.tsx +3 -5
  13. package/src/components/autocomplete/Autocomplete.tsx +1 -1
  14. package/src/components/autocomplete/AutocompleteMultiple.stories.tsx +1 -1
  15. package/src/components/autocomplete/AutocompleteMultiple.test.tsx +0 -2
  16. package/src/components/autocomplete/AutocompleteMultiple.tsx +1 -1
  17. package/src/components/avatar/Avatar.stories.tsx +0 -2
  18. package/src/components/avatar/Avatar.test.tsx +0 -2
  19. package/src/components/avatar/Avatar.tsx +1 -1
  20. package/src/components/badge/Badge.stories.tsx +0 -1
  21. package/src/components/badge/Badge.test.tsx +0 -2
  22. package/src/components/badge/Badge.tsx +1 -1
  23. package/src/components/badge/BadgeWrapper.stories.tsx +0 -1
  24. package/src/components/badge/BadgeWrapper.test.tsx +0 -2
  25. package/src/components/badge/BadgeWrapper.tsx +1 -1
  26. package/src/components/button/Button.stories.tsx +0 -1
  27. package/src/components/button/Button.test.tsx +9 -11
  28. package/src/components/button/Button.tsx +0 -2
  29. package/src/components/button/ButtonGroup.stories.tsx +0 -2
  30. package/src/components/button/ButtonGroup.test.tsx +0 -2
  31. package/src/components/button/ButtonGroup.tsx +0 -2
  32. package/src/components/button/ButtonRoot.tsx +7 -37
  33. package/src/components/button/IconButton.test.tsx +0 -2
  34. package/src/components/button/IconButton.tsx +0 -2
  35. package/src/components/checkbox/Checkbox.test.tsx +3 -5
  36. package/src/components/chip/Chip.stories.tsx +0 -2
  37. package/src/components/chip/Chip.test.tsx +19 -19
  38. package/src/components/chip/Chip.tsx +1 -1
  39. package/src/components/chip/ChipGroup.stories.tsx +0 -2
  40. package/src/components/chip/ChipGroup.test.tsx +0 -2
  41. package/src/components/chip/ChipGroup.tsx +1 -1
  42. package/src/components/comment-block/CommentBlock.stories.tsx +0 -1
  43. package/src/components/comment-block/CommentBlock.test.tsx +0 -1
  44. package/src/components/comment-block/CommentBlock.tsx +1 -1
  45. package/src/components/date-picker/DatePicker.test.tsx +3 -5
  46. package/src/components/date-picker/DatePicker.tsx +1 -1
  47. package/src/components/date-picker/DatePickerControlled.test.tsx +6 -8
  48. package/src/components/date-picker/DatePickerField.test.tsx +3 -5
  49. package/src/components/dialog/Dialog.test.tsx +4 -6
  50. package/src/components/divider/Divider.test.tsx +0 -2
  51. package/src/components/divider/Divider.tsx +0 -2
  52. package/src/components/drag-handle/DragHandle.test.tsx +0 -2
  53. package/src/components/drag-handle/DragHandle.tsx +0 -2
  54. package/src/components/dropdown/Dropdown.stories.tsx +1 -1
  55. package/src/components/dropdown/Dropdown.test.tsx +3 -3
  56. package/src/components/dropdown/Dropdown.tsx +1 -1
  57. package/src/components/expansion-panel/ExpansionPanel.test.tsx +6 -7
  58. package/src/components/flag/Flag.test.tsx +0 -2
  59. package/src/components/flag/Flag.tsx +0 -2
  60. package/src/components/flex-box/FlexBox.stories.tsx +0 -2
  61. package/src/components/flex-box/FlexBox.test.tsx +0 -1
  62. package/src/components/flex-box/FlexBox.tsx +1 -1
  63. package/src/components/generic-block/GenericBlock.test.tsx +1 -1
  64. package/src/components/grid/Grid.tsx +0 -2
  65. package/src/components/grid/GridItem.tsx +0 -2
  66. package/src/components/grid-column/GridColumn.stories.tsx +0 -1
  67. package/src/components/grid-column/GridColumn.test.jsx +0 -2
  68. package/src/components/grid-column/GridColumn.tsx +1 -1
  69. package/src/components/heading/Heading.stories.tsx +0 -1
  70. package/src/components/heading/Heading.test.tsx +0 -2
  71. package/src/components/heading/Heading.tsx +0 -2
  72. package/src/components/heading/HeadingLevelProvider.tsx +1 -1
  73. package/src/components/icon/Icon.stories.tsx +30 -4
  74. package/src/components/icon/Icon.test.tsx +85 -4
  75. package/src/components/icon/Icon.tsx +118 -9
  76. package/src/components/image-block/ImageBlock.stories.tsx +0 -2
  77. package/src/components/image-block/ImageBlock.test.tsx +0 -1
  78. package/src/components/image-block/ImageBlock.tsx +1 -1
  79. package/src/components/image-block/ImageCaption.tsx +1 -1
  80. package/src/components/image-lightbox/ImageLightbox.stories.tsx +0 -1
  81. package/src/components/image-lightbox/ImageLightbox.test.tsx +11 -9
  82. package/src/components/image-lightbox/types.ts +0 -2
  83. package/src/components/inline-list/InlineList.stories.tsx +0 -1
  84. package/src/components/inline-list/InlineList.test.tsx +0 -2
  85. package/src/components/inline-list/InlineList.tsx +1 -1
  86. package/src/components/input-helper/InputHelper.test.tsx +0 -2
  87. package/src/components/input-helper/InputHelper.tsx +1 -1
  88. package/src/components/input-label/InputLabel.stories.tsx +0 -2
  89. package/src/components/input-label/InputLabel.test.tsx +0 -2
  90. package/src/components/input-label/InputLabel.tsx +1 -1
  91. package/src/components/lightbox/Lightbox.test.tsx +0 -2
  92. package/src/components/lightbox/Lightbox.tsx +1 -1
  93. package/src/components/link/Link.stories.tsx +0 -1
  94. package/src/components/link/Link.test.tsx +13 -13
  95. package/src/components/link/Link.tsx +9 -22
  96. package/src/components/link-preview/LinkPreview.test.tsx +0 -2
  97. package/src/components/link-preview/LinkPreview.tsx +0 -2
  98. package/src/components/list/List.stories.tsx +1 -1
  99. package/src/components/list/List.test.tsx +0 -2
  100. package/src/components/list/List.tsx +1 -1
  101. package/src/components/list/ListDivider.test.tsx +0 -2
  102. package/src/components/list/ListDivider.tsx +0 -2
  103. package/src/components/list/ListItem.test.tsx +5 -7
  104. package/src/components/list/ListItem.tsx +1 -1
  105. package/src/components/list/ListSubheader.test.tsx +0 -2
  106. package/src/components/list/ListSubheader.tsx +1 -1
  107. package/src/components/message/Message.test.tsx +1 -2
  108. package/src/components/message/Message.tsx +1 -1
  109. package/src/components/mosaic/Mosaic.test.tsx +3 -5
  110. package/src/components/mosaic/Mosaic.tsx +1 -1
  111. package/src/components/navigation/Navigation.stories.tsx +0 -2
  112. package/src/components/navigation/Navigation.test.tsx +0 -2
  113. package/src/components/navigation/Navigation.tsx +0 -2
  114. package/src/components/navigation/NavigationItem.test.tsx +0 -2
  115. package/src/components/navigation/NavigationItem.tsx +7 -11
  116. package/src/components/navigation/NavigationSection.test.tsx +0 -2
  117. package/src/components/navigation/NavigationSection.tsx +5 -4
  118. package/src/components/notification/Notification.test.tsx +4 -5
  119. package/src/components/notification/Notification.tsx +1 -1
  120. package/src/components/popover/Popover.test.tsx +0 -2
  121. package/src/components/popover/Popover.tsx +1 -1
  122. package/src/components/popover/usePopoverStyle.tsx +1 -1
  123. package/src/components/popover-dialog/PopoverDialog.test.tsx +1 -2
  124. package/src/components/popover-dialog/PopoverDialog.tsx +0 -2
  125. package/src/components/post-block/PostBlock.test.tsx +0 -2
  126. package/src/components/post-block/PostBlock.tsx +1 -1
  127. package/src/components/progress/Progress.tsx +0 -2
  128. package/src/components/progress/ProgressCircular.stories.tsx +0 -1
  129. package/src/components/progress/ProgressCircular.test.tsx +0 -2
  130. package/src/components/progress/ProgressCircular.tsx +0 -2
  131. package/src/components/progress/ProgressLinear.test.tsx +0 -2
  132. package/src/components/progress/ProgressLinear.tsx +0 -2
  133. package/src/components/progress-tracker/ProgressTracker.stories.tsx +1 -1
  134. package/src/components/progress-tracker/ProgressTracker.test.tsx +0 -2
  135. package/src/components/progress-tracker/ProgressTrackerProvider.test.tsx +0 -2
  136. package/src/components/progress-tracker/ProgressTrackerProvider.tsx +1 -1
  137. package/src/components/progress-tracker/ProgressTrackerStep.test.tsx +0 -2
  138. package/src/components/progress-tracker/ProgressTrackerStep.tsx +1 -1
  139. package/src/components/progress-tracker/ProgressTrackerStepPanel.test.tsx +0 -2
  140. package/src/components/progress-tracker/ProgressTrackerStepPanel.tsx +0 -2
  141. package/src/components/radio-button/RadioButton.test.tsx +3 -5
  142. package/src/components/radio-button/RadioButton.tsx +1 -1
  143. package/src/components/radio-button/RadioGroup.stories.tsx +1 -1
  144. package/src/components/radio-button/RadioGroup.test.tsx +0 -2
  145. package/src/components/radio-button/RadioGroup.tsx +1 -1
  146. package/src/components/select/Select.stories.tsx +1 -1
  147. package/src/components/select/Select.test.tsx +8 -9
  148. package/src/components/select/Select.tsx +1 -1
  149. package/src/components/select/SelectMultiple.stories.tsx +1 -1
  150. package/src/components/select/SelectMultiple.test.tsx +5 -7
  151. package/src/components/select/SelectMultiple.tsx +1 -1
  152. package/src/components/select/WithSelectContext.tsx +1 -1
  153. package/src/components/select/constants.ts +1 -1
  154. package/src/components/side-navigation/SideNavigation.test.tsx +0 -2
  155. package/src/components/side-navigation/SideNavigation.tsx +1 -1
  156. package/src/components/side-navigation/SideNavigationItem.test.tsx +2 -4
  157. package/src/components/side-navigation/SideNavigationItem.tsx +23 -28
  158. package/src/components/skeleton/SkeletonCircle.test.tsx +0 -2
  159. package/src/components/skeleton/SkeletonCircle.tsx +0 -2
  160. package/src/components/skeleton/SkeletonRectangle.test.tsx +0 -2
  161. package/src/components/skeleton/SkeletonRectangle.tsx +0 -2
  162. package/src/components/skeleton/SkeletonTypography.stories.tsx +0 -2
  163. package/src/components/skeleton/SkeletonTypography.test.tsx +0 -2
  164. package/src/components/skeleton/SkeletonTypography.tsx +1 -1
  165. package/src/components/slider/Slider.test.tsx +1 -3
  166. package/src/components/slider/Slider.tsx +1 -1
  167. package/src/components/slideshow/Slideshow.stories.tsx +0 -1
  168. package/src/components/slideshow/Slideshow.test.tsx +0 -2
  169. package/src/components/slideshow/SlideshowControls.stories.tsx +0 -2
  170. package/src/components/slideshow/SlideshowItem.tsx +0 -2
  171. package/src/components/slideshow/useSlideFocusManagement.tsx +1 -1
  172. package/src/components/switch/Switch.test.tsx +5 -7
  173. package/src/components/switch/Switch.tsx +1 -1
  174. package/src/components/table/Table.test.tsx +0 -2
  175. package/src/components/table/Table.tsx +0 -2
  176. package/src/components/table/TableBody.test.tsx +0 -2
  177. package/src/components/table/TableBody.tsx +0 -2
  178. package/src/components/table/TableCell.test.tsx +1 -3
  179. package/src/components/table/TableCell.tsx +0 -2
  180. package/src/components/table/TableHeader.test.tsx +0 -2
  181. package/src/components/table/TableHeader.tsx +0 -2
  182. package/src/components/table/TableRow.test.tsx +0 -2
  183. package/src/components/table/TableRow.tsx +0 -2
  184. package/src/components/tabs/Tab.test.tsx +0 -2
  185. package/src/components/tabs/Tab.tsx +1 -1
  186. package/src/components/tabs/TabList.test.tsx +0 -2
  187. package/src/components/tabs/TabPanel.test.tsx +0 -2
  188. package/src/components/tabs/TabPanel.tsx +0 -2
  189. package/src/components/tabs/TabProvider.test.tsx +0 -2
  190. package/src/components/tabs/TabProvider.tsx +1 -1
  191. package/src/components/tabs/Tabs.stories.tsx +1 -1
  192. package/src/components/text/Text.stories.tsx +1 -1
  193. package/src/components/text/Text.test.tsx +0 -2
  194. package/src/components/text/Text.tsx +0 -2
  195. package/src/components/text-field/TextField.test.tsx +9 -10
  196. package/src/components/text-field/TextField.tsx +1 -1
  197. package/src/components/thumbnail/Thumbnail.test.tsx +29 -7
  198. package/src/components/thumbnail/Thumbnail.tsx +11 -11
  199. package/src/components/toolbar/Toolbar.tsx +1 -1
  200. package/src/components/tooltip/Tooltip.stories.tsx +2 -1
  201. package/src/components/tooltip/Tooltip.test.tsx +14 -8
  202. package/src/components/uploader/Uploader.test.tsx +2 -4
  203. package/src/components/user-block/UserBlock.stories.tsx +0 -2
  204. package/src/components/user-block/UserBlock.test.tsx +1 -3
  205. package/src/hooks/useId.test.tsx +0 -1
  206. package/src/hooks/useInfiniteScroll.tsx +1 -1
  207. package/src/hooks/usePreviousValue.ts +0 -1
  208. package/src/stories/decorators/withChromaticForceScreenSize.tsx +0 -1
  209. package/src/stories/decorators/withNestedProps.tsx +0 -1
  210. package/src/stories/decorators/withThemedBackground.tsx +0 -2
  211. package/src/stories/decorators/withWrapper.tsx +0 -2
  212. package/src/stories/utils/CustomLink.tsx +0 -1
  213. package/src/testing/utils/ThemeSentinel.tsx +0 -1
  214. package/src/untypped-modules.d.ts +4 -0
  215. package/src/utils/ClickAwayProvider/ClickAwayProvider.stories.jsx +1 -1
  216. package/src/utils/ClickAwayProvider/ClickAwayProvider.tsx +1 -1
  217. package/src/utils/MaterialThemeSwitcher/MaterialThemeSwitcher.tsx +1 -1
  218. package/src/utils/Portal/Portal.test.tsx +0 -1
  219. package/src/utils/Portal/PortalProvider.stories.jsx +0 -1
  220. package/src/utils/Portal/PortalProvider.test.tsx +1 -2
  221. package/src/utils/date/getYearDisplayName.test.ts +1 -1
  222. package/src/utils/disabled/DisabledStateProvider.stories.tsx +0 -2
  223. package/src/utils/disabled/useDisableStateProps.test.tsx +2 -2
  224. package/src/utils/react/OnBeforeUnmount.tsx +1 -1
  225. package/src/utils/react/RawClickable.test.tsx +153 -0
  226. package/src/utils/react/RawClickable.tsx +65 -0
  227. package/src/utils/react/skipRender.tsx +2 -2
  228. package/src/utils/react/wrapChildrenIconWithSpaces.test.tsx +1 -1
  229. package/src/utils/type/HasPolymorphicAs.ts +0 -2
  230. package/src/utils/type/HasRequiredLinkHref.ts +1 -0
  231. package/src/utils/type/index.ts +1 -0
  232. package/utils/index.d.ts +6 -6
  233. package/utils/index.js +1 -1
  234. package/src/utils/react/renderButtonOrLink.tsx +0 -16
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { commonTestsSuiteRTL, SetupRenderOptions } from '@lumx/react/testing/utils';
4
2
  import { render } from '@testing-library/react';
5
3
  import { getAllByClassName, getByClassName } from '@lumx/react/testing/utils/queries';
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import classNames from 'classnames';
4
2
 
5
3
  import { HasAriaLabelOrLabelledBy, HasClassName, HasTheme } from '@lumx/react/utils/type';
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { commonTestsSuiteRTL } from '@lumx/react/testing/utils';
4
2
  import { render } from '@testing-library/react';
5
3
  import { getByClassName } from '@lumx/react/testing/utils/queries';
@@ -1,11 +1,12 @@
1
- import React, { ElementType, ReactNode } from 'react';
1
+ import { ElementType, ReactNode } from 'react';
2
2
  import { Icon, Placement, Size, Tooltip, Text } from '@lumx/react';
3
3
  import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
4
- import { ComponentRef, HasClassName, HasPolymorphicAs, HasTheme } from '@lumx/react/utils/type';
4
+ import { ComponentRef, HasClassName, HasPolymorphicAs, HasRequiredLinkHref, HasTheme } from '@lumx/react/utils/type';
5
5
  import classNames from 'classnames';
6
6
  import { forwardRefPolymorphic } from '@lumx/react/utils/react/forwardRefPolymorphic';
7
7
  import { useTheme } from '@lumx/react/utils/theme/ThemeContext';
8
8
  import { useOverflowTooltipLabel } from '@lumx/react/hooks/useOverflowTooltipLabel';
9
+ import { RawClickable } from '@lumx/react/utils/react/RawClickable';
9
10
 
10
11
  type BaseNavigationItemProps = {
11
12
  /** Icon (SVG path). */
@@ -16,9 +17,6 @@ type BaseNavigationItemProps = {
16
17
  isCurrentPage?: boolean;
17
18
  };
18
19
 
19
- /** Make `href` required when `as` is `a` */
20
- type RequiredLinkHref<E> = E extends 'a' ? { href: string } : Record<string, unknown>;
21
-
22
20
  /**
23
21
  * Navigation item props
24
22
  */
@@ -26,7 +24,7 @@ export type NavigationItemProps<E extends ElementType = 'a'> = HasPolymorphicAs<
26
24
  HasTheme &
27
25
  HasClassName &
28
26
  BaseNavigationItemProps &
29
- RequiredLinkHref<E>;
27
+ HasRequiredLinkHref<E>;
30
28
 
31
29
  /**
32
30
  * Component display name.
@@ -44,8 +42,6 @@ export const NavigationItem = Object.assign(
44
42
  const theme = useTheme();
45
43
  const { tooltipLabel, labelRef } = useOverflowTooltipLabel(label);
46
44
 
47
- const buttonProps = Element === 'button' ? { type: 'button' } : {};
48
-
49
45
  return (
50
46
  <li
51
47
  className={classNames(
@@ -57,14 +53,14 @@ export const NavigationItem = Object.assign(
57
53
  )}
58
54
  >
59
55
  <Tooltip label={tooltipLabel} placement={Placement.TOP}>
60
- <Element
56
+ <RawClickable
57
+ as={Element}
61
58
  className={handleBasicClasses({
62
59
  prefix: `${CLASSNAME}__link`,
63
60
  isSelected: isCurrentPage,
64
61
  })}
65
62
  ref={ref as React.Ref<any>}
66
63
  aria-current={isCurrentPage ? 'page' : undefined}
67
- {...buttonProps}
68
64
  {...forwardedProps}
69
65
  >
70
66
  {icon ? (
@@ -74,7 +70,7 @@ export const NavigationItem = Object.assign(
74
70
  <Text as="span" truncate className={`${CLASSNAME}__label`} ref={labelRef}>
75
71
  {label}
76
72
  </Text>
77
- </Element>
73
+ </RawClickable>
78
74
  </Tooltip>
79
75
  </li>
80
76
  );
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { commonTestsSuiteRTL, RenderWrapper } from '@lumx/react/testing/utils';
4
2
  import { render, screen } from '@testing-library/react';
5
3
  import { getByClassName, queryByClassName } from '@lumx/react/testing/utils/queries';
@@ -1,4 +1,4 @@
1
- import React, { useRef, useState, useContext } from 'react';
1
+ import { useRef, useState, useContext } from 'react';
2
2
 
3
3
  import { mdiChevronDown, mdiChevronUp } from '@lumx/icons';
4
4
  import { Icon, Size, Text, Orientation, Popover, Placement, Theme } from '@lumx/react';
@@ -9,6 +9,7 @@ import { ThemeProvider, useTheme } from '@lumx/react/utils/theme/ThemeContext';
9
9
  import { useId } from '@lumx/react/hooks/useId';
10
10
  import { forwardRef } from '@lumx/react/utils/react/forwardRef';
11
11
 
12
+ import { RawClickable } from '@lumx/react/utils/react/RawClickable';
12
13
  import { CLASSNAME as ITEM_CLASSNAME } from './NavigationItem';
13
14
  import { NavigationContext } from './context';
14
15
 
@@ -52,7 +53,8 @@ export const NavigationSection = forwardRef<NavigationSectionProps, HTMLLIElemen
52
53
  )}
53
54
  ref={ref}
54
55
  >
55
- <button
56
+ <RawClickable<'button'>
57
+ as="button"
56
58
  {...forwardedProps}
57
59
  aria-controls={sectionId}
58
60
  aria-expanded={isOpen}
@@ -62,7 +64,6 @@ export const NavigationSection = forwardRef<NavigationSectionProps, HTMLLIElemen
62
64
  setIsOpen(!isOpen);
63
65
  event.stopPropagation();
64
66
  }}
65
- type="button"
66
67
  >
67
68
  {icon ? <Icon className={`${ITEM_CLASSNAME}__icon`} icon={icon} size={Size.xs} /> : null}
68
69
 
@@ -73,7 +74,7 @@ export const NavigationSection = forwardRef<NavigationSectionProps, HTMLLIElemen
73
74
  className={classNames(`${ITEM_CLASSNAME}__icon`, `${CLASSNAME}__chevron`)}
74
75
  icon={isOpen ? mdiChevronUp : mdiChevronDown}
75
76
  />
76
- </button>
77
+ </RawClickable>
77
78
  {isOpen &&
78
79
  (isDropdown ? (
79
80
  <Popover
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { Kind } from '@lumx/react';
4
2
  import { render, within, screen } from '@testing-library/react';
5
3
  import { queryByClassName } from '@lumx/react/testing/utils/queries';
@@ -44,8 +42,8 @@ describe(`<${Notification.displayName}>`, () => {
44
42
  });
45
43
 
46
44
  it('should render content & action', async () => {
47
- const onClick = jest.fn();
48
- const onActionClick = jest.fn();
45
+ const onClick = vi.fn();
46
+ const onActionClick = vi.fn();
49
47
  const content = 'Content';
50
48
  const actionLabel = 'actionLabel';
51
49
  const { notification, action, actionButton } = setup({ content, actionLabel, onClick, onActionClick });
@@ -81,8 +79,9 @@ describe(`<${Notification.displayName}>`, () => {
81
79
 
82
80
  it('should forward styles', () => {
83
81
  const { notification } = setup({ style: { color: 'red' } });
82
+
84
83
  expect(notification).toBeInTheDocument();
85
- expect(notification).toHaveStyle('color: red');
84
+ expect(notification).toHaveStyle('color: rgb(255, 0, 0)');
86
85
  });
87
86
 
88
87
  // Common tests suite.
@@ -1,4 +1,4 @@
1
- import React, { useRef } from 'react';
1
+ import { useRef } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
4
  import isFunction from 'lodash/isFunction';
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { commonTestsSuiteRTL, SetupRenderOptions } from '@lumx/react/testing/utils';
4
2
  import { render, screen } from '@testing-library/react';
5
3
  import { ThemeSentinel } from '@lumx/react/testing/utils/ThemeSentinel';
@@ -1,4 +1,4 @@
1
- import React, { ReactNode, RefObject, useRef } from 'react';
1
+ import { ReactNode, RefObject, useRef } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
4
 
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useMemo, useState } from 'react';
1
+ import { useEffect, useMemo, useState } from 'react';
2
2
  import memoize from 'lodash/memoize';
3
3
  import { detectOverflow } from '@popperjs/core';
4
4
 
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { render, screen, within } from '@testing-library/react';
3
2
  import userEvent from '@testing-library/user-event';
4
3
 
@@ -6,7 +5,7 @@ import { Heading, HeadingLevelProvider } from '@lumx/react';
6
5
  import { WithButtonTrigger, WithIconButtonTrigger } from './PopoverDialog.stories';
7
6
  import { PopoverDialog } from './PopoverDialog';
8
7
 
9
- jest.mock('@lumx/react/utils/browser/isFocusVisible');
8
+ vi.mock('@lumx/react/utils/browser/isFocusVisible');
10
9
 
11
10
  describe(`<${PopoverDialog.displayName}>`, () => {
12
11
  it('should open and init focus', async () => {
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import classNames from 'classnames';
4
2
 
5
3
  import { HasAriaLabelOrLabelledBy } from '@lumx/react/utils/type';
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { commonTestsSuiteRTL, SetupRenderOptions } from '@lumx/react/testing/utils';
4
2
  import { render } from '@testing-library/react';
5
3
  import { queryByClassName } from '@lumx/react/testing/utils/queries';
@@ -1,4 +1,4 @@
1
- import React, { ReactNode } from 'react';
1
+ import { ReactNode } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
4
  import isObject from 'lodash/isObject';
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import classNames from 'classnames';
4
2
 
5
3
  import { Theme } from '@lumx/react';
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { ProgressCircular, ProgressCircularSize, Size, Text } from '@lumx/react';
3
2
  import { getSelectArgType } from '@lumx/react/stories/controls/selectArgType';
4
3
  import { withCombinations } from '@lumx/react/stories/decorators/withCombinations';
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { getByClassName } from '@lumx/react/testing/utils/queries';
4
2
  import { commonTestsSuiteRTL, SetupRenderOptions } from '@lumx/react/testing/utils';
5
3
  import { render } from '@testing-library/react';
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import classNames from 'classnames';
4
2
 
5
3
  import { Theme, Size } from '@lumx/react';
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { getByClassName } from '@lumx/react/testing/utils/queries';
4
2
  import { commonTestsSuiteRTL, SetupRenderOptions } from '@lumx/react/testing/utils';
5
3
  import { render } from '@testing-library/react';
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import classNames from 'classnames';
4
2
 
5
3
  import { Theme } from '@lumx/react';
@@ -10,7 +10,7 @@ import {
10
10
  } from '@lumx/react';
11
11
  import cloneDeep from 'lodash/cloneDeep';
12
12
  import set from 'lodash/set';
13
- import React, { useState } from 'react';
13
+ import { useState } from 'react';
14
14
 
15
15
  export default { title: 'LumX components/progress-tracker/Progress Tracker' };
16
16
 
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { ProgressTrackerStep } from '@lumx/react';
4
2
  import { render, within } from '@testing-library/react';
5
3
  import { getByClassName } from '@lumx/react/testing/utils/queries';
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import {
4
2
  ProgressTracker,
5
3
  ProgressTrackerProvider,
@@ -1,4 +1,4 @@
1
- import React, { ReactNode, useEffect, useReducer } from 'react';
1
+ import { ReactNode, useEffect, useReducer } from 'react';
2
2
  import { INIT_STATE, TabProviderContext, reducer } from '../tabs/state';
3
3
 
4
4
  export interface ProgressTrackerProviderProps {
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { render, screen } from '@testing-library/react';
4
2
  import { getByClassName } from '@lumx/react/testing/utils/queries';
5
3
  import { commonTestsSuiteRTL } from '@lumx/react/testing/utils';
@@ -1,4 +1,4 @@
1
- import React, { FocusEventHandler, KeyboardEventHandler, useCallback } from 'react';
1
+ import { FocusEventHandler, KeyboardEventHandler, useCallback } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
4
 
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { render, screen } from '@testing-library/react';
4
2
  import { getByClassName } from '@lumx/react/testing/utils/queries';
5
3
 
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import classNames from 'classnames';
4
2
 
5
3
  import { useTabProviderContext } from '@lumx/react/components/tabs/state';
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { commonTestsSuiteRTL, SetupRenderOptions } from '@lumx/react/testing/utils';
4
2
  import { getByClassName, getByTagName, queryByClassName } from '@lumx/react/testing/utils/queries';
5
3
  import { render } from '@testing-library/react';
@@ -86,7 +84,7 @@ describe(`<${RadioButton.displayName}>`, () => {
86
84
  });
87
85
 
88
86
  describe('Events', () => {
89
- const onChange = jest.fn();
87
+ const onChange = vi.fn();
90
88
 
91
89
  it('should trigger `onChange` when radioButton is clicked', async () => {
92
90
  const value = 'value';
@@ -102,7 +100,7 @@ describe(`<${RadioButton.displayName}>`, () => {
102
100
 
103
101
  describe('Disabled state', () => {
104
102
  it('should be disabled with isDisabled', async () => {
105
- const onChange = jest.fn();
103
+ const onChange = vi.fn();
106
104
  const { radioButton, input } = setup({ isDisabled: true, onChange });
107
105
 
108
106
  expect(radioButton).toHaveClass('lumx-radio-button--is-disabled');
@@ -115,7 +113,7 @@ describe(`<${RadioButton.displayName}>`, () => {
115
113
  });
116
114
 
117
115
  it('should be disabled with aria-disabled', async () => {
118
- const onChange = jest.fn();
116
+ const onChange = vi.fn();
119
117
  const { radioButton, input } = setup({ 'aria-disabled': true, onChange });
120
118
 
121
119
  expect(radioButton).toHaveClass('lumx-radio-button--is-disabled');
@@ -1,4 +1,4 @@
1
- import React, { ReactNode, SyntheticEvent, InputHTMLAttributes } from 'react';
1
+ import { ReactNode, SyntheticEvent, InputHTMLAttributes } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
4
 
@@ -1,5 +1,5 @@
1
1
  import { RadioButton, RadioGroup } from '@lumx/react';
2
- import React, { useState } from 'react';
2
+ import { useState } from 'react';
3
3
 
4
4
  export default { title: 'LumX components/radio-button/Radio Group' };
5
5
 
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { commonTestsSuiteRTL } from '@lumx/react/testing/utils';
4
2
 
5
3
  import { render } from '@testing-library/react';
@@ -1,4 +1,4 @@
1
- import React, { ReactNode } from 'react';
1
+ import { ReactNode } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
4
 
@@ -3,7 +3,7 @@ import { List, ListItem, Select, Size, TextField } from '@lumx/react';
3
3
  import { useBooleanState } from '@lumx/react/hooks/useBooleanState';
4
4
  import noop from 'lodash/noop';
5
5
  import range from 'lodash/range';
6
- import React, { SyntheticEvent, useState } from 'react';
6
+ import { SyntheticEvent, useState } from 'react';
7
7
  import { SelectVariant } from './constants';
8
8
 
9
9
  export default {
@@ -1,5 +1,4 @@
1
- import React from 'react';
2
-
1
+ import { Mock } from 'vitest';
3
2
  import { Theme } from '@lumx/core/js/constants';
4
3
  import { Chip } from '@lumx/react/components/chip/Chip';
5
4
  import { Dropdown } from '@lumx/react/components/dropdown/Dropdown';
@@ -13,8 +12,8 @@ import { Select, SelectProps, SelectVariant } from './Select';
13
12
 
14
13
  const CLASSNAME = Select.className as string;
15
14
 
16
- jest.mock('@lumx/react/utils/browser/isFocusVisible');
17
- jest.mock('@lumx/react/hooks/useId', () => ({ useId: () => ':r1:' }));
15
+ vi.mock('@lumx/react/utils/browser/isFocusVisible');
16
+ vi.mock('@lumx/react/hooks/useId', () => ({ useId: () => ':r1:' }));
18
17
 
19
18
  /**
20
19
  * Mounts the component and returns common DOM elements / data needed in multiple tests further down.
@@ -35,7 +34,7 @@ const setup = (propsOverride: Partial<SelectProps> = {}, { wrapper }: SetupRende
35
34
  };
36
35
 
37
36
  describe(`<${Select.displayName}>`, () => {
38
- (isFocusVisible as jest.Mock).mockReturnValue(false);
37
+ (isFocusVisible as Mock).mockReturnValue(false);
39
38
 
40
39
  describe('Props', () => {
41
40
  it('should have default classNames', () => {
@@ -144,7 +143,7 @@ describe(`<${Select.displayName}>`, () => {
144
143
 
145
144
  describe('Events', () => {
146
145
  it('should trigger `onDropdownClose` on escape', async () => {
147
- const onDropdownClose = jest.fn();
146
+ const onDropdownClose = vi.fn();
148
147
  const { getDropdown } = setup({ isOpen: true, onDropdownClose });
149
148
 
150
149
  const dropdown = getDropdown();
@@ -156,7 +155,7 @@ describe(`<${Select.displayName}>`, () => {
156
155
 
157
156
  describe('should trigger `onInputClick` when the select button is clicked', () => {
158
157
  it('with input variant', async () => {
159
- const onClick = jest.fn();
158
+ const onClick = vi.fn();
160
159
  const { inputWrapper } = setup({ onInputClick: onClick, variant: SelectVariant.input });
161
160
 
162
161
  await userEvent.click(inputWrapper as any);
@@ -164,7 +163,7 @@ describe(`<${Select.displayName}>`, () => {
164
163
  });
165
164
 
166
165
  it('with chip variant', async () => {
167
- const onClick = jest.fn();
166
+ const onClick = vi.fn();
168
167
  const { chip } = setup({ onInputClick: onClick, variant: SelectVariant.chip });
169
168
 
170
169
  await userEvent.click(chip as any);
@@ -174,7 +173,7 @@ describe(`<${Select.displayName}>`, () => {
174
173
 
175
174
  it('should call onClear when clear icon is clicked in select input', async () => {
176
175
  const value = 'Value';
177
- const onClear = jest.fn();
176
+ const onClear = vi.fn();
178
177
  const { select, props } = setup({ value, onClear, clearButtonProps: { label: 'Clear' } });
179
178
 
180
179
  const clearButton = within(select).getByRole('button', { name: props.clearButtonProps?.label });
@@ -1,4 +1,4 @@
1
- import React, { RefObject } from 'react';
1
+ import { RefObject } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
4
  import lodashIsEmpty from 'lodash/isEmpty';
@@ -14,7 +14,7 @@ import {
14
14
  } from '@lumx/react';
15
15
  import { useBooleanState } from '@lumx/react/hooks/useBooleanState';
16
16
  import noop from 'lodash/noop';
17
- import React, { MouseEventHandler, SyntheticEvent, useRef, useState } from 'react';
17
+ import { MouseEventHandler, SyntheticEvent, useRef, useState } from 'react';
18
18
  import { SelectVariant } from './constants';
19
19
 
20
20
  export default { title: 'LumX components/select/Select Multiple' };
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { Theme } from '@lumx/core/js/constants';
4
2
  import { Chip } from '@lumx/react/components/chip/Chip';
5
3
  import { Dropdown } from '@lumx/react/components/dropdown/Dropdown';
@@ -18,7 +16,7 @@ import { SelectVariant } from './constants';
18
16
 
19
17
  const CLASSNAME = SelectMultiple.className as string;
20
18
 
21
- jest.mock('@lumx/react/hooks/useId', () => ({ useId: () => ':r1:' }));
19
+ vi.mock('@lumx/react/hooks/useId', () => ({ useId: () => ':r1:' }));
22
20
 
23
21
  /**
24
22
  * Mounts the component and returns common DOM elements / data needed in multiple tests further down.
@@ -144,7 +142,7 @@ describe('<SelectMultiple>', () => {
144
142
  describe('Events', () => {
145
143
  describe('should trigger `onInputClick` when the select button is clicked', () => {
146
144
  it('with input variant', async () => {
147
- const onClick = jest.fn();
145
+ const onClick = vi.fn();
148
146
  const { inputWrapper } = setup({ onInputClick: onClick, variant: SelectVariant.input });
149
147
 
150
148
  await userEvent.click(inputWrapper as any);
@@ -152,7 +150,7 @@ describe('<SelectMultiple>', () => {
152
150
  });
153
151
 
154
152
  it('with chip variant', async () => {
155
- const onClick = jest.fn();
153
+ const onClick = vi.fn();
156
154
  const { chip } = setup({ onInputClick: onClick, variant: SelectVariant.chip });
157
155
 
158
156
  await userEvent.click(chip as any);
@@ -161,7 +159,7 @@ describe('<SelectMultiple>', () => {
161
159
  });
162
160
 
163
161
  it('should call onClear when an item is clicked with the correct value', async () => {
164
- const onClear = jest.fn();
162
+ const onClear = vi.fn();
165
163
  const { valueChips } = setup({
166
164
  onClear,
167
165
  value: ['val 1', 'val 2'],
@@ -184,7 +182,7 @@ describe('<SelectMultiple>', () => {
184
182
  const value1 = 'Value 1';
185
183
  const value2 = 'Value 2';
186
184
 
187
- const onClear = jest.fn();
185
+ const onClear = vi.fn();
188
186
  const { chip } = setup({
189
187
  onClear,
190
188
  value: [value1, value2],
@@ -1,4 +1,4 @@
1
- import React, { ReactNode, RefObject, SyntheticEvent } from 'react';
1
+ import { ReactNode, RefObject, SyntheticEvent } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
4
 
@@ -1,5 +1,5 @@
1
1
  import classNames from 'classnames';
2
- import React, { Ref, useCallback, useRef } from 'react';
2
+ import { Ref, useCallback, useRef } from 'react';
3
3
 
4
4
  import { Placement } from '@lumx/react';
5
5
  import { Kind, Theme } from '@lumx/core/js/constants';
@@ -1,6 +1,6 @@
1
1
  import { IconButtonProps } from '@lumx/react';
2
2
  import { GenericProps, HasTheme, ValueOf } from '@lumx/react/utils/type';
3
- import React, { ReactNode, SyntheticEvent } from 'react';
3
+ import { ReactNode, SyntheticEvent } from 'react';
4
4
 
5
5
  /**
6
6
  * Select variants.
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { render } from '@testing-library/react';
4
2
  import { getByClassName } from '@lumx/react/testing/utils/queries';
5
3
  import { commonTestsSuiteRTL } from '@lumx/react/testing/utils';
@@ -1,4 +1,4 @@
1
- import React, { Children, ReactNode } from 'react';
1
+ import { Children, ReactNode } from 'react';
2
2
 
3
3
  import classNames from 'classnames';
4
4
 
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import { getAllByClassName, queryAllByClassName } from '@lumx/react/testing/utils/queries';
4
2
  import { render, screen } from '@testing-library/react';
5
3
  import { commonTestsSuiteRTL } from '@lumx/react/testing/utils';
@@ -10,7 +8,7 @@ const CLASSNAME = SideNavigationItem.className as string;
10
8
 
11
9
  const toggleButtonProps = { label: 'Toggle' };
12
10
 
13
- jest.mock('@lumx/react/hooks/useId', () => ({ useId: () => ':r1:' }));
11
+ vi.mock('@lumx/react/hooks/useId', () => ({ useId: () => ':r1:' }));
14
12
 
15
13
  /**
16
14
  * Mounts the component and returns common DOM elements / data needed in multiple tests further down.
@@ -106,7 +104,7 @@ describe(`<${SideNavigationItem.displayName}>`, () => {
106
104
 
107
105
  describe('children and link', () => {
108
106
  it('should render with children and link', () => {
109
- const onActionClick = jest.fn();
107
+ const onActionClick = vi.fn();
110
108
  const label = 'Side navigation item';
111
109
  const { props, toggle, link } = setup({
112
110
  label,