@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,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { Box, Grid, GridItem } from "@chakra-ui/react";
|
|
2
|
+
import { Canvas, Meta, Story } from "@storybook/addon-docs";
|
|
3
|
+
|
|
4
4
|
import { getCategory } from "../../utils/componentCategories";
|
|
5
5
|
import DSProvider from "../../theme/provider";
|
|
6
6
|
|
|
@@ -11,6 +11,7 @@ import DSProvider from "../../theme/provider";
|
|
|
11
11
|
| Component Version | DS Version |
|
|
12
12
|
| ----------------- | ---------- |
|
|
13
13
|
| Added | `0.25.1` |
|
|
14
|
+
| Latest | `0.25.1` |
|
|
14
15
|
|
|
15
16
|
Note: This needs the use of the `DSProvider` component. See the
|
|
16
17
|
[README](https://nypl.github.io/nypl-design-system/storybook-static/?path=/story/chakra-ui--page#dsprovider)
|
|
@@ -63,16 +64,12 @@ the `templateColumns` and `templateRows`.
|
|
|
63
64
|
height="200px"
|
|
64
65
|
templateRows="repeat(2, 1fr)"
|
|
65
66
|
templateColumns="repeat(5, 1fr)"
|
|
66
|
-
gap="
|
|
67
|
+
gap="l"
|
|
67
68
|
>
|
|
68
|
-
<GridItem
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
/>
|
|
73
|
-
<GridItem colSpan={2} bg="var(--nypl-colors-ui-success-primary)" />
|
|
74
|
-
<GridItem colSpan={2} bg="var(--nypl-colors-ui-success-secondary)" />
|
|
75
|
-
<GridItem colSpan={4} bg="var(--nypl-colors-ui-link-secondary)" />
|
|
69
|
+
<GridItem rowSpan={2} colSpan={1} bg="ui.link.primary" />
|
|
70
|
+
<GridItem colSpan={2} bg="ui.success.primary" />
|
|
71
|
+
<GridItem colSpan={2} bg="ui.success.secondary" />
|
|
72
|
+
<GridItem colSpan={4} bg="ui.link.secondary" />
|
|
76
73
|
</Grid>
|
|
77
74
|
</DSProvider>
|
|
78
75
|
</Canvas>
|
|
@@ -82,11 +79,11 @@ the `templateColumns` and `templateRows`.
|
|
|
82
79
|
height="200px"
|
|
83
80
|
templateRows="repeat(2, 1fr)"
|
|
84
81
|
templateColumns="repeat(5, 1fr)"
|
|
85
|
-
gap="
|
|
82
|
+
gap="l"
|
|
86
83
|
>
|
|
87
|
-
<GridItem rowSpan={2} colSpan={1} bg="
|
|
88
|
-
<GridItem colSpan={2} bg="
|
|
89
|
-
<GridItem colSpan={2} bg="
|
|
90
|
-
<GridItem colSpan={4} bg="
|
|
84
|
+
<GridItem rowSpan={2} colSpan={1} bg="ui.link.primary" />
|
|
85
|
+
<GridItem colSpan={2} bg="ui.success.primary" />
|
|
86
|
+
<GridItem colSpan={2} bg="ui.success.secondary" />
|
|
87
|
+
<GridItem colSpan={4} bg="ui.link.secondary" />
|
|
91
88
|
</Grid>
|
|
92
89
|
```
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Meta, Story, Canvas } from "@storybook/addon-docs";
|
|
2
2
|
import { Box, Stack, HStack, VStack, Circle } from "@chakra-ui/react";
|
|
3
3
|
|
|
4
|
-
import { getCategory } from "../../utils/componentCategories";
|
|
5
|
-
import DSProvider from "../../theme/provider";
|
|
6
4
|
import Icon from "../Icons/Icon";
|
|
7
5
|
import { IconNames, IconSizes } from "../Icons/IconTypes";
|
|
6
|
+
import { getCategory } from "../../utils/componentCategories";
|
|
7
|
+
import DSProvider from "../../theme/provider";
|
|
8
8
|
|
|
9
9
|
<Meta title={getCategory("Stack, HStack, VStack")} component={Stack} />
|
|
10
10
|
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
+
import { HStack } from "@chakra-ui/react";
|
|
1
2
|
import {
|
|
2
|
-
Meta,
|
|
3
|
-
Story,
|
|
4
|
-
Canvas,
|
|
5
3
|
ArgsTable,
|
|
4
|
+
Canvas,
|
|
6
5
|
Description,
|
|
7
|
-
|
|
6
|
+
Meta,
|
|
7
|
+
Story,
|
|
8
|
+
} from "@storybook/addon-docs";
|
|
8
9
|
import { withDesign } from "storybook-addon-designs";
|
|
9
|
-
import { HStack } from "@chakra-ui/react";
|
|
10
10
|
|
|
11
|
-
import { getCategory } from "../../utils/componentCategories";
|
|
12
|
-
import DSProvider from "../../theme/provider";
|
|
13
11
|
import Checkbox from "./Checkbox";
|
|
14
12
|
import { onChangeDefault } from "./Checkbox";
|
|
13
|
+
import { getCategory } from "../../utils/componentCategories";
|
|
14
|
+
import DSProvider from "../../theme/provider";
|
|
15
15
|
|
|
16
16
|
<Meta
|
|
17
17
|
title={getCategory("Checkbox")}
|
|
@@ -20,16 +20,35 @@ import { onChangeDefault } from "./Checkbox";
|
|
|
20
20
|
parameters={{
|
|
21
21
|
design: {
|
|
22
22
|
type: "figma",
|
|
23
|
-
url:
|
|
24
|
-
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11895%3A658",
|
|
23
|
+
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11895%3A658",
|
|
25
24
|
},
|
|
26
25
|
jest: ["Checkbox.test.tsx"],
|
|
27
26
|
}}
|
|
28
27
|
argTypes={{
|
|
29
|
-
className: {
|
|
30
|
-
id: {
|
|
31
|
-
isChecked: {
|
|
32
|
-
|
|
28
|
+
className: { control: false },
|
|
29
|
+
id: { control: false },
|
|
30
|
+
isChecked: { control: false },
|
|
31
|
+
isDisabled: {
|
|
32
|
+
table: { defaultValue: { summary: false } },
|
|
33
|
+
},
|
|
34
|
+
isIndeterminate: {
|
|
35
|
+
table: { defaultValue: { summary: false } },
|
|
36
|
+
},
|
|
37
|
+
isInvalid: {
|
|
38
|
+
table: { defaultValue: { summary: false } },
|
|
39
|
+
},
|
|
40
|
+
isRequired: {
|
|
41
|
+
table: { defaultValue: { summary: false } },
|
|
42
|
+
},
|
|
43
|
+
key: { table: { disable: true } },
|
|
44
|
+
onChange: { control: false },
|
|
45
|
+
ref: { table: { disable: true } },
|
|
46
|
+
showHelperInvalidText: {
|
|
47
|
+
table: { defaultValue: { summary: false } },
|
|
48
|
+
},
|
|
49
|
+
showLabel: {
|
|
50
|
+
table: { defaultValue: { summary: false } },
|
|
51
|
+
},
|
|
33
52
|
}}
|
|
34
53
|
/>
|
|
35
54
|
|
|
@@ -38,7 +57,7 @@ import { onChangeDefault } from "./Checkbox";
|
|
|
38
57
|
| Component Version | DS Version |
|
|
39
58
|
| ----------------- | ---------- |
|
|
40
59
|
| Added | `0.1.0` |
|
|
41
|
-
| Latest | `0.25.
|
|
60
|
+
| Latest | `0.25.9` |
|
|
42
61
|
|
|
43
62
|
<Description of={Checkbox} />
|
|
44
63
|
|
|
@@ -49,15 +68,18 @@ cause an accessibility violation if none is present.
|
|
|
49
68
|
<Story
|
|
50
69
|
name="Checkbox"
|
|
51
70
|
args={{
|
|
71
|
+
className: undefined,
|
|
52
72
|
helperText: "This is the helper text!",
|
|
53
|
-
id: "
|
|
73
|
+
id: "checkbox_id",
|
|
54
74
|
invalidText: "This is the error text :(",
|
|
75
|
+
isChecked: undefined,
|
|
55
76
|
isDisabled: false,
|
|
56
77
|
isIndeterminate: false,
|
|
57
78
|
isInvalid: false,
|
|
58
79
|
isRequired: false,
|
|
59
80
|
labelText: "Test Label",
|
|
60
81
|
name: "test_name",
|
|
82
|
+
onChange: undefined,
|
|
61
83
|
showHelperInvalidText: true,
|
|
62
84
|
showLabel: true,
|
|
63
85
|
value: "1",
|
|
@@ -1,23 +1,26 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
1
|
import {
|
|
3
2
|
Box,
|
|
4
3
|
Checkbox as ChakraCheckbox,
|
|
5
4
|
Icon,
|
|
6
5
|
useMultiStyleConfig,
|
|
7
6
|
} from "@chakra-ui/react";
|
|
8
|
-
import
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
|
|
9
|
+
import HelperErrorText, {
|
|
10
|
+
HelperErrorTextType,
|
|
11
|
+
} from "../HelperErrorText/HelperErrorText";
|
|
9
12
|
import generateUUID from "../../helpers/generateUUID";
|
|
10
13
|
|
|
11
14
|
export interface CheckboxProps {
|
|
12
15
|
/** className you can add in addition to 'input' */
|
|
13
16
|
className?: string;
|
|
14
17
|
/** Optional string to populate the HelperErrorText for standard state */
|
|
15
|
-
helperText?:
|
|
18
|
+
helperText?: HelperErrorTextType;
|
|
16
19
|
/** ID that other components can cross reference for accessibility purposes */
|
|
17
20
|
id?: string;
|
|
18
21
|
/** Optional string to populate the HelperErrorText for the error state
|
|
19
22
|
* when `isInvalid` is true. */
|
|
20
|
-
invalidText?:
|
|
23
|
+
invalidText?: HelperErrorTextType;
|
|
21
24
|
/** When using the Checkbox as a "controlled" form element, you can specify
|
|
22
25
|
* the Checkbox's checked state using this prop.
|
|
23
26
|
* Learn more about controlled and uncontrolled form fields:
|
|
@@ -89,7 +92,7 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
|
|
|
89
92
|
value,
|
|
90
93
|
} = props;
|
|
91
94
|
const styles = useMultiStyleConfig("Checkbox", {});
|
|
92
|
-
const footnote = isInvalid ? invalidText : helperText;
|
|
95
|
+
const footnote: HelperErrorTextType = isInvalid ? invalidText : helperText;
|
|
93
96
|
const ariaAttributes = {};
|
|
94
97
|
const onChange = props.onChange || onChangeDefault;
|
|
95
98
|
// Use Chakra's default indeterminate icon.
|
|
@@ -130,9 +133,11 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
|
|
|
130
133
|
</ChakraCheckbox>
|
|
131
134
|
{footnote && showHelperInvalidText && (
|
|
132
135
|
<Box __css={styles.helper}>
|
|
133
|
-
<HelperErrorText
|
|
134
|
-
{
|
|
135
|
-
|
|
136
|
+
<HelperErrorText
|
|
137
|
+
id={`${id}-helperText`}
|
|
138
|
+
isInvalid={isInvalid}
|
|
139
|
+
text={footnote}
|
|
140
|
+
/>
|
|
136
141
|
</Box>
|
|
137
142
|
)}
|
|
138
143
|
</>
|
|
@@ -1,17 +1,23 @@
|
|
|
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
|
|
11
|
-
import DSProvider from "../../theme/provider";
|
|
10
|
+
import Checkbox from "../Checkbox/Checkbox";
|
|
12
11
|
import CheckboxGroup from "./CheckboxGroup";
|
|
13
12
|
import { CheckboxGroupLayoutTypes } from "./CheckboxGroupLayoutTypes";
|
|
14
|
-
import
|
|
13
|
+
import { getCategory } from "../../utils/componentCategories";
|
|
14
|
+
import DSProvider from "../../theme/provider";
|
|
15
|
+
import { getStorybookEnumValues } from "../../utils/utils";
|
|
16
|
+
|
|
17
|
+
export const enumValues = getStorybookEnumValues(
|
|
18
|
+
CheckboxGroupLayoutTypes,
|
|
19
|
+
"CheckboxGroupLayoutTypes"
|
|
20
|
+
);
|
|
15
21
|
|
|
16
22
|
<Meta
|
|
17
23
|
title={getCategory("CheckboxGroup")}
|
|
@@ -20,17 +26,41 @@ import Checkbox from "../Checkbox/Checkbox";
|
|
|
20
26
|
parameters={{
|
|
21
27
|
design: {
|
|
22
28
|
type: "figma",
|
|
23
|
-
url:
|
|
24
|
-
"https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11895%3A658",
|
|
29
|
+
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Main?node-id=11895%3A658",
|
|
25
30
|
},
|
|
26
31
|
jest: ["CheckboxGroup.test.tsx"],
|
|
27
32
|
}}
|
|
28
33
|
argTypes={{
|
|
29
34
|
children: { table: { disable: true } },
|
|
30
|
-
defaultValue: {
|
|
31
|
-
id: {
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
defaultValue: { control: false },
|
|
36
|
+
id: { control: false },
|
|
37
|
+
isDisabled: {
|
|
38
|
+
table: { defaultValue: { summary: false } },
|
|
39
|
+
},
|
|
40
|
+
isInvalid: {
|
|
41
|
+
table: { defaultValue: { summary: false } },
|
|
42
|
+
},
|
|
43
|
+
isRequired: {
|
|
44
|
+
table: { defaultValue: { summary: false } },
|
|
45
|
+
},
|
|
46
|
+
key: { table: { disable: true } },
|
|
47
|
+
layout: {
|
|
48
|
+
control: { type: "select" },
|
|
49
|
+
table: { defaultValue: { summary: "CheckboxGroupLayoutTypes.Column" } },
|
|
50
|
+
options: enumValues.options,
|
|
51
|
+
},
|
|
52
|
+
name: { control: false },
|
|
53
|
+
onChange: { control: false },
|
|
54
|
+
optReqFlag: {
|
|
55
|
+
table: { defaultValue: { summary: true } },
|
|
56
|
+
},
|
|
57
|
+
ref: { table: { disable: true } },
|
|
58
|
+
showHelperInvalidText: {
|
|
59
|
+
table: { defaultValue: { summary: true } },
|
|
60
|
+
},
|
|
61
|
+
showLabel: {
|
|
62
|
+
table: { defaultValue: { summary: true } },
|
|
63
|
+
},
|
|
34
64
|
}}
|
|
35
65
|
/>
|
|
36
66
|
|
|
@@ -39,7 +69,7 @@ import Checkbox from "../Checkbox/Checkbox";
|
|
|
39
69
|
| Component Version | DS Version |
|
|
40
70
|
| ----------------- | ---------- |
|
|
41
71
|
| Added | `0.25.1` |
|
|
42
|
-
| Latest | `0.25.
|
|
72
|
+
| Latest | `0.25.9` |
|
|
43
73
|
|
|
44
74
|
<Description of={CheckboxGroup} />
|
|
45
75
|
|
|
@@ -49,20 +79,22 @@ import Checkbox from "../Checkbox/Checkbox";
|
|
|
49
79
|
args={{
|
|
50
80
|
defaultValue: ["4"],
|
|
51
81
|
helperText: "This is the helper text for the full group.",
|
|
82
|
+
id: "checkboxGroup-id",
|
|
52
83
|
invalidText: "This is the error text :(",
|
|
53
84
|
isDisabled: false,
|
|
54
85
|
isInvalid: false,
|
|
55
86
|
isRequired: false,
|
|
56
87
|
labelText: "Standard Checkbox Group",
|
|
57
|
-
layout: CheckboxGroupLayoutTypes.Column,
|
|
88
|
+
layout: "CheckboxGroupLayoutTypes.Column",
|
|
58
89
|
name: "checkbox-story",
|
|
90
|
+
onChange: undefined,
|
|
59
91
|
optReqFlag: true,
|
|
60
92
|
showHelperInvalidText: true,
|
|
61
93
|
showLabel: true,
|
|
62
94
|
}}
|
|
63
95
|
>
|
|
64
96
|
{(args) => (
|
|
65
|
-
<CheckboxGroup {...args}>
|
|
97
|
+
<CheckboxGroup {...args} layout={enumValues.getValue(args.layout)}>
|
|
66
98
|
<Checkbox value="2" labelText="Checkbox 2" />
|
|
67
99
|
<Checkbox value="3" labelText="Checkbox 3" />
|
|
68
100
|
<Checkbox value="4" labelText="Checkbox 4" />
|
|
@@ -6,12 +6,14 @@ import {
|
|
|
6
6
|
useMultiStyleConfig,
|
|
7
7
|
} from "@chakra-ui/react";
|
|
8
8
|
|
|
9
|
-
import HelperErrorText from "../HelperErrorText/HelperErrorText";
|
|
10
|
-
import generateUUID from "../../helpers/generateUUID";
|
|
11
|
-
import { spacing } from "../../theme/foundations/spacing";
|
|
12
|
-
import { CheckboxGroupLayoutTypes } from "./CheckboxGroupLayoutTypes";
|
|
13
9
|
import Checkbox from "../Checkbox/Checkbox";
|
|
10
|
+
import { CheckboxGroupLayoutTypes } from "./CheckboxGroupLayoutTypes";
|
|
14
11
|
import Fieldset from "../Fieldset/Fieldset";
|
|
12
|
+
import HelperErrorText, {
|
|
13
|
+
HelperErrorTextType,
|
|
14
|
+
} from "../HelperErrorText/HelperErrorText";
|
|
15
|
+
import { spacing } from "../../theme/foundations/spacing";
|
|
16
|
+
import generateUUID from "../../helpers/generateUUID";
|
|
15
17
|
|
|
16
18
|
export interface CheckboxGroupProps {
|
|
17
19
|
/** Any child node passed to the component. */
|
|
@@ -19,11 +21,11 @@ export interface CheckboxGroupProps {
|
|
|
19
21
|
/** Populates the initial value of the input */
|
|
20
22
|
defaultValue?: string[];
|
|
21
23
|
/** Optional string to populate the HelperErrorText for standard state */
|
|
22
|
-
helperText?:
|
|
24
|
+
helperText?: HelperErrorTextType;
|
|
23
25
|
/** ID that other components can cross reference for accessibility purposes */
|
|
24
26
|
id?: string;
|
|
25
27
|
/** Optional string to populate the HelperErrorText for error state */
|
|
26
|
-
invalidText?:
|
|
28
|
+
invalidText?: HelperErrorTextType;
|
|
27
29
|
/** Adds the 'disabled' prop to the input when true. */
|
|
28
30
|
isDisabled?: boolean;
|
|
29
31
|
/** A`dds the 'aria-invalid' attribute to the input and
|
|
@@ -76,7 +78,7 @@ const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
|
|
|
76
78
|
showHelperInvalidText = true,
|
|
77
79
|
showLabel = true,
|
|
78
80
|
} = props;
|
|
79
|
-
const footnote = isInvalid ? invalidText : helperText;
|
|
81
|
+
const footnote: HelperErrorTextType = isInvalid ? invalidText : helperText;
|
|
80
82
|
const spacingProp =
|
|
81
83
|
layout === CheckboxGroupLayoutTypes.Column ? spacing.s : spacing.l;
|
|
82
84
|
const newChildren = [];
|
|
@@ -139,9 +141,11 @@ const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
|
|
|
139
141
|
</ChakraCheckboxGroup>
|
|
140
142
|
{footnote && showHelperInvalidText && (
|
|
141
143
|
<Box __css={styles.helper}>
|
|
142
|
-
<HelperErrorText
|
|
143
|
-
{
|
|
144
|
-
|
|
144
|
+
<HelperErrorText
|
|
145
|
+
id={`${id}-helperErrorText`}
|
|
146
|
+
isInvalid={isInvalid}
|
|
147
|
+
text={footnote}
|
|
148
|
+
/>
|
|
145
149
|
</Box>
|
|
146
150
|
)}
|
|
147
151
|
</Fieldset>
|
|
@@ -584,11 +584,14 @@ exports[`Checkbox renders the UI snapshot correctly 4`] = `
|
|
|
584
584
|
aria-atomic={true}
|
|
585
585
|
aria-live="off"
|
|
586
586
|
className=" css-0"
|
|
587
|
+
dangerouslySetInnerHTML={
|
|
588
|
+
Object {
|
|
589
|
+
"__html": "helper text",
|
|
590
|
+
}
|
|
591
|
+
}
|
|
587
592
|
data-isinvalid={false}
|
|
588
593
|
id="helperText-helperErrorText"
|
|
589
|
-
|
|
590
|
-
helper text
|
|
591
|
-
</div>
|
|
594
|
+
/>
|
|
592
595
|
</div>
|
|
593
596
|
</fieldset>
|
|
594
597
|
`;
|
|
@@ -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
|
}
|