@nypl/design-system-react-components 0.25.7 → 0.25.10
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/CHANGELOG.md +119 -1
- package/README.md +1 -1
- package/dist/components/Button/Button.d.ts +6 -6
- package/dist/components/Button/ButtonTypes.d.ts +0 -1
- package/dist/components/Card/Card.d.ts +6 -4
- package/dist/components/Checkbox/Checkbox.d.ts +3 -2
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +3 -2
- package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +8 -2
- package/dist/components/DatePicker/DatePicker.d.ts +4 -3
- package/dist/components/Fieldset/Fieldset.d.ts +1 -3
- package/dist/components/Form/Form.d.ts +15 -14
- package/dist/components/Form/FormTypes.d.ts +2 -2
- package/dist/components/Heading/Heading.d.ts +7 -3
- package/dist/components/Heading/HeadingTypes.d.ts +6 -6
- package/dist/components/HelperErrorText/HelperErrorText.d.ts +5 -2
- package/dist/components/HorizontalRule/HorizontalRule.d.ts +3 -3
- package/dist/components/Icons/Icon.d.ts +4 -4
- package/dist/components/Icons/IconSvgs.d.ts +1 -21
- package/dist/components/Icons/IconTypes.d.ts +1 -23
- package/dist/components/Image/Image.d.ts +11 -3
- package/dist/components/Image/ImageTypes.d.ts +3 -1
- package/dist/components/Link/LinkTypes.d.ts +1 -0
- package/dist/components/Logo/Logo.d.ts +28 -0
- package/dist/components/Logo/LogoSvgs.d.ts +18 -0
- package/dist/components/Logo/LogoTypes.d.ts +30 -0
- package/dist/components/Modal/Modal.d.ts +0 -4
- package/dist/components/Notification/Notification.d.ts +4 -2
- package/dist/components/Placeholder/Placeholder.d.ts +3 -5
- package/dist/components/Radio/Radio.d.ts +6 -5
- package/dist/components/RadioGroup/RadioGroup.d.ts +6 -5
- package/dist/components/SearchBar/SearchBar.d.ts +15 -7
- package/dist/components/Select/Select.d.ts +5 -2
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -4
- package/dist/components/Slider/Slider.d.ts +3 -2
- package/dist/components/StatusBadge/StatusBadge.d.ts +2 -1
- package/dist/components/StructuredContent/StructuredContent.d.ts +41 -0
- package/dist/components/StructuredContent/StructuredContentTypes.d.ts +5 -0
- package/dist/components/Table/Table.d.ts +29 -0
- package/dist/components/Template/Template.d.ts +30 -6
- package/dist/components/Text/Text.d.ts +2 -2
- package/dist/components/TextInput/TextInput.d.ts +4 -3
- package/dist/components/Toggle/Toggle.d.ts +48 -0
- package/dist/components/Toggle/ToggleSizes.d.ts +4 -0
- package/dist/components/VideoPlayer/VideoPlayer.d.ts +17 -6
- package/dist/design-system-react-components.cjs.development.js +4698 -4405
- package/dist/design-system-react-components.cjs.development.js.map +1 -1
- package/dist/design-system-react-components.cjs.production.min.js +1 -1
- package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
- package/dist/design-system-react-components.esm.js +5862 -5573
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/index.d.ts +13 -8
- package/dist/resources.scss +0 -2
- package/dist/styles.css +2 -2
- package/dist/theme/components/breadcrumb.d.ts +1 -1
- package/dist/theme/components/button.d.ts +0 -12
- package/dist/theme/components/card.d.ts +14 -2
- package/dist/theme/components/customTable.d.ts +56 -0
- package/dist/theme/components/fieldset.d.ts +2 -2
- package/dist/theme/components/global.d.ts +1 -1
- package/dist/theme/components/heading.d.ts +4 -0
- package/dist/theme/components/label.d.ts +1 -1
- package/dist/theme/components/link.d.ts +14 -1
- package/dist/theme/components/list.d.ts +0 -2
- package/dist/theme/components/logo.d.ts +4 -0
- package/dist/theme/components/notification.d.ts +8 -4
- package/dist/theme/components/searchBar.d.ts +7 -13
- package/dist/theme/components/select.d.ts +1 -0
- package/dist/theme/components/structuredContent.d.ts +33 -0
- package/dist/theme/components/template.d.ts +10 -10
- package/dist/theme/components/textInput.d.ts +2 -0
- package/dist/theme/components/toggle.d.ts +71 -0
- package/dist/theme/foundations/spacing.d.ts +2 -0
- package/dist/utils/utils.d.ts +10 -0
- package/package.json +40 -37
- package/src/__tests__/utils/utils.test.ts +23 -1
- package/src/components/Accordion/Accordion.stories.mdx +16 -15
- package/src/components/Accordion/Accordion.test.tsx +45 -1
- package/src/components/Accordion/Accordion.tsx +20 -8
- package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +243 -0
- package/src/components/Autosuggest/Autosuggest.stories.mdx +2 -1
- package/src/components/Autosuggest/Autosuggest.stories.tsx +24 -48
- package/src/components/Autosuggest/_Autosuggest.scss +2 -6
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +43 -13
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +25 -0
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +9 -3
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +103 -4
- package/src/components/Button/Button.stories.mdx +93 -48
- package/src/components/Button/Button.test.tsx +0 -12
- package/src/components/Button/Button.tsx +7 -8
- package/src/components/Button/ButtonTypes.tsx +0 -1
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -12
- package/src/components/Card/Card.stories.mdx +246 -64
- package/src/components/Card/Card.test.tsx +45 -22
- package/src/components/Card/Card.tsx +30 -14
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +75 -37
- package/src/components/Chakra/Box.stories.mdx +3 -3
- package/src/components/Chakra/Center.stories.mdx +5 -5
- package/src/components/Chakra/Flex.stories.mdx +113 -0
- package/src/components/Chakra/Grid.stories.mdx +14 -17
- package/src/components/Chakra/Stack.stories.mdx +2 -2
- package/src/components/Checkbox/Checkbox.stories.mdx +37 -15
- package/src/components/Checkbox/Checkbox.tsx +13 -8
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +48 -16
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +14 -10
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +6 -3
- package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +151 -0
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +36 -23
- package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +85 -0
- package/src/components/DatePicker/DatePicker.stories.mdx +63 -18
- package/src/components/DatePicker/DatePicker.test.tsx +14 -12
- package/src/components/DatePicker/DatePicker.tsx +13 -10
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +41 -22
- package/src/components/Fieldset/Fieldset.stories.mdx +20 -9
- package/src/components/Fieldset/Fieldset.tsx +2 -4
- package/src/components/Form/Form.stories.mdx +75 -49
- package/src/components/Form/Form.test.tsx +92 -3
- package/src/components/Form/Form.tsx +28 -23
- package/src/components/Form/FormTypes.tsx +2 -2
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -1
- package/src/components/Grid/SimpleGrid.stories.mdx +26 -26
- package/src/components/Heading/Heading.stories.mdx +59 -23
- package/src/components/Heading/Heading.test.tsx +82 -18
- package/src/components/Heading/Heading.tsx +31 -31
- package/src/components/Heading/HeadingTypes.tsx +6 -6
- package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +71 -0
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +55 -27
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +42 -15
- package/src/components/HelperErrorText/HelperErrorText.tsx +24 -24
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +41 -4
- package/src/components/Hero/Hero.stories.mdx +72 -53
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +11 -9
- package/src/components/HorizontalRule/HorizontalRule.tsx +4 -6
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +4 -4
- package/src/components/Icons/Icon.stories.mdx +77 -75
- package/src/components/Icons/Icon.tsx +4 -5
- package/src/components/Icons/IconSvgs.tsx +2 -42
- package/src/components/Icons/IconTypes.tsx +1 -24
- package/src/components/Image/Image.stories.mdx +214 -104
- package/src/components/Image/Image.test.tsx +10 -0
- package/src/components/Image/Image.tsx +21 -10
- package/src/components/Image/ImageTypes.ts +2 -0
- package/src/components/Image/__snapshots__/Image.test.tsx.snap +24 -8
- package/src/components/Label/Label.stories.mdx +21 -20
- package/src/components/Link/Link.stories.mdx +103 -53
- package/src/components/Link/Link.test.tsx +108 -7
- package/src/components/Link/Link.tsx +58 -19
- package/src/components/Link/LinkTypes.tsx +1 -0
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +261 -0
- package/src/components/List/List.stories.mdx +37 -25
- package/src/components/List/List.tsx +1 -1
- package/src/components/Logo/Logo.stories.mdx +220 -0
- package/src/components/Logo/Logo.test.tsx +98 -0
- package/src/components/Logo/Logo.tsx +97 -0
- package/src/components/Logo/LogoSvgs.tsx +34 -0
- package/src/components/Logo/LogoTypes.tsx +32 -0
- package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +71 -0
- package/src/components/Modal/Modal.stories.mdx +20 -5
- package/src/components/Modal/Modal.tsx +2 -8
- package/src/components/Notification/Notification.stories.mdx +96 -40
- package/src/components/Notification/Notification.test.tsx +62 -16
- package/src/components/Notification/Notification.tsx +26 -9
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +121 -0
- package/src/components/Pagination/Pagination.stories.mdx +19 -9
- package/src/components/Pagination/Pagination.tsx +3 -3
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +42 -0
- package/src/components/Placeholder/Placeholder.tsx +7 -14
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +74 -46
- package/src/components/Radio/Radio.stories.mdx +39 -19
- package/src/components/Radio/Radio.tsx +13 -9
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +5 -5
- package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
- package/src/components/RadioGroup/RadioGroup.test.tsx +13 -11
- package/src/components/RadioGroup/RadioGroup.tsx +97 -94
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +24 -21
- package/src/components/SearchBar/SearchBar.Test.tsx +160 -34
- package/src/components/SearchBar/SearchBar.stories.mdx +116 -34
- package/src/components/SearchBar/SearchBar.tsx +70 -50
- package/src/components/Select/Select.stories.mdx +177 -66
- package/src/components/Select/Select.test.tsx +91 -2
- package/src/components/Select/Select.tsx +29 -13
- package/src/components/Select/__snapshots__/Select.test.tsx.snap +545 -0
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
- package/src/components/Slider/Slider.stories.mdx +74 -23
- package/src/components/Slider/Slider.test.tsx +35 -0
- package/src/components/Slider/Slider.tsx +22 -11
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +67 -30
- package/src/components/StatusBadge/StatusBadge.stories.mdx +33 -18
- package/src/components/StatusBadge/StatusBadge.tsx +2 -1
- package/src/components/StructuredContent/StructuredContent.stories.mdx +427 -0
- package/src/components/StructuredContent/StructuredContent.test.tsx +376 -0
- package/src/components/StructuredContent/StructuredContent.tsx +153 -0
- package/src/components/StructuredContent/StructuredContentTypes.tsx +5 -0
- package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +283 -0
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +32 -83
- package/src/components/StyleGuide/Breakpoints.stories.mdx +1 -11
- package/src/components/StyleGuide/Buttons.stories.mdx +3 -18
- package/src/components/StyleGuide/ColorCard.tsx +1 -2
- package/src/components/StyleGuide/Colors.stories.mdx +3 -11
- package/src/components/StyleGuide/DesignTokens.stories.mdx +3 -8
- package/src/components/StyleGuide/Forms.stories.mdx +2 -10
- package/src/components/StyleGuide/Iconography.stories.mdx +8 -34
- package/src/components/StyleGuide/Spacing.stories.mdx +3 -14
- package/src/components/StyleGuide/Typography.stories.mdx +64 -76
- package/src/components/Table/Table.stories.mdx +165 -0
- package/src/components/Table/Table.test.tsx +137 -0
- package/src/components/Table/Table.tsx +126 -0
- package/src/components/Table/__snapshots__/Table.test.tsx.snap +1179 -0
- package/src/components/Tabs/Tabs.stories.mdx +20 -14
- package/src/components/Tabs/Tabs.test.tsx +21 -5
- package/src/components/Tabs/Tabs.tsx +33 -18
- package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +195 -0
- package/src/components/Template/Template.stories.mdx +132 -49
- package/src/components/Template/Template.test.tsx +128 -6
- package/src/components/Template/Template.tsx +93 -13
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +169 -0
- package/src/components/Text/Text.stories.mdx +33 -11
- package/src/components/Text/Text.tsx +2 -2
- package/src/components/TextInput/TextInput.stories.mdx +84 -17
- package/src/components/TextInput/TextInput.test.tsx +96 -0
- package/src/components/TextInput/TextInput.tsx +12 -8
- package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +240 -0
- package/src/components/Toggle/Toggle.stories.mdx +200 -0
- package/src/components/Toggle/Toggle.test.tsx +140 -0
- package/src/components/Toggle/Toggle.tsx +123 -0
- package/src/components/Toggle/ToggleSizes.tsx +4 -0
- package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +255 -0
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +96 -25
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +103 -1
- package/src/components/VideoPlayer/VideoPlayer.tsx +72 -22
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +57 -3
- package/src/docs/Chakra.stories.mdx +5 -8
- package/src/docs/Intro.stories.mdx +2 -2
- package/src/index.ts +19 -6
- package/src/styles/base/_03-base.scss +1 -1
- package/src/styles/base/_place-holder.scss +7 -7
- package/src/styles.scss +1 -5
- package/src/theme/components/breadcrumb.ts +5 -5
- package/src/theme/components/button.ts +5 -12
- package/src/theme/components/card.ts +9 -7
- package/src/theme/components/checkbox.ts +1 -1
- package/src/theme/components/customTable.ts +63 -0
- package/src/theme/components/datePicker.ts +1 -1
- package/src/theme/components/global.ts +7 -7
- package/src/theme/components/heading.ts +13 -11
- package/src/theme/components/helperErrorText.ts +1 -1
- package/src/theme/components/icon.ts +2 -2
- package/src/theme/components/image.ts +9 -1
- package/src/theme/components/link.ts +17 -5
- package/src/theme/components/list.ts +1 -3
- package/src/theme/components/logo.ts +54 -0
- package/src/theme/components/notification.ts +9 -7
- package/src/theme/components/searchBar.ts +7 -13
- package/src/theme/components/select.ts +1 -0
- package/src/theme/components/statusBadge.ts +1 -1
- package/src/theme/components/structuredContent.ts +54 -0
- package/src/theme/components/template.ts +10 -10
- package/src/theme/components/text.ts +6 -6
- package/src/theme/components/textInput.ts +1 -0
- package/src/theme/components/toggle.ts +69 -0
- package/src/theme/components/videoPlayer.ts +0 -2
- package/src/theme/foundations/global.ts +2 -2
- package/src/theme/foundations/spacing.ts +3 -0
- package/src/theme/foundations/typography.ts +84 -12
- package/src/theme/index.ts +8 -0
- package/src/utils/componentCategories.ts +5 -2
- package/src/utils/utils.ts +17 -0
- package/dist/__tests__/utils/bem.test.d.ts +0 -1
- package/dist/components/CardEdition/CardEdition.d.ts +0 -21
- package/dist/components/CardEdition/CardEdition.stories.d.ts +0 -27
- package/dist/components/Input/Input.d.ts +0 -36
- package/dist/components/Input/Input.stories.d.ts +0 -29
- package/dist/components/Input/InputTypes.d.ts +0 -6
- package/dist/components/StyleGuide/UIDocCard.d.ts +0 -11
- package/dist/helpers/CSSVariablesHelper.d.ts +0 -3
- package/dist/helpers/getCSSVariable.d.ts +0 -1
- package/dist/interfaces.d.ts +0 -3
- package/dist/utils/bem.d.ts +0 -1
- package/src/__tests__/utils/bem.test.ts +0 -37
- package/src/components/CardEdition/CardEdition.stories.tsx +0 -122
- package/src/components/CardEdition/CardEdition.test.tsx +0 -395
- package/src/components/CardEdition/CardEdition.tsx +0 -60
- package/src/components/CardEdition/_CardEdition.scss +0 -137
- package/src/components/Input/Input.stories.tsx +0 -133
- package/src/components/Input/Input.test.tsx +0 -266
- package/src/components/Input/Input.tsx +0 -81
- package/src/components/Input/InputTypes.tsx +0 -8
- package/src/components/Input/_Input.scss +0 -78
- package/src/components/StyleGuide/UIDocCard.tsx +0 -36
- package/src/helpers/CSSVariablesHelper.tsx +0 -34
- package/src/helpers/getCSSVariable.tsx +0 -5
- package/src/interfaces.ts +0 -3
- package/src/utils/bem.ts +0 -44
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
|
-
Meta,
|
|
3
|
-
Story,
|
|
4
|
-
Canvas,
|
|
5
2
|
ArgsTable,
|
|
3
|
+
Canvas,
|
|
6
4
|
Description,
|
|
7
|
-
|
|
5
|
+
Meta,
|
|
6
|
+
Story,
|
|
7
|
+
} from "@storybook/addon-docs";
|
|
8
8
|
import { withDesign } from "storybook-addon-designs";
|
|
9
9
|
|
|
10
10
|
import { Tabs, TabList, Tab, TabPanels, TabPanel } from "./Tabs";
|
|
@@ -18,17 +18,21 @@ import DSProvider from "../../theme/provider";
|
|
|
18
18
|
parameters={{
|
|
19
19
|
design: {
|
|
20
20
|
type: "figma",
|
|
21
|
-
url:
|
|
22
|
-
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=36835%3A26464",
|
|
21
|
+
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=36835%3A26464",
|
|
23
22
|
},
|
|
24
23
|
jest: ["Tabs.test.tsx"],
|
|
25
24
|
}}
|
|
26
25
|
argTypes={{
|
|
27
26
|
children: { table: { disable: true } },
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
contentData: { control: false },
|
|
28
|
+
defaultIndex: {
|
|
29
|
+
table: { defaultValue: { summary: 0 } },
|
|
30
|
+
},
|
|
31
|
+
id: { control: false },
|
|
32
|
+
onChange: { control: false },
|
|
33
|
+
useHash: {
|
|
34
|
+
table: { defaultValue: { summary: false } },
|
|
35
|
+
},
|
|
32
36
|
}}
|
|
33
37
|
/>
|
|
34
38
|
|
|
@@ -37,7 +41,7 @@ import DSProvider from "../../theme/provider";
|
|
|
37
41
|
| Component Version | DS Version |
|
|
38
42
|
| ----------------- | ---------- |
|
|
39
43
|
| Added | `0.24.0` |
|
|
40
|
-
| Latest | `0.25.
|
|
44
|
+
| Latest | `0.25.10` |
|
|
41
45
|
|
|
42
46
|
<Description of={Tabs} />
|
|
43
47
|
|
|
@@ -89,18 +93,20 @@ export const animalCrossing = [
|
|
|
89
93
|
|
|
90
94
|
<Canvas withToolbar>
|
|
91
95
|
<Story
|
|
92
|
-
name="
|
|
96
|
+
name="Tabs with Controls"
|
|
93
97
|
args={{
|
|
98
|
+
contentData: animalCrossing,
|
|
94
99
|
defaultIndex: 0,
|
|
100
|
+
id: "tabs-id",
|
|
101
|
+
onChange: undefined,
|
|
95
102
|
useHash: false,
|
|
96
|
-
contentData: animalCrossing,
|
|
97
103
|
}}
|
|
98
104
|
>
|
|
99
105
|
{(args) => <Tabs {...args} />}
|
|
100
106
|
</Story>
|
|
101
107
|
</Canvas>
|
|
102
108
|
|
|
103
|
-
<ArgsTable story="
|
|
109
|
+
<ArgsTable story="Tabs with Controls" />
|
|
104
110
|
|
|
105
111
|
## Composing with a Data Object
|
|
106
112
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { render, screen } from "@testing-library/react";
|
|
3
|
-
import { axe } from "jest-axe";
|
|
4
3
|
import userEvent from "@testing-library/user-event";
|
|
4
|
+
import { axe } from "jest-axe";
|
|
5
|
+
import renderer from "react-test-renderer";
|
|
5
6
|
|
|
6
7
|
import { Tabs, TabList, Tab, TabPanels, TabPanel } from "./Tabs";
|
|
7
8
|
|
|
@@ -208,7 +209,15 @@ describe("Tabs", () => {
|
|
|
208
209
|
expect(selectedIndex).toEqual(1);
|
|
209
210
|
});
|
|
210
211
|
|
|
211
|
-
it("should throw warning when
|
|
212
|
+
it("should throw a warning when no data is passed", () => {
|
|
213
|
+
const warn = jest.spyOn(console, "warn");
|
|
214
|
+
render(<Tabs />);
|
|
215
|
+
expect(warn).toHaveBeenCalledWith(
|
|
216
|
+
"Tabs: Pass data in the `data` props or as children."
|
|
217
|
+
);
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
it("should throw a warning when both the 'data' prop and children are passed", () => {
|
|
212
221
|
const warn = jest.spyOn(console, "warn");
|
|
213
222
|
render(
|
|
214
223
|
<Tabs contentData={animalCrossing}>
|
|
@@ -238,11 +247,11 @@ describe("Tabs", () => {
|
|
|
238
247
|
</Tabs>
|
|
239
248
|
);
|
|
240
249
|
expect(warn).toHaveBeenCalledWith(
|
|
241
|
-
"Only pass children or data in the `data` props but not both."
|
|
250
|
+
"Tabs: Only pass children or data in the `data` props but not both."
|
|
242
251
|
);
|
|
243
252
|
});
|
|
244
253
|
|
|
245
|
-
it("should throw warning when more than six object tabs are passed", () => {
|
|
254
|
+
it("should throw a warning when more than six object tabs are passed", () => {
|
|
246
255
|
const warn = jest.spyOn(console, "warn");
|
|
247
256
|
render(
|
|
248
257
|
<Tabs
|
|
@@ -258,7 +267,14 @@ describe("Tabs", () => {
|
|
|
258
267
|
/>
|
|
259
268
|
);
|
|
260
269
|
expect(warn).toHaveBeenCalledWith(
|
|
261
|
-
"We recommend to use no more than six tabs. If more than six tabs are needed, consider other navigational patterns."
|
|
270
|
+
"Tabs: We recommend to use no more than six tabs. If more than six tabs are needed, consider other navigational patterns."
|
|
262
271
|
);
|
|
263
272
|
});
|
|
273
|
+
|
|
274
|
+
it("renders the UI snapshot correctly", () => {
|
|
275
|
+
const basic = renderer
|
|
276
|
+
.create(<Tabs contentData={animalCrossing} id="basic" />)
|
|
277
|
+
.toJSON();
|
|
278
|
+
expect(basic).toMatchSnapshot();
|
|
279
|
+
});
|
|
264
280
|
});
|
|
@@ -17,6 +17,12 @@ import Button from "../Button/Button";
|
|
|
17
17
|
import useCarouselStyles from "../../hooks/useCarouselStyles";
|
|
18
18
|
import useWindowSize from "../../hooks/useWindowSize";
|
|
19
19
|
|
|
20
|
+
// Internal interface used for rendering `Tabs` tab and panel
|
|
21
|
+
// elements, either from data or from children.
|
|
22
|
+
interface TabPanelProps {
|
|
23
|
+
tabs: React.ReactNode[] | React.ReactNode;
|
|
24
|
+
panels: React.ReactNode[] | React.ReactNode;
|
|
25
|
+
}
|
|
20
26
|
// The general shape of the data object for each Tab.
|
|
21
27
|
export interface TabsContentDataProps {
|
|
22
28
|
label: string;
|
|
@@ -49,18 +55,18 @@ const onClickHash = (tabHash) => {
|
|
|
49
55
|
* This returns an object with `Tab` and `TabPanel` components to rendered in
|
|
50
56
|
* `TabList` and `TabPanels` components respectively.
|
|
51
57
|
*/
|
|
52
|
-
const getElementsFromContentData = (data, useHash) => {
|
|
58
|
+
const getElementsFromContentData = (data, useHash): TabPanelProps => {
|
|
53
59
|
const tabs = [];
|
|
54
60
|
const panels = [];
|
|
55
61
|
|
|
56
62
|
if (!data?.length) {
|
|
57
|
-
return {};
|
|
63
|
+
return { tabs: [], panels: [] };
|
|
58
64
|
}
|
|
59
65
|
|
|
60
66
|
if (data?.length > 6) {
|
|
61
67
|
console.warn(
|
|
62
|
-
"We recommend to use no more than six tabs. If more than six tabs
|
|
63
|
-
"needed, consider other navigational patterns."
|
|
68
|
+
"Tabs: We recommend to use no more than six tabs. If more than six tabs " +
|
|
69
|
+
"are needed, consider other navigational patterns."
|
|
64
70
|
);
|
|
65
71
|
}
|
|
66
72
|
data.forEach((tab, index) => {
|
|
@@ -78,8 +84,8 @@ const getElementsFromContentData = (data, useHash) => {
|
|
|
78
84
|
if (typeof tab.content === "string") {
|
|
79
85
|
tempPanel = (
|
|
80
86
|
<TabPanel
|
|
81
|
-
key={index}
|
|
82
87
|
dangerouslySetInnerHTML={{ __html: tab.content }}
|
|
88
|
+
key={index}
|
|
83
89
|
/>
|
|
84
90
|
);
|
|
85
91
|
} else {
|
|
@@ -100,12 +106,12 @@ const getElementsFromContentData = (data, useHash) => {
|
|
|
100
106
|
* This returns an object with `TabList` and `TabPanels` components to help format
|
|
101
107
|
* the DOM when building up the `Tabs` component using child component.
|
|
102
108
|
*/
|
|
103
|
-
const getElementsFromChildren = (children) => {
|
|
109
|
+
const getElementsFromChildren = (children): TabPanelProps => {
|
|
104
110
|
const tabs = [];
|
|
105
111
|
const panels = [];
|
|
106
112
|
|
|
107
113
|
if (!children?.length) {
|
|
108
|
-
return {};
|
|
114
|
+
return { tabs: [], panels: [] };
|
|
109
115
|
}
|
|
110
116
|
|
|
111
117
|
children.forEach((child) => {
|
|
@@ -115,8 +121,8 @@ const getElementsFromChildren = (children) => {
|
|
|
115
121
|
const childTabs = React.Children.count(child.props.children);
|
|
116
122
|
if (childTabs > 6) {
|
|
117
123
|
console.warn(
|
|
118
|
-
"We recommend to use no more than six tabs. If more than six
|
|
119
|
-
"needed, consider other navigational patterns."
|
|
124
|
+
"Tabs: We recommend to use no more than six tabs. If more than six " +
|
|
125
|
+
"tabs are needed, consider other navigational patterns."
|
|
120
126
|
);
|
|
121
127
|
}
|
|
122
128
|
}
|
|
@@ -149,9 +155,14 @@ function Tabs(props: React.PropsWithChildren<TabsProps>) {
|
|
|
149
155
|
const mediumTabWidth = 40;
|
|
150
156
|
const [tabWidth, setTabWidth] = React.useState(initTabWidth);
|
|
151
157
|
const windowDimensions = useWindowSize();
|
|
152
|
-
const { tabs, panels } = contentData
|
|
158
|
+
const { tabs, panels }: any = contentData
|
|
153
159
|
? getElementsFromContentData(contentData, useHash)
|
|
154
160
|
: getElementsFromChildren(children);
|
|
161
|
+
|
|
162
|
+
if (!tabs.length || !panels.length) {
|
|
163
|
+
console.warn("Tabs: Pass data in the `data` props or as children.");
|
|
164
|
+
}
|
|
165
|
+
|
|
155
166
|
// `tabs` is an array for the children component approach but an object for
|
|
156
167
|
// the `contentData` prop approach. We need to get the right props key value
|
|
157
168
|
// to set the carousel's length.
|
|
@@ -173,34 +184,38 @@ function Tabs(props: React.PropsWithChildren<TabsProps>) {
|
|
|
173
184
|
}, [goToStart, windowDimensions.width]);
|
|
174
185
|
const previousButton = (
|
|
175
186
|
<Button
|
|
176
|
-
buttonType={ButtonTypes.Primary}
|
|
177
187
|
attributes={{
|
|
178
188
|
"aria-label": "Previous",
|
|
179
189
|
...styles.buttonArrows,
|
|
180
190
|
left: "0",
|
|
181
191
|
}}
|
|
192
|
+
buttonType={ButtonTypes.Primary}
|
|
193
|
+
id={`tabs-previous-${id}`}
|
|
182
194
|
onClick={prevSlide}
|
|
183
195
|
>
|
|
184
196
|
<Icon
|
|
185
|
-
name={IconNames.Arrow}
|
|
186
197
|
iconRotation={IconRotationTypes.Rotate90}
|
|
198
|
+
id={`tabs-previous-icon-${id}`}
|
|
199
|
+
name={IconNames.Arrow}
|
|
187
200
|
size={IconSizes.Small}
|
|
188
201
|
/>
|
|
189
202
|
</Button>
|
|
190
203
|
);
|
|
191
204
|
const nextButton = (
|
|
192
205
|
<Button
|
|
193
|
-
buttonType={ButtonTypes.Primary}
|
|
194
206
|
attributes={{
|
|
195
207
|
"aria-label": "Next",
|
|
196
208
|
...styles.buttonArrows,
|
|
197
209
|
right: "0",
|
|
198
210
|
}}
|
|
211
|
+
buttonType={ButtonTypes.Primary}
|
|
212
|
+
id={`tabs-next-${id}`}
|
|
199
213
|
onClick={nextSlide}
|
|
200
214
|
>
|
|
201
215
|
<Icon
|
|
202
|
-
name={IconNames.Arrow}
|
|
203
216
|
iconRotation={IconRotationTypes.Rotate270}
|
|
217
|
+
id={`tabs-next-icon-${id}`}
|
|
218
|
+
name={IconNames.Arrow}
|
|
204
219
|
size={IconSizes.Small}
|
|
205
220
|
/>
|
|
206
221
|
</Button>
|
|
@@ -208,18 +223,18 @@ function Tabs(props: React.PropsWithChildren<TabsProps>) {
|
|
|
208
223
|
|
|
209
224
|
if (children && contentData?.length) {
|
|
210
225
|
console.warn(
|
|
211
|
-
"Only pass children or data in the `data` props but not both."
|
|
226
|
+
"Tabs: Only pass children or data in the `data` props but not both."
|
|
212
227
|
);
|
|
213
228
|
}
|
|
214
229
|
|
|
215
230
|
return (
|
|
216
231
|
<ChakraTabs
|
|
217
|
-
id={id}
|
|
218
|
-
onChange={onChange}
|
|
219
232
|
defaultIndex={defaultIndex}
|
|
220
|
-
|
|
233
|
+
id={id}
|
|
221
234
|
// The following lazy loads each panel whenever it is needed.
|
|
222
235
|
isLazy
|
|
236
|
+
onChange={onChange}
|
|
237
|
+
variant="enclosed"
|
|
223
238
|
>
|
|
224
239
|
<Box
|
|
225
240
|
__css={styles.tablistWrapper}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`Tabs renders the UI snapshot correctly 1`] = `
|
|
4
|
+
<div
|
|
5
|
+
className="chakra-tabs css-0"
|
|
6
|
+
id="basic"
|
|
7
|
+
>
|
|
8
|
+
<div
|
|
9
|
+
className="css-l3f8vc"
|
|
10
|
+
>
|
|
11
|
+
<button
|
|
12
|
+
aria-label="Previous"
|
|
13
|
+
className="chakra-button css-fg6w03"
|
|
14
|
+
data-testid="button"
|
|
15
|
+
id="tabs-previous-basic"
|
|
16
|
+
onClick={[Function]}
|
|
17
|
+
type="button"
|
|
18
|
+
>
|
|
19
|
+
<svg
|
|
20
|
+
aria-hidden={true}
|
|
21
|
+
className="chakra-icon css-onkibi"
|
|
22
|
+
focusable={false}
|
|
23
|
+
id="tabs-previous-icon-basic"
|
|
24
|
+
role="img"
|
|
25
|
+
title="arrow icon"
|
|
26
|
+
viewBox="0 0 24 24"
|
|
27
|
+
>
|
|
28
|
+
<g
|
|
29
|
+
stroke="currentColor"
|
|
30
|
+
strokeWidth="1.5"
|
|
31
|
+
>
|
|
32
|
+
<path
|
|
33
|
+
d="M9,9a3,3,0,1,1,4,2.829,1.5,1.5,0,0,0-1,1.415V14.25"
|
|
34
|
+
fill="none"
|
|
35
|
+
strokeLinecap="round"
|
|
36
|
+
/>
|
|
37
|
+
<path
|
|
38
|
+
d="M12,17.25a.375.375,0,1,0,.375.375A.375.375,0,0,0,12,17.25h0"
|
|
39
|
+
fill="currentColor"
|
|
40
|
+
strokeLinecap="round"
|
|
41
|
+
/>
|
|
42
|
+
<circle
|
|
43
|
+
cx="12"
|
|
44
|
+
cy="12"
|
|
45
|
+
fill="none"
|
|
46
|
+
r="11.25"
|
|
47
|
+
strokeMiterlimit="10"
|
|
48
|
+
/>
|
|
49
|
+
</g>
|
|
50
|
+
</svg>
|
|
51
|
+
</button>
|
|
52
|
+
<div
|
|
53
|
+
className="css-0"
|
|
54
|
+
>
|
|
55
|
+
<div
|
|
56
|
+
className="css-16fuzwj"
|
|
57
|
+
>
|
|
58
|
+
<div
|
|
59
|
+
aria-orientation="horizontal"
|
|
60
|
+
className="chakra-tabs__tablist css-k008qs"
|
|
61
|
+
onKeyDown={[Function]}
|
|
62
|
+
role="tablist"
|
|
63
|
+
>
|
|
64
|
+
<button
|
|
65
|
+
aria-controls="basic--tabpanel--1"
|
|
66
|
+
aria-selected={false}
|
|
67
|
+
className="chakra-tabs__tab css-abpfcx"
|
|
68
|
+
id="basic--tab--1"
|
|
69
|
+
onClick={[Function]}
|
|
70
|
+
onFocus={[Function]}
|
|
71
|
+
role="tab"
|
|
72
|
+
tabIndex={-1}
|
|
73
|
+
type="button"
|
|
74
|
+
>
|
|
75
|
+
Tom Nook
|
|
76
|
+
</button>
|
|
77
|
+
<button
|
|
78
|
+
aria-controls="basic--tabpanel--1"
|
|
79
|
+
aria-selected={false}
|
|
80
|
+
className="chakra-tabs__tab css-abpfcx"
|
|
81
|
+
id="basic--tab--1"
|
|
82
|
+
onClick={[Function]}
|
|
83
|
+
onFocus={[Function]}
|
|
84
|
+
role="tab"
|
|
85
|
+
tabIndex={-1}
|
|
86
|
+
type="button"
|
|
87
|
+
>
|
|
88
|
+
Isabelle
|
|
89
|
+
</button>
|
|
90
|
+
<button
|
|
91
|
+
aria-controls="basic--tabpanel--1"
|
|
92
|
+
aria-selected={false}
|
|
93
|
+
className="chakra-tabs__tab css-abpfcx"
|
|
94
|
+
id="basic--tab--1"
|
|
95
|
+
onClick={[Function]}
|
|
96
|
+
onFocus={[Function]}
|
|
97
|
+
role="tab"
|
|
98
|
+
tabIndex={-1}
|
|
99
|
+
type="button"
|
|
100
|
+
>
|
|
101
|
+
K.K. Slider
|
|
102
|
+
</button>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
<button
|
|
107
|
+
aria-label="Next"
|
|
108
|
+
className="chakra-button css-1whvqek"
|
|
109
|
+
data-testid="button"
|
|
110
|
+
id="tabs-next-basic"
|
|
111
|
+
onClick={[Function]}
|
|
112
|
+
type="button"
|
|
113
|
+
>
|
|
114
|
+
<svg
|
|
115
|
+
aria-hidden={true}
|
|
116
|
+
className="chakra-icon css-onkibi"
|
|
117
|
+
focusable={false}
|
|
118
|
+
id="tabs-next-icon-basic"
|
|
119
|
+
role="img"
|
|
120
|
+
title="arrow icon"
|
|
121
|
+
viewBox="0 0 24 24"
|
|
122
|
+
>
|
|
123
|
+
<g
|
|
124
|
+
stroke="currentColor"
|
|
125
|
+
strokeWidth="1.5"
|
|
126
|
+
>
|
|
127
|
+
<path
|
|
128
|
+
d="M9,9a3,3,0,1,1,4,2.829,1.5,1.5,0,0,0-1,1.415V14.25"
|
|
129
|
+
fill="none"
|
|
130
|
+
strokeLinecap="round"
|
|
131
|
+
/>
|
|
132
|
+
<path
|
|
133
|
+
d="M12,17.25a.375.375,0,1,0,.375.375A.375.375,0,0,0,12,17.25h0"
|
|
134
|
+
fill="currentColor"
|
|
135
|
+
strokeLinecap="round"
|
|
136
|
+
/>
|
|
137
|
+
<circle
|
|
138
|
+
cx="12"
|
|
139
|
+
cy="12"
|
|
140
|
+
fill="none"
|
|
141
|
+
r="11.25"
|
|
142
|
+
strokeMiterlimit="10"
|
|
143
|
+
/>
|
|
144
|
+
</g>
|
|
145
|
+
</svg>
|
|
146
|
+
</button>
|
|
147
|
+
</div>
|
|
148
|
+
<div
|
|
149
|
+
className="chakra-tabs__tab-panels css-8atqhb"
|
|
150
|
+
>
|
|
151
|
+
<div
|
|
152
|
+
aria-labelledby="basic--tab-0"
|
|
153
|
+
className="chakra-tabs__tab-panel css-sjt5nk"
|
|
154
|
+
hidden={false}
|
|
155
|
+
id="basic--tabpanel-0"
|
|
156
|
+
role="tabpanel"
|
|
157
|
+
tabIndex={0}
|
|
158
|
+
>
|
|
159
|
+
<p>
|
|
160
|
+
Tom Nook,
|
|
161
|
+
<b>
|
|
162
|
+
known in Japan as Tanukichi
|
|
163
|
+
</b>
|
|
164
|
+
, is a fictional character in the Animal Crossing series who operates the village store.
|
|
165
|
+
</p>
|
|
166
|
+
</div>
|
|
167
|
+
<div
|
|
168
|
+
aria-labelledby="basic--tab-1"
|
|
169
|
+
className="chakra-tabs__tab-panel css-sjt5nk"
|
|
170
|
+
dangerouslySetInnerHTML={
|
|
171
|
+
Object {
|
|
172
|
+
"__html": "Isabelle, known as Shizue in Japan, is a fictional character from the Animal Crossing series of video games. She is a kindly Shih Tzu that debuted in the 2012 release Animal Crossing: New Leaf, where she serves as the secretary to the player character.",
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
hidden={true}
|
|
176
|
+
id="basic--tabpanel-1"
|
|
177
|
+
role="tabpanel"
|
|
178
|
+
tabIndex={0}
|
|
179
|
+
/>
|
|
180
|
+
<div
|
|
181
|
+
aria-labelledby="basic--tab-2"
|
|
182
|
+
className="chakra-tabs__tab-panel css-sjt5nk"
|
|
183
|
+
dangerouslySetInnerHTML={
|
|
184
|
+
Object {
|
|
185
|
+
"__html": "<p>Totakeke, more commonly known as <b>K.K. Slider or K.K.</b>, is a fictional character within the Animal Crossing franchise. One of the franchise's most popular characters, he debuted in the title Animal Crossing, and has appeared in every installment since.</p>",
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
hidden={true}
|
|
189
|
+
id="basic--tabpanel-2"
|
|
190
|
+
role="tabpanel"
|
|
191
|
+
tabIndex={0}
|
|
192
|
+
/>
|
|
193
|
+
</div>
|
|
194
|
+
</div>
|
|
195
|
+
`;
|