@nypl/design-system-react-components 0.25.12 → 0.26.1
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 +131 -1
- package/README.md +10 -10
- 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 +1 -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 +1 -0
- 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 +2 -0
- package/dist/components/Logo/LogoTypes.d.ts +4 -2
- package/dist/components/Notification/Notification.d.ts +7 -7
- package/dist/components/Pagination/Pagination.d.ts +2 -2
- 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 +4 -4
- 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 +17 -8
- 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 +2075 -1468
- 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 +2086 -1483
- 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 +3 -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 -4
- 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 +4 -14
- package/dist/theme/components/global.d.ts +25 -18
- 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 +99 -9
- package/dist/theme/components/notification.d.ts +4 -4
- package/dist/theme/components/pagination.d.ts +2 -5
- package/dist/theme/components/radio.d.ts +7 -4
- package/dist/theme/components/radioGroup.d.ts +4 -2
- package/dist/theme/components/select.d.ts +37 -5
- package/dist/theme/components/skeletonLoader.d.ts +2 -2
- package/dist/theme/components/slider.d.ts +6 -3
- package/dist/theme/components/structuredContent.d.ts +197 -0
- package/dist/theme/components/textInput.d.ts +18 -6
- package/dist/theme/components/toggle.d.ts +20 -5
- package/dist/theme/foundations/global.d.ts +2 -0
- package/dist/theme/foundations/radii.d.ts +1 -0
- package/dist/theme/foundations/spacing.d.ts +46 -43
- 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 +37 -19
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +57 -36
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +14 -13
- package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -1
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +211 -12
- 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 +221 -101
- 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 +26 -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 +1 -0
- 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 +4 -0
- package/src/components/Logo/LogoTypes.tsx +3 -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 +29 -5
- package/src/components/Notification/Notification.test.tsx +23 -0
- package/src/components/Notification/Notification.tsx +53 -51
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +158 -29
- package/src/components/Pagination/Pagination.stories.mdx +27 -6
- package/src/components/Pagination/Pagination.test.tsx +55 -2
- package/src/components/Pagination/Pagination.tsx +12 -9
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +244 -27
- 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 -62
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +163 -5
- 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 +101 -36
- package/src/components/SearchBar/{SearchBar.Test.tsx → SearchBar.test.tsx} +46 -4
- package/src/components/SearchBar/SearchBar.tsx +20 -11
- 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 +30 -23
- 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 +5 -5
- 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 +1 -2
- 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 +89 -71
- 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 +29 -26
- package/src/components/Toggle/{ToggleSizes.tsx → ToggleTypes.tsx} +1 -1
- package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +191 -4
- 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 +50 -9
- 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 +1 -1
- package/src/theme/components/accordion.ts +7 -12
- package/src/theme/components/breadcrumb.ts +3 -0
- package/src/theme/components/button.ts +15 -7
- package/src/theme/components/card.ts +56 -36
- package/src/theme/components/checkbox.ts +10 -8
- 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 +1 -2
- package/src/theme/components/global.ts +29 -23
- 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 +73 -66
- package/src/theme/components/notification.ts +7 -7
- package/src/theme/components/pagination.ts +2 -5
- package/src/theme/components/progressIndicator.ts +3 -3
- package/src/theme/components/radio.ts +9 -9
- package/src/theme/components/radioGroup.ts +4 -2
- package/src/theme/components/select.ts +35 -16
- package/src/theme/components/skeletonLoader.ts +3 -3
- package/src/theme/components/slider.ts +8 -7
- 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 +43 -13
- package/src/theme/components/videoPlayer.ts +1 -1
- package/src/theme/foundations/colors.ts +1 -1
- package/src/theme/foundations/radii.ts +1 -0
- package/src/theme/foundations/spacing.ts +70 -22
- package/src/theme/foundations/typography.ts +2 -2
- package/src/utils/componentCategories.ts +28 -21
- package/dist/components/Card/CardTypes.d.ts +0 -4
- package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +0 -4
- 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/RadioGroup/RadioGroupLayoutTypes.tsx +0 -4
- package/src/docs/Intro.stories.mdx +0 -53
- package/src/helpers/generateUUID.tsx +0 -5
|
@@ -1,22 +1,61 @@
|
|
|
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
|
-
import RadioGroup from "./RadioGroup";
|
|
8
8
|
import Radio from "../Radio/Radio";
|
|
9
|
-
import
|
|
10
|
-
import
|
|
9
|
+
import RadioGroup from "./RadioGroup";
|
|
10
|
+
import { LayoutTypes } from "../../helpers/enums";
|
|
11
11
|
|
|
12
12
|
describe("Radio Accessibility", () => {
|
|
13
|
-
it("passes axe accessibility", async () => {
|
|
13
|
+
it("passes axe accessibility with string labels", async () => {
|
|
14
14
|
const { container } = render(
|
|
15
|
-
<RadioGroup
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
<RadioGroup
|
|
16
|
+
id="radioGroup"
|
|
17
|
+
labelText="RadioGroup example"
|
|
18
|
+
name="a11y-test"
|
|
19
|
+
>
|
|
20
|
+
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
21
|
+
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
22
|
+
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
23
|
+
<Radio id="radio5" value="5" labelText="Radio 5" />
|
|
24
|
+
</RadioGroup>
|
|
25
|
+
);
|
|
26
|
+
expect(await axe(container)).toHaveNoViolations();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it("passes axe accessibility with jsx labels", async () => {
|
|
30
|
+
const { container } = render(
|
|
31
|
+
<RadioGroup
|
|
32
|
+
id="radioGroup"
|
|
33
|
+
labelText="RadioGroup example"
|
|
34
|
+
name="a11y-test"
|
|
35
|
+
isFullWidth
|
|
36
|
+
>
|
|
37
|
+
<Radio
|
|
38
|
+
id="arts"
|
|
39
|
+
labelText={
|
|
40
|
+
<Flex>
|
|
41
|
+
<span>Arts</span>
|
|
42
|
+
<Spacer />
|
|
43
|
+
<span>4</span>
|
|
44
|
+
</Flex>
|
|
45
|
+
}
|
|
46
|
+
value="arts"
|
|
47
|
+
/>
|
|
48
|
+
<Radio
|
|
49
|
+
id="English"
|
|
50
|
+
labelText={
|
|
51
|
+
<Flex>
|
|
52
|
+
<span>English</span>
|
|
53
|
+
<Spacer />
|
|
54
|
+
<span>23</span>
|
|
55
|
+
</Flex>
|
|
56
|
+
}
|
|
57
|
+
value="English"
|
|
58
|
+
/>
|
|
20
59
|
</RadioGroup>
|
|
21
60
|
);
|
|
22
61
|
expect(await axe(container)).toHaveNoViolations();
|
|
@@ -26,10 +65,10 @@ describe("Radio Accessibility", () => {
|
|
|
26
65
|
describe("Radio Button", () => {
|
|
27
66
|
it("renders with radio inputs and a label", () => {
|
|
28
67
|
render(
|
|
29
|
-
<RadioGroup labelText="Test Label" name="test1">
|
|
30
|
-
<Radio value="2" labelText="Radio 2" />
|
|
31
|
-
<Radio value="3" labelText="Radio 3" />
|
|
32
|
-
<Radio value="4" labelText="Radio 4" />
|
|
68
|
+
<RadioGroup id="radioGroup" labelText="Test Label" name="test1">
|
|
69
|
+
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
70
|
+
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
71
|
+
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
33
72
|
</RadioGroup>
|
|
34
73
|
);
|
|
35
74
|
expect(screen.getByText(/Test Label/i)).toBeInTheDocument();
|
|
@@ -41,10 +80,15 @@ describe("Radio Button", () => {
|
|
|
41
80
|
|
|
42
81
|
it("renders with appropriate 'aria-label' attribute and value when 'showLabel' prop is set to false", () => {
|
|
43
82
|
render(
|
|
44
|
-
<RadioGroup
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
83
|
+
<RadioGroup
|
|
84
|
+
id="radioGroup"
|
|
85
|
+
labelText="Test Label"
|
|
86
|
+
name="test2"
|
|
87
|
+
showLabel={false}
|
|
88
|
+
>
|
|
89
|
+
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
90
|
+
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
91
|
+
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
48
92
|
</RadioGroup>
|
|
49
93
|
);
|
|
50
94
|
expect(screen.getByRole("radiogroup")).toHaveAttribute(
|
|
@@ -56,14 +100,15 @@ describe("Radio Button", () => {
|
|
|
56
100
|
it("renders visible helper or error text", () => {
|
|
57
101
|
const { rerender } = render(
|
|
58
102
|
<RadioGroup
|
|
103
|
+
id="radioGroup"
|
|
59
104
|
labelText="Test Label"
|
|
60
105
|
name="test3"
|
|
61
106
|
helperText="This is the helper text for the full group."
|
|
62
107
|
invalidText="This is the error text :("
|
|
63
108
|
>
|
|
64
|
-
<Radio value="2" labelText="Radio 2" />
|
|
65
|
-
<Radio value="3" labelText="Radio 3" />
|
|
66
|
-
<Radio value="4" labelText="Radio 4" />
|
|
109
|
+
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
110
|
+
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
111
|
+
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
67
112
|
</RadioGroup>
|
|
68
113
|
);
|
|
69
114
|
expect(
|
|
@@ -75,15 +120,16 @@ describe("Radio Button", () => {
|
|
|
75
120
|
|
|
76
121
|
rerender(
|
|
77
122
|
<RadioGroup
|
|
123
|
+
id="radioGroup"
|
|
78
124
|
labelText="Test Label"
|
|
79
125
|
name="test4"
|
|
80
126
|
helperText="This is the helper text for the full group."
|
|
81
127
|
invalidText="This is the error text :("
|
|
82
128
|
isInvalid
|
|
83
129
|
>
|
|
84
|
-
<Radio value="2" labelText="Radio 2" />
|
|
85
|
-
<Radio value="3" labelText="Radio 3" />
|
|
86
|
-
<Radio value="4" labelText="Radio 4" />
|
|
130
|
+
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
131
|
+
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
132
|
+
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
87
133
|
</RadioGroup>
|
|
88
134
|
);
|
|
89
135
|
expect(screen.getByText("This is the error text :(")).toBeVisible();
|
|
@@ -95,7 +141,7 @@ describe("Radio Button", () => {
|
|
|
95
141
|
it("sets the RadioGroup's ID", () => {
|
|
96
142
|
render(
|
|
97
143
|
<RadioGroup labelText="Test Label" name="test5" id="some-id">
|
|
98
|
-
<Radio value="2" labelText="Radio 2" />
|
|
144
|
+
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
99
145
|
</RadioGroup>
|
|
100
146
|
);
|
|
101
147
|
|
|
@@ -113,14 +159,15 @@ describe("Radio Button", () => {
|
|
|
113
159
|
};
|
|
114
160
|
render(
|
|
115
161
|
<RadioGroup
|
|
162
|
+
id="radioGroup"
|
|
116
163
|
labelText="Test Label"
|
|
117
164
|
name="getValue"
|
|
118
165
|
defaultValue="4"
|
|
119
166
|
onChange={onChange}
|
|
120
167
|
>
|
|
121
|
-
<Radio value="2" labelText="Radio 2" />
|
|
122
|
-
<Radio value="3" labelText="Radio 3" />
|
|
123
|
-
<Radio value="4" labelText="Radio 4" />
|
|
168
|
+
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
169
|
+
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
170
|
+
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
124
171
|
</RadioGroup>
|
|
125
172
|
);
|
|
126
173
|
|
|
@@ -131,25 +178,17 @@ describe("Radio Button", () => {
|
|
|
131
178
|
expect(newValue).toEqual("2");
|
|
132
179
|
});
|
|
133
180
|
|
|
134
|
-
// TODO: Figure out why this renders twice with two different calls
|
|
135
|
-
// to the render function.
|
|
136
|
-
// it("calls the UUID generation function if no id prop value is passed", () => {
|
|
137
|
-
// const generateUUIDSpy = jest.spyOn(generateUUID, "default");
|
|
138
|
-
// expect(generateUUIDSpy).toHaveBeenCalledTimes(0);
|
|
139
|
-
// render(
|
|
140
|
-
// <RadioGroup labelText="Test Label" name="test6">
|
|
141
|
-
// <Radio value="2" labelText="Radio 2" id="radio2" />
|
|
142
|
-
// </RadioGroup>
|
|
143
|
-
// );
|
|
144
|
-
// expect(generateUUIDSpy).toHaveBeenCalledTimes(1);
|
|
145
|
-
// });
|
|
146
|
-
|
|
147
181
|
it("sets the 'disabled' attribute for all its Radio children", () => {
|
|
148
182
|
render(
|
|
149
|
-
<RadioGroup
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
183
|
+
<RadioGroup
|
|
184
|
+
id="radioGroup"
|
|
185
|
+
labelText="Test Label"
|
|
186
|
+
name="test7"
|
|
187
|
+
isDisabled
|
|
188
|
+
>
|
|
189
|
+
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
190
|
+
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
191
|
+
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
153
192
|
</RadioGroup>
|
|
154
193
|
);
|
|
155
194
|
const radios = screen.getAllByRole("radio");
|
|
@@ -162,10 +201,15 @@ describe("Radio Button", () => {
|
|
|
162
201
|
|
|
163
202
|
it("sets the 'required' attribute for all its Radio children", () => {
|
|
164
203
|
render(
|
|
165
|
-
<RadioGroup
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
204
|
+
<RadioGroup
|
|
205
|
+
id="radioGroup"
|
|
206
|
+
labelText="Test Label"
|
|
207
|
+
name="test8"
|
|
208
|
+
isRequired
|
|
209
|
+
>
|
|
210
|
+
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
211
|
+
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
212
|
+
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
169
213
|
</RadioGroup>
|
|
170
214
|
);
|
|
171
215
|
const radios = screen.getAllByRole("radio");
|
|
@@ -182,14 +226,15 @@ describe("Radio Button", () => {
|
|
|
182
226
|
it("sets the error state for all its Radio children", () => {
|
|
183
227
|
render(
|
|
184
228
|
<RadioGroup
|
|
229
|
+
id="radioGroup"
|
|
185
230
|
labelText="Test Label"
|
|
186
231
|
name="test9"
|
|
187
232
|
isInvalid
|
|
188
233
|
invalidText="There is an error :("
|
|
189
234
|
>
|
|
190
|
-
<Radio value="2" labelText="Radio 2" />
|
|
191
|
-
<Radio value="3" labelText="Radio 3" />
|
|
192
|
-
<Radio value="4" labelText="Radio 4" />
|
|
235
|
+
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
236
|
+
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
237
|
+
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
193
238
|
</RadioGroup>
|
|
194
239
|
);
|
|
195
240
|
const radios = screen.getAllByRole("radio");
|
|
@@ -204,15 +249,16 @@ describe("Radio Button", () => {
|
|
|
204
249
|
it("does not render the error text when 'showHelperInvalidText' is false", () => {
|
|
205
250
|
render(
|
|
206
251
|
<RadioGroup
|
|
252
|
+
id="radioGroup"
|
|
207
253
|
labelText="Test Label"
|
|
208
254
|
name="test10"
|
|
209
255
|
isInvalid
|
|
210
256
|
invalidText="There is an error :("
|
|
211
257
|
showHelperInvalidText={false}
|
|
212
258
|
>
|
|
213
|
-
<Radio value="2" labelText="Radio 2" />
|
|
214
|
-
<Radio value="3" labelText="Radio 3" />
|
|
215
|
-
<Radio value="4" labelText="Radio 4" />
|
|
259
|
+
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
260
|
+
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
261
|
+
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
216
262
|
</RadioGroup>
|
|
217
263
|
);
|
|
218
264
|
expect(screen.queryByText("There is an error :(")).not.toBeInTheDocument();
|
|
@@ -233,7 +279,7 @@ describe("Radio Button", () => {
|
|
|
233
279
|
labelText="row"
|
|
234
280
|
name="row"
|
|
235
281
|
id="row"
|
|
236
|
-
layout={
|
|
282
|
+
layout={LayoutTypes.Row}
|
|
237
283
|
>
|
|
238
284
|
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
239
285
|
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
@@ -279,26 +325,27 @@ describe("Radio Button", () => {
|
|
|
279
325
|
</RadioGroup>
|
|
280
326
|
)
|
|
281
327
|
.toJSON();
|
|
282
|
-
const
|
|
328
|
+
const isRequired = renderer
|
|
283
329
|
.create(
|
|
284
330
|
<RadioGroup
|
|
285
|
-
labelText="
|
|
286
|
-
name="
|
|
287
|
-
id="
|
|
288
|
-
|
|
331
|
+
labelText="required"
|
|
332
|
+
name="required"
|
|
333
|
+
id="required"
|
|
334
|
+
isRequired
|
|
289
335
|
>
|
|
290
336
|
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
291
337
|
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
292
338
|
</RadioGroup>
|
|
293
339
|
)
|
|
294
340
|
.toJSON();
|
|
295
|
-
const
|
|
341
|
+
const noRequiredLabel = renderer
|
|
296
342
|
.create(
|
|
297
343
|
<RadioGroup
|
|
298
|
-
labelText="required"
|
|
299
|
-
name="
|
|
300
|
-
id="
|
|
344
|
+
labelText="no optional or required label"
|
|
345
|
+
name="noRequiredLabel"
|
|
346
|
+
id="noRequiredLabel"
|
|
301
347
|
isRequired
|
|
348
|
+
showRequiredLabel={false}
|
|
302
349
|
>
|
|
303
350
|
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
304
351
|
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
@@ -326,16 +373,79 @@ describe("Radio Button", () => {
|
|
|
326
373
|
</RadioGroup>
|
|
327
374
|
)
|
|
328
375
|
.toJSON();
|
|
376
|
+
const withJSXRadioLabels = renderer
|
|
377
|
+
.create(
|
|
378
|
+
<RadioGroup
|
|
379
|
+
id="jsxLabels"
|
|
380
|
+
isFullWidth
|
|
381
|
+
labelText="RadioGroup example"
|
|
382
|
+
name="a11y-test"
|
|
383
|
+
>
|
|
384
|
+
<Radio
|
|
385
|
+
id="arts"
|
|
386
|
+
labelText={
|
|
387
|
+
<Flex>
|
|
388
|
+
<span>Arts</span>
|
|
389
|
+
<Spacer />
|
|
390
|
+
<span>4</span>
|
|
391
|
+
</Flex>
|
|
392
|
+
}
|
|
393
|
+
value="arts"
|
|
394
|
+
/>
|
|
395
|
+
<Radio
|
|
396
|
+
id="English"
|
|
397
|
+
labelText={
|
|
398
|
+
<Flex>
|
|
399
|
+
<span>English</span>
|
|
400
|
+
<Spacer />
|
|
401
|
+
<span>23</span>
|
|
402
|
+
</Flex>
|
|
403
|
+
}
|
|
404
|
+
value="English"
|
|
405
|
+
/>
|
|
406
|
+
</RadioGroup>
|
|
407
|
+
)
|
|
408
|
+
.toJSON();
|
|
409
|
+
const withChakraProps = renderer
|
|
410
|
+
.create(
|
|
411
|
+
<RadioGroup
|
|
412
|
+
labelText="chakra"
|
|
413
|
+
name="chakra"
|
|
414
|
+
id="chakra"
|
|
415
|
+
p="20px"
|
|
416
|
+
color="ui.error.primary"
|
|
417
|
+
>
|
|
418
|
+
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
419
|
+
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
420
|
+
</RadioGroup>
|
|
421
|
+
)
|
|
422
|
+
.toJSON();
|
|
423
|
+
const withOtherProps = renderer
|
|
424
|
+
.create(
|
|
425
|
+
<RadioGroup
|
|
426
|
+
labelText="props"
|
|
427
|
+
name="props"
|
|
428
|
+
id="props"
|
|
429
|
+
data-testid="props"
|
|
430
|
+
>
|
|
431
|
+
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
432
|
+
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
433
|
+
</RadioGroup>
|
|
434
|
+
)
|
|
435
|
+
.toJSON();
|
|
329
436
|
|
|
330
437
|
expect(column).toMatchSnapshot();
|
|
331
438
|
expect(row).toMatchSnapshot();
|
|
332
439
|
expect(noLabel).toMatchSnapshot();
|
|
333
440
|
expect(helperText).toMatchSnapshot();
|
|
334
441
|
expect(invalidText).toMatchSnapshot();
|
|
335
|
-
expect(
|
|
442
|
+
expect(noRequiredLabel).toMatchSnapshot();
|
|
336
443
|
expect(isRequired).toMatchSnapshot();
|
|
337
444
|
expect(isInvalid).toMatchSnapshot();
|
|
338
445
|
expect(isDisabled).toMatchSnapshot();
|
|
446
|
+
expect(withJSXRadioLabels).toMatchSnapshot();
|
|
447
|
+
expect(withChakraProps).toMatchSnapshot();
|
|
448
|
+
expect(withOtherProps).toMatchSnapshot();
|
|
339
449
|
});
|
|
340
450
|
|
|
341
451
|
it("should throw warning when a non-Radio component is used as a child", () => {
|
|
@@ -346,7 +456,22 @@ describe("Radio Button", () => {
|
|
|
346
456
|
</RadioGroup>
|
|
347
457
|
);
|
|
348
458
|
expect(warn).toHaveBeenCalledWith(
|
|
349
|
-
"Only `Radio` components are allowed inside
|
|
459
|
+
"NYPL Reservoir RadioGroup: Only `Radio` components are allowed inside " +
|
|
460
|
+
"the `RadioGroup` component."
|
|
461
|
+
);
|
|
462
|
+
});
|
|
463
|
+
|
|
464
|
+
it("logs a warning when there is no `id` passed", () => {
|
|
465
|
+
const warn = jest.spyOn(console, "warn");
|
|
466
|
+
render(
|
|
467
|
+
// @ts-ignore: Typescript complains when a required prop is not passed, but
|
|
468
|
+
// here we don't want to pass the required prop to make sure the warning appears.
|
|
469
|
+
<RadioGroup labelText="RadioGroup example" name="a11y-test">
|
|
470
|
+
<Radio id="radio1" value="1" labelText="Radio 1" />
|
|
471
|
+
</RadioGroup>
|
|
472
|
+
);
|
|
473
|
+
expect(warn).toHaveBeenCalledWith(
|
|
474
|
+
"NYPL Reservoir RadioGroup: This component's required `id` prop was not passed."
|
|
350
475
|
);
|
|
351
476
|
});
|
|
352
477
|
});
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
chakra,
|
|
3
|
+
RadioGroup as ChakraRadioGroup,
|
|
3
4
|
Stack,
|
|
4
5
|
useMultiStyleConfig,
|
|
5
|
-
useRadioGroup,
|
|
6
6
|
} from "@chakra-ui/react";
|
|
7
7
|
import * as React from "react";
|
|
8
8
|
|
|
@@ -12,9 +12,7 @@ import HelperErrorText, {
|
|
|
12
12
|
} from "../HelperErrorText/HelperErrorText";
|
|
13
13
|
import { spacing } from "../../theme/foundations/spacing";
|
|
14
14
|
import Radio from "../Radio/Radio";
|
|
15
|
-
import {
|
|
16
|
-
import generateUUID from "../../helpers/generateUUID";
|
|
17
|
-
|
|
15
|
+
import { LayoutTypes } from "../../helpers/enums";
|
|
18
16
|
export interface RadioGroupProps {
|
|
19
17
|
/** Additional class name. */
|
|
20
18
|
className?: string;
|
|
@@ -23,11 +21,13 @@ export interface RadioGroupProps {
|
|
|
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 `Radio`s' wrapper to be full width. */
|
|
30
|
+
isFullWidth?: boolean;
|
|
31
31
|
/** Adds the 'aria-invalid' attribute to the input and
|
|
32
32
|
* sets the error state when true. */
|
|
33
33
|
isInvalid?: boolean;
|
|
@@ -37,121 +37,130 @@ export interface RadioGroupProps {
|
|
|
37
37
|
* true, or an "aria-label" if `showLabel` is false. */
|
|
38
38
|
labelText: string;
|
|
39
39
|
/** Renders the Radio buttons in a row or column (default). */
|
|
40
|
-
layout?:
|
|
40
|
+
layout?: LayoutTypes;
|
|
41
41
|
/** The `name` prop indicates the form group for all the Radio 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 = () => {};
|
|
55
|
-
export const onChangeDefault = () => {
|
|
56
|
-
return;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
const RadioGroup = React.forwardRef<
|
|
60
|
-
HTMLInputElement,
|
|
61
|
-
React.PropsWithChildren<RadioGroupProps>
|
|
62
|
-
>((props, ref?) => {
|
|
63
|
-
const {
|
|
64
|
-
children,
|
|
65
|
-
className = "",
|
|
66
|
-
defaultValue,
|
|
67
|
-
helperText,
|
|
68
|
-
id = generateUUID(),
|
|
69
|
-
invalidText,
|
|
70
|
-
isDisabled = false,
|
|
71
|
-
isInvalid = false,
|
|
72
|
-
isRequired = false,
|
|
73
|
-
labelText,
|
|
74
|
-
layout = RadioGroupLayoutTypes.Column,
|
|
75
|
-
name,
|
|
76
|
-
onChange = onChangeDefault,
|
|
77
|
-
optReqFlag = true,
|
|
78
|
-
showHelperInvalidText = true,
|
|
79
|
-
showLabel = true,
|
|
80
|
-
} = props;
|
|
81
|
-
const footnote: HelperErrorTextType = isInvalid ? invalidText : helperText;
|
|
82
|
-
const spacingProp =
|
|
83
|
-
layout === RadioGroupLayoutTypes.Column ? spacing.s : spacing.l;
|
|
84
|
-
const newChildren = [];
|
|
85
56
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
57
|
+
/**
|
|
58
|
+
* RadioGroup is a wrapper for DS `Radio` components that renders as a fieldset
|
|
59
|
+
* HTML element along with optional helper text. The `name` prop is essential
|
|
60
|
+
* for this form group element and is not needed for individual DS `Radio`
|
|
61
|
+
* components when `RadioGroup` is used.
|
|
62
|
+
*/
|
|
63
|
+
export const RadioGroup = chakra(
|
|
64
|
+
React.forwardRef<HTMLInputElement, React.PropsWithChildren<RadioGroupProps>>(
|
|
65
|
+
(props, ref?) => {
|
|
66
|
+
const {
|
|
67
|
+
children,
|
|
68
|
+
className = "",
|
|
69
|
+
defaultValue,
|
|
70
|
+
helperText,
|
|
71
|
+
id,
|
|
72
|
+
invalidText,
|
|
73
|
+
isDisabled = false,
|
|
74
|
+
isFullWidth = false,
|
|
75
|
+
isInvalid = false,
|
|
76
|
+
isRequired = false,
|
|
77
|
+
labelText,
|
|
78
|
+
layout = LayoutTypes.Column,
|
|
79
|
+
name,
|
|
80
|
+
onChange,
|
|
81
|
+
showHelperInvalidText = true,
|
|
82
|
+
showLabel = true,
|
|
83
|
+
showRequiredLabel = true,
|
|
84
|
+
...rest
|
|
85
|
+
} = props;
|
|
86
|
+
const [value, setValue] = React.useState(defaultValue);
|
|
87
|
+
const footnote: HelperErrorTextType = isInvalid
|
|
88
|
+
? invalidText
|
|
89
|
+
: helperText;
|
|
90
|
+
const spacingProp = layout === LayoutTypes.Column ? spacing.s : spacing.l;
|
|
91
|
+
const newChildren: JSX.Element[] = [];
|
|
92
|
+
// Get the Chakra-based styles for the custom elements in this component.
|
|
93
|
+
const styles = useMultiStyleConfig("RadioGroup", { isFullWidth });
|
|
94
|
+
// Props for the `ChakraRadioGroup` component.
|
|
95
|
+
const radioGroupProps = {
|
|
96
|
+
"aria-label": !showLabel ? labelText : undefined,
|
|
97
|
+
name,
|
|
98
|
+
onChange: (selected: string) => {
|
|
99
|
+
setValue(selected);
|
|
100
|
+
onChange && onChange(selected);
|
|
101
|
+
},
|
|
102
|
+
ref,
|
|
103
|
+
value,
|
|
104
|
+
};
|
|
94
105
|
|
|
95
|
-
|
|
96
|
-
React.Children.map(children, (child: React.ReactElement, i) => {
|
|
97
|
-
if (child.type !== Radio) {
|
|
98
|
-
// Special case for Storybook MDX documentation.
|
|
99
|
-
if (child.props.mdxType && child.props.mdxType === "Radio") {
|
|
100
|
-
noop();
|
|
101
|
-
} else {
|
|
106
|
+
if (!id) {
|
|
102
107
|
console.warn(
|
|
103
|
-
"
|
|
108
|
+
"NYPL Reservoir RadioGroup: This component's required `id` prop was not passed."
|
|
104
109
|
);
|
|
105
110
|
}
|
|
106
|
-
}
|
|
107
111
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
112
|
+
// Go through the Radio children and update them as needed.
|
|
113
|
+
React.Children.map(children, (child: React.ReactElement, key) => {
|
|
114
|
+
if (child?.type !== Radio) {
|
|
115
|
+
// Special case for Storybook MDX documentation.
|
|
116
|
+
if (child.props?.mdxType && child.props?.mdxType === "Radio") {
|
|
117
|
+
noop();
|
|
118
|
+
} else {
|
|
119
|
+
console.warn(
|
|
120
|
+
"NYPL Reservoir RadioGroup: Only `Radio` components are allowed " +
|
|
121
|
+
"inside the `RadioGroup` component."
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
111
125
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
126
|
+
if (child !== undefined && child !== null) {
|
|
127
|
+
const newProps = {
|
|
128
|
+
key,
|
|
129
|
+
isDisabled,
|
|
130
|
+
isInvalid,
|
|
131
|
+
isRequired,
|
|
132
|
+
};
|
|
133
|
+
newChildren.push(React.cloneElement(child, newProps));
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
return (
|
|
138
|
+
<Fieldset
|
|
139
|
+
className={className}
|
|
140
|
+
id={`radio-group-${id}`}
|
|
141
|
+
isLegendHidden={!showLabel}
|
|
142
|
+
isRequired={isRequired}
|
|
143
|
+
legendText={labelText}
|
|
144
|
+
showRequiredLabel={showRequiredLabel}
|
|
145
|
+
{...rest}
|
|
146
|
+
>
|
|
147
|
+
<ChakraRadioGroup {...radioGroupProps}>
|
|
148
|
+
<Stack direction={[layout]} spacing={spacingProp} sx={styles.stack}>
|
|
149
|
+
{newChildren}
|
|
150
|
+
</Stack>
|
|
151
|
+
</ChakraRadioGroup>
|
|
152
|
+
{footnote && showHelperInvalidText && (
|
|
153
|
+
<HelperErrorText
|
|
154
|
+
additionalStyles={styles.helperErrorText}
|
|
155
|
+
id={`${id}-helperErrorText`}
|
|
156
|
+
isInvalid={isInvalid}
|
|
157
|
+
text={footnote}
|
|
158
|
+
/>
|
|
159
|
+
)}
|
|
160
|
+
</Fieldset>
|
|
119
161
|
);
|
|
120
162
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
// Get the Chakra-based styles for the custom elements in this component.
|
|
124
|
-
const styles = useMultiStyleConfig("RadioGroup", {});
|
|
125
|
-
|
|
126
|
-
return (
|
|
127
|
-
<Fieldset
|
|
128
|
-
className={className}
|
|
129
|
-
id={`radio-group-${id}`}
|
|
130
|
-
isLegendHidden={!showLabel}
|
|
131
|
-
legendText={labelText}
|
|
132
|
-
optReqFlag={optReqFlag}
|
|
133
|
-
>
|
|
134
|
-
<Stack
|
|
135
|
-
aria-label={!showLabel ? labelText : null}
|
|
136
|
-
direction={[layout]}
|
|
137
|
-
spacing={spacingProp}
|
|
138
|
-
ref={ref}
|
|
139
|
-
{...radioGroupProps}
|
|
140
|
-
sx={styles.stack}
|
|
141
|
-
>
|
|
142
|
-
{newChildren}
|
|
143
|
-
</Stack>
|
|
144
|
-
{footnote && showHelperInvalidText && (
|
|
145
|
-
<Box __css={styles.helper}>
|
|
146
|
-
<HelperErrorText
|
|
147
|
-
id={`${id}-helperErrorText`}
|
|
148
|
-
isInvalid={isInvalid}
|
|
149
|
-
text={footnote}
|
|
150
|
-
/>
|
|
151
|
-
</Box>
|
|
152
|
-
)}
|
|
153
|
-
</Fieldset>
|
|
154
|
-
);
|
|
155
|
-
});
|
|
163
|
+
)
|
|
164
|
+
);
|
|
156
165
|
|
|
157
166
|
export default RadioGroup;
|