@nypl/design-system-react-components 0.23.4 → 0.25.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 +98 -1
- package/README.md +46 -11
- package/dist/components/Accordion/Accordion.d.ts +14 -14
- package/dist/components/Autosuggest/Autosuggest.stories.d.ts +1 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +11 -14
- package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +6 -0
- package/dist/components/Button/Button.d.ts +6 -13
- package/dist/components/Button/ButtonTypes.d.ts +5 -3
- package/dist/components/Card/Card.d.ts +59 -10
- package/dist/components/Card/CardTypes.d.ts +19 -0
- package/dist/components/CardEdition/CardEdition.d.ts +21 -0
- package/dist/components/{StyleGuide/Colors.stories.d.ts → CardEdition/CardEdition.stories.d.ts} +5 -2
- package/dist/components/Checkbox/Checkbox.d.ts +21 -16
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +43 -0
- package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +4 -0
- package/dist/components/DatePicker/DatePicker.d.ts +79 -0
- package/dist/components/DatePicker/DatePickerTypes.d.ts +5 -0
- package/dist/components/Form/Form.d.ts +16 -8
- package/dist/components/Form/FormTypes.d.ts +2 -0
- package/dist/components/Grid/GridTypes.d.ts +9 -0
- package/dist/components/Grid/SimpleGrid.d.ts +14 -0
- package/dist/components/Heading/Heading.d.ts +9 -11
- package/dist/components/Heading/{HeadingDisplaySizes.d.ts → HeadingTypes.d.ts} +8 -0
- package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +2 -1
- package/dist/components/Hero/Hero.d.ts +19 -14
- package/dist/components/Hero/HeroTypes.d.ts +10 -5
- package/dist/components/Icons/Icon.d.ts +13 -16
- package/dist/components/Icons/IconSvgs.d.ts +4 -0
- package/dist/components/Icons/IconTypes.d.ts +78 -60
- package/dist/components/Image/Image.stories.d.ts +2 -1
- package/dist/components/Label/Label.d.ts +10 -26
- package/dist/components/Link/Link.d.ts +8 -12
- package/dist/components/List/List.stories.d.ts +1 -0
- package/dist/components/Radio/Radio.d.ts +30 -24
- package/dist/components/RadioGroup/RadioGroup.d.ts +40 -0
- package/dist/components/RadioGroup/RadioGroupLayoutTypes.d.ts +4 -0
- package/dist/components/SearchBar/SearchBar.d.ts +45 -27
- package/dist/components/Select/Select.d.ts +34 -35
- package/dist/components/Select/SelectTypes.d.ts +4 -0
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +1 -1
- package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +2 -2
- package/dist/components/StatusBadge/StatusBadge.d.ts +8 -6
- package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +5 -0
- package/dist/components/Tabs/Tabs.d.ts +25 -0
- package/dist/components/Template/Template.d.ts +91 -0
- package/dist/components/Text/Text.d.ts +16 -0
- package/dist/components/Text/TextTypes.d.ts +6 -0
- package/dist/components/TextInput/TextInput.d.ts +37 -30
- package/dist/components/TextInput/TextInputTypes.d.ts +5 -0
- package/dist/design-system-react-components.cjs.development.js +4102 -917
- 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 +4023 -920
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/index.d.ts +23 -5
- package/dist/resources.scss +133 -24
- package/dist/styles.css +1 -1
- package/dist/theme/components/accordion.d.ts +25 -0
- package/dist/theme/components/breadcrumb.d.ts +90 -0
- package/dist/theme/components/button.d.ts +109 -0
- package/dist/theme/components/checkbox.d.ts +91 -0
- package/dist/theme/components/customCheckboxGroup.d.ts +18 -0
- package/dist/theme/components/customRadioGroup.d.ts +18 -0
- package/dist/theme/components/global.d.ts +55 -0
- package/dist/theme/components/globalMixins.d.ts +15 -0
- package/dist/theme/components/heading.d.ts +110 -0
- package/dist/theme/components/hero.d.ts +492 -0
- package/dist/theme/components/icon.d.ts +13 -0
- package/dist/theme/components/label.d.ts +16 -0
- package/dist/theme/components/link.d.ts +45 -0
- package/dist/theme/components/radio.d.ts +95 -0
- package/dist/theme/components/searchBar.d.ts +20 -0
- package/dist/theme/components/select.d.ts +58 -0
- package/dist/theme/components/statusBadge.d.ts +25 -0
- package/dist/theme/components/tabs.d.ts +85 -0
- package/dist/theme/components/template.d.ts +105 -0
- package/dist/theme/components/text.d.ts +20 -0
- package/dist/theme/components/textInput.d.ts +105 -0
- package/dist/theme/foundations/breakpoints.d.ts +23 -0
- package/dist/theme/foundations/colors.d.ts +3 -0
- package/dist/theme/foundations/global.d.ts +23 -0
- package/dist/theme/foundations/shadows.d.ts +4 -0
- package/dist/theme/foundations/spacing.d.ts +77 -0
- package/dist/theme/foundations/typography.d.ts +8 -0
- package/dist/theme/index.d.ts +20 -0
- package/dist/theme/provider.d.ts +5 -0
- package/dist/theme/types.d.ts +1 -0
- package/dist/utils/utils.d.ts +6 -0
- package/package.json +9 -2
- package/src/components/Accordion/Accordion.stories.mdx +233 -33
- package/src/components/Accordion/Accordion.test.tsx +135 -19
- package/src/components/Accordion/Accordion.tsx +81 -56
- package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
- package/src/components/Autosuggest/Autosuggest.stories.tsx +1 -1
- package/src/components/Autosuggest/_Autosuggest.scss +2 -2
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +57 -56
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +31 -25
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +71 -73
- package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +6 -0
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +100 -0
- package/src/components/Button/Button.stories.mdx +125 -138
- package/src/components/Button/Button.test.tsx +65 -11
- package/src/components/Button/Button.tsx +72 -68
- package/src/components/Button/ButtonTypes.tsx +4 -2
- package/src/components/Button/_Button.scss +7 -92
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +58 -3
- package/src/components/Card/Card.stories.mdx +694 -0
- package/src/components/Card/Card.test.tsx +97 -102
- package/src/components/Card/Card.tsx +182 -31
- package/src/components/Card/CardTypes.tsx +21 -0
- package/src/components/Card/_Card.scss +234 -49
- package/src/components/{Card/Card.stories.tsx → CardEdition/CardEdition.stories.tsx} +32 -22
- package/src/components/CardEdition/CardEdition.test.tsx +395 -0
- package/src/components/CardEdition/CardEdition.tsx +60 -0
- package/src/components/CardEdition/_CardEdition.scss +138 -0
- package/src/components/Chakra/Box.stories.mdx +57 -0
- package/src/components/Chakra/Center.stories.mdx +99 -0
- package/src/components/Chakra/Grid.stories.mdx +79 -0
- package/src/components/Chakra/Stack.stories.mdx +93 -0
- package/src/components/Checkbox/Checkbox.stories.mdx +57 -35
- package/src/components/Checkbox/Checkbox.test.tsx +117 -147
- package/src/components/Checkbox/Checkbox.tsx +76 -50
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +325 -0
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +249 -0
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +345 -0
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +148 -0
- package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +4 -0
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1360 -0
- package/src/components/DatePicker/DatePicker.stories.mdx +284 -0
- package/src/components/DatePicker/DatePicker.test.tsx +657 -0
- package/src/components/DatePicker/DatePicker.tsx +396 -0
- package/src/components/DatePicker/DatePickerTypes.tsx +5 -0
- package/src/components/DatePicker/_DatePicker.scss +76 -0
- package/src/components/Form/Form.stories.mdx +130 -27
- package/src/components/Form/Form.test.tsx +78 -36
- package/src/components/Form/Form.tsx +53 -19
- package/src/components/Form/FormTypes.tsx +3 -0
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +38 -0
- package/src/components/Grid/GridTypes.tsx +9 -0
- package/src/components/Grid/SimpleGrid.stories.mdx +275 -0
- package/src/components/Grid/SimpleGrid.test.tsx +66 -0
- package/src/components/Grid/SimpleGrid.tsx +37 -0
- package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +8 -0
- package/src/components/Heading/Heading.stories.mdx +63 -33
- package/src/components/Heading/Heading.test.tsx +24 -16
- package/src/components/Heading/Heading.tsx +54 -38
- package/src/components/Heading/{HeadingDisplaySizes.tsx → HeadingTypes.tsx} +9 -0
- package/src/components/HelperErrorText/HelperErrorText.stories.tsx +2 -1
- package/src/components/HelperErrorText/_HelperErrorText.scss +1 -1
- package/src/components/Hero/Hero.stories.mdx +195 -85
- package/src/components/Hero/Hero.test.tsx +544 -113
- package/src/components/Hero/Hero.tsx +80 -93
- package/src/components/Hero/HeroTypes.tsx +17 -5
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +307 -0
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +6 -1
- package/src/components/HorizontalRule/_HorizontalRule.scss +1 -1
- package/src/components/Icons/Icon.stories.mdx +89 -74
- package/src/components/Icons/Icon.test.tsx +30 -22
- package/src/components/Icons/Icon.tsx +63 -61
- package/src/components/Icons/IconSvgs.tsx +8 -0
- package/src/components/Icons/IconTypes.tsx +80 -60
- package/src/components/Image/Image.stories.tsx +2 -1
- package/src/components/Input/_Input.scss +2 -2
- package/src/components/Label/Label.stories.mdx +77 -0
- package/src/components/Label/Label.test.tsx +43 -12
- package/src/components/Label/Label.tsx +28 -45
- package/src/components/Label/__snapshots__/Label.test.tsx.snap +41 -0
- package/src/components/Link/Link.stories.mdx +47 -41
- package/src/components/Link/Link.test.tsx +33 -44
- package/src/components/Link/Link.tsx +114 -100
- package/src/components/List/List.stories.mdx +7 -3
- package/src/components/List/List.stories.tsx +14 -9
- package/src/components/List/List.test.tsx +12 -8
- package/src/components/List/List.tsx +9 -7
- package/src/components/List/_List.scss +3 -3
- package/src/components/Modal/Modal.stories.mdx +7 -3
- package/src/components/Modal/_Modal.scss +1 -1
- package/src/components/Notification/Notification.stories.mdx +99 -65
- package/src/components/Notification/Notification.test.tsx +3 -16
- package/src/components/Notification/Notification.tsx +12 -12
- package/src/components/Notification/_Notification.scss +5 -4
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +1 -1
- package/src/components/Pagination/Pagination.stories.mdx +7 -1
- package/src/components/Pagination/Pagination.test.tsx +16 -10
- package/src/components/Radio/Radio.stories.mdx +57 -46
- package/src/components/Radio/Radio.test.tsx +92 -138
- package/src/components/Radio/Radio.tsx +70 -69
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +250 -0
- package/src/components/RadioGroup/RadioGroup.stories.mdx +247 -0
- package/src/components/RadioGroup/RadioGroup.test.tsx +327 -0
- package/src/components/RadioGroup/RadioGroup.tsx +154 -0
- package/src/components/RadioGroup/RadioGroupLayoutTypes.tsx +4 -0
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1101 -0
- package/src/components/SearchBar/SearchBar.Test.tsx +151 -16
- package/src/components/SearchBar/SearchBar.stories.mdx +196 -224
- package/src/components/SearchBar/SearchBar.tsx +151 -46
- package/src/components/Select/Select.stories.mdx +193 -168
- package/src/components/Select/Select.test.tsx +129 -324
- package/src/components/Select/Select.tsx +120 -160
- package/src/components/Select/SelectTypes.tsx +4 -0
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +18 -29
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +7 -7
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +4 -2
- package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +2 -2
- package/src/components/SkeletonLoader/_SkeletonLoader.scss +3 -3
- package/src/components/StatusBadge/StatusBadge.stories.mdx +91 -0
- package/src/components/StatusBadge/StatusBadge.test.tsx +35 -7
- package/src/components/StatusBadge/StatusBadge.tsx +24 -25
- package/src/components/StatusBadge/StatusBadgeTypes.tsx +5 -0
- package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +28 -0
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +112 -90
- package/src/components/StyleGuide/Buttons.stories.mdx +98 -100
- package/src/components/StyleGuide/Colors.stories.mdx +336 -0
- package/src/components/StyleGuide/Forms.stories.mdx +85 -0
- package/src/components/StyleGuide/Iconography.stories.mdx +86 -93
- package/src/components/StyleGuide/Spacing.stories.mdx +0 -1
- package/src/components/StyleGuide/Typography.stories.mdx +164 -166
- package/src/components/StyleGuide/UIDocCard.tsx +4 -4
- package/src/components/Tabs/Tabs.stories.mdx +221 -0
- package/src/components/Tabs/Tabs.test.tsx +264 -0
- package/src/components/Tabs/Tabs.tsx +220 -0
- package/src/components/Template/Template.stories.mdx +574 -0
- package/src/components/Template/Template.test.tsx +124 -0
- package/src/components/Template/Template.tsx +226 -0
- package/src/components/Text/Text.stories.mdx +70 -0
- package/src/components/Text/Text.test.tsx +63 -0
- package/src/components/Text/Text.tsx +55 -0
- package/src/components/Text/TextTypes.tsx +6 -0
- package/src/components/Text/__snapshots__/Text.test.tsx.snap +33 -0
- package/src/components/TextInput/TextInput.stories.mdx +90 -90
- package/src/components/TextInput/TextInput.test.tsx +103 -83
- package/src/components/TextInput/TextInput.tsx +108 -91
- package/src/components/TextInput/TextInputTypes.tsx +6 -0
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +2 -1
- package/src/components/VideoPlayer/VideoPlayer.tsx +4 -2
- package/src/components/VideoPlayer/_VideoPlayer.scss +1 -1
- package/src/docs/Chakra.stories.mdx +341 -0
- package/src/docs/Intro.stories.mdx +31 -24
- package/src/index.ts +70 -5
- package/src/styles/01-colors/_colors-brand.scss +6 -4
- package/src/styles/01-colors/_colors-utility.scss +14 -15
- package/src/styles/03-space/_space-inline.scss +47 -7
- package/src/styles/03-space/_space-inset.scss +33 -5
- package/src/styles/03-space/_space-stack.scss +48 -8
- package/src/styles/base/_02-breakpoints.scss +5 -4
- package/src/styles/base/_04-base.scss +2 -1
- package/src/styles/base/_place-holder.scss +1 -1
- package/src/styles/base/_typography.scss +1 -29
- package/src/styles.scss +22 -25
- package/src/theme/components/accordion.ts +30 -0
- package/src/theme/components/breadcrumb.ts +77 -0
- package/src/theme/components/button.ts +125 -0
- package/src/theme/components/checkbox.ts +107 -0
- package/src/theme/components/customCheckboxGroup.ts +12 -0
- package/src/theme/components/customRadioGroup.ts +12 -0
- package/src/theme/components/global.ts +71 -0
- package/src/theme/components/globalMixins.ts +16 -0
- package/src/theme/components/heading.ts +72 -0
- package/src/theme/components/hero.ts +239 -0
- package/src/theme/components/icon.ts +79 -0
- package/src/theme/components/label.ts +17 -0
- package/src/theme/components/link.ts +47 -0
- package/src/theme/components/radio.ts +106 -0
- package/src/theme/components/searchBar.ts +21 -0
- package/src/theme/components/select.ts +50 -0
- package/src/theme/components/statusBadge.ts +27 -0
- package/src/theme/components/tabs.ts +79 -0
- package/src/theme/components/template.ts +114 -0
- package/src/theme/components/text.ts +31 -0
- package/src/theme/components/textInput.ts +61 -0
- package/src/theme/foundations/breakpoints.ts +24 -0
- package/src/theme/foundations/colors.ts +208 -0
- package/src/theme/foundations/global.ts +26 -0
- package/src/theme/foundations/shadows.ts +5 -0
- package/src/theme/foundations/spacing.ts +85 -0
- package/src/theme/foundations/typography.ts +35 -0
- package/src/theme/index.ts +88 -0
- package/src/theme/provider.tsx +9 -0
- package/src/theme/types.ts +1 -0
- package/src/utils/componentCategories.ts +56 -21
- package/src/utils/utils.ts +13 -0
- package/dist/components/Accordion/Accordion.stories.d.ts +0 -5
- package/dist/components/Card/Card.stories.d.ts +0 -27
- package/dist/components/Label/Label.stories.d.ts +0 -12
- package/dist/components/StatusBadge/StatusBadge.stories.d.ts +0 -8
- package/dist/components/Template/Template.stories.d.ts +0 -29
- package/src/components/Accordion/Accordion.stories.tsx +0 -65
- package/src/components/Accordion/_Accordion.scss +0 -81
- package/src/components/Breadcrumbs/_Breadcrumbs.scss +0 -97
- package/src/components/Checkbox/_Checkbox.scss +0 -97
- package/src/components/Form/_Form.scss +0 -28
- package/src/components/Heading/_Heading.scss +0 -163
- package/src/components/Hero/_Hero.scss +0 -256
- package/src/components/Icons/_Icons.scss +0 -116
- package/src/components/Label/Label.stories.tsx +0 -30
- package/src/components/Label/_Label.scss +0 -22
- package/src/components/Link/_Link.scss +0 -73
- package/src/components/Radio/_Radio.scss +0 -84
- package/src/components/SearchBar/_SearchBar.scss +0 -16
- package/src/components/Select/_Select.scss +0 -82
- package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -33
- package/src/components/StatusBadge/_StatusBadge.scss +0 -23
- package/src/components/StyleGuide/Colors.stories.tsx +0 -288
- package/src/components/Template/Template.stories.tsx +0 -85
- package/src/components/Template/_Template.scss +0 -63
- package/src/components/TextInput/_TextInput.scss +0 -59
|
@@ -9,9 +9,10 @@ import { withDesign } from "storybook-addon-designs";
|
|
|
9
9
|
import { withQuery } from "@storybook/addon-queryparams";
|
|
10
10
|
import Pagination from "./Pagination";
|
|
11
11
|
import * as stories from "./Pagination.stories.tsx";
|
|
12
|
+
import { getCategory } from "../../utils/componentCategories";
|
|
12
13
|
|
|
13
14
|
<Meta
|
|
14
|
-
title="Pagination"
|
|
15
|
+
title={getCategory("Pagination")}
|
|
15
16
|
component={Pagination}
|
|
16
17
|
decorators={[withDesign, withQuery]}
|
|
17
18
|
argTypes={{
|
|
@@ -31,6 +32,11 @@ import * as stories from "./Pagination.stories.tsx";
|
|
|
31
32
|
|
|
32
33
|
# Pagination
|
|
33
34
|
|
|
35
|
+
| Component Version | DS Version |
|
|
36
|
+
| ----------------- | ---------- |
|
|
37
|
+
| Added | `0.0.10` |
|
|
38
|
+
| Latest | `0.22.2` |
|
|
39
|
+
|
|
34
40
|
<Description of={Pagination} />
|
|
35
41
|
|
|
36
42
|
The `Pagination` component helps navigate between pages of a multi-page
|
|
@@ -19,12 +19,12 @@ describe("Pagination with getPageHref", () => {
|
|
|
19
19
|
const getPageHref = (page: number) => `page=${page}`;
|
|
20
20
|
|
|
21
21
|
it("Renders a nav element with items and links", () => {
|
|
22
|
-
render(
|
|
22
|
+
const { container } = render(
|
|
23
23
|
<Pagination pageCount={20} currentPage={6} getPageHref={getPageHref} />
|
|
24
24
|
);
|
|
25
25
|
|
|
26
26
|
expect(screen.getByRole("navigation")).toBeInTheDocument();
|
|
27
|
-
expect(
|
|
27
|
+
expect(container.querySelector(".pagination__list")).toBeInTheDocument();
|
|
28
28
|
// Previous/Next buttons + truncated item list = 11 total items
|
|
29
29
|
expect(screen.getAllByRole("listitem")).toHaveLength(11);
|
|
30
30
|
// Each element links to anotherpage.
|
|
@@ -53,7 +53,8 @@ describe("Pagination with getPageHref", () => {
|
|
|
53
53
|
);
|
|
54
54
|
const links = screen.getAllByRole("button");
|
|
55
55
|
expect(links[0]).toHaveAttribute("aria-disabled");
|
|
56
|
-
|
|
56
|
+
const linkClass = links[0].getAttribute("class");
|
|
57
|
+
expect(linkClass).toContain("pagination__link disabled");
|
|
57
58
|
});
|
|
58
59
|
|
|
59
60
|
it("Next link is disabled when on the last page item", () => {
|
|
@@ -62,7 +63,8 @@ describe("Pagination with getPageHref", () => {
|
|
|
62
63
|
);
|
|
63
64
|
const links = screen.getAllByRole("button");
|
|
64
65
|
expect(links[9]).toHaveAttribute("aria-disabled");
|
|
65
|
-
|
|
66
|
+
const linkClass = links[9].getAttribute("class");
|
|
67
|
+
expect(linkClass).toContain("pagination__link disabled");
|
|
66
68
|
});
|
|
67
69
|
|
|
68
70
|
it("Current page item has active class", () => {
|
|
@@ -70,7 +72,8 @@ describe("Pagination with getPageHref", () => {
|
|
|
70
72
|
<Pagination pageCount={11} currentPage={5} getPageHref={getPageHref} />
|
|
71
73
|
);
|
|
72
74
|
const links = screen.getAllByRole("button");
|
|
73
|
-
|
|
75
|
+
const linkClass = links[5].getAttribute("class");
|
|
76
|
+
expect(linkClass).toContain("pagination__link selected");
|
|
74
77
|
});
|
|
75
78
|
|
|
76
79
|
it("When pagination has 1 element, pagination is not shown", () => {
|
|
@@ -92,7 +95,7 @@ describe("Pagination with changeCallback", () => {
|
|
|
92
95
|
const changeCallback = jest.fn();
|
|
93
96
|
|
|
94
97
|
it("Renders a nav element with an unordered list of items", () => {
|
|
95
|
-
render(
|
|
98
|
+
const { container } = render(
|
|
96
99
|
<Pagination
|
|
97
100
|
pageCount={11}
|
|
98
101
|
currentPage={6}
|
|
@@ -100,7 +103,7 @@ describe("Pagination with changeCallback", () => {
|
|
|
100
103
|
/>
|
|
101
104
|
);
|
|
102
105
|
expect(screen.getByRole("navigation")).toBeInTheDocument();
|
|
103
|
-
expect(
|
|
106
|
+
expect(container.querySelector(".pagination__list")).toBeInTheDocument();
|
|
104
107
|
expect(screen.getAllByRole("listitem")).toHaveLength(11);
|
|
105
108
|
});
|
|
106
109
|
|
|
@@ -114,7 +117,8 @@ describe("Pagination with changeCallback", () => {
|
|
|
114
117
|
);
|
|
115
118
|
const links = screen.getAllByRole("button");
|
|
116
119
|
expect(links[0]).toHaveAttribute("aria-disabled");
|
|
117
|
-
|
|
120
|
+
const linkClass = links[0].getAttribute("class");
|
|
121
|
+
expect(linkClass).toContain("pagination__link disabled");
|
|
118
122
|
});
|
|
119
123
|
|
|
120
124
|
it("Next link is disabled when on the last page item", () => {
|
|
@@ -127,7 +131,8 @@ describe("Pagination with changeCallback", () => {
|
|
|
127
131
|
);
|
|
128
132
|
const links = screen.getAllByRole("button");
|
|
129
133
|
expect(links[9]).toHaveAttribute("aria-disabled");
|
|
130
|
-
|
|
134
|
+
const linkClass = links[9].getAttribute("class");
|
|
135
|
+
expect(linkClass).toContain("pagination__link disabled");
|
|
131
136
|
});
|
|
132
137
|
|
|
133
138
|
it("Current page item has active class", () => {
|
|
@@ -139,7 +144,8 @@ describe("Pagination with changeCallback", () => {
|
|
|
139
144
|
/>
|
|
140
145
|
);
|
|
141
146
|
const links = screen.getAllByRole("button");
|
|
142
|
-
|
|
147
|
+
const linkClass = links[5].getAttribute("class");
|
|
148
|
+
expect(linkClass).toContain("pagination__link selected");
|
|
143
149
|
});
|
|
144
150
|
|
|
145
151
|
it("When page item is selected, runs the onPageChange callback", () => {
|
|
@@ -3,14 +3,14 @@ import {
|
|
|
3
3
|
Story,
|
|
4
4
|
Canvas,
|
|
5
5
|
ArgsTable,
|
|
6
|
-
Preview,
|
|
7
6
|
Description,
|
|
8
|
-
} from "@storybook/addon-docs
|
|
7
|
+
} from "@storybook/addon-docs";
|
|
9
8
|
import { withDesign } from "storybook-addon-designs";
|
|
10
|
-
import {
|
|
9
|
+
import { HStack } from "@chakra-ui/react";
|
|
11
10
|
|
|
11
|
+
import { getCategory } from "../../utils/componentCategories";
|
|
12
|
+
import DSProvider from "../../theme/provider";
|
|
12
13
|
import Radio from "./Radio";
|
|
13
|
-
import { onChangeDefault } from "./Radio";
|
|
14
14
|
|
|
15
15
|
<Meta
|
|
16
16
|
title={getCategory("Radio")}
|
|
@@ -25,19 +25,28 @@ import { onChangeDefault } from "./Radio";
|
|
|
25
25
|
jest: ["Radio.test.tsx"],
|
|
26
26
|
}}
|
|
27
27
|
argTypes={{
|
|
28
|
+
className: { table: { disable: true } },
|
|
29
|
+
id: { table: { disable: true } },
|
|
30
|
+
isChecked: { table: { disable: true } },
|
|
28
31
|
onChange: { table: { disable: true } },
|
|
29
|
-
checked: { table: { disable: true } },
|
|
30
32
|
}}
|
|
31
33
|
/>
|
|
32
34
|
|
|
33
35
|
# Radio
|
|
34
36
|
|
|
37
|
+
| Component Version | DS Version |
|
|
38
|
+
| ----------------- | ---------- |
|
|
39
|
+
| Added | `0.22.0` |
|
|
40
|
+
| Latest | `0.25.0` |
|
|
41
|
+
|
|
35
42
|
<Description of={Radio} />
|
|
36
43
|
|
|
37
|
-
This component renders a radio button form element.
|
|
38
|
-
|
|
44
|
+
This component renders a radio button form element. Note that all these examples
|
|
45
|
+
show the `Radio` button in isolation. We recommend to always use the `Radio`
|
|
46
|
+
component inside the Design System `RadioGroup` component. The `RadioGroup`
|
|
47
|
+
component will handle all the states and data management.
|
|
39
48
|
|
|
40
|
-
<
|
|
49
|
+
<Canvas withToolbar>
|
|
41
50
|
<Story
|
|
42
51
|
name="Radio"
|
|
43
52
|
args={{
|
|
@@ -45,77 +54,79 @@ cause an accessibility violation if none is present.
|
|
|
45
54
|
showLabel: true,
|
|
46
55
|
id: "test_id",
|
|
47
56
|
name: "test_name",
|
|
57
|
+
value: "1",
|
|
58
|
+
isDisabled: false,
|
|
59
|
+
isRequired: false,
|
|
60
|
+
isInvalid: false,
|
|
61
|
+
helperText: "This is the helper text!",
|
|
62
|
+
invalidText: "This is the error text :(",
|
|
48
63
|
}}
|
|
49
64
|
>
|
|
50
65
|
{(args) => <Radio {...args} />}
|
|
51
66
|
</Story>
|
|
52
|
-
</
|
|
67
|
+
</Canvas>
|
|
53
68
|
|
|
54
69
|
<ArgsTable story="Radio" />
|
|
55
70
|
|
|
56
71
|
## Checked
|
|
57
72
|
|
|
58
73
|
<Canvas>
|
|
59
|
-
<
|
|
60
|
-
checked
|
|
61
|
-
|
|
62
|
-
name="testChecked"
|
|
63
|
-
onChange={onChangeDefault}
|
|
64
|
-
showLabel={true}
|
|
65
|
-
></Radio>
|
|
74
|
+
<DSProvider>
|
|
75
|
+
<Radio labelText="I am checked" isChecked value="1" />
|
|
76
|
+
</DSProvider>
|
|
66
77
|
</Canvas>
|
|
67
78
|
|
|
68
79
|
## Focused
|
|
69
80
|
|
|
70
81
|
<Canvas>
|
|
71
|
-
<
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
showLabel={true}
|
|
75
|
-
></Radio>
|
|
82
|
+
<DSProvider>
|
|
83
|
+
<Radio labelText="Click or tab to the Radio to see its focus state" />
|
|
84
|
+
</DSProvider>
|
|
76
85
|
</Canvas>
|
|
77
86
|
|
|
78
87
|
## Errored
|
|
79
88
|
|
|
80
89
|
<Canvas>
|
|
81
|
-
<
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
90
|
+
<DSProvider>
|
|
91
|
+
<HStack>
|
|
92
|
+
<Radio isInvalid labelText="I am in an error state" />
|
|
93
|
+
<Radio isInvalid isChecked labelText="I am checked in an error state" />
|
|
94
|
+
</HStack>
|
|
95
|
+
</DSProvider>
|
|
87
96
|
</Canvas>
|
|
88
97
|
|
|
89
98
|
## Disabled
|
|
90
99
|
|
|
91
100
|
<Canvas>
|
|
92
|
-
<
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
101
|
+
<DSProvider>
|
|
102
|
+
<HStack>
|
|
103
|
+
<Radio isDisabled labelText="I am disabled" />
|
|
104
|
+
<Radio isDisabled isChecked labelText="I am checked and disabled" />
|
|
105
|
+
</HStack>
|
|
106
|
+
</DSProvider>
|
|
98
107
|
</Canvas>
|
|
99
108
|
|
|
100
109
|
## Helper Text
|
|
101
110
|
|
|
102
111
|
<Canvas>
|
|
103
|
-
<
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
112
|
+
<DSProvider>
|
|
113
|
+
<Radio
|
|
114
|
+
name="testHelperText"
|
|
115
|
+
labelText="I have helper text"
|
|
116
|
+
helperText="I am the helper text for this Radio"
|
|
117
|
+
/>
|
|
118
|
+
</DSProvider>
|
|
109
119
|
</Canvas>
|
|
110
120
|
|
|
111
121
|
## Error Text
|
|
112
122
|
|
|
113
123
|
<Canvas>
|
|
114
|
-
<
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
124
|
+
<DSProvider>
|
|
125
|
+
<Radio
|
|
126
|
+
name="testErrorText"
|
|
127
|
+
labelText="I have error text"
|
|
128
|
+
invalidText="I am the error text for this Radio"
|
|
129
|
+
isInvalid
|
|
130
|
+
/>
|
|
131
|
+
</DSProvider>
|
|
121
132
|
</Canvas>
|
|
@@ -1,203 +1,157 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import {
|
|
2
|
+
import { render, screen } from "@testing-library/react";
|
|
3
3
|
import { axe } from "jest-axe";
|
|
4
|
-
import
|
|
4
|
+
import renderer from "react-test-renderer";
|
|
5
5
|
|
|
6
6
|
import * as generateUUID from "../../helpers/generateUUID";
|
|
7
7
|
import Radio from "./Radio";
|
|
8
8
|
|
|
9
9
|
describe("Radio Accessibility", () => {
|
|
10
|
-
it("passes axe accessibility
|
|
11
|
-
const { container } = render(
|
|
12
|
-
<Radio
|
|
13
|
-
id="inputID"
|
|
14
|
-
attributes={{ onClick: jest.fn() }}
|
|
15
|
-
onChange={jest.fn()}
|
|
16
|
-
labelText="Test Label"
|
|
17
|
-
showLabel={false}
|
|
18
|
-
/>
|
|
19
|
-
);
|
|
10
|
+
it("passes axe accessibility", async () => {
|
|
11
|
+
const { container } = render(<Radio id="inputID" labelText="Test Label" />);
|
|
20
12
|
expect(await axe(container)).toHaveNoViolations();
|
|
21
13
|
});
|
|
22
14
|
});
|
|
23
15
|
|
|
24
16
|
describe("Radio Button", () => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
beforeEach(() => {
|
|
30
|
-
clickHander = jest.fn();
|
|
31
|
-
changeHandler = jest.fn();
|
|
32
|
-
generateUUIDSpy = jest.spyOn(generateUUID, "default");
|
|
33
|
-
render(
|
|
34
|
-
<Radio
|
|
35
|
-
id="inputID"
|
|
36
|
-
attributes={{ onClick: clickHander }}
|
|
37
|
-
onChange={changeHandler}
|
|
38
|
-
labelText="Test Label"
|
|
39
|
-
showLabel={false}
|
|
40
|
-
/>
|
|
41
|
-
);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it("Renders without crashing", () => {
|
|
17
|
+
it("renders with a radio input and label", () => {
|
|
18
|
+
render(<Radio id="inputID" labelText="Test Label" />);
|
|
19
|
+
expect(screen.getByLabelText("Test Label")).toBeInTheDocument();
|
|
45
20
|
expect(screen.getByRole("radio")).toBeInTheDocument();
|
|
46
21
|
});
|
|
47
22
|
|
|
48
|
-
it("
|
|
23
|
+
it("renders with appropriate 'aria-label' attribute and value when 'showLabel' prop is set to false", () => {
|
|
24
|
+
render(<Radio id="inputID" labelText="Test Label" showLabel={false} />);
|
|
49
25
|
expect(screen.getByLabelText("Test Label")).toHaveAttribute(
|
|
50
26
|
"aria-label",
|
|
51
27
|
"Test Label"
|
|
52
28
|
);
|
|
53
29
|
});
|
|
54
30
|
|
|
55
|
-
it("
|
|
56
|
-
expect(screen.getByRole("radio")).toHaveAttribute("id", "inputID");
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
it("Allows user to pass in additional attributes", () => {
|
|
60
|
-
expect(clickHander).toHaveBeenCalledTimes(0);
|
|
61
|
-
userEvent.click(screen.getByRole("radio"));
|
|
62
|
-
expect(clickHander).toHaveBeenCalledTimes(1);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
// TODO:
|
|
66
|
-
// // Click works but it should be onChange.
|
|
67
|
-
// it("Changing the value calls the onChange handler", () => {
|
|
68
|
-
// expect(changeHandler).toHaveBeenCalledTimes(0);
|
|
69
|
-
// console.log(screen.debug());
|
|
70
|
-
// fireEvent.change(screen.getByRole("radio"));
|
|
71
|
-
// expect(changeHandler).toHaveBeenCalledTimes(1);
|
|
72
|
-
// });
|
|
73
|
-
|
|
74
|
-
it("Renders with appropriate 'aria-label' attribute and value when 'showLabel' prop is set to false and 'helperText' has been passed", () => {
|
|
31
|
+
it("renders with appropriate 'aria-label' attribute and value when 'showLabel' prop is set to false and 'helperText' has been passed", () => {
|
|
75
32
|
render(
|
|
76
33
|
<Radio
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
labelText="Hello"
|
|
34
|
+
id="inputID"
|
|
35
|
+
labelText="Test Label"
|
|
80
36
|
showLabel={false}
|
|
81
|
-
helperText="
|
|
37
|
+
helperText="This is the helper text."
|
|
82
38
|
/>
|
|
83
39
|
);
|
|
84
40
|
expect(
|
|
85
|
-
screen.getByLabelText("
|
|
41
|
+
screen.getByLabelText("Test Label - This is the helper text.")
|
|
86
42
|
).toBeInTheDocument();
|
|
87
43
|
});
|
|
88
44
|
|
|
89
|
-
it("
|
|
90
|
-
render(
|
|
45
|
+
it("renders visible helper or error text", () => {
|
|
46
|
+
const { rerender } = render(
|
|
91
47
|
<Radio
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
48
|
+
id="inputID"
|
|
49
|
+
labelText="Test Label"
|
|
50
|
+
helperText="This is the helper text."
|
|
51
|
+
invalidText="This is the error text :("
|
|
52
|
+
/>
|
|
53
|
+
);
|
|
54
|
+
expect(screen.getByText("This is the helper text.")).toBeVisible();
|
|
55
|
+
expect(
|
|
56
|
+
screen.queryByText("This is the error text :(")
|
|
57
|
+
).not.toBeInTheDocument();
|
|
58
|
+
|
|
59
|
+
rerender(
|
|
60
|
+
<Radio
|
|
61
|
+
id="inputID"
|
|
62
|
+
labelText="Test Label"
|
|
63
|
+
isInvalid
|
|
64
|
+
helperText="This is the helper text."
|
|
65
|
+
invalidText="This is the error text :("
|
|
96
66
|
/>
|
|
97
67
|
);
|
|
98
|
-
expect(screen.getByText("
|
|
99
|
-
expect(
|
|
100
|
-
|
|
68
|
+
expect(screen.getByText("This is the error text :(")).toBeVisible();
|
|
69
|
+
expect(
|
|
70
|
+
screen.queryByText("This is the helper text.")
|
|
71
|
+
).not.toBeInTheDocument();
|
|
101
72
|
});
|
|
102
73
|
|
|
103
|
-
it("
|
|
74
|
+
it("sets the radio's ID", () => {
|
|
75
|
+
render(<Radio id="inputID" labelText="Test Label" />);
|
|
76
|
+
expect(screen.getByRole("radio")).toHaveAttribute("id", "inputID");
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it("calls the UUID generation function if no id prop value is passed", () => {
|
|
80
|
+
const generateUUIDSpy = jest.spyOn(generateUUID, "default");
|
|
81
|
+
expect(generateUUIDSpy).toHaveBeenCalledTimes(0);
|
|
82
|
+
render(<Radio labelText="Hello" />);
|
|
83
|
+
expect(generateUUIDSpy).toHaveBeenCalledTimes(1);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it("sets the 'checked' attribute", () => {
|
|
104
87
|
render(
|
|
105
88
|
<Radio
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
labelText="Hello"
|
|
89
|
+
id="inputID-attributes"
|
|
90
|
+
labelText="onChange test"
|
|
109
91
|
showLabel={true}
|
|
110
|
-
|
|
111
|
-
errorText="The error text."
|
|
112
|
-
errored={false}
|
|
92
|
+
isChecked
|
|
113
93
|
/>
|
|
114
94
|
);
|
|
115
|
-
expect(screen.
|
|
116
|
-
expect(screen.queryByText("The error text.")).not.toBeInTheDocument();
|
|
95
|
+
expect(screen.getByRole("radio")).toHaveAttribute("checked");
|
|
117
96
|
});
|
|
118
97
|
|
|
119
|
-
it("
|
|
98
|
+
it("sets the 'disabled' attribute", () => {
|
|
120
99
|
render(
|
|
121
100
|
<Radio
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
labelText="Hello"
|
|
101
|
+
id="inputID-attributes"
|
|
102
|
+
labelText="onChange test"
|
|
125
103
|
showLabel={true}
|
|
126
|
-
|
|
127
|
-
errorText="The visible error text."
|
|
128
|
-
errored={true}
|
|
104
|
+
isDisabled
|
|
129
105
|
/>
|
|
130
106
|
);
|
|
131
|
-
expect(screen.
|
|
132
|
-
expect(screen.getByText("The visible error text.")).toBeInTheDocument();
|
|
107
|
+
expect(screen.getByRole("radio")).toHaveAttribute("disabled");
|
|
133
108
|
});
|
|
134
109
|
|
|
135
|
-
it("
|
|
136
|
-
render(<Radio labelText="Hello" showLabel={true} />);
|
|
137
|
-
expect(generateUUIDSpy).toHaveBeenCalledTimes(1);
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
it("The 'checked' attribute can set properly", () => {
|
|
141
|
-
const onChange = jest.fn();
|
|
110
|
+
it("sets the 'required' attribute", () => {
|
|
142
111
|
render(
|
|
143
112
|
<Radio
|
|
144
113
|
id="inputID-attributes"
|
|
145
114
|
labelText="onChange test"
|
|
146
|
-
showLabel={
|
|
147
|
-
|
|
148
|
-
checked: true,
|
|
149
|
-
"aria-checked": true,
|
|
150
|
-
onChange,
|
|
151
|
-
}}
|
|
115
|
+
showLabel={true}
|
|
116
|
+
isRequired
|
|
152
117
|
/>
|
|
153
118
|
);
|
|
154
|
-
|
|
155
|
-
expect(screen.getByLabelText("onChange test")).toHaveAttribute("checked");
|
|
156
|
-
expect(screen.getByLabelText("onChange test")).toHaveAttribute(
|
|
157
|
-
"aria-checked"
|
|
158
|
-
);
|
|
119
|
+
expect(screen.getByRole("radio")).toHaveAttribute("required");
|
|
159
120
|
});
|
|
160
121
|
|
|
161
|
-
|
|
162
|
-
// it("Passes the ref to the input element", () => {
|
|
163
|
-
// const ref = React.createRef<HTMLInputElement>();
|
|
164
|
-
// const container = render(
|
|
165
|
-
// <Radio
|
|
166
|
-
// id="inputID-attributes"
|
|
167
|
-
// ref={ref}
|
|
168
|
-
// labelText="Hello"
|
|
169
|
-
// showLabel={false}
|
|
170
|
-
// />
|
|
171
|
-
// );
|
|
172
|
-
// expect(container.find("input").instance()).toEqual(ref.current);
|
|
173
|
-
// });
|
|
174
|
-
|
|
175
|
-
it("Renders HTML attributes passed through the `attributes` prop", () => {
|
|
176
|
-
const onChangeSpy = jest.fn();
|
|
177
|
-
const onBlurSpy = jest.fn();
|
|
122
|
+
it("sets the error state", () => {
|
|
178
123
|
render(
|
|
179
124
|
<Radio
|
|
180
125
|
id="inputID-attributes"
|
|
181
|
-
|
|
182
|
-
onChange: onChangeSpy,
|
|
183
|
-
onBlur: onBlurSpy,
|
|
184
|
-
tabIndex: 0,
|
|
185
|
-
}}
|
|
186
|
-
labelText="attributes test"
|
|
126
|
+
labelText="onChange test"
|
|
187
127
|
showLabel={true}
|
|
128
|
+
isInvalid
|
|
188
129
|
/>
|
|
189
130
|
);
|
|
190
|
-
expect(screen.
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
131
|
+
expect(screen.getByRole("radio")).toHaveAttribute("aria-invalid");
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
it("renders the UI snapshot correctly", () => {
|
|
135
|
+
const primary = renderer
|
|
136
|
+
.create(<Radio id="inputID" labelText="Test Label" />)
|
|
137
|
+
.toJSON();
|
|
138
|
+
const isChecked = renderer
|
|
139
|
+
.create(<Radio id="radio-checked" labelText="Test Label" isChecked />)
|
|
140
|
+
.toJSON();
|
|
141
|
+
const isRequired = renderer
|
|
142
|
+
.create(<Radio id="radio-required" labelText="Test Label" isRequired />)
|
|
143
|
+
.toJSON();
|
|
144
|
+
const isInvalid = renderer
|
|
145
|
+
.create(<Radio id="radio-invalid" labelText="Test Label" isInvalid />)
|
|
146
|
+
.toJSON();
|
|
147
|
+
const isDisabled = renderer
|
|
148
|
+
.create(<Radio id="radio-disabled" labelText="Test Label" isDisabled />)
|
|
149
|
+
.toJSON();
|
|
150
|
+
|
|
151
|
+
expect(primary).toMatchSnapshot();
|
|
152
|
+
expect(isChecked).toMatchSnapshot();
|
|
153
|
+
expect(isRequired).toMatchSnapshot();
|
|
154
|
+
expect(isInvalid).toMatchSnapshot();
|
|
155
|
+
expect(isDisabled).toMatchSnapshot();
|
|
202
156
|
});
|
|
203
157
|
});
|