@nypl/design-system-react-components 0.25.8 → 0.25.9
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 +45 -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 +3 -2
- package/dist/components/Form/Form.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 +2 -2
- package/dist/components/Icons/Icon.d.ts +4 -4
- package/dist/components/Icons/IconSvgs.d.ts +0 -21
- package/dist/components/Icons/IconTypes.d.ts +0 -23
- package/dist/components/Image/Image.d.ts +11 -3
- 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 +2 -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 +3 -2
- package/dist/components/SearchBar/SearchBar.d.ts +10 -2
- package/dist/components/Select/Select.d.ts +3 -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 +23 -0
- package/dist/components/Template/Template.d.ts +8 -3
- 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 +3 -2
- package/dist/components/VideoPlayer/VideoPlayer.d.ts +14 -5
- package/dist/design-system-react-components.cjs.development.js +5630 -5692
- 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 +4304 -4362
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/styles.css +2 -2
- 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 +47 -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/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 +8 -5
- package/dist/utils/utils.d.ts +10 -0
- package/package.json +1 -2
- package/src/__tests__/utils/utils.test.ts +23 -1
- package/src/components/Accordion/Accordion.stories.mdx +14 -12
- 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 +30 -11
- 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 -7
- 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 +186 -71
- package/src/components/Card/Card.test.tsx +45 -22
- package/src/components/Card/Card.tsx +17 -5
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +8 -2
- package/src/components/Chakra/Box.stories.mdx +3 -3
- package/src/components/Chakra/Center.stories.mdx +5 -5
- package/src/components/Chakra/Grid.stories.mdx +3 -3
- 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.tsx +10 -6
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +36 -18
- package/src/components/Fieldset/Fieldset.stories.mdx +19 -8
- package/src/components/Form/Form.stories.mdx +49 -41
- package/src/components/Form/Form.tsx +5 -4
- 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 +9 -8
- package/src/components/HorizontalRule/HorizontalRule.tsx +2 -4
- package/src/components/Icons/Icon.stories.mdx +77 -76
- package/src/components/Icons/Icon.tsx +4 -5
- package/src/components/Icons/IconSvgs.tsx +0 -42
- package/src/components/Icons/IconTypes.tsx +0 -24
- package/src/components/Image/Image.stories.mdx +66 -18
- package/src/components/Image/Image.tsx +21 -10
- package/src/components/Label/Label.stories.mdx +20 -19
- package/src/components/Link/Link.stories.mdx +102 -51
- package/src/components/Link/Link.test.tsx +38 -8
- package/src/components/Link/Link.tsx +19 -12
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +60 -0
- package/src/components/List/List.stories.mdx +36 -24
- 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 +61 -38
- package/src/components/Notification/Notification.tsx +9 -4
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +4 -0
- package/src/components/Pagination/Pagination.stories.mdx +17 -6
- package/src/components/Pagination/Pagination.tsx +1 -1
- package/src/components/Placeholder/Placeholder.tsx +7 -14
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +72 -43
- package/src/components/Radio/Radio.stories.mdx +39 -19
- package/src/components/Radio/Radio.tsx +13 -9
- package/src/components/RadioGroup/RadioGroup.stories.mdx +50 -16
- package/src/components/RadioGroup/RadioGroup.tsx +15 -11
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +6 -3
- package/src/components/SearchBar/SearchBar.Test.tsx +58 -10
- package/src/components/SearchBar/SearchBar.stories.mdx +109 -30
- package/src/components/SearchBar/SearchBar.tsx +53 -32
- package/src/components/Select/Select.stories.mdx +48 -14
- package/src/components/Select/Select.tsx +16 -10
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +50 -16
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +8 -4
- package/src/components/Slider/Slider.stories.mdx +72 -22
- package/src/components/Slider/Slider.tsx +15 -10
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +60 -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 +66 -0
- package/src/components/Table/Table.test.tsx +60 -0
- package/src/components/Table/Table.tsx +116 -0
- package/src/components/Tabs/Tabs.stories.mdx +19 -13
- package/src/components/Tabs/Tabs.test.tsx +1 -1
- package/src/components/Template/Template.stories.mdx +56 -47
- package/src/components/Template/Template.test.tsx +65 -5
- package/src/components/Template/Template.tsx +35 -5
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +76 -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 +33 -9
- package/src/components/Toggle/Toggle.tsx +14 -9
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +64 -14
- package/src/components/VideoPlayer/VideoPlayer.tsx +17 -7
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +12 -6
- package/src/docs/Chakra.stories.mdx +5 -8
- package/src/docs/Intro.stories.mdx +2 -2
- package/src/index.ts +5 -4
- 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 +3 -3
- package/src/theme/components/button.ts +5 -12
- package/src/theme/components/card.ts +5 -2
- package/src/theme/components/checkbox.ts +1 -1
- package/src/theme/components/customTable.ts +50 -0
- package/src/theme/components/datePicker.ts +1 -1
- package/src/theme/components/global.ts +6 -6
- package/src/theme/components/heading.ts +13 -11
- package/src/theme/components/helperErrorText.ts +1 -1
- package/src/theme/components/image.ts +1 -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 +1 -1
- 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 +9 -5
- package/src/theme/components/videoPlayer.ts +0 -2
- package/src/theme/foundations/global.ts +2 -2
- package/src/theme/foundations/typography.ts +84 -12
- package/src/theme/index.ts +6 -0
- package/src/utils/componentCategories.ts +1 -1
- 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
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { render, screen } from "@testing-library/react";
|
|
3
|
+
import { axe } from "jest-axe";
|
|
4
|
+
import renderer from "react-test-renderer";
|
|
5
|
+
|
|
6
|
+
import ComponentWrapper from "./ComponentWrapper";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @NOTE while the component is accessible, whatever is passed as children
|
|
10
|
+
* elements may not be considered accessible. This is up to the developer to
|
|
11
|
+
* make sure to pass accessible elements.
|
|
12
|
+
*/
|
|
13
|
+
describe("ComponentWrapper Accessibility", () => {
|
|
14
|
+
it("Passes axe accessibility test", async () => {
|
|
15
|
+
const { container } = render(
|
|
16
|
+
<ComponentWrapper
|
|
17
|
+
descriptionText="description text"
|
|
18
|
+
headingText="heading text"
|
|
19
|
+
helperText="helper text"
|
|
20
|
+
id="id"
|
|
21
|
+
invalidText="invalid text"
|
|
22
|
+
isInvalid={false}
|
|
23
|
+
>
|
|
24
|
+
<div>children elements</div>
|
|
25
|
+
</ComponentWrapper>
|
|
26
|
+
);
|
|
27
|
+
expect(await axe(container)).toHaveNoViolations();
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it("Passes axe accessibility test without certain props", async () => {
|
|
31
|
+
const { container } = render(
|
|
32
|
+
<ComponentWrapper id="id">
|
|
33
|
+
<div>children elements</div>
|
|
34
|
+
</ComponentWrapper>
|
|
35
|
+
);
|
|
36
|
+
expect(await axe(container)).toHaveNoViolations();
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
describe("ComponentWrapper", () => {
|
|
41
|
+
it("renders with different text sections and children elements", () => {
|
|
42
|
+
render(
|
|
43
|
+
<ComponentWrapper
|
|
44
|
+
descriptionText="description text"
|
|
45
|
+
headingText="heading text"
|
|
46
|
+
helperText="helper text"
|
|
47
|
+
id="id"
|
|
48
|
+
invalidText="invalid text"
|
|
49
|
+
isInvalid={false}
|
|
50
|
+
>
|
|
51
|
+
<div>children elements</div>
|
|
52
|
+
</ComponentWrapper>
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
expect(screen.getByText("description text")).toBeInTheDocument();
|
|
56
|
+
expect(screen.getByText("heading text")).toBeInTheDocument();
|
|
57
|
+
expect(screen.getByText("helper text")).toBeInTheDocument();
|
|
58
|
+
expect(screen.queryByText("invalid text")).not.toBeInTheDocument();
|
|
59
|
+
expect(screen.getByText("children elements")).toBeInTheDocument();
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it("renders with only its children elements", () => {
|
|
63
|
+
render(
|
|
64
|
+
<ComponentWrapper id="id">
|
|
65
|
+
<div>children elements</div>
|
|
66
|
+
</ComponentWrapper>
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
expect(screen.queryByText("description text")).not.toBeInTheDocument();
|
|
70
|
+
expect(screen.queryByText("heading text")).not.toBeInTheDocument();
|
|
71
|
+
expect(screen.queryByText("helper text")).not.toBeInTheDocument();
|
|
72
|
+
expect(screen.queryByText("invalid text")).not.toBeInTheDocument();
|
|
73
|
+
expect(screen.getByText("children elements")).toBeInTheDocument();
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it("renders invalid text in the internal HelperErrorText component", () => {
|
|
77
|
+
const { rerender } = render(
|
|
78
|
+
<ComponentWrapper
|
|
79
|
+
descriptionText="description text"
|
|
80
|
+
headingText="heading text"
|
|
81
|
+
helperText="helper text"
|
|
82
|
+
id="id"
|
|
83
|
+
invalidText="invalid text"
|
|
84
|
+
isInvalid={false}
|
|
85
|
+
>
|
|
86
|
+
<div>children elements</div>
|
|
87
|
+
</ComponentWrapper>
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
expect(screen.getByText("helper text")).toBeInTheDocument();
|
|
91
|
+
expect(screen.queryByText("invalid text")).not.toBeInTheDocument();
|
|
92
|
+
|
|
93
|
+
rerender(
|
|
94
|
+
<ComponentWrapper
|
|
95
|
+
descriptionText="description text"
|
|
96
|
+
headingText="heading text"
|
|
97
|
+
helperText="helper text"
|
|
98
|
+
id="id"
|
|
99
|
+
invalidText="invalid text"
|
|
100
|
+
isInvalid={true}
|
|
101
|
+
>
|
|
102
|
+
<div>children elements</div>
|
|
103
|
+
</ComponentWrapper>
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
expect(screen.queryByText("helper text")).not.toBeInTheDocument();
|
|
107
|
+
expect(screen.getByText("invalid text")).toBeInTheDocument();
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it("Renders the UI snapshot correctly", () => {
|
|
111
|
+
const basic = renderer
|
|
112
|
+
.create(
|
|
113
|
+
<ComponentWrapper
|
|
114
|
+
descriptionText="description text"
|
|
115
|
+
headingText="heading text"
|
|
116
|
+
helperText="helper text"
|
|
117
|
+
id="id"
|
|
118
|
+
invalidText="invalid text"
|
|
119
|
+
isInvalid={false}
|
|
120
|
+
>
|
|
121
|
+
<div>children elements</div>
|
|
122
|
+
</ComponentWrapper>
|
|
123
|
+
)
|
|
124
|
+
.toJSON();
|
|
125
|
+
const onlyWithChildren = renderer
|
|
126
|
+
.create(
|
|
127
|
+
<ComponentWrapper id="id">
|
|
128
|
+
<div>children elements</div>
|
|
129
|
+
</ComponentWrapper>
|
|
130
|
+
)
|
|
131
|
+
.toJSON();
|
|
132
|
+
const isInvalid = renderer
|
|
133
|
+
.create(
|
|
134
|
+
<ComponentWrapper
|
|
135
|
+
descriptionText="description text"
|
|
136
|
+
headingText="heading text"
|
|
137
|
+
helperText="helper text"
|
|
138
|
+
id="id"
|
|
139
|
+
invalidText="invalid text"
|
|
140
|
+
isInvalid={true}
|
|
141
|
+
>
|
|
142
|
+
<div>children elements</div>
|
|
143
|
+
</ComponentWrapper>
|
|
144
|
+
)
|
|
145
|
+
.toJSON();
|
|
146
|
+
|
|
147
|
+
expect(basic).toMatchSnapshot();
|
|
148
|
+
expect(onlyWithChildren).toMatchSnapshot();
|
|
149
|
+
expect(isInvalid).toMatchSnapshot();
|
|
150
|
+
});
|
|
151
|
+
});
|
|
@@ -1,22 +1,30 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
1
|
import { Box, useMultiStyleConfig } from "@chakra-ui/react";
|
|
3
|
-
import
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
|
|
4
4
|
import Heading from "../Heading/Heading";
|
|
5
5
|
import { HeadingLevels } from "../Heading/HeadingTypes";
|
|
6
|
-
import HelperErrorText
|
|
6
|
+
import HelperErrorText, {
|
|
7
|
+
HelperErrorTextType,
|
|
8
|
+
} from "../HelperErrorText/HelperErrorText";
|
|
7
9
|
import Text from "../Text/Text";
|
|
10
|
+
import generateUUID from "../../helpers/generateUUID";
|
|
8
11
|
|
|
9
12
|
export interface ComponentWrapperProps {
|
|
10
13
|
/** The UI elements that will be wrapped by this component */
|
|
11
14
|
children: React.ReactNode;
|
|
12
|
-
/** Optional string to set the text for
|
|
15
|
+
/** Optional string to set the text for the component's description */
|
|
13
16
|
descriptionText?: string;
|
|
14
17
|
/** Optional string to set the text for a `Heading` component */
|
|
15
18
|
headingText?: string;
|
|
16
19
|
/** Optional string to set the text for a `HelperErrorText` component */
|
|
17
|
-
helperText?:
|
|
20
|
+
helperText?: HelperErrorTextType;
|
|
18
21
|
/** ID that other components can cross reference for accessibility purposes */
|
|
19
22
|
id?: string;
|
|
23
|
+
/** Optional string to populate the `HelperErrorText` for the error state
|
|
24
|
+
* when `isInvalid` is true. */
|
|
25
|
+
invalidText?: HelperErrorTextType;
|
|
26
|
+
/** Sets invalid text in the error state. */
|
|
27
|
+
isInvalid?: boolean;
|
|
20
28
|
}
|
|
21
29
|
|
|
22
30
|
function ComponentWrapper(
|
|
@@ -28,34 +36,39 @@ function ComponentWrapper(
|
|
|
28
36
|
headingText,
|
|
29
37
|
helperText,
|
|
30
38
|
id = generateUUID(),
|
|
39
|
+
invalidText,
|
|
40
|
+
isInvalid = false,
|
|
31
41
|
} = props;
|
|
32
42
|
const hasChildren = !!children;
|
|
33
43
|
const styles = useMultiStyleConfig("ComponentWrapper", { hasChildren });
|
|
44
|
+
const footnote: HelperErrorTextType = isInvalid ? invalidText : helperText;
|
|
34
45
|
|
|
46
|
+
// Note: Typescript warns when there are no children passed and
|
|
47
|
+
// doesn't compile. This is meant to log in non-Typescript apps.
|
|
35
48
|
if (!hasChildren) {
|
|
36
|
-
console.warn("
|
|
49
|
+
console.warn("`ComponentWrapper` has no children.");
|
|
37
50
|
}
|
|
38
51
|
|
|
39
52
|
return (
|
|
40
53
|
<Box __css={styles}>
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
54
|
+
{headingText && (
|
|
55
|
+
<Heading
|
|
56
|
+
id={`${id}-heading`}
|
|
57
|
+
level={HeadingLevels.Two}
|
|
58
|
+
text={headingText}
|
|
59
|
+
/>
|
|
60
|
+
)}
|
|
61
|
+
{descriptionText && <Text>{descriptionText}</Text>}
|
|
62
|
+
{children}
|
|
63
|
+
{footnote && (
|
|
64
|
+
<Box __css={styles.helperText}>
|
|
65
|
+
<HelperErrorText
|
|
66
|
+
id={`${id}-helperText`}
|
|
67
|
+
isInvalid={isInvalid}
|
|
68
|
+
text={footnote}
|
|
47
69
|
/>
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
{children}
|
|
51
|
-
{helperText && (
|
|
52
|
-
<Box __css={styles.helperText}>
|
|
53
|
-
<HelperErrorText id={`${id}-helperText`} isInvalid={false}>
|
|
54
|
-
{helperText}
|
|
55
|
-
</HelperErrorText>
|
|
56
|
-
</Box>
|
|
57
|
-
)}
|
|
58
|
-
</>
|
|
70
|
+
</Box>
|
|
71
|
+
)}
|
|
59
72
|
</Box>
|
|
60
73
|
);
|
|
61
74
|
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`ComponentWrapper Renders the UI snapshot correctly 1`] = `
|
|
4
|
+
<div
|
|
5
|
+
className="css-0"
|
|
6
|
+
>
|
|
7
|
+
<h2
|
|
8
|
+
className="chakra-heading css-0"
|
|
9
|
+
id="id-heading"
|
|
10
|
+
>
|
|
11
|
+
heading text
|
|
12
|
+
</h2>
|
|
13
|
+
<p
|
|
14
|
+
className="chakra-text css-0"
|
|
15
|
+
>
|
|
16
|
+
description text
|
|
17
|
+
</p>
|
|
18
|
+
<div>
|
|
19
|
+
children elements
|
|
20
|
+
</div>
|
|
21
|
+
<div
|
|
22
|
+
className="css-0"
|
|
23
|
+
>
|
|
24
|
+
<div
|
|
25
|
+
aria-atomic={true}
|
|
26
|
+
aria-live="off"
|
|
27
|
+
className=" css-0"
|
|
28
|
+
dangerouslySetInnerHTML={
|
|
29
|
+
Object {
|
|
30
|
+
"__html": "helper text",
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
data-isinvalid={false}
|
|
34
|
+
id="id-helperText"
|
|
35
|
+
/>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
`;
|
|
39
|
+
|
|
40
|
+
exports[`ComponentWrapper Renders the UI snapshot correctly 2`] = `
|
|
41
|
+
<div
|
|
42
|
+
className="css-0"
|
|
43
|
+
>
|
|
44
|
+
<div>
|
|
45
|
+
children elements
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
`;
|
|
49
|
+
|
|
50
|
+
exports[`ComponentWrapper Renders the UI snapshot correctly 3`] = `
|
|
51
|
+
<div
|
|
52
|
+
className="css-0"
|
|
53
|
+
>
|
|
54
|
+
<h2
|
|
55
|
+
className="chakra-heading css-0"
|
|
56
|
+
id="id-heading"
|
|
57
|
+
>
|
|
58
|
+
heading text
|
|
59
|
+
</h2>
|
|
60
|
+
<p
|
|
61
|
+
className="chakra-text css-0"
|
|
62
|
+
>
|
|
63
|
+
description text
|
|
64
|
+
</p>
|
|
65
|
+
<div>
|
|
66
|
+
children elements
|
|
67
|
+
</div>
|
|
68
|
+
<div
|
|
69
|
+
className="css-0"
|
|
70
|
+
>
|
|
71
|
+
<div
|
|
72
|
+
aria-atomic={true}
|
|
73
|
+
aria-live="polite"
|
|
74
|
+
className=" css-0"
|
|
75
|
+
dangerouslySetInnerHTML={
|
|
76
|
+
Object {
|
|
77
|
+
"__html": "invalid text",
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
data-isinvalid={true}
|
|
81
|
+
id="id-helperText"
|
|
82
|
+
/>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
`;
|
|
@@ -1,16 +1,22 @@
|
|
|
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
|
-
import { getCategory } from "../../utils/componentCategories";
|
|
11
10
|
import DatePicker from "./DatePicker";
|
|
12
11
|
import { DatePickerTypes } from "./DatePickerTypes";
|
|
12
|
+
import { getCategory } from "../../utils/componentCategories";
|
|
13
13
|
import DSProvider from "../../theme/provider";
|
|
14
|
+
import { getStorybookEnumValues } from "../../utils/utils";
|
|
15
|
+
|
|
16
|
+
export const enumValues = getStorybookEnumValues(
|
|
17
|
+
DatePickerTypes,
|
|
18
|
+
"DatePickerTypes"
|
|
19
|
+
);
|
|
14
20
|
|
|
15
21
|
<Meta
|
|
16
22
|
title={getCategory("DatePicker")}
|
|
@@ -19,18 +25,51 @@ import DSProvider from "../../theme/provider";
|
|
|
19
25
|
parameters={{
|
|
20
26
|
design: {
|
|
21
27
|
type: "figma",
|
|
22
|
-
url:
|
|
23
|
-
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11689%3A0",
|
|
28
|
+
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11689%3A0",
|
|
24
29
|
},
|
|
25
30
|
jest: ["DatePicker.test.tsx"],
|
|
26
31
|
}}
|
|
27
32
|
argTypes={{
|
|
28
|
-
className: {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
className: { control: false },
|
|
34
|
+
dateFormat: {
|
|
35
|
+
table: { defaultValue: { summary: "yyyy-MM-dd" } },
|
|
36
|
+
},
|
|
37
|
+
dateType: {
|
|
38
|
+
control: { type: "select" },
|
|
39
|
+
table: { defaultValue: { summary: "DatePickerTypes.Full" } },
|
|
40
|
+
options: enumValues.options,
|
|
41
|
+
},
|
|
42
|
+
id: { control: false },
|
|
43
|
+
isDateRange: {
|
|
44
|
+
table: { defaultValue: { summary: false } },
|
|
45
|
+
},
|
|
46
|
+
isDisabled: {
|
|
47
|
+
table: { defaultValue: { summary: false } },
|
|
48
|
+
},
|
|
49
|
+
isInvalid: {
|
|
50
|
+
table: { defaultValue: { summary: false } },
|
|
51
|
+
},
|
|
52
|
+
isRequired: {
|
|
53
|
+
table: { defaultValue: { summary: false } },
|
|
54
|
+
},
|
|
55
|
+
key: { table: { disable: true } },
|
|
56
|
+
labelText: {
|
|
57
|
+
table: { defaultValue: { summary: "From" } },
|
|
58
|
+
},
|
|
59
|
+
nameFrom: { control: false },
|
|
60
|
+
nameTo: { control: false },
|
|
61
|
+
onChange: { control: false },
|
|
62
|
+
ref: { table: { disable: true } },
|
|
63
|
+
refTo: { control: false },
|
|
64
|
+
showHelperInvalidText: {
|
|
65
|
+
table: { defaultValue: { summary: true } },
|
|
66
|
+
},
|
|
67
|
+
showLabel: {
|
|
68
|
+
table: { defaultValue: { summary: true } },
|
|
69
|
+
},
|
|
70
|
+
showOptReqLabel: {
|
|
71
|
+
table: { defaultValue: { summary: true } },
|
|
72
|
+
},
|
|
34
73
|
}}
|
|
35
74
|
/>
|
|
36
75
|
|
|
@@ -39,7 +78,7 @@ import DSProvider from "../../theme/provider";
|
|
|
39
78
|
| Component Version | DS Version |
|
|
40
79
|
| ----------------- | ---------- |
|
|
41
80
|
| Added | `0.24.0` |
|
|
42
|
-
| Latest | `0.25.
|
|
81
|
+
| Latest | `0.25.9` |
|
|
43
82
|
|
|
44
83
|
<Description of={DatePicker} />
|
|
45
84
|
|
|
@@ -49,13 +88,15 @@ also be added through props.
|
|
|
49
88
|
|
|
50
89
|
<Canvas withToolbar>
|
|
51
90
|
<Story
|
|
52
|
-
name="DatePicker"
|
|
91
|
+
name="DatePicker with Controls"
|
|
53
92
|
args={{
|
|
93
|
+
className: undefined,
|
|
54
94
|
dateFormat: "yyyy-MM-dd",
|
|
55
|
-
dateType: DatePickerTypes.Full,
|
|
95
|
+
dateType: "DatePickerTypes.Full",
|
|
56
96
|
helperText: "Note that the Library may be closed on Sundays.",
|
|
57
97
|
helperTextFrom: "Select start date.",
|
|
58
98
|
helperTextTo: "Select end date.",
|
|
99
|
+
id: "datePicker-id",
|
|
59
100
|
initialDate: "1/1/2021",
|
|
60
101
|
initialDateTo: "1/30/2021",
|
|
61
102
|
invalidText: "Please select a valid date.",
|
|
@@ -68,16 +109,20 @@ also be added through props.
|
|
|
68
109
|
minDate: "1/1/2021",
|
|
69
110
|
nameFrom: "visit-dates-from",
|
|
70
111
|
nameTo: "visit-dates-to",
|
|
112
|
+
onChange: undefined,
|
|
113
|
+
refTo: undefined,
|
|
71
114
|
showHelperInvalidText: true,
|
|
72
115
|
showLabel: true,
|
|
73
116
|
showOptReqLabel: true,
|
|
74
117
|
}}
|
|
75
118
|
>
|
|
76
|
-
{(args) =>
|
|
119
|
+
{(args) => (
|
|
120
|
+
<DatePicker {...args} dateType={enumValues.getValue(args.dateType)} />
|
|
121
|
+
)}
|
|
77
122
|
</Story>
|
|
78
123
|
</Canvas>
|
|
79
124
|
|
|
80
|
-
<ArgsTable story="DatePicker" />
|
|
125
|
+
<ArgsTable story="DatePicker with Controls" />
|
|
81
126
|
|
|
82
127
|
## Date Range
|
|
83
128
|
|
|
@@ -5,7 +5,9 @@ import { DatePickerTypes } from "./DatePickerTypes";
|
|
|
5
5
|
import Fieldset from "../Fieldset/Fieldset";
|
|
6
6
|
import { FormRow, FormField } from "../Form/Form";
|
|
7
7
|
import { FormSpacing } from "../Form/FormTypes";
|
|
8
|
-
import HelperErrorText
|
|
8
|
+
import HelperErrorText, {
|
|
9
|
+
HelperErrorTextType,
|
|
10
|
+
} from "../HelperErrorText/HelperErrorText";
|
|
9
11
|
import TextInput, {
|
|
10
12
|
InputProps,
|
|
11
13
|
TextInputRefType,
|
|
@@ -74,7 +76,7 @@ export interface DatePickerProps extends DatePickerWrapperProps {
|
|
|
74
76
|
/** DatePicker date types that can be rendered. */
|
|
75
77
|
dateType?: DatePickerTypes;
|
|
76
78
|
/** Populates the `HelperErrorText` component in this component. */
|
|
77
|
-
helperText?:
|
|
79
|
+
helperText?: HelperErrorTextType;
|
|
78
80
|
/** Populates the `HelperErrorText` component in the "From" `TextInput` component. */
|
|
79
81
|
helperTextFrom?: string;
|
|
80
82
|
/** Populates the `HelperErrorText` component in the "To" `TextInput` component. */
|
|
@@ -86,7 +88,7 @@ export interface DatePickerProps extends DatePickerWrapperProps {
|
|
|
86
88
|
initialDateTo?: string;
|
|
87
89
|
/** Populates the `HelperErrorText` error state for both "From"
|
|
88
90
|
* and "To" input components. */
|
|
89
|
-
invalidText?:
|
|
91
|
+
invalidText?: HelperErrorTextType;
|
|
90
92
|
/** Adds the 'disabled' property to the input element(s). */
|
|
91
93
|
isDisabled?: boolean;
|
|
92
94
|
/** Adds 'isInvalid' styling. */
|
|
@@ -415,9 +417,11 @@ const DatePicker = React.forwardRef<TextInputRefType, DatePickerProps>(
|
|
|
415
417
|
)}
|
|
416
418
|
</DateRangeRow>
|
|
417
419
|
{helperText && isDateRange && showHelperInvalidText && (
|
|
418
|
-
<HelperErrorText
|
|
419
|
-
{
|
|
420
|
-
|
|
420
|
+
<HelperErrorText
|
|
421
|
+
id={`${id}-helper-text`}
|
|
422
|
+
isInvalid={false}
|
|
423
|
+
text={helperText}
|
|
424
|
+
/>
|
|
421
425
|
)}
|
|
422
426
|
</DatePickerWrapper>
|
|
423
427
|
);
|
|
@@ -363,11 +363,14 @@ exports[`DatePicker Date Range renders the UI snapshot correctly 4`] = `
|
|
|
363
363
|
aria-atomic={true}
|
|
364
364
|
aria-live="polite"
|
|
365
365
|
className=" css-0"
|
|
366
|
+
dangerouslySetInnerHTML={
|
|
367
|
+
Object {
|
|
368
|
+
"__html": "Please select a valid date.",
|
|
369
|
+
}
|
|
370
|
+
}
|
|
366
371
|
data-isinvalid={true}
|
|
367
372
|
id="invalid-start-helperText"
|
|
368
|
-
|
|
369
|
-
Please select a valid date.
|
|
370
|
-
</div>
|
|
373
|
+
/>
|
|
371
374
|
</div>
|
|
372
375
|
</div>
|
|
373
376
|
</div>
|
|
@@ -415,11 +418,14 @@ exports[`DatePicker Date Range renders the UI snapshot correctly 4`] = `
|
|
|
415
418
|
aria-atomic={true}
|
|
416
419
|
aria-live="polite"
|
|
417
420
|
className=" css-0"
|
|
421
|
+
dangerouslySetInnerHTML={
|
|
422
|
+
Object {
|
|
423
|
+
"__html": "Please select a valid date.",
|
|
424
|
+
}
|
|
425
|
+
}
|
|
418
426
|
data-isinvalid={true}
|
|
419
427
|
id="invalid-end-helperText"
|
|
420
|
-
|
|
421
|
-
Please select a valid date.
|
|
422
|
-
</div>
|
|
428
|
+
/>
|
|
423
429
|
</div>
|
|
424
430
|
</div>
|
|
425
431
|
</div>
|
|
@@ -430,11 +436,14 @@ exports[`DatePicker Date Range renders the UI snapshot correctly 4`] = `
|
|
|
430
436
|
aria-atomic={true}
|
|
431
437
|
aria-live="off"
|
|
432
438
|
className=" css-0"
|
|
439
|
+
dangerouslySetInnerHTML={
|
|
440
|
+
Object {
|
|
441
|
+
"__html": "Note that the Library may be closed on Sundays.",
|
|
442
|
+
}
|
|
443
|
+
}
|
|
433
444
|
data-isinvalid={false}
|
|
434
445
|
id="invalid-helper-text"
|
|
435
|
-
|
|
436
|
-
Note that the Library may be closed on Sundays.
|
|
437
|
-
</div>
|
|
446
|
+
/>
|
|
438
447
|
</fieldset>
|
|
439
448
|
</div>
|
|
440
449
|
`;
|
|
@@ -539,11 +548,14 @@ exports[`DatePicker Date Range renders the UI snapshot correctly 5`] = `
|
|
|
539
548
|
aria-atomic={true}
|
|
540
549
|
aria-live="off"
|
|
541
550
|
className=" css-0"
|
|
551
|
+
dangerouslySetInnerHTML={
|
|
552
|
+
Object {
|
|
553
|
+
"__html": "Note that the Library may be closed on Sundays.",
|
|
554
|
+
}
|
|
555
|
+
}
|
|
542
556
|
data-isinvalid={false}
|
|
543
557
|
id="disabled-helper-text"
|
|
544
|
-
|
|
545
|
-
Note that the Library may be closed on Sundays.
|
|
546
|
-
</div>
|
|
558
|
+
/>
|
|
547
559
|
</fieldset>
|
|
548
560
|
</div>
|
|
549
561
|
`;
|
|
@@ -740,11 +752,14 @@ exports[`DatePicker Single input renders the UI snapshot correctly 4`] = `
|
|
|
740
752
|
aria-atomic={true}
|
|
741
753
|
aria-live="polite"
|
|
742
754
|
className=" css-0"
|
|
755
|
+
dangerouslySetInnerHTML={
|
|
756
|
+
Object {
|
|
757
|
+
"__html": "Please select a valid date.",
|
|
758
|
+
}
|
|
759
|
+
}
|
|
743
760
|
data-isinvalid={true}
|
|
744
761
|
id="invalid-start-helperText"
|
|
745
|
-
|
|
746
|
-
Please select a valid date.
|
|
747
|
-
</div>
|
|
762
|
+
/>
|
|
748
763
|
</div>
|
|
749
764
|
</div>
|
|
750
765
|
</div>
|
|
@@ -805,11 +820,14 @@ exports[`DatePicker Single input renders the UI snapshot correctly 5`] = `
|
|
|
805
820
|
aria-atomic={true}
|
|
806
821
|
aria-live="off"
|
|
807
822
|
className=" css-0"
|
|
823
|
+
dangerouslySetInnerHTML={
|
|
824
|
+
Object {
|
|
825
|
+
"__html": "Note that the Library may be closed on Sundays.",
|
|
826
|
+
}
|
|
827
|
+
}
|
|
808
828
|
data-isinvalid={false}
|
|
809
829
|
id="disabled-start-helperText"
|
|
810
|
-
|
|
811
|
-
Note that the Library may be closed on Sundays.
|
|
812
|
-
</div>
|
|
830
|
+
/>
|
|
813
831
|
</div>
|
|
814
832
|
</div>
|
|
815
833
|
</div>
|
|
@@ -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 Fieldset from "./Fieldset";
|
|
@@ -20,8 +20,17 @@ import DSProvider from "../../theme/provider";
|
|
|
20
20
|
}}
|
|
21
21
|
argTypes={{
|
|
22
22
|
children: { table: { disable: true } },
|
|
23
|
-
className: {
|
|
24
|
-
id: {
|
|
23
|
+
className: { control: false },
|
|
24
|
+
id: { control: false },
|
|
25
|
+
isLegendHidden: {
|
|
26
|
+
table: { defaultValue: { summary: false } },
|
|
27
|
+
},
|
|
28
|
+
isRequired: {
|
|
29
|
+
table: { defaultValue: { summary: false } },
|
|
30
|
+
},
|
|
31
|
+
optReqFlag: {
|
|
32
|
+
table: { defaultValue: { summary: false } },
|
|
33
|
+
},
|
|
25
34
|
}}
|
|
26
35
|
/>
|
|
27
36
|
|
|
@@ -36,8 +45,10 @@ import DSProvider from "../../theme/provider";
|
|
|
36
45
|
|
|
37
46
|
<Canvas withToolbar>
|
|
38
47
|
<Story
|
|
39
|
-
name="
|
|
48
|
+
name="Fieldset"
|
|
40
49
|
args={{
|
|
50
|
+
className: undefined,
|
|
51
|
+
id: "fieldset-id",
|
|
41
52
|
isLegendHidden: false,
|
|
42
53
|
isRequired: false,
|
|
43
54
|
legendText: "This is the legend text",
|
|
@@ -52,4 +63,4 @@ import DSProvider from "../../theme/provider";
|
|
|
52
63
|
</Story>
|
|
53
64
|
</Canvas>
|
|
54
65
|
|
|
55
|
-
<ArgsTable story="
|
|
66
|
+
<ArgsTable story="Fieldset" />
|