@lumx/react 3.20.1-alpha.5 → 3.20.1-alpha.6
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.
- package/_internal/index.js.map +1 -1
- package/index.d.ts +35 -34
- package/index.js +778 -651
- package/index.js.map +1 -1
- package/package.json +13 -12
- package/src/components/alert-dialog/AlertDialog.stories.tsx +1 -1
- package/src/components/alert-dialog/AlertDialog.test.tsx +3 -4
- package/src/components/autocomplete/Autocomplete.stories.tsx +1 -1
- package/src/components/autocomplete/Autocomplete.test.tsx +3 -5
- package/src/components/autocomplete/Autocomplete.tsx +1 -1
- package/src/components/autocomplete/AutocompleteMultiple.stories.tsx +1 -1
- package/src/components/autocomplete/AutocompleteMultiple.test.tsx +0 -2
- package/src/components/autocomplete/AutocompleteMultiple.tsx +1 -1
- package/src/components/avatar/Avatar.stories.tsx +0 -2
- package/src/components/avatar/Avatar.test.tsx +0 -2
- package/src/components/avatar/Avatar.tsx +1 -1
- package/src/components/badge/Badge.stories.tsx +0 -1
- package/src/components/badge/Badge.test.tsx +0 -2
- package/src/components/badge/Badge.tsx +1 -1
- package/src/components/badge/BadgeWrapper.stories.tsx +0 -1
- package/src/components/badge/BadgeWrapper.test.tsx +0 -2
- package/src/components/badge/BadgeWrapper.tsx +1 -1
- package/src/components/button/Button.stories.tsx +0 -1
- package/src/components/button/Button.test.tsx +9 -11
- package/src/components/button/Button.tsx +0 -2
- package/src/components/button/ButtonGroup.stories.tsx +0 -2
- package/src/components/button/ButtonGroup.test.tsx +0 -2
- package/src/components/button/ButtonGroup.tsx +0 -2
- package/src/components/button/ButtonRoot.tsx +7 -37
- package/src/components/button/IconButton.test.tsx +0 -2
- package/src/components/button/IconButton.tsx +0 -2
- package/src/components/checkbox/Checkbox.test.tsx +3 -5
- package/src/components/chip/Chip.stories.tsx +0 -2
- package/src/components/chip/Chip.test.tsx +19 -19
- package/src/components/chip/Chip.tsx +1 -1
- package/src/components/chip/ChipGroup.stories.tsx +0 -2
- package/src/components/chip/ChipGroup.test.tsx +0 -2
- package/src/components/chip/ChipGroup.tsx +1 -1
- package/src/components/comment-block/CommentBlock.stories.tsx +0 -1
- package/src/components/comment-block/CommentBlock.test.tsx +0 -1
- package/src/components/comment-block/CommentBlock.tsx +1 -1
- package/src/components/date-picker/DatePicker.test.tsx +3 -5
- package/src/components/date-picker/DatePicker.tsx +1 -1
- package/src/components/date-picker/DatePickerControlled.test.tsx +6 -8
- package/src/components/date-picker/DatePickerField.test.tsx +3 -5
- package/src/components/dialog/Dialog.test.tsx +4 -6
- package/src/components/divider/Divider.test.tsx +0 -2
- package/src/components/divider/Divider.tsx +0 -2
- package/src/components/drag-handle/DragHandle.test.tsx +0 -2
- package/src/components/drag-handle/DragHandle.tsx +0 -2
- package/src/components/dropdown/Dropdown.stories.tsx +1 -1
- package/src/components/dropdown/Dropdown.test.tsx +3 -3
- package/src/components/dropdown/Dropdown.tsx +1 -1
- package/src/components/expansion-panel/ExpansionPanel.test.tsx +6 -7
- package/src/components/flag/Flag.test.tsx +0 -2
- package/src/components/flag/Flag.tsx +0 -2
- package/src/components/flex-box/FlexBox.stories.tsx +0 -2
- package/src/components/flex-box/FlexBox.test.tsx +0 -1
- package/src/components/flex-box/FlexBox.tsx +1 -1
- package/src/components/generic-block/GenericBlock.test.tsx +1 -1
- package/src/components/grid/Grid.tsx +0 -2
- package/src/components/grid/GridItem.tsx +0 -2
- package/src/components/grid-column/GridColumn.stories.tsx +0 -1
- package/src/components/grid-column/GridColumn.test.jsx +0 -2
- package/src/components/grid-column/GridColumn.tsx +1 -1
- package/src/components/heading/Heading.stories.tsx +0 -1
- package/src/components/heading/Heading.test.tsx +0 -2
- package/src/components/heading/Heading.tsx +0 -2
- package/src/components/heading/HeadingLevelProvider.tsx +1 -1
- package/src/components/icon/Icon.stories.tsx +30 -4
- package/src/components/icon/Icon.test.tsx +85 -4
- package/src/components/icon/Icon.tsx +0 -2
- package/src/components/image-block/ImageBlock.stories.tsx +0 -2
- package/src/components/image-block/ImageBlock.test.tsx +0 -1
- package/src/components/image-block/ImageBlock.tsx +1 -1
- package/src/components/image-block/ImageCaption.tsx +1 -1
- package/src/components/image-lightbox/ImageLightbox.stories.tsx +0 -1
- package/src/components/image-lightbox/ImageLightbox.test.tsx +11 -9
- package/src/components/image-lightbox/types.ts +0 -2
- package/src/components/inline-list/InlineList.stories.tsx +0 -1
- package/src/components/inline-list/InlineList.test.tsx +0 -2
- package/src/components/inline-list/InlineList.tsx +1 -1
- package/src/components/input-helper/InputHelper.test.tsx +0 -2
- package/src/components/input-helper/InputHelper.tsx +1 -1
- package/src/components/input-label/InputLabel.stories.tsx +0 -2
- package/src/components/input-label/InputLabel.test.tsx +0 -2
- package/src/components/input-label/InputLabel.tsx +1 -1
- package/src/components/lightbox/Lightbox.test.tsx +0 -2
- package/src/components/lightbox/Lightbox.tsx +1 -1
- package/src/components/link/Link.stories.tsx +0 -1
- package/src/components/link/Link.test.tsx +13 -13
- package/src/components/link/Link.tsx +9 -22
- package/src/components/link-preview/LinkPreview.test.tsx +0 -2
- package/src/components/link-preview/LinkPreview.tsx +0 -2
- package/src/components/list/List.stories.tsx +1 -1
- package/src/components/list/List.test.tsx +0 -2
- package/src/components/list/List.tsx +1 -1
- package/src/components/list/ListDivider.test.tsx +0 -2
- package/src/components/list/ListDivider.tsx +0 -2
- package/src/components/list/ListItem.test.tsx +5 -7
- package/src/components/list/ListItem.tsx +1 -1
- package/src/components/list/ListSubheader.test.tsx +0 -2
- package/src/components/list/ListSubheader.tsx +1 -1
- package/src/components/message/Message.test.tsx +1 -2
- package/src/components/message/Message.tsx +1 -1
- package/src/components/mosaic/Mosaic.test.tsx +3 -5
- package/src/components/mosaic/Mosaic.tsx +1 -1
- package/src/components/navigation/Navigation.stories.tsx +0 -2
- package/src/components/navigation/Navigation.test.tsx +0 -2
- package/src/components/navigation/Navigation.tsx +0 -2
- package/src/components/navigation/NavigationItem.test.tsx +0 -2
- package/src/components/navigation/NavigationItem.tsx +7 -11
- package/src/components/navigation/NavigationSection.test.tsx +0 -2
- package/src/components/navigation/NavigationSection.tsx +5 -4
- package/src/components/notification/Notification.test.tsx +4 -5
- package/src/components/notification/Notification.tsx +1 -1
- package/src/components/popover/Popover.test.tsx +0 -2
- package/src/components/popover/Popover.tsx +1 -1
- package/src/components/popover/usePopoverStyle.tsx +1 -1
- package/src/components/popover-dialog/PopoverDialog.test.tsx +1 -2
- package/src/components/popover-dialog/PopoverDialog.tsx +0 -2
- package/src/components/post-block/PostBlock.test.tsx +0 -2
- package/src/components/post-block/PostBlock.tsx +1 -1
- package/src/components/progress/Progress.tsx +0 -2
- package/src/components/progress/ProgressCircular.stories.tsx +0 -1
- package/src/components/progress/ProgressCircular.test.tsx +0 -2
- package/src/components/progress/ProgressCircular.tsx +0 -2
- package/src/components/progress/ProgressLinear.test.tsx +0 -2
- package/src/components/progress/ProgressLinear.tsx +0 -2
- package/src/components/progress-tracker/ProgressTracker.stories.tsx +1 -1
- package/src/components/progress-tracker/ProgressTracker.test.tsx +0 -2
- package/src/components/progress-tracker/ProgressTrackerProvider.test.tsx +0 -2
- package/src/components/progress-tracker/ProgressTrackerProvider.tsx +1 -1
- package/src/components/progress-tracker/ProgressTrackerStep.test.tsx +0 -2
- package/src/components/progress-tracker/ProgressTrackerStep.tsx +1 -1
- package/src/components/progress-tracker/ProgressTrackerStepPanel.test.tsx +0 -2
- package/src/components/progress-tracker/ProgressTrackerStepPanel.tsx +0 -2
- package/src/components/radio-button/RadioButton.test.tsx +3 -5
- package/src/components/radio-button/RadioButton.tsx +1 -1
- package/src/components/radio-button/RadioGroup.stories.tsx +1 -1
- package/src/components/radio-button/RadioGroup.test.tsx +0 -2
- package/src/components/radio-button/RadioGroup.tsx +1 -1
- package/src/components/select/Select.stories.tsx +1 -1
- package/src/components/select/Select.test.tsx +8 -9
- package/src/components/select/Select.tsx +1 -1
- package/src/components/select/SelectMultiple.stories.tsx +1 -1
- package/src/components/select/SelectMultiple.test.tsx +5 -7
- package/src/components/select/SelectMultiple.tsx +1 -1
- package/src/components/select/WithSelectContext.tsx +1 -1
- package/src/components/select/constants.ts +1 -1
- package/src/components/side-navigation/SideNavigation.test.tsx +0 -2
- package/src/components/side-navigation/SideNavigation.tsx +1 -1
- package/src/components/side-navigation/SideNavigationItem.test.tsx +2 -4
- package/src/components/side-navigation/SideNavigationItem.tsx +23 -28
- package/src/components/skeleton/SkeletonCircle.test.tsx +0 -2
- package/src/components/skeleton/SkeletonCircle.tsx +0 -2
- package/src/components/skeleton/SkeletonRectangle.test.tsx +0 -2
- package/src/components/skeleton/SkeletonRectangle.tsx +0 -2
- package/src/components/skeleton/SkeletonTypography.stories.tsx +0 -2
- package/src/components/skeleton/SkeletonTypography.test.tsx +0 -2
- package/src/components/skeleton/SkeletonTypography.tsx +1 -1
- package/src/components/slider/Slider.test.tsx +1 -3
- package/src/components/slider/Slider.tsx +1 -1
- package/src/components/slideshow/Slideshow.stories.tsx +0 -1
- package/src/components/slideshow/Slideshow.test.tsx +0 -2
- package/src/components/slideshow/SlideshowControls.stories.tsx +0 -2
- package/src/components/slideshow/SlideshowItem.tsx +0 -2
- package/src/components/slideshow/useSlideFocusManagement.tsx +1 -1
- package/src/components/switch/Switch.test.tsx +5 -7
- package/src/components/switch/Switch.tsx +1 -1
- package/src/components/table/Table.test.tsx +0 -2
- package/src/components/table/Table.tsx +0 -2
- package/src/components/table/TableBody.test.tsx +0 -2
- package/src/components/table/TableBody.tsx +0 -2
- package/src/components/table/TableCell.test.tsx +1 -3
- package/src/components/table/TableCell.tsx +0 -2
- package/src/components/table/TableHeader.test.tsx +0 -2
- package/src/components/table/TableHeader.tsx +0 -2
- package/src/components/table/TableRow.test.tsx +0 -2
- package/src/components/table/TableRow.tsx +0 -2
- package/src/components/tabs/Tab.test.tsx +0 -2
- package/src/components/tabs/Tab.tsx +1 -1
- package/src/components/tabs/TabList.test.tsx +0 -2
- package/src/components/tabs/TabPanel.test.tsx +0 -2
- package/src/components/tabs/TabPanel.tsx +0 -2
- package/src/components/tabs/TabProvider.test.tsx +0 -2
- package/src/components/tabs/TabProvider.tsx +1 -1
- package/src/components/tabs/Tabs.stories.tsx +1 -1
- package/src/components/text/Text.stories.tsx +1 -1
- package/src/components/text/Text.test.tsx +0 -2
- package/src/components/text/Text.tsx +0 -2
- package/src/components/text-field/TextField.test.tsx +9 -10
- package/src/components/text-field/TextField.tsx +1 -1
- package/src/components/thumbnail/Thumbnail.test.tsx +29 -7
- package/src/components/thumbnail/Thumbnail.tsx +11 -11
- package/src/components/toolbar/Toolbar.tsx +1 -1
- package/src/components/tooltip/Tooltip.stories.tsx +2 -1
- package/src/components/tooltip/Tooltip.test.tsx +14 -8
- package/src/components/uploader/Uploader.test.tsx +2 -4
- package/src/components/user-block/UserBlock.stories.tsx +0 -2
- package/src/components/user-block/UserBlock.test.tsx +1 -3
- package/src/hooks/useId.test.tsx +0 -1
- package/src/hooks/useInfiniteScroll.tsx +1 -1
- package/src/hooks/usePreviousValue.ts +0 -1
- package/src/stories/decorators/withChromaticForceScreenSize.tsx +0 -1
- package/src/stories/decorators/withNestedProps.tsx +0 -1
- package/src/stories/decorators/withThemedBackground.tsx +0 -2
- package/src/stories/decorators/withWrapper.tsx +0 -2
- package/src/stories/utils/CustomLink.tsx +0 -1
- package/src/testing/utils/ThemeSentinel.tsx +0 -1
- package/src/untypped-modules.d.ts +4 -0
- package/src/utils/ClickAwayProvider/ClickAwayProvider.stories.jsx +1 -1
- package/src/utils/ClickAwayProvider/ClickAwayProvider.tsx +1 -1
- package/src/utils/MaterialThemeSwitcher/MaterialThemeSwitcher.tsx +1 -1
- package/src/utils/Portal/Portal.test.tsx +0 -1
- package/src/utils/Portal/PortalProvider.stories.jsx +0 -1
- package/src/utils/Portal/PortalProvider.test.tsx +1 -2
- package/src/utils/date/getYearDisplayName.test.ts +1 -1
- package/src/utils/disabled/DisabledStateProvider.stories.tsx +0 -2
- package/src/utils/disabled/useDisableStateProps.test.tsx +2 -2
- package/src/utils/react/OnBeforeUnmount.tsx +1 -1
- package/src/utils/react/RawClickable.test.tsx +153 -0
- package/src/utils/react/RawClickable.tsx +65 -0
- package/src/utils/react/skipRender.tsx +2 -2
- package/src/utils/react/wrapChildrenIconWithSpaces.test.tsx +1 -1
- package/src/utils/type/HasPolymorphicAs.ts +0 -2
- package/src/utils/type/HasRequiredLinkHref.ts +1 -0
- package/src/utils/type/index.ts +1 -0
- package/utils/index.d.ts +6 -6
- package/src/utils/react/renderButtonOrLink.tsx +0 -16
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
1
|
import { getByClassName } from '@lumx/react/testing/utils/queries';
|
|
4
2
|
import { commonTestsSuiteRTL } from '@lumx/react/testing/utils';
|
|
5
3
|
import { render, screen, within } from '@testing-library/react';
|
|
@@ -42,7 +40,7 @@ describe(`<${TableCell.displayName}>`, () => {
|
|
|
42
40
|
|
|
43
41
|
it('should render header variant clickable', async () => {
|
|
44
42
|
const content = 'Content';
|
|
45
|
-
const onHeaderClick =
|
|
43
|
+
const onHeaderClick = vi.fn();
|
|
46
44
|
const { tableCell } = setup({ children: content, variant: 'head', onHeaderClick });
|
|
47
45
|
|
|
48
46
|
const headerButton = within(tableCell).getByRole('button', { name: content });
|
|
@@ -8,7 +8,7 @@ import { toFlattenProps } from '@lumx/react/stories/utils/toFlattenProps';
|
|
|
8
8
|
import { withCategory } from '@lumx/react/stories/utils/withCategory';
|
|
9
9
|
import get from 'lodash/get';
|
|
10
10
|
import times from 'lodash/times';
|
|
11
|
-
import
|
|
11
|
+
import { useState } from 'react';
|
|
12
12
|
|
|
13
13
|
export default {
|
|
14
14
|
title: 'LumX components/tabs',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { ALL_TYPOGRAPHY, allTypographyArgType } from '@lumx/react/stories/controls/typography';
|
|
2
1
|
import React from 'react';
|
|
3
2
|
|
|
3
|
+
import { ALL_TYPOGRAPHY, allTypographyArgType } from '@lumx/react/stories/controls/typography';
|
|
4
4
|
import { colorArgType, colorVariantArgType } from '@lumx/react/stories/controls/color';
|
|
5
5
|
import { textElementArgType } from '@lumx/react/stories/controls/element';
|
|
6
6
|
import { withUndefined } from '@lumx/react/stories/controls/withUndefined';
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { Mock } from 'vitest';
|
|
3
2
|
import camelCase from 'lodash/camelCase';
|
|
4
3
|
|
|
5
4
|
import { commonTestsSuiteRTL, SetupRenderOptions } from '@lumx/react/testing/utils';
|
|
@@ -20,7 +19,7 @@ import { TextField, TextFieldProps } from './TextField';
|
|
|
20
19
|
|
|
21
20
|
const CLASSNAME = TextField.className as string;
|
|
22
21
|
|
|
23
|
-
|
|
22
|
+
vi.mock('@lumx/react/utils/browser/isFocusVisible');
|
|
24
23
|
|
|
25
24
|
/**
|
|
26
25
|
* Mounts the component and returns common DOM elements / data needed in multiple tests further down.
|
|
@@ -49,7 +48,7 @@ const setup = (propsOverride: Partial<TextFieldProps> = {}, { wrapper }: SetupRe
|
|
|
49
48
|
};
|
|
50
49
|
|
|
51
50
|
describe(`<${TextField.displayName}>`, () => {
|
|
52
|
-
(isFocusVisible as
|
|
51
|
+
(isFocusVisible as Mock).mockReturnValue(false);
|
|
53
52
|
|
|
54
53
|
describe('Render', () => {
|
|
55
54
|
it('should render defaults', () => {
|
|
@@ -180,7 +179,7 @@ describe(`<${TextField.displayName}>`, () => {
|
|
|
180
179
|
|
|
181
180
|
describe('Events', () => {
|
|
182
181
|
it('should trigger `onChange` when text field is changed', async () => {
|
|
183
|
-
const onChange =
|
|
182
|
+
const onChange = vi.fn();
|
|
184
183
|
const { inputNative } = setup({ value: '', name: 'name', onChange });
|
|
185
184
|
|
|
186
185
|
await userEvent.tab();
|
|
@@ -192,7 +191,7 @@ describe(`<${TextField.displayName}>`, () => {
|
|
|
192
191
|
});
|
|
193
192
|
|
|
194
193
|
it('should trigger `onChange` with empty value when text field is cleared', async () => {
|
|
195
|
-
const onChange =
|
|
194
|
+
const onChange = vi.fn();
|
|
196
195
|
const { clearButton } = setup({
|
|
197
196
|
value: 'initial value',
|
|
198
197
|
name: 'name',
|
|
@@ -208,8 +207,8 @@ describe(`<${TextField.displayName}>`, () => {
|
|
|
208
207
|
});
|
|
209
208
|
|
|
210
209
|
it('should trigger `onChange` with empty value and `onClear` when text field is cleared', async () => {
|
|
211
|
-
const onChange =
|
|
212
|
-
const onClear =
|
|
210
|
+
const onChange = vi.fn();
|
|
211
|
+
const onClear = vi.fn();
|
|
213
212
|
const { clearButton } = setup({
|
|
214
213
|
value: 'initial value',
|
|
215
214
|
name: 'name',
|
|
@@ -229,7 +228,7 @@ describe(`<${TextField.displayName}>`, () => {
|
|
|
229
228
|
|
|
230
229
|
describe('Disabled state', () => {
|
|
231
230
|
it('should render with "isDisabled"', async () => {
|
|
232
|
-
const onChange =
|
|
231
|
+
const onChange = vi.fn();
|
|
233
232
|
const { element, inputNative } = setup({
|
|
234
233
|
label: 'Label',
|
|
235
234
|
isDisabled: true,
|
|
@@ -255,7 +254,7 @@ describe(`<${TextField.displayName}>`, () => {
|
|
|
255
254
|
});
|
|
256
255
|
|
|
257
256
|
it('should render with "aria-disabled"', async () => {
|
|
258
|
-
const onChange =
|
|
257
|
+
const onChange = vi.fn();
|
|
259
258
|
const { element, inputNative } = setup({
|
|
260
259
|
label: 'Label',
|
|
261
260
|
'aria-disabled': true,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { ReactNode, Ref, RefObject, SyntheticEvent, useEffect, useRef, useState } from 'react';
|
|
2
2
|
|
|
3
3
|
import classNames from 'classnames';
|
|
4
4
|
import get from 'lodash/get';
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
1
|
import { DisabledStateProvider } from '@lumx/react/utils';
|
|
4
2
|
import { commonTestsSuiteRTL, SetupRenderOptions } from '@lumx/react/testing/utils';
|
|
5
3
|
import { queryByClassName } from '@lumx/react/testing/utils/queries';
|
|
6
|
-
import { fireEvent, render } from '@testing-library/react';
|
|
4
|
+
import { fireEvent, render, screen } from '@testing-library/react';
|
|
7
5
|
import { Thumbnail, ThumbnailProps } from './Thumbnail';
|
|
8
6
|
|
|
9
7
|
const CLASSNAME = Thumbnail.className as string;
|
|
@@ -28,9 +26,20 @@ describe(`<${Thumbnail.displayName}>`, () => {
|
|
|
28
26
|
},
|
|
29
27
|
});
|
|
30
28
|
|
|
31
|
-
describe('
|
|
32
|
-
it('should
|
|
33
|
-
const onClick =
|
|
29
|
+
describe('clickable button', () => {
|
|
30
|
+
it('should render clickable button', async () => {
|
|
31
|
+
const onClick = vi.fn();
|
|
32
|
+
const { thumbnail } = setup({ onClick, alt: 'Name' });
|
|
33
|
+
const button = screen.getByRole('button', { name: 'Name' });
|
|
34
|
+
expect(button).toBe(thumbnail);
|
|
35
|
+
expect(button).toHaveAttribute('type', 'button');
|
|
36
|
+
|
|
37
|
+
fireEvent.click(thumbnail as HTMLElement);
|
|
38
|
+
expect(onClick).toHaveBeenCalled();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('should not render button in disabled context', () => {
|
|
42
|
+
const onClick = vi.fn();
|
|
34
43
|
const { thumbnail, container } = setup(
|
|
35
44
|
{ onClick, 'aria-label': 'thumbnail' },
|
|
36
45
|
{
|
|
@@ -47,8 +56,21 @@ describe(`<${Thumbnail.displayName}>`, () => {
|
|
|
47
56
|
fireEvent.click(thumbnail as HTMLElement);
|
|
48
57
|
expect(onClick).not.toHaveBeenCalled();
|
|
49
58
|
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
describe('clickable link', () => {
|
|
62
|
+
it('should render clickable link', async () => {
|
|
63
|
+
const onClick = vi.fn((evt: any) => evt.preventDefault());
|
|
64
|
+
const { thumbnail } = setup({ linkProps: { href: '#' }, onClick, alt: 'Name' });
|
|
65
|
+
const link = screen.getByRole('link');
|
|
66
|
+
expect(link).toBe(thumbnail);
|
|
67
|
+
expect(link).toHaveAttribute('href', '#');
|
|
68
|
+
|
|
69
|
+
fireEvent.click(thumbnail as HTMLElement);
|
|
70
|
+
expect(onClick).toHaveBeenCalled();
|
|
71
|
+
});
|
|
50
72
|
|
|
51
|
-
it('should
|
|
73
|
+
it('should not render link in disabled context', () => {
|
|
52
74
|
const { container, thumbnail } = setup(
|
|
53
75
|
{ linkAs: 'a', linkProps: { href: '#' }, 'aria-label': 'thumbnail' },
|
|
54
76
|
{
|
|
@@ -22,6 +22,7 @@ import { useTheme } from '@lumx/react/utils/theme/ThemeContext';
|
|
|
22
22
|
import { forwardRef } from '@lumx/react/utils/react/forwardRef';
|
|
23
23
|
|
|
24
24
|
import { useDisableStateProps } from '@lumx/react/utils/disabled';
|
|
25
|
+
import { RawClickable } from '@lumx/react/utils/react/RawClickable';
|
|
25
26
|
import { FocusPoint, ThumbnailSize, ThumbnailVariant } from './types';
|
|
26
27
|
|
|
27
28
|
type ImgHTMLProps = ImgHTMLAttributes<HTMLImageElement>;
|
|
@@ -100,7 +101,7 @@ const DEFAULT_PROPS: Partial<ThumbnailProps> = {
|
|
|
100
101
|
* @return React element.
|
|
101
102
|
*/
|
|
102
103
|
export const Thumbnail = forwardRef<ThumbnailProps>((props, ref) => {
|
|
103
|
-
const { isAnyDisabled, otherProps } = useDisableStateProps(props);
|
|
104
|
+
const { isAnyDisabled, otherProps, disabledStateProps } = useDisableStateProps(props);
|
|
104
105
|
const defaultTheme = useTheme() || Theme.light;
|
|
105
106
|
const {
|
|
106
107
|
align,
|
|
@@ -151,18 +152,17 @@ export const Thumbnail = forwardRef<ThumbnailProps>((props, ref) => {
|
|
|
151
152
|
}
|
|
152
153
|
|
|
153
154
|
const isLink = Boolean(linkProps?.href || linkAs);
|
|
154
|
-
const
|
|
155
|
-
const isClickable = !isAnyDisabled && (isButton || isLink);
|
|
155
|
+
const isClickable = !isAnyDisabled && Boolean(isLink || !!forwardedProps.onClick);
|
|
156
156
|
|
|
157
|
-
|
|
157
|
+
const Wrapper: any = isClickable ? RawClickable : 'div';
|
|
158
158
|
const wrapperProps = { ...forwardedProps };
|
|
159
|
-
if (
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
159
|
+
if (isClickable) {
|
|
160
|
+
Object.assign(wrapperProps, { as: linkAs || (linkProps?.href ? 'a' : 'button') }, disabledStateProps);
|
|
161
|
+
if (isLink) {
|
|
162
|
+
Object.assign(wrapperProps, linkProps);
|
|
163
|
+
} else {
|
|
164
|
+
wrapperProps['aria-label'] = forwardedProps['aria-label'] || alt;
|
|
165
|
+
}
|
|
166
166
|
}
|
|
167
167
|
|
|
168
168
|
// If we have a loading placeholder image that is really loaded (complete)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Button, Dialog, Dropdown, Placement, Tooltip } from '@lumx/react';
|
|
2
1
|
import React, { useState } from 'react';
|
|
2
|
+
|
|
3
|
+
import { Button, Dialog, Dropdown, Placement, Tooltip } from '@lumx/react';
|
|
3
4
|
import { getSelectArgType } from '@lumx/react/stories/controls/selectArgType';
|
|
4
5
|
import { withChromaticForceScreenSize } from '@lumx/react/stories/decorators/withChromaticForceScreenSize';
|
|
5
6
|
import { ARIA_LINK_MODES } from '@lumx/react/components/tooltip/constants';
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
|
+
import { MockInstance } from 'vitest';
|
|
3
4
|
import { Button } from '@lumx/react';
|
|
4
5
|
import { screen, render } from '@testing-library/react';
|
|
5
6
|
import { queryAllByTagName, queryByClassName } from '@lumx/react/testing/utils/queries';
|
|
@@ -12,13 +13,18 @@ import { Tooltip, TooltipProps } from './Tooltip';
|
|
|
12
13
|
|
|
13
14
|
const CLASSNAME = Tooltip.className as string;
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
vi.mock('@lumx/react/utils/browser/isFocusVisible');
|
|
17
|
+
vi.mock('@lumx/react/hooks/useId', () => ({ useId: () => ':r1:' }));
|
|
17
18
|
// Skip delays
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
+
});
|
|
22
28
|
|
|
23
29
|
/**
|
|
24
30
|
* Mounts the component and returns common DOM elements / data needed in multiple tests further down.
|
|
@@ -346,7 +352,7 @@ describe(`<${Tooltip.displayName}>`, () => {
|
|
|
346
352
|
});
|
|
347
353
|
|
|
348
354
|
it('should activate on anchor focus visible and close on escape', async () => {
|
|
349
|
-
(isFocusVisible as
|
|
355
|
+
(isFocusVisible as unknown as MockInstance).mockReturnValue(true);
|
|
350
356
|
let { tooltip } = await setup({
|
|
351
357
|
label: 'Tooltip label',
|
|
352
358
|
children: <Button>Anchor</Button>,
|
|
@@ -381,7 +387,7 @@ describe(`<${Tooltip.displayName}>`, () => {
|
|
|
381
387
|
});
|
|
382
388
|
|
|
383
389
|
it('should not activate on anchor focus if not visible', async () => {
|
|
384
|
-
(isFocusVisible as
|
|
390
|
+
(isFocusVisible as unknown as MockInstance).mockReturnValue(false);
|
|
385
391
|
let { tooltip } = await setup({
|
|
386
392
|
label: 'Tooltip label',
|
|
387
393
|
children: <Button>Anchor</Button>,
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
1
|
import { commonTestsSuiteRTL, SetupRenderOptions } from '@lumx/react/testing/utils';
|
|
4
2
|
|
|
5
3
|
import { render, screen } from '@testing-library/react';
|
|
@@ -89,9 +87,9 @@ describe(`<${Uploader.displayName}>`, () => {
|
|
|
89
87
|
${'button'} | ${{}}
|
|
90
88
|
${'button isDisabled '} | ${{ isDisabled: true }}
|
|
91
89
|
${'button aria-disabled'} | ${{ 'aria-disabled': true }}
|
|
92
|
-
${'file input '} | ${{ fileInputProps: { onChange:
|
|
90
|
+
${'file input '} | ${{ fileInputProps: { onChange: vi.fn() } }}
|
|
93
91
|
`('Events $name', ({ props }) => {
|
|
94
|
-
const onClick =
|
|
92
|
+
const onClick = vi.fn();
|
|
95
93
|
beforeEach(() => onClick.mockClear());
|
|
96
94
|
const assertClick = () => {
|
|
97
95
|
if (props.isDisabled || props['aria-disabled']) {
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
/* eslint-disable jsx-a11y/anchor-is-valid */
|
|
2
|
-
import React from 'react';
|
|
3
|
-
|
|
4
2
|
import { mdiMenuDown, mdiStar } from '@lumx/icons';
|
|
5
3
|
import { Badge, ColorPalette, Icon, IconButton, Link, Orientation, Size, Text } from '@lumx/react';
|
|
6
4
|
import { CustomLink } from '@lumx/react/stories/utils/CustomLink';
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
|
|
3
1
|
import { commonTestsSuiteRTL, SetupRenderOptions } from '@lumx/react/testing/utils';
|
|
4
2
|
import { render, within, screen } from '@testing-library/react';
|
|
5
3
|
import { getByClassName, queryByClassName } from '@lumx/react/testing/utils/queries';
|
|
@@ -36,7 +34,7 @@ describe(`<${UserBlock.displayName}>`, () => {
|
|
|
36
34
|
});
|
|
37
35
|
|
|
38
36
|
it('should render button', async () => {
|
|
39
|
-
const onClick =
|
|
37
|
+
const onClick = vi.fn();
|
|
40
38
|
const { name, thumbnail } = setup({
|
|
41
39
|
onClick,
|
|
42
40
|
name: 'John Doe',
|
package/src/hooks/useId.test.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable react-hooks/rules-of-hooks */
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
3
|
-
import
|
|
3
|
+
import { useCallback, useRef, useState } from 'react';
|
|
4
4
|
import { Button } from '@lumx/react';
|
|
5
5
|
import { ClickAwayProvider } from '@lumx/react/utils/ClickAwayProvider';
|
|
6
6
|
import { initDemoShadowDOMPortal } from '@lumx/react/stories/utils/initDemoShadowDOMPortal';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { createContext, RefObject, useContext, useEffect, useMemo, useRef } from 'react';
|
|
2
2
|
import { ClickAwayParameters, useClickAway } from '@lumx/react/hooks/useClickAway';
|
|
3
3
|
|
|
4
4
|
interface ContextValue {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
import { render, screen } from '@testing-library/react';
|
|
3
2
|
import { PortalInit, PortalProvider } from './PortalProvider';
|
|
4
3
|
import { Portal } from './Portal';
|
|
@@ -30,7 +29,7 @@ describe('PortalProvider', () => {
|
|
|
30
29
|
});
|
|
31
30
|
|
|
32
31
|
it('should call teardown on unmount', () => {
|
|
33
|
-
const teardownMock =
|
|
32
|
+
const teardownMock = vi.fn();
|
|
34
33
|
const portalContainer = document.createElement('div');
|
|
35
34
|
portalContainer.id = PORTAL_CONTAINER_ID;
|
|
36
35
|
document.body.appendChild(portalContainer);
|
|
@@ -4,7 +4,7 @@ describe(getYearDisplayName, () => {
|
|
|
4
4
|
beforeEach(() => {
|
|
5
5
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
6
6
|
// @ts-ignore
|
|
7
|
-
|
|
7
|
+
vi.spyOn(Intl, 'DisplayNames').mockImplementation(() => ({
|
|
8
8
|
resolvedOptions: () => ({
|
|
9
9
|
fallback: 'code',
|
|
10
10
|
locale: 'fr',
|
|
@@ -59,14 +59,14 @@ describe(useDisableStateProps.name, () => {
|
|
|
59
59
|
});
|
|
60
60
|
|
|
61
61
|
it('should forward onClick when not disabled', () => {
|
|
62
|
-
const onClick =
|
|
62
|
+
const onClick = vi.fn();
|
|
63
63
|
const { element } = setup({ onClick });
|
|
64
64
|
fireEvent.click(element);
|
|
65
65
|
expect(onClick).toHaveBeenCalled();
|
|
66
66
|
});
|
|
67
67
|
|
|
68
68
|
it('should not forward onClick when disabled', () => {
|
|
69
|
-
const onClick =
|
|
69
|
+
const onClick = vi.fn();
|
|
70
70
|
const { element } = setup({ disabled: true, onClick });
|
|
71
71
|
fireEvent.click(element);
|
|
72
72
|
expect(onClick).not.toHaveBeenCalled();
|