@nypl/design-system-react-components 0.25.1 → 0.25.5
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 +118 -1
- package/README.md +98 -50
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -0
- package/dist/components/Button/Button.d.ts +13 -8
- package/dist/components/Button/ButtonTypes.d.ts +2 -1
- package/dist/components/Card/Card.d.ts +36 -52
- package/dist/components/Card/CardTypes.d.ts +0 -15
- package/dist/components/Checkbox/Checkbox.d.ts +17 -13
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +4 -2
- package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +15 -0
- package/dist/components/DatePicker/DatePicker.d.ts +36 -34
- package/dist/components/Fieldset/Fieldset.d.ts +25 -0
- package/dist/components/Heading/Heading.d.ts +4 -4
- package/dist/components/HelperErrorText/HelperErrorText.d.ts +17 -14
- package/dist/components/HorizontalRule/HorizontalRule.d.ts +10 -9
- package/dist/components/Icons/Icon.d.ts +8 -0
- package/dist/components/Icons/IconSvgs.d.ts +11 -0
- package/dist/components/Icons/IconTypes.d.ts +11 -0
- package/dist/components/Image/Image.d.ts +19 -9
- package/dist/components/Image/ImageTypes.d.ts +20 -0
- package/dist/components/Link/Link.d.ts +4 -0
- package/dist/components/List/List.d.ts +19 -14
- package/dist/components/Notification/Notification.d.ts +37 -16
- package/dist/components/Pagination/Pagination.d.ts +16 -13
- package/dist/components/Pagination/Pagination.stories.d.ts +2 -0
- package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +29 -0
- package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +8 -0
- package/dist/components/Radio/Radio.d.ts +2 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts +4 -2
- package/dist/components/SearchBar/SearchBar.d.ts +3 -3
- package/dist/components/Select/Select.d.ts +2 -0
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +18 -14
- package/dist/components/Slider/Slider.d.ts +57 -0
- package/dist/components/StyleGuide/ColorCard.d.ts +12 -0
- package/dist/components/Tabs/Tabs.d.ts +1 -1
- package/dist/components/TextInput/TextInput.d.ts +12 -0
- package/dist/components/VideoPlayer/VideoPlayer.d.ts +6 -8
- package/dist/components/VideoPlayer/VideoPlayerTypes.d.ts +2 -2
- package/dist/design-system-react-components.cjs.development.js +6131 -3715
- 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 +6124 -3699
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/hooks/tests/useCarouselStyles.test.d.ts +1 -0
- package/dist/hooks/useCarouselStyles.d.ts +16 -0
- package/dist/hooks/useNYPLTheme.d.ts +54 -0
- package/dist/hooks/useWindowSize.d.ts +10 -0
- package/dist/index.d.ts +13 -8
- package/dist/resources.scss +180 -170
- package/dist/styles.css +1 -1
- package/dist/theme/components/button.d.ts +22 -8
- package/dist/theme/components/card.d.ts +168 -0
- package/dist/theme/components/checkbox.d.ts +5 -1
- package/dist/theme/components/checkboxGroup.d.ts +12 -0
- package/dist/theme/components/componentWrapper.d.ts +11 -0
- package/dist/theme/components/datePicker.d.ts +16 -0
- package/dist/theme/components/fieldset.d.ts +27 -0
- package/dist/theme/components/global.d.ts +23 -13
- package/dist/theme/components/globalMixins.d.ts +9 -1
- package/dist/theme/components/heading.d.ts +5 -0
- package/dist/theme/components/helperErrorText.d.ts +10 -0
- package/dist/theme/components/hero.d.ts +1 -0
- package/dist/theme/components/horizontalRule.d.ts +14 -0
- package/dist/theme/components/image.d.ts +31 -0
- package/dist/theme/components/label.d.ts +5 -3
- package/dist/theme/components/link.d.ts +4 -0
- package/dist/theme/components/list.d.ts +89 -0
- package/dist/theme/components/notification.d.ts +75 -0
- package/dist/theme/components/pagination.d.ts +19 -0
- package/dist/theme/components/progressIndicator.d.ts +50 -0
- package/dist/theme/components/radioGroup.d.ts +12 -0
- package/dist/theme/components/select.d.ts +11 -2
- package/dist/theme/components/skeletonLoader.d.ts +98 -0
- package/dist/theme/components/slider.d.ts +51 -0
- package/dist/theme/components/tabs.d.ts +54 -3
- package/dist/theme/components/textInput.d.ts +8 -1
- package/dist/theme/components/videoPlayer.d.ts +40 -0
- package/dist/theme/foundations/breakpoints.d.ts +8 -8
- package/dist/theme/foundations/global.d.ts +6 -1
- package/dist/theme/foundations/radii.d.ts +5 -0
- package/dist/theme/foundations/spacing.d.ts +16 -16
- package/package.json +72 -83
- package/src/__tests__/setup.ts +2 -2
- package/src/components/Accordion/Accordion.stories.mdx +39 -44
- package/src/components/Autosuggest/Autosuggest.stories.mdx +3 -3
- package/src/components/Autosuggest/Autosuggest.stories.tsx +2 -1
- package/src/components/Autosuggest/_Autosuggest.scss +5 -5
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +14 -10
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +23 -0
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +5 -1
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +199 -1
- package/src/components/Button/Button.stories.mdx +15 -10
- package/src/components/Button/Button.test.tsx +21 -7
- package/src/components/Button/Button.tsx +22 -34
- package/src/components/Button/ButtonTypes.tsx +1 -0
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +41 -10
- package/src/components/Card/Card.stories.mdx +296 -259
- package/src/components/Card/Card.test.tsx +156 -84
- package/src/components/Card/Card.tsx +195 -145
- package/src/components/Card/CardTypes.tsx +0 -17
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +410 -0
- package/src/components/CardEdition/CardEdition.stories.tsx +15 -47
- package/src/components/CardEdition/_CardEdition.scss +22 -23
- package/src/components/Chakra/Box.stories.mdx +15 -16
- package/src/components/Chakra/Center.stories.mdx +31 -16
- package/src/components/Chakra/Grid.stories.mdx +28 -15
- package/src/components/Chakra/Stack.stories.mdx +35 -18
- package/src/components/Checkbox/Checkbox.stories.mdx +33 -11
- package/src/components/Checkbox/Checkbox.test.tsx +47 -2
- package/src/components/Checkbox/Checkbox.tsx +39 -33
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +90 -2
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +82 -2
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +29 -2
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +22 -18
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +47 -81
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +63 -0
- package/src/components/DatePicker/DatePicker.stories.mdx +163 -62
- package/src/components/DatePicker/DatePicker.test.tsx +264 -64
- package/src/components/DatePicker/DatePicker.tsx +159 -128
- package/src/components/DatePicker/_DatePicker.scss +33 -67
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +818 -0
- package/src/components/Fieldset/Fieldset.stories.mdx +55 -0
- package/src/components/Fieldset/Fieldset.test.tsx +125 -0
- package/src/components/Fieldset/Fieldset.tsx +52 -0
- package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +68 -0
- package/src/components/Form/Form.stories.mdx +24 -6
- package/src/components/Form/Form.test.tsx +1 -1
- package/src/components/Form/Form.tsx +1 -0
- package/src/components/Grid/SimpleGrid.stories.mdx +32 -39
- package/src/components/Grid/SimpleGrid.test.tsx +4 -4
- package/src/components/Heading/Heading.stories.mdx +3 -4
- package/src/components/Heading/Heading.tsx +5 -5
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +124 -0
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +39 -44
- package/src/components/HelperErrorText/HelperErrorText.tsx +37 -39
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +25 -0
- package/src/components/Hero/Hero.stories.mdx +12 -2
- package/src/components/Hero/Hero.tsx +1 -1
- package/src/components/Hero/HeroTypes.tsx +1 -0
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +7 -7
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +8 -6
- package/src/components/HorizontalRule/HorizontalRule.test.tsx +33 -28
- package/src/components/HorizontalRule/HorizontalRule.tsx +27 -29
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +27 -9
- package/src/components/Icons/Icon.stories.mdx +12 -4
- package/src/components/Icons/Icon.test.tsx +18 -0
- package/src/components/Icons/Icon.tsx +16 -1
- package/src/components/Icons/IconSvgs.tsx +22 -0
- package/src/components/Icons/IconTypes.tsx +11 -0
- package/src/components/Image/Image.stories.mdx +220 -0
- package/src/components/Image/Image.test.tsx +131 -29
- package/src/components/Image/Image.tsx +84 -56
- package/src/components/Image/ImageTypes.ts +22 -0
- package/src/components/Image/__snapshots__/Image.test.tsx.snap +190 -0
- package/src/components/Input/Input.stories.tsx +23 -67
- package/src/components/Input/Input.test.tsx +4 -4
- package/src/components/Input/_Input.scss +23 -14
- package/src/components/Link/Link.tsx +4 -1
- package/src/components/List/List.stories.mdx +124 -49
- package/src/components/List/List.test.tsx +142 -63
- package/src/components/List/List.tsx +89 -93
- package/src/components/List/__snapshots__/List.test.tsx.snap +109 -0
- package/src/components/Modal/Modal.stories.mdx +3 -3
- package/src/components/Modal/_Modal.scss +2 -2
- package/src/components/Notification/Notification.stories.mdx +109 -112
- package/src/components/Notification/Notification.test.tsx +99 -110
- package/src/components/Notification/Notification.tsx +156 -159
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +159 -8
- package/src/components/Pagination/Pagination.stories.mdx +26 -27
- package/src/components/Pagination/Pagination.stories.tsx +11 -16
- package/src/components/Pagination/Pagination.test.tsx +276 -146
- package/src/components/Pagination/Pagination.tsx +174 -154
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +285 -0
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +292 -0
- package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +225 -0
- package/src/components/ProgressIndicator/ProgressIndicator.tsx +126 -0
- package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +8 -0
- package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +357 -0
- package/src/components/Radio/Radio.test.tsx +20 -4
- package/src/components/Radio/Radio.tsx +6 -3
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +3 -0
- package/src/components/RadioGroup/RadioGroup.stories.mdx +3 -4
- package/src/components/RadioGroup/RadioGroup.test.tsx +24 -1
- package/src/components/RadioGroup/RadioGroup.tsx +19 -19
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +42 -72
- package/src/components/SearchBar/SearchBar.Test.tsx +20 -1
- package/src/components/SearchBar/SearchBar.stories.mdx +113 -8
- package/src/components/SearchBar/SearchBar.tsx +20 -10
- package/src/components/Select/Select.test.tsx +12 -0
- package/src/components/Select/Select.tsx +5 -2
- package/src/components/Select/SelectTypes.tsx +1 -0
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +28 -59
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +97 -177
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +74 -71
- package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +739 -0
- package/src/components/Slider/Slider.stories.mdx +529 -0
- package/src/components/Slider/Slider.test.tsx +653 -0
- package/src/components/Slider/Slider.tsx +303 -0
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +1946 -0
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +1 -1
- package/src/components/StyleGuide/Breakpoints.stories.mdx +34 -10
- package/src/components/StyleGuide/Buttons.stories.mdx +89 -73
- package/src/components/StyleGuide/ColorCard.tsx +46 -0
- package/src/components/StyleGuide/Colors.stories.mdx +171 -311
- package/src/components/StyleGuide/DesignTokens.stories.mdx +170 -0
- package/src/components/StyleGuide/Forms.stories.mdx +9 -7
- package/src/components/StyleGuide/Iconography.stories.mdx +85 -91
- package/src/components/StyleGuide/Spacing.stories.mdx +31 -23
- package/src/components/StyleGuide/Typography.stories.mdx +202 -189
- package/src/components/StyleGuide/UIDocCard.tsx +1 -1
- package/src/components/Tabs/Tabs.stories.mdx +73 -11
- package/src/components/Tabs/Tabs.tsx +87 -64
- package/src/components/Template/Template.stories.mdx +25 -27
- package/src/components/TextInput/TextInput.stories.mdx +1 -1
- package/src/components/TextInput/TextInput.test.tsx +22 -2
- package/src/components/TextInput/TextInput.tsx +28 -8
- package/src/components/TextInput/TextInputTypes.tsx +2 -0
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +17 -4
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +54 -53
- package/src/components/VideoPlayer/VideoPlayer.tsx +50 -51
- package/src/components/VideoPlayer/VideoPlayerTypes.tsx +2 -2
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +91 -0
- package/src/docs/Chakra.stories.mdx +244 -63
- package/src/docs/Intro.stories.mdx +5 -2
- package/src/hooks/tests/useCarouselStyles.test.ts +140 -0
- package/src/hooks/tests/useNYPLTheme.test.tsx +36 -0
- package/src/hooks/useCarouselStyles.ts +34 -0
- package/src/hooks/useNYPLTheme.ts +67 -0
- package/src/hooks/useWindowSize.ts +40 -0
- package/src/index.ts +22 -19
- package/src/resources.scss +5 -5
- package/src/styles/base/{_02-breakpoints.scss → _01-breakpoints.scss} +9 -10
- package/src/styles/base/{_03-mixins.scss → _02-mixins.scss} +16 -5
- package/src/styles/base/{_04-base.scss → _03-base.scss} +7 -2
- package/src/styles/base/{_05-focus.scss → _04-focus.scss} +0 -15
- package/src/styles/base/_place-holder.scss +14 -3
- package/src/styles/{03-space → space}/_space-inline.scss +14 -14
- package/src/styles/{03-space → space}/_space-inset.scss +10 -10
- package/src/styles/space/_space-stack.scss +116 -0
- package/src/styles.scss +13 -60
- package/src/theme/components/button.ts +21 -15
- package/src/theme/components/card.ts +174 -0
- package/src/theme/components/checkbox.ts +8 -3
- package/src/theme/components/checkboxGroup.ts +8 -0
- package/src/theme/components/componentWrapper.ts +10 -0
- package/src/theme/components/datePicker.ts +17 -0
- package/src/theme/components/fieldset.ts +18 -0
- package/src/theme/components/global.ts +26 -15
- package/src/theme/components/globalMixins.ts +9 -1
- package/src/theme/components/heading.ts +10 -5
- package/src/theme/components/helperErrorText.ts +9 -0
- package/src/theme/components/hero.ts +4 -3
- package/src/theme/components/horizontalRule.ts +13 -0
- package/src/theme/components/icon.ts +9 -9
- package/src/theme/components/image.ts +116 -0
- package/src/theme/components/label.ts +3 -10
- package/src/theme/components/link.ts +5 -1
- package/src/theme/components/list.ts +73 -0
- package/src/theme/components/notification.ts +93 -0
- package/src/theme/components/pagination.ts +20 -0
- package/src/theme/components/progressIndicator.ts +62 -0
- package/src/theme/components/radio.ts +2 -2
- package/src/theme/components/radioGroup.ts +8 -0
- package/src/theme/components/select.ts +6 -3
- package/src/theme/components/skeletonLoader.ts +107 -0
- package/src/theme/components/slider.ts +79 -0
- package/src/theme/components/statusBadge.ts +1 -2
- package/src/theme/components/tabs.ts +49 -19
- package/src/theme/components/template.ts +8 -8
- package/src/theme/components/textInput.ts +5 -4
- package/src/theme/components/videoPlayer.ts +49 -0
- package/src/theme/foundations/breakpoints.ts +8 -8
- package/src/theme/foundations/global.ts +6 -1
- package/src/theme/foundations/radii.ts +6 -0
- package/src/theme/foundations/spacing.ts +24 -24
- package/src/theme/index.ts +41 -10
- package/src/utils/componentCategories.ts +4 -3
- package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +0 -16
- package/dist/components/Image/Image.stories.d.ts +0 -18
- package/dist/components/List/List.stories.d.ts +0 -7
- package/dist/theme/components/customCheckboxGroup.d.ts +0 -18
- package/dist/theme/components/customRadioGroup.d.ts +0 -18
- package/src/components/Button/_Button.scss +0 -32
- package/src/components/Card/_Card.scss +0 -308
- package/src/components/HelperErrorText/HelperErrorText.stories.tsx +0 -48
- package/src/components/HelperErrorText/_HelperErrorText.scss +0 -9
- package/src/components/HorizontalRule/_HorizontalRule.scss +0 -15
- package/src/components/Image/Image.stories.tsx +0 -54
- package/src/components/Image/_Image.scss +0 -38
- package/src/components/List/List.stories.tsx +0 -139
- package/src/components/List/_List.scss +0 -76
- package/src/components/Notification/_Notification.scss +0 -110
- package/src/components/Pagination/_Pagination.scss +0 -40
- package/src/components/SkeletonLoader/_SkeletonLoader.scss +0 -142
- package/src/components/VideoPlayer/_VideoPlayer.scss +0 -38
- package/src/styles/01-colors/_colors-brand.scss +0 -62
- package/src/styles/01-colors/_colors-utility.scss +0 -67
- package/src/styles/02-typography/_type-scale.css +0 -11
- package/src/styles/02-typography/_type-weight.css +0 -7
- package/src/styles/02-typography/_typefaces.css +0 -4
- package/src/styles/03-space/_space-stack.scss +0 -116
- package/src/styles/03-space/_space.css +0 -30
- package/src/styles/base/_card-grid.scss +0 -78
- package/src/styles/base/_typography.scss +0 -11
- package/src/theme/components/customCheckboxGroup.ts +0 -12
- package/src/theme/components/customRadioGroup.ts +0 -12
|
@@ -3,6 +3,7 @@ import { Box, Center, Square, Circle, HStack } from "@chakra-ui/react";
|
|
|
3
3
|
|
|
4
4
|
import { getCategory } from "../../utils/componentCategories";
|
|
5
5
|
import Image from "../Image/Image";
|
|
6
|
+
import { ImageSizes } from "../Image/ImageTypes";
|
|
6
7
|
import Icon from "../Icons/Icon";
|
|
7
8
|
import { IconNames, IconColors, IconSizes } from "../Icons/IconTypes";
|
|
8
9
|
import DSProvider from "../../theme/provider";
|
|
@@ -15,7 +16,8 @@ import DSProvider from "../../theme/provider";
|
|
|
15
16
|
| ----------------- | ---------- |
|
|
16
17
|
| Added | `0.24.0` |
|
|
17
18
|
|
|
18
|
-
Note: This needs the use of the `DSProvider` component. See the
|
|
19
|
+
Note: This needs the use of the `DSProvider` component. See the
|
|
20
|
+
[README](https://nypl.github.io/nypl-design-system/storybook-static/?path=/story/chakra-ui--page#dsprovider)
|
|
19
21
|
for more information.
|
|
20
22
|
|
|
21
23
|
These components are directly exported from Chakra UI. The `Center`, `Circle`,
|
|
@@ -30,17 +32,16 @@ guide on the Chakra UI site.
|
|
|
30
32
|
<Story
|
|
31
33
|
name="Center, Circle, Square"
|
|
32
34
|
args={{
|
|
33
|
-
|
|
34
|
-
bg: "var(--brand-primary)",
|
|
35
|
-
color: "var(--ui-white)",
|
|
35
|
+
padding: "s",
|
|
36
|
+
bg: "var(--nypl-colors-brand-primary)",
|
|
37
|
+
color: "var(--nypl-colors-ui-white)",
|
|
36
38
|
}}
|
|
37
39
|
>
|
|
38
40
|
{(args) => (
|
|
39
41
|
<Box>
|
|
40
42
|
Some text at the beginning.
|
|
41
43
|
<Center {...args}>
|
|
42
|
-
|
|
43
|
-
become someday?
|
|
44
|
+
This text is centered inside a `Center` component.
|
|
44
45
|
</Center>
|
|
45
46
|
Some text at the end.
|
|
46
47
|
</Box>
|
|
@@ -50,23 +51,32 @@ guide on the Chakra UI site.
|
|
|
50
51
|
|
|
51
52
|
<Canvas>
|
|
52
53
|
<DSProvider>
|
|
53
|
-
<Center>
|
|
54
|
-
<Image
|
|
54
|
+
<Center border="1px solid" borderColor="var(--nypl-colors-ui-gray-medium)">
|
|
55
|
+
<Image
|
|
56
|
+
src="https://placeimg.com/300/400/arch"
|
|
57
|
+
alt="Centered Image"
|
|
58
|
+
imageSize={ImageSizes.Medium}
|
|
59
|
+
/>
|
|
55
60
|
</Center>
|
|
56
61
|
</DSProvider>
|
|
57
62
|
</Canvas>
|
|
58
63
|
|
|
59
64
|
## Circle
|
|
60
65
|
|
|
61
|
-
|
|
66
|
+
This component is similar to the `Center` component but it is always rendered as
|
|
67
|
+
a circle.
|
|
62
68
|
|
|
63
69
|
<Canvas>
|
|
64
70
|
<DSProvider>
|
|
65
71
|
<HStack spacing="s">
|
|
66
|
-
<Circle size="50px" bg="var(--
|
|
67
|
-
<Icon
|
|
72
|
+
<Circle size="50px" bg="var(--nypl-colors-brand-secondary)">
|
|
73
|
+
<Icon
|
|
74
|
+
name={IconNames.Download}
|
|
75
|
+
color={IconColors.UiWhite}
|
|
76
|
+
size={IconSizes.Large}
|
|
77
|
+
/>
|
|
68
78
|
</Circle>
|
|
69
|
-
<Circle size="50px" bg="var(--ui-link-primary)">
|
|
79
|
+
<Circle size="50px" bg="var(--nypl-colors-ui-link-primary)">
|
|
70
80
|
<Icon
|
|
71
81
|
name={IconNames.Check}
|
|
72
82
|
color={IconColors.UiWhite}
|
|
@@ -79,15 +89,20 @@ Similar to `Center` but is always a circle!
|
|
|
79
89
|
|
|
80
90
|
## Square
|
|
81
91
|
|
|
82
|
-
|
|
92
|
+
This component is similar to the `Circle` component but always has equal height
|
|
93
|
+
and width.
|
|
83
94
|
|
|
84
95
|
<Canvas>
|
|
85
96
|
<DSProvider>
|
|
86
97
|
<HStack spacing="s">
|
|
87
|
-
<Square size="50px" bg="var(--
|
|
88
|
-
<Icon
|
|
98
|
+
<Square size="50px" bg="var(--nypl-colors-brand-secondary)">
|
|
99
|
+
<Icon
|
|
100
|
+
name={IconNames.Download}
|
|
101
|
+
color={IconColors.UiWhite}
|
|
102
|
+
size={IconSizes.Large}
|
|
103
|
+
/>
|
|
89
104
|
</Square>
|
|
90
|
-
<Square size="50px" bg="var(--ui-link-primary)">
|
|
105
|
+
<Square size="50px" bg="var(--nypl-colors-ui-link-primary)">
|
|
91
106
|
<Icon
|
|
92
107
|
name={IconNames.Check}
|
|
93
108
|
color={IconColors.UiWhite}
|
|
@@ -2,6 +2,7 @@ import { Meta, Story, Canvas } from "@storybook/addon-docs/blocks";
|
|
|
2
2
|
import { Box } from "@chakra-ui/react";
|
|
3
3
|
import { Grid, GridItem } from "@chakra-ui/react";
|
|
4
4
|
import { getCategory } from "../../utils/componentCategories";
|
|
5
|
+
import DSProvider from "../../theme/provider";
|
|
5
6
|
|
|
6
7
|
<Meta title={getCategory("Grid")} component={Grid} />
|
|
7
8
|
|
|
@@ -11,13 +12,17 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
11
12
|
| ----------------- | ---------- |
|
|
12
13
|
| Added | `0.25.1` |
|
|
13
14
|
|
|
14
|
-
Note: This needs the use of the `DSProvider` component. See the
|
|
15
|
+
Note: This needs the use of the `DSProvider` component. See the
|
|
16
|
+
[README](https://nypl.github.io/nypl-design-system/storybook-static/?path=/story/chakra-ui--page#dsprovider)
|
|
15
17
|
for more information.
|
|
16
18
|
|
|
17
|
-
This component is directly exported from Chakra UI. The `Grid` component is
|
|
19
|
+
This component is directly exported from Chakra UI. The `Grid` component is
|
|
20
|
+
useful for grid layouts and offers more complexity and formatting options than
|
|
21
|
+
the DS `SimpleGrid` component. `Grid` is `Box` with `display: grid` and it comes
|
|
22
|
+
with helpful style shorthand. It renders a `div` element.
|
|
18
23
|
|
|
19
|
-
Details about available props and related child components can be found on the
|
|
20
|
-
page on the Chakra UI site.
|
|
24
|
+
Details about available props and related child components can be found on the
|
|
25
|
+
[Grid component](https://chakra-ui.com/docs/layout/grid) page on the Chakra UI site.
|
|
21
26
|
|
|
22
27
|
<Canvas>
|
|
23
28
|
<Story
|
|
@@ -46,34 +51,42 @@ page on the Chakra UI site.
|
|
|
46
51
|
|
|
47
52
|
## Complex Layouts with Grid Child Components
|
|
48
53
|
|
|
49
|
-
In some layouts, you may need certain grid items to span a specific amount of
|
|
54
|
+
In some layouts, you may need certain grid items to span a specific amount of
|
|
55
|
+
columns or rows instead of an even distribution. To achieve this, you need to
|
|
56
|
+
pass the `colSpan` prop to the `GridItem` component to span across columns and
|
|
57
|
+
also pass the `rowSpan` component to span across rows. You also need to specify
|
|
58
|
+
the `templateColumns` and `templateRows`.
|
|
50
59
|
|
|
51
60
|
<Canvas>
|
|
52
61
|
<DSProvider>
|
|
53
62
|
<Grid
|
|
54
|
-
|
|
63
|
+
height="200px"
|
|
55
64
|
templateRows="repeat(2, 1fr)"
|
|
56
65
|
templateColumns="repeat(5, 1fr)"
|
|
57
66
|
gap="32"
|
|
58
67
|
>
|
|
59
|
-
<GridItem
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
68
|
+
<GridItem
|
|
69
|
+
rowSpan={2}
|
|
70
|
+
colSpan={1}
|
|
71
|
+
bg="var(--nypl-colors-ui-link-primary)"
|
|
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)" />
|
|
63
76
|
</Grid>
|
|
64
77
|
</DSProvider>
|
|
65
78
|
</Canvas>
|
|
66
79
|
|
|
67
80
|
```jsx
|
|
68
81
|
<Grid
|
|
69
|
-
|
|
82
|
+
height="200px"
|
|
70
83
|
templateRows="repeat(2, 1fr)"
|
|
71
84
|
templateColumns="repeat(5, 1fr)"
|
|
72
85
|
gap="32"
|
|
73
86
|
>
|
|
74
|
-
<GridItem rowSpan={2} colSpan={1} bg="var(--ui-link-primary)" />
|
|
75
|
-
<GridItem colSpan={2} bg="var(--ui-success-primary)" />
|
|
76
|
-
<GridItem colSpan={2} bg="var(--ui-success-secondary)" />
|
|
77
|
-
<GridItem colSpan={4} bg="var(--ui-link-secondary)" />
|
|
87
|
+
<GridItem rowSpan={2} colSpan={1} bg="var(--nypl-colors-ui-link-primary)" />
|
|
88
|
+
<GridItem colSpan={2} bg="var(--nypl-colors-ui-success-primary)" />
|
|
89
|
+
<GridItem colSpan={2} bg="var(--nypl-colors-ui-success-secondary)" />
|
|
90
|
+
<GridItem colSpan={4} bg="var(--nypl-colors-ui-link-secondary)" />
|
|
78
91
|
</Grid>
|
|
79
92
|
```
|
|
@@ -4,8 +4,7 @@ import { Box, Stack, HStack, VStack, Circle } from "@chakra-ui/react";
|
|
|
4
4
|
import { getCategory } from "../../utils/componentCategories";
|
|
5
5
|
import DSProvider from "../../theme/provider";
|
|
6
6
|
import Icon from "../Icons/Icon";
|
|
7
|
-
import { IconNames,
|
|
8
|
-
import Radio from "../Radio/Radio";
|
|
7
|
+
import { IconNames, IconSizes } from "../Icons/IconTypes";
|
|
9
8
|
|
|
10
9
|
<Meta title={getCategory("Stack, HStack, VStack")} component={Stack} />
|
|
11
10
|
|
|
@@ -15,7 +14,8 @@ import Radio from "../Radio/Radio";
|
|
|
15
14
|
| ----------------- | ---------- |
|
|
16
15
|
| Added | `0.24.0` |
|
|
17
16
|
|
|
18
|
-
Note: This needs the use of the `DSProvider` component. See the
|
|
17
|
+
Note: This needs the use of the `DSProvider` component. See the
|
|
18
|
+
[README](https://nypl.github.io/nypl-design-system/storybook-static/?path=/story/chakra-ui--page#dsprovider)
|
|
19
19
|
for more information.
|
|
20
20
|
|
|
21
21
|
These components are directly exported from Chakra UI. The `Stack`, `HStack`,
|
|
@@ -25,17 +25,21 @@ with spacing between them.
|
|
|
25
25
|
All available props can be found on the [Style Props](https://chakra-ui.com/docs/features/style-props)
|
|
26
26
|
guide on the Chakra UI site.
|
|
27
27
|
|
|
28
|
+
In all the following examples, Design System `Icon` components are wrapped in
|
|
29
|
+
Chakra's `Circle` component.
|
|
30
|
+
|
|
28
31
|
## Stack
|
|
29
32
|
|
|
30
|
-
The `Stack` component is the most flexible component because it can stack
|
|
31
|
-
both horizontally and vertically through the `direction` prop
|
|
33
|
+
The `Stack` component is the most flexible component because it can stack
|
|
34
|
+
elements both horizontally and vertically through the `direction` prop and the
|
|
35
|
+
`"row"` and `"column"` values, respectively.
|
|
32
36
|
|
|
33
37
|
<Canvas>
|
|
34
38
|
<Story
|
|
35
39
|
name="Stack, HStack, VStack"
|
|
36
40
|
args={{
|
|
37
41
|
direction: "column",
|
|
38
|
-
spacing: "
|
|
42
|
+
spacing: "s",
|
|
39
43
|
}}
|
|
40
44
|
argTypes={{
|
|
41
45
|
direction: {
|
|
@@ -64,30 +68,43 @@ both horizontally and vertically through the `direction` prop.
|
|
|
64
68
|
|
|
65
69
|
## HStack
|
|
66
70
|
|
|
67
|
-
Stacks components horizontally.
|
|
71
|
+
Stacks components horizontally. This is the same as the `Stack` component with
|
|
72
|
+
a `direction` value of `"row"`.
|
|
68
73
|
|
|
69
74
|
<Canvas>
|
|
70
75
|
<DSProvider>
|
|
71
|
-
<HStack>
|
|
72
|
-
<
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
<
|
|
76
|
+
<HStack spacing="s">
|
|
77
|
+
<Circle size="50px" borderColor="ui.black" borderWidth="1px">
|
|
78
|
+
<Icon name={IconNames.ErrorFilled} size={IconSizes.Large} />
|
|
79
|
+
</Circle>
|
|
80
|
+
<Circle size="50px" borderColor="ui.black" borderWidth="1px">
|
|
81
|
+
<Icon name={IconNames.ErrorOutline} size={IconSizes.Large} />
|
|
82
|
+
</Circle>
|
|
83
|
+
<Circle size="50px" borderColor="ui.black" borderWidth="1px">
|
|
84
|
+
<Icon name={IconNames.Check} size={IconSizes.Large} />
|
|
85
|
+
</Circle>
|
|
76
86
|
</HStack>
|
|
77
87
|
</DSProvider>
|
|
78
88
|
</Canvas>
|
|
79
89
|
|
|
80
90
|
## VStack
|
|
81
91
|
|
|
82
|
-
Stacks components vertically.
|
|
92
|
+
Stacks components vertically. This is the same as the `Stack` component with
|
|
93
|
+
a `direction` value of `"column"`.Pass in a value to the `align` prop to align
|
|
94
|
+
all the elements in the stack.
|
|
83
95
|
|
|
84
96
|
<Canvas>
|
|
85
97
|
<DSProvider>
|
|
86
|
-
<VStack>
|
|
87
|
-
<
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
<
|
|
98
|
+
<VStack align="left" spacing="s">
|
|
99
|
+
<Circle size="50px" borderColor="ui.black" borderWidth="1px">
|
|
100
|
+
<Icon name={IconNames.ErrorFilled} size={IconSizes.Large} />
|
|
101
|
+
</Circle>
|
|
102
|
+
<Circle size="50px" borderColor="ui.black" borderWidth="1px">
|
|
103
|
+
<Icon name={IconNames.ErrorOutline} size={IconSizes.Large} />
|
|
104
|
+
</Circle>
|
|
105
|
+
<Circle size="50px" borderColor="ui.black" borderWidth="1px">
|
|
106
|
+
<Icon name={IconNames.Check} size={IconSizes.Large} />
|
|
107
|
+
</Circle>
|
|
91
108
|
</VStack>
|
|
92
109
|
</DSProvider>
|
|
93
110
|
</Canvas>
|
|
@@ -38,7 +38,7 @@ import { onChangeDefault } from "./Checkbox";
|
|
|
38
38
|
| Component Version | DS Version |
|
|
39
39
|
| ----------------- | ---------- |
|
|
40
40
|
| Added | `0.1.0` |
|
|
41
|
-
| Latest | `0.25.
|
|
41
|
+
| Latest | `0.25.3` |
|
|
42
42
|
|
|
43
43
|
<Description of={Checkbox} />
|
|
44
44
|
|
|
@@ -49,16 +49,18 @@ cause an accessibility violation if none is present.
|
|
|
49
49
|
<Story
|
|
50
50
|
name="Checkbox"
|
|
51
51
|
args={{
|
|
52
|
-
|
|
53
|
-
showLabel: true,
|
|
52
|
+
helperText: "This is the helper text!",
|
|
54
53
|
id: "test_id",
|
|
55
|
-
|
|
56
|
-
value: "1",
|
|
54
|
+
invalidText: "This is the error text :(",
|
|
57
55
|
isDisabled: false,
|
|
58
|
-
|
|
56
|
+
isIndeterminate: false,
|
|
59
57
|
isInvalid: false,
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
isRequired: false,
|
|
59
|
+
labelText: "Test Label",
|
|
60
|
+
name: "test_name",
|
|
61
|
+
showHelperInvalidText: true,
|
|
62
|
+
showLabel: true,
|
|
63
|
+
value: "1",
|
|
62
64
|
}}
|
|
63
65
|
>
|
|
64
66
|
{(args) => <Checkbox {...args} />}
|
|
@@ -69,9 +71,29 @@ cause an accessibility violation if none is present.
|
|
|
69
71
|
|
|
70
72
|
## Checked
|
|
71
73
|
|
|
74
|
+
Note that the `isChecked` property in this example is set to `true` and clicking
|
|
75
|
+
on it won't remove the checkmark; the `isChecked` prop must now be controlled
|
|
76
|
+
and removed manually by the parent component that controls this state.
|
|
77
|
+
|
|
72
78
|
<Canvas>
|
|
73
79
|
<DSProvider>
|
|
74
|
-
<Checkbox labelText="I am checked" isChecked value="1" />
|
|
80
|
+
<Checkbox id="isChecked" labelText="I am checked" isChecked value="1" />
|
|
81
|
+
</DSProvider>
|
|
82
|
+
</Canvas>
|
|
83
|
+
|
|
84
|
+
## Indeterminate
|
|
85
|
+
|
|
86
|
+
Note: This state only changes the icon through the `isIndeterminate` prop. This
|
|
87
|
+
does not affect whether the checkbox is checked. The `isIndeterminate` prop must
|
|
88
|
+
now be controlled and removed by the parent component in order to remove this state.
|
|
89
|
+
|
|
90
|
+
<Canvas>
|
|
91
|
+
<DSProvider>
|
|
92
|
+
<Checkbox
|
|
93
|
+
id="indeterminate"
|
|
94
|
+
labelText="I am indeterminate"
|
|
95
|
+
isIndeterminate
|
|
96
|
+
/>
|
|
75
97
|
</DSProvider>
|
|
76
98
|
</Canvas>
|
|
77
99
|
|
|
@@ -126,9 +148,9 @@ cause an accessibility violation if none is present.
|
|
|
126
148
|
<Canvas>
|
|
127
149
|
<DSProvider>
|
|
128
150
|
<Checkbox
|
|
129
|
-
name="
|
|
151
|
+
name="testinvalidText"
|
|
130
152
|
labelText="I have error text"
|
|
131
|
-
|
|
153
|
+
invalidText="I am the error text for this Checkbox"
|
|
132
154
|
isInvalid
|
|
133
155
|
/>
|
|
134
156
|
</DSProvider>
|
|
@@ -63,7 +63,7 @@ describe("Checkbox", () => {
|
|
|
63
63
|
id="inputID"
|
|
64
64
|
labelText="Test Label"
|
|
65
65
|
helperText="This is the helper text."
|
|
66
|
-
|
|
66
|
+
invalidText="This is the error text :("
|
|
67
67
|
/>
|
|
68
68
|
);
|
|
69
69
|
expect(screen.getByText("This is the helper text.")).toBeVisible();
|
|
@@ -77,7 +77,7 @@ describe("Checkbox", () => {
|
|
|
77
77
|
labelText="Test Label"
|
|
78
78
|
isInvalid
|
|
79
79
|
helperText="This is the helper text."
|
|
80
|
-
|
|
80
|
+
invalidText="This is the error text :("
|
|
81
81
|
/>
|
|
82
82
|
);
|
|
83
83
|
expect(screen.getByText("This is the error text :(")).toBeVisible();
|
|
@@ -109,6 +109,22 @@ describe("Checkbox", () => {
|
|
|
109
109
|
expect(screen.getByRole("checkbox")).toHaveAttribute("checked");
|
|
110
110
|
});
|
|
111
111
|
|
|
112
|
+
it("Sets the 'indeterminate' state", () => {
|
|
113
|
+
const { container, rerender } = render(
|
|
114
|
+
<Checkbox id="inputID" labelText="Test Label" isChecked />
|
|
115
|
+
);
|
|
116
|
+
expect(
|
|
117
|
+
container.querySelector(".chakra-checkbox__control")
|
|
118
|
+
).not.toHaveAttribute("data-indeterminate");
|
|
119
|
+
|
|
120
|
+
rerender(
|
|
121
|
+
<Checkbox id="inputID" labelText="Test Label" isChecked isIndeterminate />
|
|
122
|
+
);
|
|
123
|
+
expect(
|
|
124
|
+
container.querySelector(".chakra-checkbox__control")
|
|
125
|
+
).toHaveAttribute("data-indeterminate");
|
|
126
|
+
});
|
|
127
|
+
|
|
112
128
|
it("Sets the 'disabled' attribute", () => {
|
|
113
129
|
render(
|
|
114
130
|
<Checkbox
|
|
@@ -139,10 +155,28 @@ describe("Checkbox", () => {
|
|
|
139
155
|
id="inputID-attributes"
|
|
140
156
|
labelText="onChange test"
|
|
141
157
|
showLabel={true}
|
|
158
|
+
invalidText="This is the error text!"
|
|
159
|
+
isInvalid
|
|
160
|
+
/>
|
|
161
|
+
);
|
|
162
|
+
expect(screen.getByRole("checkbox")).toHaveAttribute("aria-invalid");
|
|
163
|
+
expect(screen.getByText("This is the error text!")).toBeInTheDocument();
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
it("does not render the error text when 'isInvalid' is true but 'showHelperInvalidText' is false", () => {
|
|
167
|
+
render(
|
|
168
|
+
<Checkbox
|
|
169
|
+
id="inputID-attributes"
|
|
170
|
+
labelText="onChange test"
|
|
171
|
+
showLabel={true}
|
|
172
|
+
showHelperInvalidText={false}
|
|
142
173
|
isInvalid
|
|
143
174
|
/>
|
|
144
175
|
);
|
|
145
176
|
expect(screen.getByRole("checkbox")).toHaveAttribute("aria-invalid");
|
|
177
|
+
expect(
|
|
178
|
+
screen.queryByText("This is the error text!")
|
|
179
|
+
).not.toBeInTheDocument();
|
|
146
180
|
});
|
|
147
181
|
|
|
148
182
|
it("Changing the value calls the onChange handler", () => {
|
|
@@ -170,6 +204,16 @@ describe("Checkbox", () => {
|
|
|
170
204
|
<Checkbox id="checkbox-checked" labelText="Test Label" isChecked />
|
|
171
205
|
)
|
|
172
206
|
.toJSON();
|
|
207
|
+
const isIndeterminate = renderer
|
|
208
|
+
.create(
|
|
209
|
+
<Checkbox
|
|
210
|
+
id="checkbox-checked"
|
|
211
|
+
labelText="Test Label"
|
|
212
|
+
isChecked
|
|
213
|
+
isIndeterminate
|
|
214
|
+
/>
|
|
215
|
+
)
|
|
216
|
+
.toJSON();
|
|
173
217
|
const isRequired = renderer
|
|
174
218
|
.create(
|
|
175
219
|
<Checkbox id="checkbox-required" labelText="Test Label" isRequired />
|
|
@@ -188,6 +232,7 @@ describe("Checkbox", () => {
|
|
|
188
232
|
|
|
189
233
|
expect(primary).toMatchSnapshot();
|
|
190
234
|
expect(isChecked).toMatchSnapshot();
|
|
235
|
+
expect(isIndeterminate).toMatchSnapshot();
|
|
191
236
|
expect(isRequired).toMatchSnapshot();
|
|
192
237
|
expect(isInvalid).toMatchSnapshot();
|
|
193
238
|
expect(isDisabled).toMatchSnapshot();
|
|
@@ -11,36 +11,40 @@ import generateUUID from "../../helpers/generateUUID";
|
|
|
11
11
|
export interface CheckboxProps {
|
|
12
12
|
/** className you can add in addition to 'input' */
|
|
13
13
|
className?: string;
|
|
14
|
-
/** Optional string to populate the HelperErrorText for the error state
|
|
15
|
-
* when `isInvalid` is true.
|
|
16
|
-
*/
|
|
17
|
-
errorText?: string;
|
|
18
14
|
/** Optional string to populate the HelperErrorText for standard state */
|
|
19
15
|
helperText?: string;
|
|
20
16
|
/** ID that other components can cross reference for accessibility purposes */
|
|
21
17
|
id?: string;
|
|
22
|
-
/**
|
|
23
|
-
*
|
|
18
|
+
/** Optional string to populate the HelperErrorText for the error state
|
|
19
|
+
* when `isInvalid` is true. */
|
|
20
|
+
invalidText?: string;
|
|
21
|
+
/** When using the Checkbox as a "controlled" form element, you can specify
|
|
22
|
+
* the Checkbox's checked state using this prop.
|
|
24
23
|
* Learn more about controlled and uncontrolled form fields:
|
|
25
24
|
* https://goshakkk.name/controlled-vs-uncontrolled-inputs-react/ */
|
|
26
25
|
isChecked?: boolean;
|
|
27
26
|
/** Adds the 'disabled' and `aria-disabled` attributes to the input when true.
|
|
28
|
-
* This also makes the text italic and color scheme gray.
|
|
29
|
-
*/
|
|
27
|
+
* This also makes the text italic and color scheme gray. */
|
|
30
28
|
isDisabled?: boolean;
|
|
29
|
+
/** Adds the indeterminate state to the `Checkbox`. */
|
|
30
|
+
isIndeterminate?: boolean;
|
|
31
31
|
/** Adds the 'aria-invalid' attribute to the input when true. This also makes
|
|
32
|
-
* the color theme "NYPL error" red for the button and text.
|
|
33
|
-
*/
|
|
32
|
+
* the color theme "NYPL error" red for the button and text. */
|
|
34
33
|
isInvalid?: boolean;
|
|
35
34
|
/** Adds the 'required' attribute to the input when true. */
|
|
36
35
|
isRequired?: boolean;
|
|
37
|
-
/** The checkbox's label.
|
|
36
|
+
/** The checkbox's label. This will serve as the text content for a `<label>`
|
|
37
|
+
* element if `showlabel` is true, or an "aria-label" if `showLabel` is false. */
|
|
38
38
|
labelText: string;
|
|
39
|
-
/** The name prop indicates into which group of checkboxes this checkbox
|
|
39
|
+
/** The name prop indicates into which group of checkboxes this checkbox
|
|
40
|
+
* belongs. If none is specified, 'default' will be used */
|
|
40
41
|
name?: string;
|
|
41
42
|
/** The action to perform on the `<input>`'s onChange function */
|
|
42
43
|
onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
43
|
-
/** Offers the ability to
|
|
44
|
+
/** Offers the ability to hide the helper/invalid text. */
|
|
45
|
+
showHelperInvalidText?: boolean;
|
|
46
|
+
/** Offers the ability to show the checkbox's label onscreen or hide it.
|
|
47
|
+
* Refer to the `labelText` property for more information. */
|
|
44
48
|
showLabel?: boolean;
|
|
45
49
|
/** Populates the value of the input */
|
|
46
50
|
value?: string;
|
|
@@ -51,17 +55,17 @@ export const onChangeDefault = () => {
|
|
|
51
55
|
};
|
|
52
56
|
|
|
53
57
|
function CheckboxIcon(props) {
|
|
54
|
-
//
|
|
55
|
-
// rendering issues on the SVG element
|
|
58
|
+
// We don't need the `isIndeterminate` or `isChecked` props but it
|
|
59
|
+
// causes rendering issues on the SVG element, so we remove them
|
|
60
|
+
// before passing all the props to the `Icon` component.
|
|
56
61
|
const { isIndeterminate, isChecked, ...rest } = props;
|
|
57
62
|
|
|
58
|
-
const d = isIndeterminate
|
|
59
|
-
? "M12,0A12,12,0,1,0,24,12,12.013,12.013,0,0,0,12,0Zm0,19a1.5,1.5,0,1,1,1.5-1.5A1.5,1.5,0,0,1,12,19Zm1.6-6.08a1,1,0,0,0-.6.917,1,1,0,1,1-2,0,3,3,0,0,1,1.8-2.75A2,2,0,1,0,10,9.255a1,1,0,1,1-2,0,4,4,0,1,1,5.6,3.666Z"
|
|
60
|
-
: "M8.795 15.875l-4.17-4.17-1.42 1.41 5.59 5.59 12-12-1.41-1.41-10.59 10.58z";
|
|
61
|
-
|
|
62
63
|
return (
|
|
63
64
|
<Icon viewBox="0 0 24 24" {...rest}>
|
|
64
|
-
<path
|
|
65
|
+
<path
|
|
66
|
+
fill="currentColor"
|
|
67
|
+
d="M8.795 15.875l-4.17-4.17-1.42 1.41 5.59 5.59 12-12-1.41-1.41-10.59 10.58z"
|
|
68
|
+
/>
|
|
65
69
|
</Icon>
|
|
66
70
|
);
|
|
67
71
|
}
|
|
@@ -70,29 +74,32 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
|
|
|
70
74
|
(props, ref?) => {
|
|
71
75
|
const {
|
|
72
76
|
className,
|
|
73
|
-
|
|
77
|
+
invalidText,
|
|
74
78
|
helperText,
|
|
75
79
|
id = generateUUID(),
|
|
76
80
|
isChecked,
|
|
77
81
|
isDisabled = false,
|
|
82
|
+
isIndeterminate = false,
|
|
78
83
|
isInvalid = false,
|
|
79
84
|
isRequired = false,
|
|
80
85
|
labelText,
|
|
81
86
|
name,
|
|
87
|
+
showHelperInvalidText = true,
|
|
82
88
|
showLabel = true,
|
|
83
89
|
value,
|
|
84
90
|
} = props;
|
|
85
|
-
|
|
86
91
|
const styles = useMultiStyleConfig("Checkbox", {});
|
|
87
|
-
const footnote = isInvalid ?
|
|
88
|
-
const
|
|
92
|
+
const footnote = isInvalid ? invalidText : helperText;
|
|
93
|
+
const ariaAttributes = {};
|
|
89
94
|
const onChange = props.onChange || onChangeDefault;
|
|
95
|
+
// Use Chakra's default indeterminate icon.
|
|
96
|
+
const icon = !isIndeterminate ? <CheckboxIcon /> : undefined;
|
|
90
97
|
|
|
91
98
|
if (!showLabel) {
|
|
92
|
-
|
|
99
|
+
ariaAttributes["aria-label"] =
|
|
93
100
|
labelText && footnote ? `${labelText} - ${footnote}` : labelText;
|
|
94
101
|
} else {
|
|
95
|
-
if (footnote)
|
|
102
|
+
if (footnote) ariaAttributes["aria-describedby"] = `${id}-helperText`;
|
|
96
103
|
}
|
|
97
104
|
|
|
98
105
|
return (
|
|
@@ -104,6 +111,7 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
|
|
|
104
111
|
isDisabled={isDisabled}
|
|
105
112
|
isInvalid={isInvalid}
|
|
106
113
|
isRequired={isRequired}
|
|
114
|
+
isIndeterminate={isIndeterminate}
|
|
107
115
|
ref={ref}
|
|
108
116
|
value={value}
|
|
109
117
|
{...(isChecked !== undefined
|
|
@@ -114,15 +122,15 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
|
|
|
114
122
|
: {
|
|
115
123
|
defaultIsChecked: false,
|
|
116
124
|
})}
|
|
117
|
-
icon={
|
|
125
|
+
icon={icon}
|
|
118
126
|
__css={styles}
|
|
119
|
-
{...
|
|
127
|
+
{...ariaAttributes}
|
|
120
128
|
>
|
|
121
129
|
{showLabel && labelText}
|
|
122
130
|
</ChakraCheckbox>
|
|
123
|
-
{footnote &&
|
|
124
|
-
<Box __css={styles.helper}
|
|
125
|
-
<HelperErrorText
|
|
131
|
+
{footnote && showHelperInvalidText && (
|
|
132
|
+
<Box __css={styles.helper}>
|
|
133
|
+
<HelperErrorText isInvalid={isInvalid} id={`${id}-helperText`}>
|
|
126
134
|
{footnote}
|
|
127
135
|
</HelperErrorText>
|
|
128
136
|
</Box>
|
|
@@ -132,6 +140,4 @@ const Checkbox = React.forwardRef<HTMLInputElement, CheckboxProps>(
|
|
|
132
140
|
}
|
|
133
141
|
);
|
|
134
142
|
|
|
135
|
-
Checkbox.displayName = "Checkbox";
|
|
136
|
-
|
|
137
143
|
export default Checkbox;
|