@nypl/design-system-react-components 1.0.2 → 1.0.3-beta
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/README.md +0 -2
- package/dist/components/Slider/Slider.d.ts +1 -2
- package/dist/components/TextInput/TextInput.d.ts +2 -1
- package/dist/design-system-react-components.cjs.development.js +33 -10
- 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 +33 -10
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/hooks/{tests → __tests__}/useCarouselStyles.test.d.ts +0 -0
- package/dist/theme/components/global.d.ts +1 -1
- package/dist/theme/components/radio.d.ts +8 -0
- package/dist/theme/components/template.d.ts +4 -1
- package/package.json +2 -3
- package/CHANGELOG.md +0 -1430
- package/src/__tests__/fileMock.ts +0 -6
- package/src/__tests__/setup.ts +0 -27
- package/src/__tests__/utils/utils.test.ts +0 -18
- package/src/components/AccessibilityGuide/SkipNavigation.stories.mdx +0 -42
- package/src/components/Accordion/Accordion.stories.mdx +0 -333
- package/src/components/Accordion/Accordion.test.tsx +0 -237
- package/src/components/Accordion/Accordion.tsx +0 -137
- package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +0 -734
- package/src/components/Autosuggest/Autosuggest.stories.mdx +0 -75
- package/src/components/Autosuggest/Autosuggest.stories.tsx +0 -211
- package/src/components/Autosuggest/_Autosuggest.scss +0 -51
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +0 -231
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +0 -144
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +0 -98
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +0 -695
- package/src/components/Button/Button.stories.mdx +0 -320
- package/src/components/Button/Button.test.tsx +0 -184
- package/src/components/Button/Button.tsx +0 -95
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +0 -106
- package/src/components/ButtonGroup/ButtonGroup.stories.mdx +0 -178
- package/src/components/ButtonGroup/ButtonGroup.test.tsx +0 -141
- package/src/components/ButtonGroup/ButtonGroup.tsx +0 -100
- package/src/components/ButtonGroup/__snapshots__/ButtonGroup.test.tsx.snap +0 -117
- package/src/components/Card/Card.stories.mdx +0 -1041
- package/src/components/Card/Card.test.tsx +0 -388
- package/src/components/Card/Card.tsx +0 -346
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +0 -568
- package/src/components/Chakra/Box.stories.mdx +0 -52
- package/src/components/Chakra/Center.stories.mdx +0 -96
- package/src/components/Chakra/Flex.stories.mdx +0 -111
- package/src/components/Chakra/Grid.stories.mdx +0 -89
- package/src/components/Chakra/Stack.stories.mdx +0 -109
- package/src/components/Checkbox/Checkbox.stories.mdx +0 -243
- package/src/components/Checkbox/Checkbox.test.tsx +0 -350
- package/src/components/Checkbox/Checkbox.tsx +0 -152
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +0 -661
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +0 -462
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +0 -492
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +0 -173
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +0 -1842
- package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +0 -163
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +0 -76
- package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +0 -103
- package/src/components/DatePicker/DatePicker.stories.mdx +0 -452
- package/src/components/DatePicker/DatePicker.test.tsx +0 -940
- package/src/components/DatePicker/DatePicker.tsx +0 -450
- package/src/components/DatePicker/_DatePicker.scss +0 -100
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +0 -908
- package/src/components/Fieldset/Fieldset.stories.mdx +0 -96
- package/src/components/Fieldset/Fieldset.test.tsx +0 -155
- package/src/components/Fieldset/Fieldset.tsx +0 -55
- package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +0 -89
- package/src/components/Form/Form.stories.mdx +0 -426
- package/src/components/Form/Form.test.tsx +0 -234
- package/src/components/Form/Form.tsx +0 -124
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -115
- package/src/components/Grid/SimpleGrid.stories.mdx +0 -336
- package/src/components/Grid/SimpleGrid.test.tsx +0 -79
- package/src/components/Grid/SimpleGrid.tsx +0 -49
- package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +0 -23
- package/src/components/Heading/Heading.stories.mdx +0 -187
- package/src/components/Heading/Heading.test.tsx +0 -171
- package/src/components/Heading/Heading.tsx +0 -104
- package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +0 -90
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +0 -172
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +0 -114
- package/src/components/HelperErrorText/HelperErrorText.tsx +0 -62
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +0 -93
- package/src/components/Hero/Hero.stories.mdx +0 -378
- package/src/components/Hero/Hero.test.tsx +0 -611
- package/src/components/Hero/Hero.tsx +0 -203
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +0 -379
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +0 -73
- package/src/components/HorizontalRule/HorizontalRule.test.tsx +0 -54
- package/src/components/HorizontalRule/HorizontalRule.tsx +0 -27
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +0 -44
- package/src/components/Icons/Icon.stories.mdx +0 -413
- package/src/components/Icons/Icon.test.tsx +0 -120
- package/src/components/Icons/Icon.tsx +0 -187
- package/src/components/Icons/IconSvgs.tsx +0 -64
- package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +0 -129
- package/src/components/Image/Image.stories.mdx +0 -332
- package/src/components/Image/Image.test.tsx +0 -155
- package/src/components/Image/Image.tsx +0 -171
- package/src/components/Image/__snapshots__/Image.test.tsx.snap +0 -269
- package/src/components/Label/Label.stories.mdx +0 -100
- package/src/components/Label/Label.test.tsx +0 -116
- package/src/components/Label/Label.tsx +0 -55
- package/src/components/Label/__snapshots__/Label.test.tsx.snap +0 -45
- package/src/components/Link/Link.stories.mdx +0 -249
- package/src/components/Link/Link.test.tsx +0 -224
- package/src/components/Link/Link.tsx +0 -178
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +0 -286
- package/src/components/List/List.stories.mdx +0 -393
- package/src/components/List/List.test.tsx +0 -265
- package/src/components/List/List.tsx +0 -156
- package/src/components/List/__snapshots__/List.test.tsx.snap +0 -213
- package/src/components/Logo/Logo.stories.mdx +0 -295
- package/src/components/Logo/Logo.test.tsx +0 -116
- package/src/components/Logo/Logo.tsx +0 -151
- package/src/components/Logo/LogoSvgs.tsx +0 -90
- package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +0 -142
- package/src/components/Modal/Modal.stories.mdx +0 -294
- package/src/components/Modal/Modal.test.tsx +0 -157
- package/src/components/Modal/Modal.tsx +0 -154
- package/src/components/Modal/__snapshots__/Modal.test.tsx.snap +0 -25
- package/src/components/Notification/Notification.stories.mdx +0 -358
- package/src/components/Notification/Notification.test.tsx +0 -279
- package/src/components/Notification/Notification.tsx +0 -224
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +0 -525
- package/src/components/Pagination/Pagination.stories.mdx +0 -184
- package/src/components/Pagination/Pagination.test.tsx +0 -419
- package/src/components/Pagination/Pagination.tsx +0 -269
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +0 -544
- package/src/components/Placeholder/Placeholder.tsx +0 -19
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +0 -360
- package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +0 -298
- package/src/components/ProgressIndicator/ProgressIndicator.tsx +0 -132
- package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +0 -434
- package/src/components/Radio/Radio.stories.mdx +0 -216
- package/src/components/Radio/Radio.test.tsx +0 -247
- package/src/components/Radio/Radio.tsx +0 -119
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +0 -451
- package/src/components/RadioGroup/RadioGroup.stories.mdx +0 -479
- package/src/components/RadioGroup/RadioGroup.test.tsx +0 -471
- package/src/components/RadioGroup/RadioGroup.tsx +0 -171
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +0 -1550
- package/src/components/SearchBar/SearchBar.stories.mdx +0 -518
- package/src/components/SearchBar/SearchBar.test.tsx +0 -435
- package/src/components/SearchBar/SearchBar.tsx +0 -210
- package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +0 -1049
- package/src/components/Select/Select.stories.mdx +0 -439
- package/src/components/Select/Select.test.tsx +0 -358
- package/src/components/Select/Select.tsx +0 -183
- package/src/components/Select/__snapshots__/Select.test.tsx.snap +0 -895
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +0 -142
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +0 -116
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +0 -123
- package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +0 -898
- package/src/components/SkipNavigation/SkipNavigation.stories.mdx +0 -90
- package/src/components/SkipNavigation/SkipNavigation.test.tsx +0 -63
- package/src/components/SkipNavigation/SkipNavigation.tsx +0 -51
- package/src/components/SkipNavigation/__snapshots__/SkipNavigation.test.tsx.snap +0 -130
- package/src/components/Slider/Slider.stories.mdx +0 -628
- package/src/components/Slider/Slider.test.tsx +0 -736
- package/src/components/Slider/Slider.tsx +0 -322
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +0 -2186
- package/src/components/StatusBadge/StatusBadge.stories.mdx +0 -109
- package/src/components/StatusBadge/StatusBadge.test.tsx +0 -70
- package/src/components/StatusBadge/StatusBadge.tsx +0 -35
- package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +0 -47
- package/src/components/StructuredContent/StructuredContent.stories.mdx +0 -567
- package/src/components/StructuredContent/StructuredContent.test.tsx +0 -435
- package/src/components/StructuredContent/StructuredContent.tsx +0 -139
- package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +0 -368
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +0 -206
- package/src/components/StyleGuide/Breakpoints.stories.mdx +0 -55
- package/src/components/StyleGuide/Buttons.stories.mdx +0 -194
- package/src/components/StyleGuide/ColorCard.tsx +0 -43
- package/src/components/StyleGuide/Colors.stories.mdx +0 -201
- package/src/components/StyleGuide/DesignTokens.stories.mdx +0 -193
- package/src/components/StyleGuide/Forms.stories.mdx +0 -94
- package/src/components/StyleGuide/Iconography.stories.mdx +0 -142
- package/src/components/StyleGuide/Spacing.stories.mdx +0 -116
- package/src/components/StyleGuide/Typography.stories.mdx +0 -419
- package/src/components/Table/Table.stories.mdx +0 -272
- package/src/components/Table/Table.test.tsx +0 -241
- package/src/components/Table/Table.tsx +0 -152
- package/src/components/Table/__snapshots__/Table.test.tsx.snap +0 -1703
- package/src/components/Tabs/Tabs.stories.mdx +0 -338
- package/src/components/Tabs/Tabs.test.tsx +0 -298
- package/src/components/Tabs/Tabs.tsx +0 -264
- package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +0 -584
- package/src/components/Template/Template.stories.mdx +0 -695
- package/src/components/Template/Template.test.tsx +0 -309
- package/src/components/Template/Template.tsx +0 -326
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +0 -342
- package/src/components/Text/Text.stories.mdx +0 -103
- package/src/components/Text/Text.test.tsx +0 -63
- package/src/components/Text/Text.tsx +0 -50
- package/src/components/Text/__snapshots__/Text.test.tsx.snap +0 -50
- package/src/components/TextInput/TextInput.stories.mdx +0 -268
- package/src/components/TextInput/TextInput.test.tsx +0 -451
- package/src/components/TextInput/TextInput.tsx +0 -240
- package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +0 -274
- package/src/components/Toggle/Toggle.stories.mdx +0 -237
- package/src/components/Toggle/Toggle.test.tsx +0 -170
- package/src/components/Toggle/Toggle.tsx +0 -128
- package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +0 -470
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +0 -212
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +0 -308
- package/src/components/VideoPlayer/VideoPlayer.tsx +0 -188
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +0 -192
- package/src/docs/Chakra.stories.mdx +0 -563
- package/src/docs/Welcome.stories.mdx +0 -148
- package/src/helpers/types.ts +0 -1
- package/src/hooks/tests/useCarouselStyles.test.ts +0 -140
- package/src/hooks/tests/useNYPLTheme.test.tsx +0 -36
- package/src/hooks/useCarouselStyles.stories.mdx +0 -30
- package/src/hooks/useCarouselStyles.ts +0 -35
- package/src/hooks/useNYPLTheme.stories.mdx +0 -98
- package/src/hooks/useNYPLTheme.ts +0 -91
- package/src/hooks/useWindowSize.stories.mdx +0 -23
- package/src/hooks/useWindowSize.ts +0 -40
- package/src/index.ts +0 -136
- package/src/resources.scss +0 -6
- package/src/styles/base/_01-breakpoints.scss +0 -27
- package/src/styles/base/_02-mixins.scss +0 -103
- package/src/styles/base/_place-holder.scss +0 -33
- package/src/styles/space/_space-inline.scss +0 -79
- package/src/styles/space/_space-inset.scss +0 -57
- package/src/styles/space/_space-stack.scss +0 -116
- package/src/styles.scss +0 -23
- package/src/theme/components/accordion.ts +0 -25
- package/src/theme/components/breadcrumb.ts +0 -94
- package/src/theme/components/button.ts +0 -133
- package/src/theme/components/buttonGroup.ts +0 -10
- package/src/theme/components/card.ts +0 -237
- package/src/theme/components/checkbox.ts +0 -110
- package/src/theme/components/checkboxGroup.ts +0 -10
- package/src/theme/components/componentWrapper.ts +0 -14
- package/src/theme/components/customTable.ts +0 -77
- package/src/theme/components/datePicker.ts +0 -17
- package/src/theme/components/fieldset.ts +0 -23
- package/src/theme/components/global.ts +0 -91
- package/src/theme/components/globalMixins.ts +0 -24
- package/src/theme/components/heading.ts +0 -79
- package/src/theme/components/helperErrorText.ts +0 -14
- package/src/theme/components/hero.ts +0 -238
- package/src/theme/components/horizontalRule.ts +0 -17
- package/src/theme/components/icon.ts +0 -88
- package/src/theme/components/image.ts +0 -136
- package/src/theme/components/label.ts +0 -15
- package/src/theme/components/link.ts +0 -63
- package/src/theme/components/list.ts +0 -88
- package/src/theme/components/logo.ts +0 -58
- package/src/theme/components/notification.ts +0 -132
- package/src/theme/components/pagination.ts +0 -17
- package/src/theme/components/progressIndicator.ts +0 -67
- package/src/theme/components/radio.ts +0 -103
- package/src/theme/components/radioGroup.ts +0 -10
- package/src/theme/components/searchBar.ts +0 -19
- package/src/theme/components/select.ts +0 -72
- package/src/theme/components/skeletonLoader.ts +0 -113
- package/src/theme/components/skipNavigation.ts +0 -29
- package/src/theme/components/slider.ts +0 -95
- package/src/theme/components/statusBadge.ts +0 -26
- package/src/theme/components/structuredContent.ts +0 -149
- package/src/theme/components/tabs.ts +0 -109
- package/src/theme/components/template.ts +0 -114
- package/src/theme/components/text.ts +0 -38
- package/src/theme/components/textInput.ts +0 -65
- package/src/theme/components/toggle.ts +0 -109
- package/src/theme/components/videoPlayer.ts +0 -47
- package/src/theme/foundations/breakpoints.ts +0 -24
- package/src/theme/foundations/colors.ts +0 -212
- package/src/theme/foundations/global.ts +0 -43
- package/src/theme/foundations/radii.ts +0 -7
- package/src/theme/foundations/shadows.ts +0 -5
- package/src/theme/foundations/spacing.ts +0 -136
- package/src/theme/foundations/typography.ts +0 -107
- package/src/theme/index.ts +0 -131
- package/src/theme/provider.tsx +0 -9
- package/src/theme/types.ts +0 -1
- package/src/utils/componentCategories.ts +0 -152
- package/src/utils/interfaces.ts +0 -5
- package/src/utils/utils.ts +0 -84
|
@@ -1,471 +0,0 @@
|
|
|
1
|
-
import { Flex, Spacer } from "@chakra-ui/react";
|
|
2
|
-
import { render, screen } from "@testing-library/react";
|
|
3
|
-
import userEvent from "@testing-library/user-event";
|
|
4
|
-
import { axe } from "jest-axe";
|
|
5
|
-
import * as React from "react";
|
|
6
|
-
import renderer from "react-test-renderer";
|
|
7
|
-
|
|
8
|
-
import Radio from "../Radio/Radio";
|
|
9
|
-
import RadioGroup from "./RadioGroup";
|
|
10
|
-
|
|
11
|
-
describe("Radio Accessibility", () => {
|
|
12
|
-
it("passes axe accessibility with string labels", async () => {
|
|
13
|
-
const { container } = render(
|
|
14
|
-
<RadioGroup
|
|
15
|
-
id="radioGroup"
|
|
16
|
-
labelText="RadioGroup example"
|
|
17
|
-
name="a11y-test"
|
|
18
|
-
>
|
|
19
|
-
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
20
|
-
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
21
|
-
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
22
|
-
<Radio id="radio5" value="5" labelText="Radio 5" />
|
|
23
|
-
</RadioGroup>
|
|
24
|
-
);
|
|
25
|
-
expect(await axe(container)).toHaveNoViolations();
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it("passes axe accessibility with jsx labels", async () => {
|
|
29
|
-
const { container } = render(
|
|
30
|
-
<RadioGroup
|
|
31
|
-
id="radioGroup"
|
|
32
|
-
labelText="RadioGroup example"
|
|
33
|
-
name="a11y-test"
|
|
34
|
-
isFullWidth
|
|
35
|
-
>
|
|
36
|
-
<Radio
|
|
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
|
-
<Radio
|
|
48
|
-
id="English"
|
|
49
|
-
labelText={
|
|
50
|
-
<Flex>
|
|
51
|
-
<span>English</span>
|
|
52
|
-
<Spacer />
|
|
53
|
-
<span>23</span>
|
|
54
|
-
</Flex>
|
|
55
|
-
}
|
|
56
|
-
value="English"
|
|
57
|
-
/>
|
|
58
|
-
</RadioGroup>
|
|
59
|
-
);
|
|
60
|
-
expect(await axe(container)).toHaveNoViolations();
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
describe("Radio Button", () => {
|
|
65
|
-
it("renders with radio inputs and a label", () => {
|
|
66
|
-
render(
|
|
67
|
-
<RadioGroup id="radioGroup" labelText="Test Label" name="test1">
|
|
68
|
-
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
69
|
-
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
70
|
-
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
71
|
-
</RadioGroup>
|
|
72
|
-
);
|
|
73
|
-
expect(screen.getByText(/Test Label/i)).toBeInTheDocument();
|
|
74
|
-
expect(screen.getAllByRole("radio")).toHaveLength(3);
|
|
75
|
-
expect(screen.getByText("Radio 2")).toBeInTheDocument();
|
|
76
|
-
expect(screen.getByText("Radio 3")).toBeInTheDocument();
|
|
77
|
-
expect(screen.getByText("Radio 4")).toBeInTheDocument();
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
it("renders with appropriate 'aria-label' attribute and value when 'showLabel' prop is set to false", () => {
|
|
81
|
-
render(
|
|
82
|
-
<RadioGroup
|
|
83
|
-
id="radioGroup"
|
|
84
|
-
labelText="Test Label"
|
|
85
|
-
name="test2"
|
|
86
|
-
showLabel={false}
|
|
87
|
-
>
|
|
88
|
-
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
89
|
-
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
90
|
-
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
91
|
-
</RadioGroup>
|
|
92
|
-
);
|
|
93
|
-
expect(screen.getByRole("radiogroup")).toHaveAttribute(
|
|
94
|
-
"aria-label",
|
|
95
|
-
"Test Label"
|
|
96
|
-
);
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
it("renders visible helper or error text", () => {
|
|
100
|
-
const { rerender } = render(
|
|
101
|
-
<RadioGroup
|
|
102
|
-
id="radioGroup"
|
|
103
|
-
labelText="Test Label"
|
|
104
|
-
name="test3"
|
|
105
|
-
helperText="This is the helper text for the full group."
|
|
106
|
-
invalidText="This is the error text :("
|
|
107
|
-
>
|
|
108
|
-
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
109
|
-
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
110
|
-
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
111
|
-
</RadioGroup>
|
|
112
|
-
);
|
|
113
|
-
expect(
|
|
114
|
-
screen.getByText("This is the helper text for the full group.")
|
|
115
|
-
).toBeVisible();
|
|
116
|
-
expect(
|
|
117
|
-
screen.queryByText("This is the error text :(")
|
|
118
|
-
).not.toBeInTheDocument();
|
|
119
|
-
|
|
120
|
-
rerender(
|
|
121
|
-
<RadioGroup
|
|
122
|
-
id="radioGroup"
|
|
123
|
-
labelText="Test Label"
|
|
124
|
-
name="test4"
|
|
125
|
-
helperText="This is the helper text for the full group."
|
|
126
|
-
invalidText="This is the error text :("
|
|
127
|
-
isInvalid
|
|
128
|
-
>
|
|
129
|
-
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
130
|
-
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
131
|
-
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
132
|
-
</RadioGroup>
|
|
133
|
-
);
|
|
134
|
-
expect(screen.getByText("This is the error text :(")).toBeVisible();
|
|
135
|
-
expect(
|
|
136
|
-
screen.queryByText("This is the helper text for the full group.")
|
|
137
|
-
).not.toBeInTheDocument();
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
it("sets the RadioGroup's ID", () => {
|
|
141
|
-
render(
|
|
142
|
-
<RadioGroup labelText="Test Label" name="test5" id="some-id">
|
|
143
|
-
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
144
|
-
</RadioGroup>
|
|
145
|
-
);
|
|
146
|
-
|
|
147
|
-
// The "group" role here is for the `fieldset` element.
|
|
148
|
-
expect(screen.getByRole("group")).toHaveAttribute(
|
|
149
|
-
"id",
|
|
150
|
-
"radio-group-some-id"
|
|
151
|
-
);
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
it("sets the next value through the onChange function", () => {
|
|
155
|
-
let newValue = "";
|
|
156
|
-
const onChange = (value: string) => {
|
|
157
|
-
newValue = value;
|
|
158
|
-
};
|
|
159
|
-
render(
|
|
160
|
-
<RadioGroup
|
|
161
|
-
id="radioGroup"
|
|
162
|
-
labelText="Test Label"
|
|
163
|
-
name="getValue"
|
|
164
|
-
defaultValue="4"
|
|
165
|
-
onChange={onChange}
|
|
166
|
-
>
|
|
167
|
-
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
168
|
-
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
169
|
-
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
170
|
-
</RadioGroup>
|
|
171
|
-
);
|
|
172
|
-
|
|
173
|
-
expect(newValue).toEqual("");
|
|
174
|
-
userEvent.click(screen.getByText("Radio 3"));
|
|
175
|
-
expect(newValue).toEqual("3");
|
|
176
|
-
userEvent.click(screen.getByText("Radio 2"));
|
|
177
|
-
expect(newValue).toEqual("2");
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
it("sets the 'disabled' attribute for all its Radio children", () => {
|
|
181
|
-
render(
|
|
182
|
-
<RadioGroup
|
|
183
|
-
id="radioGroup"
|
|
184
|
-
labelText="Test Label"
|
|
185
|
-
name="test7"
|
|
186
|
-
isDisabled
|
|
187
|
-
>
|
|
188
|
-
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
189
|
-
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
190
|
-
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
191
|
-
</RadioGroup>
|
|
192
|
-
);
|
|
193
|
-
const radios = screen.getAllByRole("radio");
|
|
194
|
-
|
|
195
|
-
expect(radios).toHaveLength(3);
|
|
196
|
-
expect(radios[0]).toHaveAttribute("disabled");
|
|
197
|
-
expect(radios[1]).toHaveAttribute("disabled");
|
|
198
|
-
expect(radios[2]).toHaveAttribute("disabled");
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
it("sets the 'required' attribute for all its Radio children", () => {
|
|
202
|
-
render(
|
|
203
|
-
<RadioGroup
|
|
204
|
-
id="radioGroup"
|
|
205
|
-
labelText="Test Label"
|
|
206
|
-
name="test8"
|
|
207
|
-
isRequired
|
|
208
|
-
>
|
|
209
|
-
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
210
|
-
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
211
|
-
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
212
|
-
</RadioGroup>
|
|
213
|
-
);
|
|
214
|
-
const radios = screen.getAllByRole("radio");
|
|
215
|
-
|
|
216
|
-
expect(radios).toHaveLength(3);
|
|
217
|
-
expect(radios[0]).toHaveAttribute("required");
|
|
218
|
-
expect(radios[0]).toHaveAttribute("aria-required");
|
|
219
|
-
expect(radios[1]).toHaveAttribute("required");
|
|
220
|
-
expect(radios[1]).toHaveAttribute("aria-required");
|
|
221
|
-
expect(radios[2]).toHaveAttribute("required");
|
|
222
|
-
expect(radios[2]).toHaveAttribute("aria-required");
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
it("sets the error state for all its Radio children", () => {
|
|
226
|
-
render(
|
|
227
|
-
<RadioGroup
|
|
228
|
-
id="radioGroup"
|
|
229
|
-
labelText="Test Label"
|
|
230
|
-
name="test9"
|
|
231
|
-
isInvalid
|
|
232
|
-
invalidText="There is an error :("
|
|
233
|
-
>
|
|
234
|
-
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
235
|
-
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
236
|
-
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
237
|
-
</RadioGroup>
|
|
238
|
-
);
|
|
239
|
-
const radios = screen.getAllByRole("radio");
|
|
240
|
-
|
|
241
|
-
expect(radios).toHaveLength(3);
|
|
242
|
-
expect(radios[0]).toHaveAttribute("aria-invalid");
|
|
243
|
-
expect(radios[1]).toHaveAttribute("aria-invalid");
|
|
244
|
-
expect(radios[2]).toHaveAttribute("aria-invalid");
|
|
245
|
-
expect(screen.getByText("There is an error :(")).toBeInTheDocument();
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
it("does not render the error text when 'showHelperInvalidText' is false", () => {
|
|
249
|
-
render(
|
|
250
|
-
<RadioGroup
|
|
251
|
-
id="radioGroup"
|
|
252
|
-
labelText="Test Label"
|
|
253
|
-
name="test10"
|
|
254
|
-
isInvalid
|
|
255
|
-
invalidText="There is an error :("
|
|
256
|
-
showHelperInvalidText={false}
|
|
257
|
-
>
|
|
258
|
-
<Radio id="radio2" value="2" labelText="Radio 2" />
|
|
259
|
-
<Radio id="radio3" value="3" labelText="Radio 3" />
|
|
260
|
-
<Radio id="radio4" value="4" labelText="Radio 4" />
|
|
261
|
-
</RadioGroup>
|
|
262
|
-
);
|
|
263
|
-
expect(screen.queryByText("There is an error :(")).not.toBeInTheDocument();
|
|
264
|
-
});
|
|
265
|
-
|
|
266
|
-
it("renders the UI snapshot correctly", () => {
|
|
267
|
-
const column = renderer
|
|
268
|
-
.create(
|
|
269
|
-
<RadioGroup labelText="column" name="column" id="column">
|
|
270
|
-
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
271
|
-
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
272
|
-
</RadioGroup>
|
|
273
|
-
)
|
|
274
|
-
.toJSON();
|
|
275
|
-
const row = renderer
|
|
276
|
-
.create(
|
|
277
|
-
<RadioGroup labelText="row" name="row" id="row" layout="row">
|
|
278
|
-
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
279
|
-
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
280
|
-
</RadioGroup>
|
|
281
|
-
)
|
|
282
|
-
.toJSON();
|
|
283
|
-
const noLabel = renderer
|
|
284
|
-
.create(
|
|
285
|
-
<RadioGroup
|
|
286
|
-
labelText="no label"
|
|
287
|
-
name="noLabel"
|
|
288
|
-
id="noLabel"
|
|
289
|
-
showLabel={false}
|
|
290
|
-
>
|
|
291
|
-
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
292
|
-
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
293
|
-
</RadioGroup>
|
|
294
|
-
)
|
|
295
|
-
.toJSON();
|
|
296
|
-
const helperText = renderer
|
|
297
|
-
.create(
|
|
298
|
-
<RadioGroup
|
|
299
|
-
labelText="helperText"
|
|
300
|
-
name="helperText"
|
|
301
|
-
id="helperText"
|
|
302
|
-
helperText="helper text"
|
|
303
|
-
>
|
|
304
|
-
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
305
|
-
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
306
|
-
</RadioGroup>
|
|
307
|
-
)
|
|
308
|
-
.toJSON();
|
|
309
|
-
const invalidText = renderer
|
|
310
|
-
.create(
|
|
311
|
-
<RadioGroup
|
|
312
|
-
labelText="invalidText"
|
|
313
|
-
name="invalidText"
|
|
314
|
-
id="invalidText"
|
|
315
|
-
invalidText="error text"
|
|
316
|
-
>
|
|
317
|
-
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
318
|
-
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
319
|
-
</RadioGroup>
|
|
320
|
-
)
|
|
321
|
-
.toJSON();
|
|
322
|
-
const isRequired = renderer
|
|
323
|
-
.create(
|
|
324
|
-
<RadioGroup
|
|
325
|
-
labelText="required"
|
|
326
|
-
name="required"
|
|
327
|
-
id="required"
|
|
328
|
-
isRequired
|
|
329
|
-
>
|
|
330
|
-
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
331
|
-
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
332
|
-
</RadioGroup>
|
|
333
|
-
)
|
|
334
|
-
.toJSON();
|
|
335
|
-
const noRequiredLabel = renderer
|
|
336
|
-
.create(
|
|
337
|
-
<RadioGroup
|
|
338
|
-
labelText="no optional or required label"
|
|
339
|
-
name="noRequiredLabel"
|
|
340
|
-
id="noRequiredLabel"
|
|
341
|
-
isRequired
|
|
342
|
-
showRequiredLabel={false}
|
|
343
|
-
>
|
|
344
|
-
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
345
|
-
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
346
|
-
</RadioGroup>
|
|
347
|
-
)
|
|
348
|
-
.toJSON();
|
|
349
|
-
const isInvalid = renderer
|
|
350
|
-
.create(
|
|
351
|
-
<RadioGroup labelText="invalid" name="invalid" id="invalid" isInvalid>
|
|
352
|
-
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
353
|
-
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
354
|
-
</RadioGroup>
|
|
355
|
-
)
|
|
356
|
-
.toJSON();
|
|
357
|
-
const isDisabled = renderer
|
|
358
|
-
.create(
|
|
359
|
-
<RadioGroup
|
|
360
|
-
labelText="disabled"
|
|
361
|
-
name="disabled"
|
|
362
|
-
id="disabled"
|
|
363
|
-
isDisabled
|
|
364
|
-
>
|
|
365
|
-
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
366
|
-
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
367
|
-
</RadioGroup>
|
|
368
|
-
)
|
|
369
|
-
.toJSON();
|
|
370
|
-
const withJSXRadioLabels = renderer
|
|
371
|
-
.create(
|
|
372
|
-
<RadioGroup
|
|
373
|
-
id="jsxLabels"
|
|
374
|
-
isFullWidth
|
|
375
|
-
labelText="RadioGroup example"
|
|
376
|
-
name="a11y-test"
|
|
377
|
-
>
|
|
378
|
-
<Radio
|
|
379
|
-
id="arts"
|
|
380
|
-
labelText={
|
|
381
|
-
<Flex>
|
|
382
|
-
<span>Arts</span>
|
|
383
|
-
<Spacer />
|
|
384
|
-
<span>4</span>
|
|
385
|
-
</Flex>
|
|
386
|
-
}
|
|
387
|
-
value="arts"
|
|
388
|
-
/>
|
|
389
|
-
<Radio
|
|
390
|
-
id="English"
|
|
391
|
-
labelText={
|
|
392
|
-
<Flex>
|
|
393
|
-
<span>English</span>
|
|
394
|
-
<Spacer />
|
|
395
|
-
<span>23</span>
|
|
396
|
-
</Flex>
|
|
397
|
-
}
|
|
398
|
-
value="English"
|
|
399
|
-
/>
|
|
400
|
-
</RadioGroup>
|
|
401
|
-
)
|
|
402
|
-
.toJSON();
|
|
403
|
-
const withChakraProps = renderer
|
|
404
|
-
.create(
|
|
405
|
-
<RadioGroup
|
|
406
|
-
labelText="chakra"
|
|
407
|
-
name="chakra"
|
|
408
|
-
id="chakra"
|
|
409
|
-
p="20px"
|
|
410
|
-
color="ui.error.primary"
|
|
411
|
-
>
|
|
412
|
-
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
413
|
-
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
414
|
-
</RadioGroup>
|
|
415
|
-
)
|
|
416
|
-
.toJSON();
|
|
417
|
-
const withOtherProps = renderer
|
|
418
|
-
.create(
|
|
419
|
-
<RadioGroup
|
|
420
|
-
labelText="props"
|
|
421
|
-
name="props"
|
|
422
|
-
id="props"
|
|
423
|
-
data-testid="props"
|
|
424
|
-
>
|
|
425
|
-
<Radio value="2" labelText="Radio 2" id="radio-2" />
|
|
426
|
-
<Radio value="3" labelText="Radio 3" id="radio-3" />
|
|
427
|
-
</RadioGroup>
|
|
428
|
-
)
|
|
429
|
-
.toJSON();
|
|
430
|
-
|
|
431
|
-
expect(column).toMatchSnapshot();
|
|
432
|
-
expect(row).toMatchSnapshot();
|
|
433
|
-
expect(noLabel).toMatchSnapshot();
|
|
434
|
-
expect(helperText).toMatchSnapshot();
|
|
435
|
-
expect(invalidText).toMatchSnapshot();
|
|
436
|
-
expect(noRequiredLabel).toMatchSnapshot();
|
|
437
|
-
expect(isRequired).toMatchSnapshot();
|
|
438
|
-
expect(isInvalid).toMatchSnapshot();
|
|
439
|
-
expect(isDisabled).toMatchSnapshot();
|
|
440
|
-
expect(withJSXRadioLabels).toMatchSnapshot();
|
|
441
|
-
expect(withChakraProps).toMatchSnapshot();
|
|
442
|
-
expect(withOtherProps).toMatchSnapshot();
|
|
443
|
-
});
|
|
444
|
-
|
|
445
|
-
it("should throw warning when a non-Radio component is used as a child", () => {
|
|
446
|
-
const warn = jest.spyOn(console, "warn");
|
|
447
|
-
render(
|
|
448
|
-
<RadioGroup labelText="wrong child!" name="wrong" id="wrong-child">
|
|
449
|
-
<p>This is wrong!</p>
|
|
450
|
-
</RadioGroup>
|
|
451
|
-
);
|
|
452
|
-
expect(warn).toHaveBeenCalledWith(
|
|
453
|
-
"NYPL Reservoir RadioGroup: Only `Radio` components are allowed inside " +
|
|
454
|
-
"the `RadioGroup` component."
|
|
455
|
-
);
|
|
456
|
-
});
|
|
457
|
-
|
|
458
|
-
it("logs a warning when there is no `id` passed", () => {
|
|
459
|
-
const warn = jest.spyOn(console, "warn");
|
|
460
|
-
render(
|
|
461
|
-
// @ts-ignore: Typescript complains when a required prop is not passed, but
|
|
462
|
-
// here we don't want to pass the required prop to make sure the warning appears.
|
|
463
|
-
<RadioGroup labelText="RadioGroup example" name="a11y-test">
|
|
464
|
-
<Radio id="radio1" value="1" labelText="Radio 1" />
|
|
465
|
-
</RadioGroup>
|
|
466
|
-
);
|
|
467
|
-
expect(warn).toHaveBeenCalledWith(
|
|
468
|
-
"NYPL Reservoir RadioGroup: This component's required `id` prop was not passed."
|
|
469
|
-
);
|
|
470
|
-
});
|
|
471
|
-
});
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
chakra,
|
|
3
|
-
RadioGroup as ChakraRadioGroup,
|
|
4
|
-
Stack,
|
|
5
|
-
useMultiStyleConfig,
|
|
6
|
-
} from "@chakra-ui/react";
|
|
7
|
-
import * as React from "react";
|
|
8
|
-
|
|
9
|
-
import Fieldset from "../Fieldset/Fieldset";
|
|
10
|
-
import HelperErrorText, {
|
|
11
|
-
HelperErrorTextType,
|
|
12
|
-
} from "../HelperErrorText/HelperErrorText";
|
|
13
|
-
import { spacing } from "../../theme/foundations/spacing";
|
|
14
|
-
import Radio from "../Radio/Radio";
|
|
15
|
-
import { LayoutTypes } from "../../helpers/types";
|
|
16
|
-
|
|
17
|
-
export interface RadioGroupProps {
|
|
18
|
-
/** Additional class name. */
|
|
19
|
-
className?: string;
|
|
20
|
-
/** Populates the initial value of the input */
|
|
21
|
-
defaultValue?: string;
|
|
22
|
-
/** Optional string to populate the HelperErrorText for standard state */
|
|
23
|
-
helperText?: HelperErrorTextType;
|
|
24
|
-
/** ID that other components can cross reference for accessibility purposes */
|
|
25
|
-
id: string;
|
|
26
|
-
/** Optional string to populate the HelperErrorText for error state */
|
|
27
|
-
invalidText?: HelperErrorTextType;
|
|
28
|
-
/** Adds the 'disabled' prop to the input when true. */
|
|
29
|
-
isDisabled?: boolean;
|
|
30
|
-
/** Set's the `Radio`s' wrapper to be full width. */
|
|
31
|
-
isFullWidth?: boolean;
|
|
32
|
-
/** Adds the 'aria-invalid' attribute to the input and
|
|
33
|
-
* sets the error state when true. */
|
|
34
|
-
isInvalid?: boolean;
|
|
35
|
-
/** Adds the 'required' attribute to the input when true. */
|
|
36
|
-
isRequired?: boolean;
|
|
37
|
-
/** The radio group label displayed in a `legend` element if `showlabel` is
|
|
38
|
-
* true, or an "aria-label" if `showLabel` is false. */
|
|
39
|
-
labelText: string;
|
|
40
|
-
/** Renders the Radio buttons in a row or column (default). */
|
|
41
|
-
layout?: LayoutTypes;
|
|
42
|
-
/** The `name` prop indicates the form group for all the Radio children. */
|
|
43
|
-
name: string;
|
|
44
|
-
/** The action to perform on the `<input>`'s onChange function */
|
|
45
|
-
onChange?: (value: string) => void;
|
|
46
|
-
/** Offers the ability to hide the helper/invalid text. */
|
|
47
|
-
showHelperInvalidText?: boolean;
|
|
48
|
-
/** Offers the ability to show the group's legend onscreen or hide it. Refer
|
|
49
|
-
* to the `labelText` property for more information. */
|
|
50
|
-
showLabel?: boolean;
|
|
51
|
-
/** Whether or not to display the "(Required)" text in the label text.
|
|
52
|
-
* True by default. */
|
|
53
|
-
showRequiredLabel?: boolean;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const noop = () => {};
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* RadioGroup is a wrapper for DS `Radio` components that renders as a fieldset
|
|
60
|
-
* HTML element along with optional helper text. The `name` prop is essential
|
|
61
|
-
* for this form group element and is not needed for individual DS `Radio`
|
|
62
|
-
* components when `RadioGroup` is used.
|
|
63
|
-
*/
|
|
64
|
-
export const RadioGroup = chakra(
|
|
65
|
-
React.forwardRef<HTMLInputElement, React.PropsWithChildren<RadioGroupProps>>(
|
|
66
|
-
(props, ref?) => {
|
|
67
|
-
const {
|
|
68
|
-
children,
|
|
69
|
-
className = "",
|
|
70
|
-
defaultValue,
|
|
71
|
-
helperText,
|
|
72
|
-
id,
|
|
73
|
-
invalidText,
|
|
74
|
-
isDisabled = false,
|
|
75
|
-
isFullWidth = false,
|
|
76
|
-
isInvalid = false,
|
|
77
|
-
isRequired = false,
|
|
78
|
-
labelText,
|
|
79
|
-
layout = "column",
|
|
80
|
-
name,
|
|
81
|
-
onChange,
|
|
82
|
-
showHelperInvalidText = true,
|
|
83
|
-
showLabel = true,
|
|
84
|
-
showRequiredLabel = true,
|
|
85
|
-
...rest
|
|
86
|
-
} = props;
|
|
87
|
-
const [value, setValue] = React.useState(defaultValue);
|
|
88
|
-
const footnote: HelperErrorTextType = isInvalid
|
|
89
|
-
? invalidText
|
|
90
|
-
: helperText;
|
|
91
|
-
const spacingProp = layout === "column" ? spacing.s : spacing.l;
|
|
92
|
-
const newChildren: JSX.Element[] = [];
|
|
93
|
-
// Get the Chakra-based styles for the custom elements in this component.
|
|
94
|
-
const styles = useMultiStyleConfig("RadioGroup", { isFullWidth });
|
|
95
|
-
// Props for the `ChakraRadioGroup` component.
|
|
96
|
-
const radioGroupProps = {
|
|
97
|
-
"aria-label": !showLabel ? labelText : undefined,
|
|
98
|
-
name,
|
|
99
|
-
onChange: (selected: string) => {
|
|
100
|
-
setValue(selected);
|
|
101
|
-
onChange && onChange(selected);
|
|
102
|
-
},
|
|
103
|
-
ref,
|
|
104
|
-
value,
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
if (!id) {
|
|
108
|
-
console.warn(
|
|
109
|
-
"NYPL Reservoir RadioGroup: This component's required `id` prop was not passed."
|
|
110
|
-
);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// Go through the Radio children and update them as needed.
|
|
114
|
-
React.Children.map(
|
|
115
|
-
children as JSX.Element,
|
|
116
|
-
(child: React.ReactElement, key) => {
|
|
117
|
-
if (child?.type !== Radio) {
|
|
118
|
-
// Special case for Storybook MDX documentation.
|
|
119
|
-
if (child.props?.mdxType && child.props?.mdxType === "Radio") {
|
|
120
|
-
noop();
|
|
121
|
-
} else {
|
|
122
|
-
console.warn(
|
|
123
|
-
"NYPL Reservoir RadioGroup: Only `Radio` components are allowed " +
|
|
124
|
-
"inside the `RadioGroup` component."
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
if (child !== undefined && child !== null) {
|
|
130
|
-
const newProps = {
|
|
131
|
-
key,
|
|
132
|
-
isDisabled,
|
|
133
|
-
isInvalid,
|
|
134
|
-
isRequired,
|
|
135
|
-
};
|
|
136
|
-
newChildren.push(React.cloneElement(child, newProps));
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
);
|
|
140
|
-
|
|
141
|
-
return (
|
|
142
|
-
<Fieldset
|
|
143
|
-
className={className}
|
|
144
|
-
id={`radio-group-${id}`}
|
|
145
|
-
isLegendHidden={!showLabel}
|
|
146
|
-
isRequired={isRequired}
|
|
147
|
-
legendText={labelText}
|
|
148
|
-
showRequiredLabel={showRequiredLabel}
|
|
149
|
-
{...rest}
|
|
150
|
-
__css={styles}
|
|
151
|
-
>
|
|
152
|
-
<ChakraRadioGroup {...radioGroupProps}>
|
|
153
|
-
<Stack direction={[layout]} spacing={spacingProp}>
|
|
154
|
-
{newChildren}
|
|
155
|
-
</Stack>
|
|
156
|
-
</ChakraRadioGroup>
|
|
157
|
-
{footnote && showHelperInvalidText && (
|
|
158
|
-
<HelperErrorText
|
|
159
|
-
id={`${id}-helperErrorText`}
|
|
160
|
-
isInvalid={isInvalid}
|
|
161
|
-
text={footnote}
|
|
162
|
-
__css={styles.helperErrorText}
|
|
163
|
-
/>
|
|
164
|
-
)}
|
|
165
|
-
</Fieldset>
|
|
166
|
-
);
|
|
167
|
-
}
|
|
168
|
-
)
|
|
169
|
-
);
|
|
170
|
-
|
|
171
|
-
export default RadioGroup;
|