@nypl/design-system-react-components 0.25.11 → 0.26.0
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 +151 -0
- package/README.md +14 -26
- package/dist/components/Accordion/Accordion.d.ts +6 -4
- package/dist/components/Accordion/AccordionTypes.d.ts +5 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -4
- package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +2 -1
- package/dist/components/Button/Button.d.ts +2 -2
- package/dist/components/Card/Card.d.ts +22 -29
- package/dist/components/Checkbox/Checkbox.d.ts +3 -3
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +9 -6
- package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +1 -1
- package/dist/components/DatePicker/DatePicker.d.ts +5 -6
- package/dist/components/Fieldset/Fieldset.d.ts +5 -6
- package/dist/components/Form/Form.d.ts +6 -6
- package/dist/components/Grid/GridTypes.d.ts +7 -7
- package/dist/components/Grid/SimpleGrid.d.ts +1 -1
- package/dist/components/Heading/Heading.d.ts +5 -5
- package/dist/components/Heading/HeadingTypes.d.ts +1 -1
- package/dist/components/HelperErrorText/HelperErrorText.d.ts +9 -8
- package/dist/components/Hero/Hero.d.ts +9 -5
- package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -10
- package/dist/components/Icons/Icon.d.ts +2 -1
- package/dist/components/Icons/IconTypes.d.ts +10 -7
- package/dist/components/Image/Image.d.ts +27 -9
- package/dist/components/Image/ImageTypes.d.ts +4 -4
- package/dist/components/Label/Label.d.ts +7 -4
- package/dist/components/Link/Link.d.ts +1 -1
- package/dist/components/List/List.d.ts +11 -11
- package/dist/components/List/ListTypes.d.ts +1 -1
- package/dist/components/Logo/Logo.d.ts +2 -1
- package/dist/components/Logo/LogoSvgs.d.ts +8 -0
- package/dist/components/Logo/LogoTypes.d.ts +10 -2
- package/dist/components/Notification/Notification.d.ts +7 -7
- package/dist/components/Pagination/Pagination.d.ts +8 -4
- package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +3 -3
- package/dist/components/Radio/Radio.d.ts +5 -7
- package/dist/components/RadioGroup/RadioGroup.d.ts +16 -8
- package/dist/components/SearchBar/SearchBar.d.ts +5 -5
- package/dist/components/Select/Select.d.ts +12 -8
- package/dist/components/Select/SelectTypes.d.ts +4 -0
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -6
- package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +0 -4
- package/dist/components/Slider/Slider.d.ts +6 -4
- package/dist/components/StatusBadge/StatusBadge.d.ts +5 -1
- package/dist/components/StructuredContent/StructuredContent.d.ts +10 -23
- package/dist/components/Table/Table.d.ts +1 -1
- package/dist/components/Tabs/Tabs.d.ts +7 -6
- package/dist/components/Template/Template.d.ts +18 -9
- package/dist/components/Text/Text.d.ts +4 -4
- package/dist/components/Text/TextTypes.d.ts +1 -1
- package/dist/components/TextInput/TextInput.d.ts +7 -7
- package/dist/components/Toggle/Toggle.d.ts +8 -10
- package/dist/components/Toggle/{ToggleSizes.d.ts → ToggleTypes.d.ts} +1 -1
- package/dist/components/VideoPlayer/VideoPlayer.d.ts +2 -1
- package/dist/design-system-react-components.cjs.development.js +2802 -1686
- 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 +2811 -1699
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/helpers/enums.d.ts +4 -0
- package/dist/hooks/useCarouselStyles.d.ts +3 -2
- package/dist/hooks/useNYPLTheme.d.ts +12 -0
- package/dist/index.d.ts +11 -9
- package/dist/styles.css +1 -1
- package/dist/theme/components/accordion.d.ts +7 -12
- package/dist/theme/components/breadcrumb.d.ts +6 -0
- package/dist/theme/components/button.d.ts +10 -2
- package/dist/theme/components/card.d.ts +44 -24
- package/dist/theme/components/checkbox.d.ts +6 -6
- package/dist/theme/components/checkboxGroup.d.ts +4 -2
- package/dist/theme/components/componentWrapper.d.ts +2 -2
- package/dist/theme/components/customTable.d.ts +84 -1
- package/dist/theme/components/fieldset.d.ts +6 -14
- package/dist/theme/components/global.d.ts +37 -29
- package/dist/theme/components/globalMixins.d.ts +8 -8
- package/dist/theme/components/heading.d.ts +53 -0
- package/dist/theme/components/helperErrorText.d.ts +1 -0
- package/dist/theme/components/hero.d.ts +21 -15
- package/dist/theme/components/image.d.ts +1 -1
- package/dist/theme/components/label.d.ts +9 -10
- package/dist/theme/components/list.d.ts +105 -9
- package/dist/theme/components/notification.d.ts +7 -4
- package/dist/theme/components/pagination.d.ts +2 -5
- package/dist/theme/components/radio.d.ts +10 -6
- package/dist/theme/components/radioGroup.d.ts +4 -2
- package/dist/theme/components/select.d.ts +38 -13
- package/dist/theme/components/skeletonLoader.d.ts +2 -2
- package/dist/theme/components/slider.d.ts +14 -7
- package/dist/theme/components/structuredContent.d.ts +197 -0
- package/dist/theme/components/textInput.d.ts +22 -14
- package/dist/theme/components/toggle.d.ts +25 -6
- package/dist/theme/foundations/global.d.ts +33 -3
- package/dist/theme/foundations/radii.d.ts +1 -0
- package/dist/theme/foundations/spacing.d.ts +46 -43
- package/dist/utils/utils.d.ts +10 -0
- package/package.json +5 -6
- package/src/components/AccessibilityGuide/SkipNavigation.stories.mdx +34 -0
- package/src/components/Accordion/Accordion.stories.mdx +150 -66
- package/src/components/Accordion/Accordion.test.tsx +65 -17
- package/src/components/Accordion/Accordion.tsx +61 -27
- package/src/components/Accordion/AccordionTypes.tsx +5 -0
- package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +505 -14
- package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +53 -18
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +66 -35
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +14 -13
- package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +2 -1
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +308 -10
- package/src/components/Button/Button.stories.mdx +87 -23
- package/src/components/Button/Button.test.tsx +25 -0
- package/src/components/Button/Button.tsx +18 -7
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +27 -7
- package/src/components/Card/Card.stories.mdx +493 -329
- package/src/components/Card/Card.test.tsx +138 -18
- package/src/components/Card/Card.tsx +151 -85
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +220 -100
- package/src/components/Chakra/Center.stories.mdx +2 -2
- package/src/components/Chakra/Grid.stories.mdx +4 -4
- package/src/components/Checkbox/Checkbox.stories.mdx +73 -9
- package/src/components/Checkbox/Checkbox.test.tsx +89 -10
- package/src/components/Checkbox/Checkbox.tsx +27 -16
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +209 -6
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +135 -23
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +216 -90
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +39 -26
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +493 -89
- package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +12 -0
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +39 -41
- package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +47 -34
- package/src/components/DatePicker/DatePicker.stories.mdx +63 -27
- package/src/components/DatePicker/DatePicker.test.tsx +94 -15
- package/src/components/DatePicker/DatePicker.tsx +67 -58
- package/src/components/DatePicker/_DatePicker.scss +71 -13
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +250 -206
- package/src/components/Fieldset/Fieldset.stories.mdx +33 -3
- package/src/components/Fieldset/Fieldset.test.tsx +58 -28
- package/src/components/Fieldset/Fieldset.tsx +35 -30
- package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +40 -19
- package/src/components/Form/Form.stories.mdx +118 -47
- package/src/components/Form/Form.test.tsx +59 -16
- package/src/components/Form/Form.tsx +89 -65
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +83 -5
- package/src/components/Grid/GridTypes.tsx +7 -7
- package/src/components/Grid/SimpleGrid.stories.mdx +87 -41
- package/src/components/Grid/SimpleGrid.test.tsx +24 -9
- package/src/components/Grid/SimpleGrid.tsx +29 -20
- package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +16 -1
- package/src/components/Heading/Heading.stories.mdx +56 -25
- package/src/components/Heading/Heading.test.tsx +17 -7
- package/src/components/Heading/Heading.tsx +60 -58
- package/src/components/Heading/HeadingTypes.tsx +1 -1
- package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +27 -8
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +64 -42
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +15 -0
- package/src/components/HelperErrorText/HelperErrorText.tsx +40 -35
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +35 -4
- package/src/components/Hero/Hero.stories.mdx +143 -113
- package/src/components/Hero/Hero.test.tsx +146 -58
- package/src/components/Hero/Hero.tsx +144 -112
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +89 -17
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +26 -4
- package/src/components/HorizontalRule/HorizontalRule.test.tsx +9 -17
- package/src/components/HorizontalRule/HorizontalRule.tsx +9 -25
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +18 -5
- package/src/components/Icons/Icon.stories.mdx +80 -23
- package/src/components/Icons/Icon.test.tsx +51 -2
- package/src/components/Icons/Icon.tsx +93 -71
- package/src/components/Icons/IconTypes.tsx +9 -6
- package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +129 -0
- package/src/components/Image/Image.stories.mdx +160 -71
- package/src/components/Image/Image.test.tsx +40 -48
- package/src/components/Image/Image.tsx +80 -48
- package/src/components/Image/ImageTypes.ts +4 -4
- package/src/components/Image/__snapshots__/Image.test.tsx.snap +84 -21
- package/src/components/Label/Label.stories.mdx +42 -20
- package/src/components/Label/Label.test.tsx +42 -17
- package/src/components/Label/Label.tsx +22 -13
- package/src/components/Label/__snapshots__/Label.test.tsx.snap +19 -15
- package/src/components/Link/Link.stories.mdx +25 -1
- package/src/components/Link/Link.test.tsx +21 -0
- package/src/components/Link/Link.tsx +16 -9
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +37 -11
- package/src/components/List/List.stories.mdx +75 -40
- package/src/components/List/List.test.tsx +73 -22
- package/src/components/List/List.tsx +44 -28
- package/src/components/List/ListTypes.tsx +1 -1
- package/src/components/List/__snapshots__/List.test.tsx.snap +110 -8
- package/src/components/Logo/Logo.stories.mdx +40 -16
- package/src/components/Logo/Logo.test.tsx +29 -2
- package/src/components/Logo/Logo.tsx +28 -11
- package/src/components/Logo/LogoSvgs.tsx +16 -0
- package/src/components/Logo/LogoTypes.tsx +9 -1
- package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +73 -2
- package/src/components/Modal/Modal.stories.mdx +13 -0
- package/src/components/Notification/Notification.stories.mdx +34 -5
- package/src/components/Notification/Notification.test.tsx +43 -9
- package/src/components/Notification/Notification.tsx +59 -55
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +256 -32
- package/src/components/Pagination/Pagination.stories.mdx +76 -13
- package/src/components/Pagination/Pagination.test.tsx +116 -5
- package/src/components/Pagination/Pagination.tsx +54 -29
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +247 -30
- package/src/components/Placeholder/Placeholder.tsx +3 -1
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +76 -10
- package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +87 -13
- package/src/components/ProgressIndicator/ProgressIndicator.tsx +20 -10
- package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +101 -14
- package/src/components/Radio/Radio.stories.mdx +75 -11
- package/src/components/Radio/Radio.test.tsx +83 -9
- package/src/components/Radio/Radio.tsx +70 -61
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +168 -10
- package/src/components/RadioGroup/RadioGroup.stories.mdx +293 -94
- package/src/components/RadioGroup/RadioGroup.test.tsx +193 -68
- package/src/components/RadioGroup/RadioGroup.tsx +110 -101
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1258 -902
- package/src/components/SearchBar/SearchBar.stories.mdx +104 -39
- package/src/components/SearchBar/{SearchBar.Test.tsx → SearchBar.test.tsx} +66 -6
- package/src/components/SearchBar/SearchBar.tsx +23 -13
- package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +1039 -0
- package/src/components/Select/Select.stories.mdx +151 -62
- package/src/components/Select/Select.test.tsx +56 -44
- package/src/components/Select/Select.tsx +125 -104
- package/src/components/Select/SelectTypes.tsx +5 -0
- package/src/components/Select/__snapshots__/Select.test.tsx.snap +749 -409
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +53 -23
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +14 -8
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +80 -78
- package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +0 -5
- package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +169 -10
- package/src/components/Slider/Slider.stories.mdx +123 -41
- package/src/components/Slider/Slider.test.tsx +65 -17
- package/src/components/Slider/Slider.tsx +34 -24
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +403 -226
- package/src/components/StatusBadge/StatusBadge.stories.mdx +19 -1
- package/src/components/StatusBadge/StatusBadge.test.tsx +19 -1
- package/src/components/StatusBadge/StatusBadge.tsx +25 -20
- package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +22 -3
- package/src/components/StructuredContent/StructuredContent.stories.mdx +229 -61
- package/src/components/StructuredContent/StructuredContent.test.tsx +162 -101
- package/src/components/StructuredContent/StructuredContent.tsx +98 -103
- package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +102 -17
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +9 -9
- package/src/components/StyleGuide/Breakpoints.stories.mdx +6 -6
- package/src/components/StyleGuide/Buttons.stories.mdx +2 -12
- package/src/components/StyleGuide/ColorCard.tsx +4 -4
- package/src/components/StyleGuide/Colors.stories.mdx +34 -20
- package/src/components/StyleGuide/DesignTokens.stories.mdx +56 -26
- package/src/components/StyleGuide/Forms.stories.mdx +27 -12
- package/src/components/StyleGuide/Iconography.stories.mdx +2 -12
- package/src/components/StyleGuide/Spacing.stories.mdx +80 -41
- package/src/components/StyleGuide/Typography.stories.mdx +47 -33
- package/src/components/Table/Table.stories.mdx +38 -11
- package/src/components/Table/Table.test.tsx +16 -1
- package/src/components/Table/Table.tsx +10 -8
- package/src/components/Table/__snapshots__/Table.test.tsx.snap +408 -5
- package/src/components/Tabs/Tabs.stories.mdx +59 -10
- package/src/components/Tabs/Tabs.test.tsx +29 -11
- package/src/components/Tabs/Tabs.tsx +28 -21
- package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +394 -5
- package/src/components/Template/Template.stories.mdx +73 -32
- package/src/components/Template/Template.test.tsx +68 -5
- package/src/components/Template/Template.tsx +86 -72
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +195 -22
- package/src/components/Text/Text.stories.mdx +32 -15
- package/src/components/Text/Text.test.tsx +14 -11
- package/src/components/Text/Text.tsx +13 -16
- package/src/components/Text/TextTypes.tsx +1 -1
- package/src/components/Text/__snapshots__/Text.test.tsx.snap +21 -4
- package/src/components/TextInput/TextInput.stories.mdx +73 -27
- package/src/components/TextInput/TextInput.test.tsx +65 -50
- package/src/components/TextInput/TextInput.tsx +123 -115
- package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +96 -73
- package/src/components/Toggle/Toggle.stories.mdx +74 -26
- package/src/components/Toggle/Toggle.test.tsx +41 -10
- package/src/components/Toggle/Toggle.tsx +31 -27
- package/src/components/Toggle/{ToggleSizes.tsx → ToggleTypes.tsx} +1 -1
- package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +195 -8
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +52 -4
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +41 -6
- package/src/components/VideoPlayer/VideoPlayer.tsx +134 -120
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +81 -39
- package/src/docs/Chakra.stories.mdx +51 -10
- package/src/docs/Welcome.stories.mdx +168 -0
- package/src/{components/Card/CardTypes.tsx → helpers/enums.ts} +2 -2
- package/src/hooks/tests/useNYPLTheme.test.tsx +1 -1
- package/src/hooks/useCarouselStyles.stories.mdx +30 -0
- package/src/hooks/useCarouselStyles.ts +3 -2
- package/src/hooks/useNYPLTheme.stories.mdx +101 -0
- package/src/hooks/useNYPLTheme.ts +31 -7
- package/src/hooks/useWindowSize.stories.mdx +23 -0
- package/src/index.ts +11 -15
- package/src/styles/base/_place-holder.scss +3 -1
- package/src/styles.scss +0 -2
- package/src/theme/components/accordion.ts +7 -12
- package/src/theme/components/breadcrumb.ts +7 -0
- package/src/theme/components/button.ts +15 -7
- package/src/theme/components/card.ts +56 -36
- package/src/theme/components/checkbox.ts +12 -14
- package/src/theme/components/checkboxGroup.ts +4 -2
- package/src/theme/components/componentWrapper.ts +2 -2
- package/src/theme/components/customTable.ts +39 -31
- package/src/theme/components/fieldset.ts +3 -2
- package/src/theme/components/global.ts +42 -33
- package/src/theme/components/globalMixins.ts +8 -8
- package/src/theme/components/heading.ts +1 -1
- package/src/theme/components/helperErrorText.ts +1 -0
- package/src/theme/components/hero.ts +14 -16
- package/src/theme/components/icon.ts +5 -2
- package/src/theme/components/image.ts +1 -1
- package/src/theme/components/label.ts +4 -3
- package/src/theme/components/list.ts +76 -65
- package/src/theme/components/notification.ts +10 -7
- package/src/theme/components/pagination.ts +2 -5
- package/src/theme/components/progressIndicator.ts +3 -3
- package/src/theme/components/radio.ts +11 -14
- package/src/theme/components/radioGroup.ts +4 -2
- package/src/theme/components/select.ts +37 -18
- package/src/theme/components/skeletonLoader.ts +3 -3
- package/src/theme/components/slider.ts +19 -15
- package/src/theme/components/statusBadge.ts +2 -2
- package/src/theme/components/structuredContent.ts +66 -1
- package/src/theme/components/tabs.ts +2 -2
- package/src/theme/components/template.ts +9 -9
- package/src/theme/components/textInput.ts +13 -12
- package/src/theme/components/toggle.ts +76 -42
- package/src/theme/components/videoPlayer.ts +1 -1
- package/src/theme/foundations/colors.ts +20 -13
- package/src/theme/foundations/global.ts +17 -5
- package/src/theme/foundations/radii.ts +1 -0
- package/src/theme/foundations/spacing.ts +70 -22
- package/src/theme/foundations/typography.ts +3 -3
- package/src/utils/componentCategories.ts +28 -21
- package/src/utils/utils.ts +28 -0
- package/dist/components/Card/CardTypes.d.ts +0 -4
- package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +0 -4
- package/dist/components/Pagination/Pagination.stories.d.ts +0 -13
- package/dist/components/RadioGroup/RadioGroupLayoutTypes.d.ts +0 -4
- package/dist/components/SearchBar/SearchBar.Test.d.ts +0 -1
- package/dist/helpers/generateUUID.d.ts +0 -1
- package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +0 -4
- package/src/components/Pagination/Pagination.stories.tsx +0 -54
- package/src/components/RadioGroup/RadioGroupLayoutTypes.tsx +0 -4
- package/src/docs/Intro.stories.mdx +0 -53
- package/src/helpers/generateUUID.tsx +0 -5
- package/src/styles/base/_03-base.scss +0 -25
- package/src/styles/base/_04-focus.scss +0 -22
|
@@ -1,22 +1,60 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Flex, Spacer } from "@chakra-ui/react";
|
|
2
2
|
import { render, screen } from "@testing-library/react";
|
|
3
|
+
import userEvent from "@testing-library/user-event";
|
|
3
4
|
import { axe } from "jest-axe";
|
|
5
|
+
import * as React from "react";
|
|
4
6
|
import renderer from "react-test-renderer";
|
|
5
7
|
|
|
6
|
-
import * as generateUUID from "../../helpers/generateUUID";
|
|
7
8
|
import CheckboxGroup from "./CheckboxGroup";
|
|
8
9
|
import Checkbox from "../Checkbox/Checkbox";
|
|
9
|
-
import {
|
|
10
|
-
import userEvent from "@testing-library/user-event";
|
|
10
|
+
import { LayoutTypes } from "../../helpers/enums";
|
|
11
11
|
|
|
12
|
-
describe("
|
|
13
|
-
it("passes axe accessibility", async () => {
|
|
12
|
+
describe("CheckboxGroup Accessibility", () => {
|
|
13
|
+
it("passes axe accessibility with string labels ", async () => {
|
|
14
|
+
const { container } = render(
|
|
15
|
+
<CheckboxGroup
|
|
16
|
+
id="checkboxGroup"
|
|
17
|
+
labelText="CheckboxGroup example"
|
|
18
|
+
name="a11y-test"
|
|
19
|
+
>
|
|
20
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
21
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
22
|
+
<Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
|
|
23
|
+
<Checkbox id="checkbox5" value="5" labelText="Checkbox 5" />
|
|
24
|
+
</CheckboxGroup>
|
|
25
|
+
);
|
|
26
|
+
expect(await axe(container)).toHaveNoViolations();
|
|
27
|
+
});
|
|
28
|
+
it("passes axe accessibility with jsx labels", async () => {
|
|
14
29
|
const { container } = render(
|
|
15
|
-
<CheckboxGroup
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
30
|
+
<CheckboxGroup
|
|
31
|
+
labelText="jsxLabels"
|
|
32
|
+
name="jsxLabels"
|
|
33
|
+
id="jsxLabels"
|
|
34
|
+
isFullWidth
|
|
35
|
+
>
|
|
36
|
+
<Checkbox
|
|
37
|
+
id="arts"
|
|
38
|
+
labelText={
|
|
39
|
+
<Flex>
|
|
40
|
+
<span>Arts</span>
|
|
41
|
+
<Spacer />
|
|
42
|
+
<span>4</span>
|
|
43
|
+
</Flex>
|
|
44
|
+
}
|
|
45
|
+
value="arts"
|
|
46
|
+
/>
|
|
47
|
+
<Checkbox
|
|
48
|
+
id="English"
|
|
49
|
+
labelText={
|
|
50
|
+
<Flex>
|
|
51
|
+
<span>English</span>
|
|
52
|
+
<Spacer />
|
|
53
|
+
<span>23</span>
|
|
54
|
+
</Flex>
|
|
55
|
+
}
|
|
56
|
+
value="English"
|
|
57
|
+
/>
|
|
20
58
|
</CheckboxGroup>
|
|
21
59
|
);
|
|
22
60
|
expect(await axe(container)).toHaveNoViolations();
|
|
@@ -26,10 +64,10 @@ describe("Checkbox Accessibility", () => {
|
|
|
26
64
|
describe("Checkbox", () => {
|
|
27
65
|
it("renders with Checkbox inputs and a label", () => {
|
|
28
66
|
render(
|
|
29
|
-
<CheckboxGroup labelText="Test Label" name="test1">
|
|
30
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
31
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
32
|
-
<Checkbox value="4" labelText="Checkbox 4" />
|
|
67
|
+
<CheckboxGroup id="checkboxGroup" labelText="Test Label" name="test1">
|
|
68
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
69
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
70
|
+
<Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
|
|
33
71
|
</CheckboxGroup>
|
|
34
72
|
);
|
|
35
73
|
expect(screen.getByText(/Test Label/i)).toBeInTheDocument();
|
|
@@ -41,10 +79,10 @@ describe("Checkbox", () => {
|
|
|
41
79
|
|
|
42
80
|
it("renders with appropriate 'aria-label' attribute and value when 'showLabel' prop is set to false", () => {
|
|
43
81
|
const { rerender } = render(
|
|
44
|
-
<CheckboxGroup labelText="Test Label" name="test2">
|
|
45
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
46
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
47
|
-
<Checkbox value="4" labelText="Checkbox 4" />
|
|
82
|
+
<CheckboxGroup id="checkboxGroup" labelText="Test Label" name="test2">
|
|
83
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
84
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
85
|
+
<Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
|
|
48
86
|
</CheckboxGroup>
|
|
49
87
|
);
|
|
50
88
|
expect(screen.getByTestId("checkbox-group")).not.toHaveAttribute(
|
|
@@ -53,10 +91,15 @@ describe("Checkbox", () => {
|
|
|
53
91
|
);
|
|
54
92
|
|
|
55
93
|
rerender(
|
|
56
|
-
<CheckboxGroup
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
94
|
+
<CheckboxGroup
|
|
95
|
+
id="checkboxGroup"
|
|
96
|
+
labelText="Test Label"
|
|
97
|
+
name="test2"
|
|
98
|
+
showLabel={false}
|
|
99
|
+
>
|
|
100
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
101
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
102
|
+
<Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
|
|
60
103
|
</CheckboxGroup>
|
|
61
104
|
);
|
|
62
105
|
expect(screen.getByTestId("checkbox-group")).toHaveAttribute(
|
|
@@ -68,14 +111,15 @@ describe("Checkbox", () => {
|
|
|
68
111
|
it("renders visible helper or error text", () => {
|
|
69
112
|
const { rerender } = render(
|
|
70
113
|
<CheckboxGroup
|
|
114
|
+
id="checkboxGroup"
|
|
71
115
|
labelText="Test Label"
|
|
72
116
|
name="test3"
|
|
73
117
|
helperText="This is the helper text for the full group."
|
|
74
118
|
invalidText="This is the error text :("
|
|
75
119
|
>
|
|
76
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
77
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
78
|
-
<Checkbox value="4" labelText="Checkbox 4" />
|
|
120
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
121
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
122
|
+
<Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
|
|
79
123
|
</CheckboxGroup>
|
|
80
124
|
);
|
|
81
125
|
expect(
|
|
@@ -87,15 +131,16 @@ describe("Checkbox", () => {
|
|
|
87
131
|
|
|
88
132
|
rerender(
|
|
89
133
|
<CheckboxGroup
|
|
134
|
+
id="checkboxGroup"
|
|
90
135
|
labelText="Test Label"
|
|
91
136
|
name="test3"
|
|
92
137
|
helperText="This is the helper text for the full group."
|
|
93
138
|
invalidText="This is the error text :("
|
|
94
139
|
isInvalid
|
|
95
140
|
>
|
|
96
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
97
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
98
|
-
<Checkbox value="4" labelText="Checkbox 4" />
|
|
141
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
142
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
143
|
+
<Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
|
|
99
144
|
</CheckboxGroup>
|
|
100
145
|
);
|
|
101
146
|
expect(screen.getByText("This is the error text :(")).toBeVisible();
|
|
@@ -107,7 +152,7 @@ describe("Checkbox", () => {
|
|
|
107
152
|
it("sets the CheckboxGroup's ID", () => {
|
|
108
153
|
render(
|
|
109
154
|
<CheckboxGroup labelText="Test Label" name="test5" id="some-id">
|
|
110
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
155
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
111
156
|
</CheckboxGroup>
|
|
112
157
|
);
|
|
113
158
|
|
|
@@ -119,20 +164,21 @@ describe("Checkbox", () => {
|
|
|
119
164
|
});
|
|
120
165
|
|
|
121
166
|
it("sets the next value through the onChange function", () => {
|
|
122
|
-
let newValue = [];
|
|
123
|
-
const onChange = (value) => {
|
|
167
|
+
let newValue: string[] = [];
|
|
168
|
+
const onChange = (value: string[]) => {
|
|
124
169
|
newValue = value;
|
|
125
170
|
};
|
|
126
171
|
render(
|
|
127
172
|
<CheckboxGroup
|
|
173
|
+
id="checkboxGroup"
|
|
128
174
|
labelText="Test Label"
|
|
129
175
|
name="getValue"
|
|
130
176
|
defaultValue={["4"]}
|
|
131
177
|
onChange={onChange}
|
|
132
178
|
>
|
|
133
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
134
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
135
|
-
<Checkbox value="4" labelText="Checkbox 4" />
|
|
179
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
180
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
181
|
+
<Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
|
|
136
182
|
</CheckboxGroup>
|
|
137
183
|
);
|
|
138
184
|
|
|
@@ -147,23 +193,17 @@ describe("Checkbox", () => {
|
|
|
147
193
|
expect(newValue).toEqual(["4", "2"]);
|
|
148
194
|
});
|
|
149
195
|
|
|
150
|
-
it("calls the UUID generation function if no id prop value is passed", () => {
|
|
151
|
-
const generateUUIDSpy = jest.spyOn(generateUUID, "default");
|
|
152
|
-
expect(generateUUIDSpy).toHaveBeenCalledTimes(0);
|
|
153
|
-
render(
|
|
154
|
-
<CheckboxGroup labelText="Test Label" name="test6">
|
|
155
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
156
|
-
</CheckboxGroup>
|
|
157
|
-
);
|
|
158
|
-
expect(generateUUIDSpy).toHaveBeenCalledTimes(1);
|
|
159
|
-
});
|
|
160
|
-
|
|
161
196
|
it("sets the 'disabled' attribute for all its Checkbox children", () => {
|
|
162
197
|
render(
|
|
163
|
-
<CheckboxGroup
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
198
|
+
<CheckboxGroup
|
|
199
|
+
id="checkboxGroup"
|
|
200
|
+
labelText="Test Label"
|
|
201
|
+
name="test7"
|
|
202
|
+
isDisabled
|
|
203
|
+
>
|
|
204
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
205
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
206
|
+
<Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
|
|
167
207
|
</CheckboxGroup>
|
|
168
208
|
);
|
|
169
209
|
const Checkboxes = screen.getAllByRole("checkbox");
|
|
@@ -176,10 +216,15 @@ describe("Checkbox", () => {
|
|
|
176
216
|
|
|
177
217
|
it("sets the 'required' attribute for all its Checkbox children", () => {
|
|
178
218
|
render(
|
|
179
|
-
<CheckboxGroup
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
219
|
+
<CheckboxGroup
|
|
220
|
+
id="checkboxGroup"
|
|
221
|
+
labelText="Test Label"
|
|
222
|
+
name="test8"
|
|
223
|
+
isRequired
|
|
224
|
+
>
|
|
225
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
226
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
227
|
+
<Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
|
|
183
228
|
</CheckboxGroup>
|
|
184
229
|
);
|
|
185
230
|
const Checkboxes = screen.getAllByRole("checkbox");
|
|
@@ -193,14 +238,15 @@ describe("Checkbox", () => {
|
|
|
193
238
|
it("sets the error state for all its Checkbox children", () => {
|
|
194
239
|
render(
|
|
195
240
|
<CheckboxGroup
|
|
241
|
+
id="checkboxGroup"
|
|
196
242
|
labelText="Test Label"
|
|
197
243
|
name="test9"
|
|
198
244
|
isInvalid
|
|
199
245
|
invalidText="There's an error!"
|
|
200
246
|
>
|
|
201
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
202
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
203
|
-
<Checkbox value="4" labelText="Checkbox 4" />
|
|
247
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
248
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
249
|
+
<Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
|
|
204
250
|
</CheckboxGroup>
|
|
205
251
|
);
|
|
206
252
|
const Checkboxes = screen.getAllByRole("checkbox");
|
|
@@ -214,15 +260,16 @@ describe("Checkbox", () => {
|
|
|
214
260
|
it("does not render the invalid text when 'isInvalid' is true but 'showHelperInvalidText' is false", () => {
|
|
215
261
|
render(
|
|
216
262
|
<CheckboxGroup
|
|
263
|
+
id="checkboxGroup"
|
|
217
264
|
labelText="Test Label"
|
|
218
265
|
name="test9"
|
|
219
266
|
isInvalid
|
|
220
267
|
invalidText="There's an error!"
|
|
221
268
|
showHelperInvalidText={false}
|
|
222
269
|
>
|
|
223
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
224
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
225
|
-
<Checkbox value="4" labelText="Checkbox 4" />
|
|
270
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
271
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
272
|
+
<Checkbox id="checkbox4" value="4" labelText="Checkbox 4" />
|
|
226
273
|
</CheckboxGroup>
|
|
227
274
|
);
|
|
228
275
|
const Checkboxes = screen.getAllByRole("checkbox");
|
|
@@ -233,12 +280,26 @@ describe("Checkbox", () => {
|
|
|
233
280
|
expect(Checkboxes[2]).toHaveAttribute("aria-invalid");
|
|
234
281
|
});
|
|
235
282
|
|
|
283
|
+
it("logs a warning when there is no `id` passed", () => {
|
|
284
|
+
const warn = jest.spyOn(console, "warn");
|
|
285
|
+
render(
|
|
286
|
+
// @ts-ignore: Typescript complains when a required prop is not passed, but
|
|
287
|
+
// here we don't want to pass the required prop to make sure the warning appears.
|
|
288
|
+
<CheckboxGroup labelText="column" name="column">
|
|
289
|
+
<Checkbox id="checkbox1" value="1" labelText="Checkbox 1" />
|
|
290
|
+
</CheckboxGroup>
|
|
291
|
+
);
|
|
292
|
+
expect(warn).toHaveBeenCalledWith(
|
|
293
|
+
"NYPL Reservoir CheckboxGroup: This component's required `id` prop was not passed."
|
|
294
|
+
);
|
|
295
|
+
});
|
|
296
|
+
|
|
236
297
|
it("renders the UI snapshot correctly", () => {
|
|
237
298
|
const column = renderer
|
|
238
299
|
.create(
|
|
239
300
|
<CheckboxGroup labelText="column" name="column" id="column">
|
|
240
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
241
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
301
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
302
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
242
303
|
</CheckboxGroup>
|
|
243
304
|
)
|
|
244
305
|
.toJSON();
|
|
@@ -248,10 +309,10 @@ describe("Checkbox", () => {
|
|
|
248
309
|
labelText="row"
|
|
249
310
|
name="row"
|
|
250
311
|
id="row"
|
|
251
|
-
layout={
|
|
312
|
+
layout={LayoutTypes.Row}
|
|
252
313
|
>
|
|
253
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
254
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
314
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
315
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
255
316
|
</CheckboxGroup>
|
|
256
317
|
)
|
|
257
318
|
.toJSON();
|
|
@@ -263,8 +324,8 @@ describe("Checkbox", () => {
|
|
|
263
324
|
id="noLabel"
|
|
264
325
|
showLabel={false}
|
|
265
326
|
>
|
|
266
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
267
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
327
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
328
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
268
329
|
</CheckboxGroup>
|
|
269
330
|
)
|
|
270
331
|
.toJSON();
|
|
@@ -276,8 +337,8 @@ describe("Checkbox", () => {
|
|
|
276
337
|
id="helperText"
|
|
277
338
|
helperText="helper text"
|
|
278
339
|
>
|
|
279
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
280
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
340
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
341
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
281
342
|
</CheckboxGroup>
|
|
282
343
|
)
|
|
283
344
|
.toJSON();
|
|
@@ -289,34 +350,35 @@ describe("Checkbox", () => {
|
|
|
289
350
|
id="invalidText"
|
|
290
351
|
invalidText="error text"
|
|
291
352
|
>
|
|
292
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
293
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
353
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
354
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
294
355
|
</CheckboxGroup>
|
|
295
356
|
)
|
|
296
357
|
.toJSON();
|
|
297
|
-
const
|
|
358
|
+
const isRequired = renderer
|
|
298
359
|
.create(
|
|
299
360
|
<CheckboxGroup
|
|
300
|
-
labelText="
|
|
301
|
-
name="
|
|
302
|
-
id="
|
|
303
|
-
|
|
361
|
+
labelText="required"
|
|
362
|
+
name="required"
|
|
363
|
+
id="required"
|
|
364
|
+
isRequired
|
|
304
365
|
>
|
|
305
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
306
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
366
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
367
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
307
368
|
</CheckboxGroup>
|
|
308
369
|
)
|
|
309
370
|
.toJSON();
|
|
310
|
-
const
|
|
371
|
+
const noRequiredLabel = renderer
|
|
311
372
|
.create(
|
|
312
373
|
<CheckboxGroup
|
|
313
|
-
labelText="required"
|
|
314
|
-
name="
|
|
315
|
-
id="
|
|
374
|
+
labelText="no optional or required label"
|
|
375
|
+
name="noRequiredLabel"
|
|
376
|
+
id="noRequiredLabel"
|
|
316
377
|
isRequired
|
|
378
|
+
showRequiredLabel={false}
|
|
317
379
|
>
|
|
318
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
319
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
380
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
381
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
320
382
|
</CheckboxGroup>
|
|
321
383
|
)
|
|
322
384
|
.toJSON();
|
|
@@ -328,8 +390,8 @@ describe("Checkbox", () => {
|
|
|
328
390
|
id="invalid"
|
|
329
391
|
isInvalid
|
|
330
392
|
>
|
|
331
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
332
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
393
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
394
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
333
395
|
</CheckboxGroup>
|
|
334
396
|
)
|
|
335
397
|
.toJSON();
|
|
@@ -341,8 +403,68 @@ describe("Checkbox", () => {
|
|
|
341
403
|
id="disabled"
|
|
342
404
|
isDisabled
|
|
343
405
|
>
|
|
344
|
-
<Checkbox value="2" labelText="Checkbox 2" />
|
|
345
|
-
<Checkbox value="3" labelText="Checkbox 3" />
|
|
406
|
+
<Checkbox id="checkbox2" value="2" labelText="Checkbox 2" />
|
|
407
|
+
<Checkbox id="checkbox3" value="3" labelText="Checkbox 3" />
|
|
408
|
+
</CheckboxGroup>
|
|
409
|
+
)
|
|
410
|
+
.toJSON();
|
|
411
|
+
const withJSXCheckboxLabels = renderer
|
|
412
|
+
.create(
|
|
413
|
+
<CheckboxGroup
|
|
414
|
+
id="jsxLabels"
|
|
415
|
+
isFullWidth
|
|
416
|
+
labelText="jsxLabels"
|
|
417
|
+
name="jsxLabels"
|
|
418
|
+
>
|
|
419
|
+
<Checkbox
|
|
420
|
+
id="arts"
|
|
421
|
+
labelText={
|
|
422
|
+
<Flex>
|
|
423
|
+
<span>Arts</span>
|
|
424
|
+
<Spacer />
|
|
425
|
+
<span>4</span>
|
|
426
|
+
</Flex>
|
|
427
|
+
}
|
|
428
|
+
value="arts"
|
|
429
|
+
/>
|
|
430
|
+
<Checkbox
|
|
431
|
+
id="English"
|
|
432
|
+
labelText={
|
|
433
|
+
<Flex>
|
|
434
|
+
<span>English</span>
|
|
435
|
+
<Spacer />
|
|
436
|
+
<span>23</span>
|
|
437
|
+
</Flex>
|
|
438
|
+
}
|
|
439
|
+
value="English"
|
|
440
|
+
/>
|
|
441
|
+
</CheckboxGroup>
|
|
442
|
+
)
|
|
443
|
+
.toJSON();
|
|
444
|
+
const withChakraProps = renderer
|
|
445
|
+
.create(
|
|
446
|
+
<CheckboxGroup
|
|
447
|
+
labelText="chakraProps"
|
|
448
|
+
name="chakraProps"
|
|
449
|
+
id="chakraProps"
|
|
450
|
+
p="s"
|
|
451
|
+
color="ui.error.primary"
|
|
452
|
+
>
|
|
453
|
+
<Checkbox id="2" value="2" labelText="Checkbox 2" />
|
|
454
|
+
<Checkbox id="3" value="3" labelText="Checkbox 3" />
|
|
455
|
+
</CheckboxGroup>
|
|
456
|
+
)
|
|
457
|
+
.toJSON();
|
|
458
|
+
const withOtherProps = renderer
|
|
459
|
+
.create(
|
|
460
|
+
<CheckboxGroup
|
|
461
|
+
labelText="otherProps"
|
|
462
|
+
name="otherProps"
|
|
463
|
+
id="otherProps"
|
|
464
|
+
data-testid="props"
|
|
465
|
+
>
|
|
466
|
+
<Checkbox id="2" value="2" labelText="Checkbox 2" />
|
|
467
|
+
<Checkbox id="3" value="3" labelText="Checkbox 3" />
|
|
346
468
|
</CheckboxGroup>
|
|
347
469
|
)
|
|
348
470
|
.toJSON();
|
|
@@ -352,10 +474,13 @@ describe("Checkbox", () => {
|
|
|
352
474
|
expect(noLabel).toMatchSnapshot();
|
|
353
475
|
expect(helperText).toMatchSnapshot();
|
|
354
476
|
expect(invalidText).toMatchSnapshot();
|
|
355
|
-
expect(
|
|
477
|
+
expect(noRequiredLabel).toMatchSnapshot();
|
|
356
478
|
expect(isRequired).toMatchSnapshot();
|
|
357
479
|
expect(isInvalid).toMatchSnapshot();
|
|
358
480
|
expect(isDisabled).toMatchSnapshot();
|
|
481
|
+
expect(withJSXCheckboxLabels).toMatchSnapshot();
|
|
482
|
+
expect(withChakraProps).toMatchSnapshot();
|
|
483
|
+
expect(withOtherProps).toMatchSnapshot();
|
|
359
484
|
});
|
|
360
485
|
|
|
361
486
|
it("should throw warning when a non-Checkbox component is used as a child", () => {
|
|
@@ -366,7 +491,8 @@ describe("Checkbox", () => {
|
|
|
366
491
|
</CheckboxGroup>
|
|
367
492
|
);
|
|
368
493
|
expect(warn).toHaveBeenCalledWith(
|
|
369
|
-
"Only `Checkbox` components are
|
|
494
|
+
"NYPL Reservoir CheckboxGroup: Only `Checkbox` components are " +
|
|
495
|
+
"allowed as children."
|
|
370
496
|
);
|
|
371
497
|
});
|
|
372
498
|
});
|
|
@@ -1,20 +1,18 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
1
|
import {
|
|
3
|
-
|
|
2
|
+
chakra,
|
|
4
3
|
CheckboxGroup as ChakraCheckboxGroup,
|
|
5
4
|
Stack,
|
|
6
5
|
useMultiStyleConfig,
|
|
7
6
|
} from "@chakra-ui/react";
|
|
7
|
+
import * as React from "react";
|
|
8
8
|
|
|
9
9
|
import Checkbox from "../Checkbox/Checkbox";
|
|
10
|
-
import { CheckboxGroupLayoutTypes } from "./CheckboxGroupLayoutTypes";
|
|
11
10
|
import Fieldset from "../Fieldset/Fieldset";
|
|
12
11
|
import HelperErrorText, {
|
|
13
12
|
HelperErrorTextType,
|
|
14
13
|
} from "../HelperErrorText/HelperErrorText";
|
|
14
|
+
import { LayoutTypes } from "../../helpers/enums";
|
|
15
15
|
import { spacing } from "../../theme/foundations/spacing";
|
|
16
|
-
import generateUUID from "../../helpers/generateUUID";
|
|
17
|
-
|
|
18
16
|
export interface CheckboxGroupProps {
|
|
19
17
|
/** Any child node passed to the component. */
|
|
20
18
|
children: React.ReactNode;
|
|
@@ -23,11 +21,13 @@ export interface CheckboxGroupProps {
|
|
|
23
21
|
/** Optional string to populate the HelperErrorText for standard state */
|
|
24
22
|
helperText?: HelperErrorTextType;
|
|
25
23
|
/** ID that other components can cross reference for accessibility purposes */
|
|
26
|
-
id
|
|
24
|
+
id: string;
|
|
27
25
|
/** Optional string to populate the HelperErrorText for error state */
|
|
28
26
|
invalidText?: HelperErrorTextType;
|
|
29
27
|
/** Adds the 'disabled' prop to the input when true. */
|
|
30
28
|
isDisabled?: boolean;
|
|
29
|
+
/** Set's the `Checkbox`s' wrapper to be full width. */
|
|
30
|
+
isFullWidth?: boolean;
|
|
31
31
|
/** A`dds the 'aria-invalid' attribute to the input and
|
|
32
32
|
* sets the error state when true. */
|
|
33
33
|
isInvalid?: boolean;
|
|
@@ -37,18 +37,19 @@ export interface CheckboxGroupProps {
|
|
|
37
37
|
* true, or an "aria-label" if `showLabel` is false. */
|
|
38
38
|
labelText: string;
|
|
39
39
|
/** Renders the checkbox buttons in a row or column (default). */
|
|
40
|
-
layout?:
|
|
40
|
+
layout?: LayoutTypes;
|
|
41
41
|
/** The `name` prop indicates the form group for all the `Checkbox` children. */
|
|
42
42
|
name: string;
|
|
43
43
|
/** The action to perform on the `<input>`'s onChange function */
|
|
44
44
|
onChange?: (value: string[]) => void;
|
|
45
|
-
/** Whether or not to display "Required"/"Optional" in the label text. */
|
|
46
|
-
optReqFlag?: boolean;
|
|
47
45
|
/** Offers the ability to hide the helper/invalid text. */
|
|
48
46
|
showHelperInvalidText?: boolean;
|
|
49
47
|
/** Offers the ability to show the group's legend onscreen or hide it. Refer
|
|
50
48
|
* to the `labelText` property for more information. */
|
|
51
49
|
showLabel?: boolean;
|
|
50
|
+
/** Whether or not to display the "(Required)" text in the label text.
|
|
51
|
+
* True by default. */
|
|
52
|
+
showRequiredLabel?: boolean;
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
const noop = () => {};
|
|
@@ -59,28 +60,32 @@ const noop = () => {};
|
|
|
59
60
|
* wrapping and associated text elements, but the checkbox input elements
|
|
60
61
|
* _need_ to be child `Checkbox` components from the NYPL Design System.
|
|
61
62
|
*/
|
|
62
|
-
const CheckboxGroup =
|
|
63
|
-
(props, ref?) => {
|
|
63
|
+
export const CheckboxGroup = chakra(
|
|
64
|
+
React.forwardRef<HTMLInputElement, CheckboxGroupProps>((props, ref?) => {
|
|
64
65
|
const {
|
|
65
66
|
children,
|
|
66
67
|
defaultValue = [],
|
|
67
68
|
helperText,
|
|
68
|
-
id
|
|
69
|
+
id,
|
|
69
70
|
invalidText,
|
|
70
71
|
isDisabled = false,
|
|
72
|
+
isFullWidth = false,
|
|
71
73
|
isInvalid = false,
|
|
72
74
|
isRequired = false,
|
|
73
75
|
labelText,
|
|
74
|
-
layout =
|
|
76
|
+
layout = LayoutTypes.Column,
|
|
75
77
|
name,
|
|
76
78
|
onChange,
|
|
77
|
-
optReqFlag = true,
|
|
78
79
|
showHelperInvalidText = true,
|
|
79
80
|
showLabel = true,
|
|
81
|
+
showRequiredLabel = true,
|
|
82
|
+
...rest
|
|
80
83
|
} = props;
|
|
81
84
|
const footnote: HelperErrorTextType = isInvalid ? invalidText : helperText;
|
|
82
85
|
const spacingProp =
|
|
83
|
-
layout ===
|
|
86
|
+
layout === LayoutTypes.Column
|
|
87
|
+
? spacing.input.group.default.vstack
|
|
88
|
+
: spacing.input.group.default.hstack;
|
|
84
89
|
const newChildren = [];
|
|
85
90
|
const checkboxProps =
|
|
86
91
|
defaultValue && onChange
|
|
@@ -90,6 +95,12 @@ const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
|
|
|
90
95
|
}
|
|
91
96
|
: {};
|
|
92
97
|
|
|
98
|
+
if (!id) {
|
|
99
|
+
console.warn(
|
|
100
|
+
"NYPL Reservoir CheckboxGroup: This component's required `id` prop was not passed."
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
93
104
|
// Go through the Checkbox children and update them as needed.
|
|
94
105
|
React.Children.map(children, (child: React.ReactElement, i) => {
|
|
95
106
|
if (child.type !== Checkbox) {
|
|
@@ -98,7 +109,8 @@ const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
|
|
|
98
109
|
noop();
|
|
99
110
|
} else {
|
|
100
111
|
console.warn(
|
|
101
|
-
"Only `Checkbox` components are
|
|
112
|
+
"NYPL Reservoir CheckboxGroup: Only `Checkbox` components are " +
|
|
113
|
+
"allowed as children."
|
|
102
114
|
);
|
|
103
115
|
}
|
|
104
116
|
}
|
|
@@ -117,14 +129,16 @@ const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
|
|
|
117
129
|
});
|
|
118
130
|
|
|
119
131
|
// Get the Chakra-based styles for the custom elements in this component.
|
|
120
|
-
const styles = useMultiStyleConfig("CheckboxGroup", {});
|
|
132
|
+
const styles = useMultiStyleConfig("CheckboxGroup", { isFullWidth });
|
|
121
133
|
|
|
122
134
|
return (
|
|
123
135
|
<Fieldset
|
|
124
136
|
id={`${id}-checkbox-group`}
|
|
125
137
|
isLegendHidden={!showLabel}
|
|
138
|
+
isRequired={isRequired}
|
|
126
139
|
legendText={labelText}
|
|
127
|
-
|
|
140
|
+
showRequiredLabel={showRequiredLabel}
|
|
141
|
+
{...rest}
|
|
128
142
|
>
|
|
129
143
|
<ChakraCheckboxGroup {...checkboxProps}>
|
|
130
144
|
<Stack
|
|
@@ -140,17 +154,16 @@ const CheckboxGroup = React.forwardRef<HTMLInputElement, CheckboxGroupProps>(
|
|
|
140
154
|
</Stack>
|
|
141
155
|
</ChakraCheckboxGroup>
|
|
142
156
|
{footnote && showHelperInvalidText && (
|
|
143
|
-
<
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
</Box>
|
|
157
|
+
<HelperErrorText
|
|
158
|
+
additionalStyles={styles.helperErrorText}
|
|
159
|
+
id={`${id}-helperErrorText`}
|
|
160
|
+
isInvalid={isInvalid}
|
|
161
|
+
text={footnote}
|
|
162
|
+
/>
|
|
150
163
|
)}
|
|
151
164
|
</Fieldset>
|
|
152
165
|
);
|
|
153
|
-
}
|
|
166
|
+
})
|
|
154
167
|
);
|
|
155
168
|
|
|
156
169
|
export default CheckboxGroup;
|