@nypl/design-system-react-components 0.25.9 → 0.25.12
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 +96 -0
- package/README.md +4 -16
- package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +1 -0
- package/dist/components/DatePicker/DatePicker.d.ts +1 -1
- package/dist/components/Fieldset/Fieldset.d.ts +1 -3
- package/dist/components/Form/Form.d.ts +13 -12
- package/dist/components/Form/FormTypes.d.ts +2 -2
- package/dist/components/HorizontalRule/HorizontalRule.d.ts +1 -1
- package/dist/components/Icons/IconTypes.d.ts +9 -7
- package/dist/components/List/List.d.ts +1 -1
- package/dist/components/Logo/LogoSvgs.d.ts +23 -1
- package/dist/components/Logo/LogoTypes.d.ts +23 -1
- package/dist/components/Notification/Notification.d.ts +2 -0
- package/dist/components/Pagination/Pagination.d.ts +6 -2
- package/dist/components/RadioGroup/RadioGroup.d.ts +3 -3
- package/dist/components/SearchBar/SearchBar.d.ts +6 -6
- package/dist/components/Select/Select.d.ts +4 -0
- package/dist/components/Table/Table.d.ts +9 -3
- package/dist/components/Template/Template.d.ts +24 -5
- package/dist/design-system-react-components.cjs.development.js +2063 -548
- 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 +2056 -554
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/resources.scss +0 -2
- package/dist/styles.css +1 -1
- package/dist/theme/components/breadcrumb.d.ts +4 -1
- package/dist/theme/components/checkbox.d.ts +0 -2
- package/dist/theme/components/customTable.d.ts +12 -3
- package/dist/theme/components/fieldset.d.ts +2 -0
- package/dist/theme/components/global.d.ts +15 -14
- package/dist/theme/components/globalMixins.d.ts +8 -8
- package/dist/theme/components/list.d.ts +6 -0
- package/dist/theme/components/notification.d.ts +16 -4
- package/dist/theme/components/radio.d.ts +3 -2
- package/dist/theme/components/searchBar.d.ts +4 -0
- package/dist/theme/components/select.d.ts +2 -9
- package/dist/theme/components/slider.d.ts +8 -4
- package/dist/theme/components/structuredContent.d.ts +9 -9
- package/dist/theme/components/textInput.d.ts +10 -12
- package/dist/theme/components/toggle.d.ts +6 -2
- package/dist/theme/foundations/global.d.ts +31 -3
- package/dist/utils/utils.d.ts +10 -0
- package/package.json +40 -36
- package/src/components/Accordion/Accordion.stories.mdx +1 -1
- package/src/components/Accordion/Accordion.test.tsx +45 -1
- package/src/components/Accordion/Accordion.tsx +20 -8
- package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +243 -0
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +30 -2
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +25 -0
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +9 -3
- package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -0
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +104 -5
- package/src/components/Card/Card.stories.mdx +1 -1
- package/src/components/Card/Card.tsx +4 -1
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +1 -1
- package/src/components/Chakra/Flex.stories.mdx +113 -0
- package/src/components/Checkbox/Checkbox.stories.mdx +1 -1
- package/src/components/Checkbox/Checkbox.tsx +1 -0
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +6 -6
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +1 -1
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +18 -18
- package/src/components/DatePicker/DatePicker.stories.mdx +1 -1
- package/src/components/DatePicker/DatePicker.test.tsx +6 -6
- package/src/components/DatePicker/DatePicker.tsx +12 -10
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +28 -20
- package/src/components/Fieldset/Fieldset.stories.mdx +1 -1
- package/src/components/Fieldset/Fieldset.tsx +2 -4
- package/src/components/Form/Form.stories.mdx +34 -16
- package/src/components/Form/Form.test.tsx +92 -3
- package/src/components/Form/Form.tsx +25 -21
- package/src/components/Form/FormTypes.tsx +2 -2
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +0 -1
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +1 -1
- package/src/components/Hero/Hero.stories.mdx +1 -1
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +3 -2
- package/src/components/HorizontalRule/HorizontalRule.tsx +2 -2
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +4 -4
- package/src/components/Icons/Icon.stories.mdx +1 -1
- package/src/components/Icons/Icon.test.tsx +1 -1
- package/src/components/Icons/Icon.tsx +1 -1
- package/src/components/Icons/IconTypes.tsx +8 -6
- package/src/components/List/List.stories.mdx +24 -5
- package/src/components/List/List.test.tsx +1 -1
- package/src/components/List/List.tsx +2 -2
- package/src/components/List/__snapshots__/List.test.tsx.snap +3 -1
- package/src/components/Logo/Logo.stories.mdx +7 -5
- package/src/components/Logo/LogoSvgs.tsx +45 -1
- package/src/components/Logo/LogoTypes.tsx +22 -0
- package/src/components/Notification/Notification.stories.mdx +73 -1
- package/src/components/Notification/Notification.test.tsx +64 -5
- package/src/components/Notification/Notification.tsx +21 -11
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +103 -8
- package/src/components/Pagination/Pagination.stories.mdx +54 -12
- package/src/components/Pagination/Pagination.test.tsx +63 -5
- package/src/components/Pagination/Pagination.tsx +46 -24
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +3 -3
- package/src/components/Radio/Radio.stories.mdx +1 -1
- package/src/components/Radio/Radio.tsx +1 -0
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +5 -5
- package/src/components/RadioGroup/RadioGroup.stories.mdx +1 -1
- package/src/components/RadioGroup/RadioGroup.test.tsx +13 -11
- package/src/components/RadioGroup/RadioGroup.tsx +88 -89
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +18 -18
- package/src/components/SearchBar/SearchBar.Test.tsx +124 -28
- package/src/components/SearchBar/SearchBar.stories.mdx +9 -6
- package/src/components/SearchBar/SearchBar.tsx +24 -23
- package/src/components/Select/Select.stories.mdx +1 -1
- package/src/components/Select/Select.test.tsx +89 -0
- package/src/components/Select/Select.tsx +11 -2
- package/src/components/Select/__snapshots__/Select.test.tsx.snap +545 -0
- package/src/components/Slider/Slider.stories.mdx +1 -1
- package/src/components/Slider/Slider.tsx +4 -1
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +7 -0
- package/src/components/StructuredContent/StructuredContent.stories.mdx +1 -1
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +4 -4
- package/src/components/StyleGuide/Colors.stories.mdx +33 -18
- package/src/components/Table/Table.stories.mdx +118 -19
- package/src/components/Table/Table.test.tsx +80 -3
- package/src/components/Table/Table.tsx +26 -16
- package/src/components/Table/__snapshots__/Table.test.tsx.snap +1179 -0
- package/src/components/Tabs/Tabs.stories.mdx +1 -1
- package/src/components/Tabs/Tabs.test.tsx +21 -5
- package/src/components/Tabs/Tabs.tsx +35 -20
- package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +195 -0
- package/src/components/Template/Template.stories.mdx +79 -4
- package/src/components/Template/Template.test.tsx +65 -3
- package/src/components/Template/Template.tsx +60 -14
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +94 -1
- package/src/components/TextInput/TextInput.stories.mdx +1 -1
- package/src/components/Toggle/Toggle.stories.mdx +1 -1
- package/src/components/Toggle/Toggle.tsx +2 -1
- package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +4 -4
- package/src/docs/Chakra.stories.mdx +1 -1
- package/src/index.ts +8 -2
- package/src/styles/base/_place-holder.scss +2 -0
- package/src/styles.scss +0 -2
- package/src/theme/components/breadcrumb.ts +5 -1
- package/src/theme/components/checkbox.ts +3 -7
- package/src/theme/components/customTable.ts +16 -3
- package/src/theme/components/fieldset.ts +2 -0
- package/src/theme/components/global.ts +19 -16
- package/src/theme/components/globalMixins.ts +8 -8
- package/src/theme/components/list.ts +6 -2
- package/src/theme/components/notification.ts +21 -8
- package/src/theme/components/radio.ts +3 -6
- package/src/theme/components/searchBar.ts +4 -0
- package/src/theme/components/select.ts +3 -3
- package/src/theme/components/slider.ts +12 -9
- package/src/theme/components/structuredContent.ts +26 -6
- package/src/theme/components/textInput.ts +3 -2
- package/src/theme/components/toggle.ts +42 -38
- package/src/theme/foundations/colors.ts +19 -12
- package/src/theme/foundations/global.ts +17 -5
- package/src/theme/foundations/typography.ts +2 -2
- package/src/utils/componentCategories.ts +2 -1
- package/src/utils/utils.ts +28 -0
- package/dist/components/Pagination/Pagination.stories.d.ts +0 -13
- package/src/components/Pagination/Pagination.stories.tsx +0 -54
- package/src/styles/base/_03-base.scss +0 -25
- package/src/styles/base/_04-focus.scss +0 -22
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nypl/design-system-react-components",
|
|
3
|
-
"version": "0.25.
|
|
3
|
+
"version": "0.25.12",
|
|
4
4
|
"description": "Design System React Components",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"test:watch": "tsdx test - --watch",
|
|
29
29
|
"test:generate-output": "tsdx test --json --outputFile=.jest-test-results.json || true",
|
|
30
30
|
"lint": "tsdx lint",
|
|
31
|
-
"prepare": "npm run build",
|
|
31
|
+
"prepare": "npm run build && husky install",
|
|
32
32
|
"size": "size-limit",
|
|
33
33
|
"analyze": "size-limit --why",
|
|
34
34
|
"generate-sass-resources": "gulp",
|
|
@@ -36,26 +36,9 @@
|
|
|
36
36
|
"build-storybook": "npm run prebuild:storybook && build-storybook -c .storybook -o ./storybook-static",
|
|
37
37
|
"prebuild:storybook": "npm run test:generate-output"
|
|
38
38
|
},
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"@emotion/react": "11.4.1",
|
|
43
|
-
"@emotion/styled": "11.3.0",
|
|
44
|
-
"framer-motion": "4.1.17",
|
|
45
|
-
"he": "1.2.0",
|
|
46
|
-
"react-datepicker": "4.1.1",
|
|
47
|
-
"system-font-css": "2.0.2",
|
|
48
|
-
"typescript": "4.3.5",
|
|
49
|
-
"uuid": "8.3.2"
|
|
50
|
-
},
|
|
51
|
-
"peerDependencies": {
|
|
52
|
-
"react": ">=16.13.0",
|
|
53
|
-
"react-dom": ">=16.13.0"
|
|
54
|
-
},
|
|
55
|
-
"husky": {
|
|
56
|
-
"hooks": {
|
|
57
|
-
"pre-commit": "pretty-quick --staged"
|
|
58
|
-
}
|
|
39
|
+
"lint-staged": {
|
|
40
|
+
"*.{jsx,ts,tsx}": "eslint src --ext=jsx,ts,tsx --cache --fix",
|
|
41
|
+
"*.{js,jsx,ts,tsx,css,md}": "prettier --write"
|
|
59
42
|
},
|
|
60
43
|
"prettier": {
|
|
61
44
|
"printWidth": 80,
|
|
@@ -73,19 +56,40 @@
|
|
|
73
56
|
"limit": "300 KB"
|
|
74
57
|
}
|
|
75
58
|
],
|
|
59
|
+
"dependencies": {
|
|
60
|
+
"@chakra-ui/react": ">=1.7.1",
|
|
61
|
+
"@chakra-ui/system": ">=1.8.1",
|
|
62
|
+
"@emotion/react": "11.4.1",
|
|
63
|
+
"@emotion/styled": "11.3.0",
|
|
64
|
+
"framer-motion": "4.1.17",
|
|
65
|
+
"he": "1.2.0",
|
|
66
|
+
"react-datepicker": "4.1.1",
|
|
67
|
+
"system-font-css": "2.0.2",
|
|
68
|
+
"typescript": "4.3.5",
|
|
69
|
+
"uuid": "8.3.2"
|
|
70
|
+
},
|
|
71
|
+
"peerDependencies": {
|
|
72
|
+
"@chakra-ui/react": ">=1.7.1",
|
|
73
|
+
"@chakra-ui/system": ">=1.8.1",
|
|
74
|
+
"@emotion/react": ">=11.4.1",
|
|
75
|
+
"@emotion/styled": ">=11.3.0",
|
|
76
|
+
"framer-motion": ">=4.1.17",
|
|
77
|
+
"react": ">=16.13.0",
|
|
78
|
+
"react-dom": ">=16.13.0"
|
|
79
|
+
},
|
|
76
80
|
"devDependencies": {
|
|
77
81
|
"@babel/core": "7.14.6",
|
|
78
82
|
"@mdx-js/react": "1.6.22",
|
|
79
83
|
"@size-limit/preset-small-lib": "5.0.1",
|
|
80
|
-
"@storybook/addon-a11y": "6.4.
|
|
81
|
-
"@storybook/addon-actions": "6.4.
|
|
82
|
-
"@storybook/addon-docs": "6.4.
|
|
83
|
-
"@storybook/addon-essentials": "6.4.
|
|
84
|
-
"@storybook/addon-jest": "6.4.
|
|
85
|
-
"@storybook/addon-links": "6.4.
|
|
84
|
+
"@storybook/addon-a11y": "6.4.19",
|
|
85
|
+
"@storybook/addon-actions": "6.4.19",
|
|
86
|
+
"@storybook/addon-docs": "6.4.19",
|
|
87
|
+
"@storybook/addon-essentials": "6.4.19",
|
|
88
|
+
"@storybook/addon-jest": "6.4.19",
|
|
89
|
+
"@storybook/addon-links": "6.4.19",
|
|
86
90
|
"@storybook/addon-queryparams": "6.2.9",
|
|
87
|
-
"@storybook/addons": "6.4.
|
|
88
|
-
"@storybook/react": "6.4.
|
|
91
|
+
"@storybook/addons": "6.4.19",
|
|
92
|
+
"@storybook/react": "6.4.19",
|
|
89
93
|
"@svgr/rollup": "5.5.0",
|
|
90
94
|
"@svgr/webpack": "5.5.0",
|
|
91
95
|
"@testing-library/jest-dom": "5.14.1",
|
|
@@ -100,7 +104,7 @@
|
|
|
100
104
|
"@types/testing-library__jest-dom": "5.14.1",
|
|
101
105
|
"@typescript-eslint/eslint-plugin": "4.33.0",
|
|
102
106
|
"@typescript-eslint/parser": "4.33.0",
|
|
103
|
-
"autoprefixer": "9.8.
|
|
107
|
+
"autoprefixer": "9.8.8",
|
|
104
108
|
"babel-loader": "8.2.2",
|
|
105
109
|
"breakpoint-sass": "2.7.1",
|
|
106
110
|
"css-loader": "5.2.7",
|
|
@@ -109,18 +113,18 @@
|
|
|
109
113
|
"eslint-config-react-app": "6.0.0",
|
|
110
114
|
"eslint-plugin-flowtype": "5.8.2",
|
|
111
115
|
"eslint-plugin-react-hooks": "4.2.0",
|
|
116
|
+
"eslint-plugin-storybook": "^0.5.6",
|
|
112
117
|
"gulp": "4.0.2",
|
|
113
|
-
"gulp-
|
|
114
|
-
"husky": "
|
|
118
|
+
"gulp-concat": "^2.6.1",
|
|
119
|
+
"husky": "^7.0.4",
|
|
115
120
|
"import-glob-loader": "1.1.0",
|
|
116
121
|
"jest": "27.3.1",
|
|
117
122
|
"jest-axe": "5.0.1",
|
|
118
123
|
"jsdom": "15.2.1",
|
|
124
|
+
"lint-staged": "10.5.4",
|
|
119
125
|
"node-sass-glob-importer": "5.3.2",
|
|
120
126
|
"normalize.css": "8.0.1",
|
|
121
|
-
"postcss": "8.3.6",
|
|
122
127
|
"prettier": "2.4.1",
|
|
123
|
-
"pretty-quick": "3.1.1",
|
|
124
128
|
"react": "16.14.0",
|
|
125
129
|
"react-autosuggest": "10.0.2",
|
|
126
130
|
"react-docgen-typescript-loader": "3.1.0",
|
|
@@ -133,7 +137,7 @@
|
|
|
133
137
|
"sass-loader": "10.0.0",
|
|
134
138
|
"semantic-release-slack-bot": "2.1.0",
|
|
135
139
|
"size-limit": "5.0.1",
|
|
136
|
-
"storybook-addon-designs": "6.2.
|
|
140
|
+
"storybook-addon-designs": "6.2.1",
|
|
137
141
|
"style-loader": "2.0.0",
|
|
138
142
|
"ts-jest": "27.0.4",
|
|
139
143
|
"tsdx": "0.14.1",
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { render, screen } from "@testing-library/react";
|
|
3
2
|
import { axe } from "jest-axe";
|
|
3
|
+
import { render, screen } from "@testing-library/react";
|
|
4
|
+
import renderer from "react-test-renderer";
|
|
4
5
|
import userEvent from "@testing-library/user-event";
|
|
5
6
|
|
|
6
7
|
import Accordion from "./Accordion";
|
|
8
|
+
import Card, { CardContent, CardHeading } from "../Card/Card";
|
|
9
|
+
import { CardLayouts } from "../Card/CardTypes";
|
|
10
|
+
import { HeadingLevels } from "../Heading/HeadingTypes";
|
|
11
|
+
import { ImageRatios } from "../Image/ImageTypes";
|
|
7
12
|
|
|
8
13
|
describe("Accordion Accessibility", () => {
|
|
9
14
|
it("passes axe accessibility test for one item", async () => {
|
|
@@ -150,4 +155,43 @@ describe("Accordion", () => {
|
|
|
150
155
|
expect(accordion2).toHaveAttribute("aria-expanded", "true");
|
|
151
156
|
expect(accordion3).toHaveAttribute("aria-expanded", "true");
|
|
152
157
|
});
|
|
158
|
+
|
|
159
|
+
it("Renders the UI snapshot correctly", () => {
|
|
160
|
+
const contentData = [
|
|
161
|
+
{
|
|
162
|
+
label: "Gerry Kellman",
|
|
163
|
+
panel: (
|
|
164
|
+
<Card
|
|
165
|
+
center
|
|
166
|
+
id="card"
|
|
167
|
+
imageAlt="Alt text"
|
|
168
|
+
imageAspectRatio={ImageRatios.TwoByOne}
|
|
169
|
+
imageSrc={`https://cdn.onebauer.media/one/media/6176/76fd/405b/ab5f/f20f/2d52/gerri-1500-1.jpg?format=jpg&quality=80&width=850&ratio=1-1&resize=aspectfit`}
|
|
170
|
+
layout={CardLayouts.Row}
|
|
171
|
+
>
|
|
172
|
+
<CardHeading id="heading1" level={HeadingLevels.Four}>
|
|
173
|
+
Gerry Kellman
|
|
174
|
+
</CardHeading>
|
|
175
|
+
<CardContent>
|
|
176
|
+
Gerri is <b>one of Logan's most trusted confidantes</b>, one who
|
|
177
|
+
serves many roles within the company. She's one of the most
|
|
178
|
+
powerful people at Waystar Royco outside of the family itself.
|
|
179
|
+
</CardContent>
|
|
180
|
+
</Card>
|
|
181
|
+
),
|
|
182
|
+
},
|
|
183
|
+
];
|
|
184
|
+
|
|
185
|
+
const primary = renderer
|
|
186
|
+
.create(<Accordion contentData={contentData} id="accordian" />)
|
|
187
|
+
.toJSON();
|
|
188
|
+
const defaultOpen = renderer
|
|
189
|
+
.create(
|
|
190
|
+
<Accordion contentData={contentData} id="accordian" isDefaultOpen />
|
|
191
|
+
)
|
|
192
|
+
.toJSON();
|
|
193
|
+
|
|
194
|
+
expect(primary).toMatchSnapshot();
|
|
195
|
+
expect(defaultOpen).toMatchSnapshot();
|
|
196
|
+
});
|
|
153
197
|
});
|
|
@@ -29,9 +29,15 @@ export interface AccordionProps {
|
|
|
29
29
|
* Get the minus or plus icon depending on whether the accordion
|
|
30
30
|
* is open or closed.
|
|
31
31
|
*/
|
|
32
|
-
const getIcon = (isExpanded = false) => {
|
|
32
|
+
const getIcon = (isExpanded = false, index, id) => {
|
|
33
33
|
const iconName = isExpanded ? IconNames.Minus : IconNames.Plus;
|
|
34
|
-
return
|
|
34
|
+
return (
|
|
35
|
+
<Icon
|
|
36
|
+
id={`accordion-${id}-icon-${index}`}
|
|
37
|
+
name={iconName}
|
|
38
|
+
size={IconSizes.Small}
|
|
39
|
+
/>
|
|
40
|
+
);
|
|
35
41
|
};
|
|
36
42
|
|
|
37
43
|
/**
|
|
@@ -39,7 +45,7 @@ const getIcon = (isExpanded = false) => {
|
|
|
39
45
|
* array. This automatically creates the `AccordionButton` and `AccordionPanel`
|
|
40
46
|
* combination that is required for the Chakra `Accordion` component.
|
|
41
47
|
*/
|
|
42
|
-
const getElementsFromContentData = (data = []) => {
|
|
48
|
+
const getElementsFromContentData = (data = [], id) => {
|
|
43
49
|
// For FAQ-style multiple accordions, the button should be bigger.
|
|
44
50
|
// Otherwise, use the default.
|
|
45
51
|
const multiplePadding = data?.length > 1 ? 4 : null;
|
|
@@ -49,23 +55,29 @@ const getElementsFromContentData = (data = []) => {
|
|
|
49
55
|
const panel =
|
|
50
56
|
typeof content.panel === "string" ? (
|
|
51
57
|
<AccordionPanel
|
|
58
|
+
id={`${id}-panel-${index}`}
|
|
52
59
|
key={index}
|
|
53
60
|
dangerouslySetInnerHTML={{ __html: content.panel }}
|
|
54
61
|
/>
|
|
55
62
|
) : (
|
|
56
|
-
<AccordionPanel
|
|
63
|
+
<AccordionPanel id={`${id}-panel-${index}`} key={index}>
|
|
64
|
+
{content.panel}
|
|
65
|
+
</AccordionPanel>
|
|
57
66
|
);
|
|
58
67
|
|
|
59
68
|
return (
|
|
60
|
-
<AccordionItem key={index}>
|
|
69
|
+
<AccordionItem id={`${id}-item-${index}`} key={index}>
|
|
61
70
|
{/* Get the current state to render the correct icon. */}
|
|
62
71
|
{({ isExpanded }) => (
|
|
63
72
|
<>
|
|
64
|
-
<AccordionButton
|
|
73
|
+
<AccordionButton
|
|
74
|
+
id={`${id}-button-${index}`}
|
|
75
|
+
padding={multiplePadding}
|
|
76
|
+
>
|
|
65
77
|
<Box flex="1" textAlign="left">
|
|
66
78
|
{content.label}
|
|
67
79
|
</Box>
|
|
68
|
-
{getIcon(isExpanded)}
|
|
80
|
+
{getIcon(isExpanded, index, id)}
|
|
69
81
|
</AccordionButton>
|
|
70
82
|
{panel}
|
|
71
83
|
</>
|
|
@@ -86,7 +98,7 @@ function Accordion(props: React.PropsWithChildren<AccordionProps>) {
|
|
|
86
98
|
const openFirstAccordion = isDefaultOpen ? 0 : undefined;
|
|
87
99
|
return (
|
|
88
100
|
<ChakraAccordion id={id} defaultIndex={[openFirstAccordion]} allowMultiple>
|
|
89
|
-
{getElementsFromContentData(contentData)}
|
|
101
|
+
{getElementsFromContentData(contentData, id)}
|
|
90
102
|
</ChakraAccordion>
|
|
91
103
|
);
|
|
92
104
|
}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`Accordion Renders the UI snapshot correctly 1`] = `
|
|
4
|
+
<div
|
|
5
|
+
className="chakra-accordion css-0"
|
|
6
|
+
id="accordian"
|
|
7
|
+
>
|
|
8
|
+
<div
|
|
9
|
+
className="chakra-accordion__item css-1fsnuue"
|
|
10
|
+
>
|
|
11
|
+
<button
|
|
12
|
+
aria-controls="accordion-panel-accordian-item-0"
|
|
13
|
+
aria-expanded={false}
|
|
14
|
+
className="chakra-accordion__button css-ubg1nw"
|
|
15
|
+
disabled={false}
|
|
16
|
+
id="accordion-button-accordian-item-0"
|
|
17
|
+
onClick={[Function]}
|
|
18
|
+
onFocus={[Function]}
|
|
19
|
+
onKeyDown={[Function]}
|
|
20
|
+
type="button"
|
|
21
|
+
>
|
|
22
|
+
<div
|
|
23
|
+
className="css-1eziwv"
|
|
24
|
+
>
|
|
25
|
+
Gerry Kellman
|
|
26
|
+
</div>
|
|
27
|
+
<svg
|
|
28
|
+
aria-hidden={true}
|
|
29
|
+
className="chakra-icon css-onkibi"
|
|
30
|
+
focusable={false}
|
|
31
|
+
id="accordion-accordian-icon-0"
|
|
32
|
+
role="img"
|
|
33
|
+
title="plus icon"
|
|
34
|
+
viewBox="0 0 24 24"
|
|
35
|
+
>
|
|
36
|
+
<g
|
|
37
|
+
stroke="currentColor"
|
|
38
|
+
strokeWidth="1.5"
|
|
39
|
+
>
|
|
40
|
+
<path
|
|
41
|
+
d="M9,9a3,3,0,1,1,4,2.829,1.5,1.5,0,0,0-1,1.415V14.25"
|
|
42
|
+
fill="none"
|
|
43
|
+
strokeLinecap="round"
|
|
44
|
+
/>
|
|
45
|
+
<path
|
|
46
|
+
d="M12,17.25a.375.375,0,1,0,.375.375A.375.375,0,0,0,12,17.25h0"
|
|
47
|
+
fill="currentColor"
|
|
48
|
+
strokeLinecap="round"
|
|
49
|
+
/>
|
|
50
|
+
<circle
|
|
51
|
+
cx="12"
|
|
52
|
+
cy="12"
|
|
53
|
+
fill="none"
|
|
54
|
+
r="11.25"
|
|
55
|
+
strokeMiterlimit="10"
|
|
56
|
+
/>
|
|
57
|
+
</g>
|
|
58
|
+
</svg>
|
|
59
|
+
</button>
|
|
60
|
+
<div
|
|
61
|
+
className="chakra-collapse"
|
|
62
|
+
style={
|
|
63
|
+
Object {
|
|
64
|
+
"display": "none",
|
|
65
|
+
"height": "0px",
|
|
66
|
+
"opacity": 0,
|
|
67
|
+
"overflow": "hidden",
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
>
|
|
71
|
+
<div
|
|
72
|
+
aria-labelledby="accordion-button-accordian-item-0"
|
|
73
|
+
className="chakra-accordion__panel css-0"
|
|
74
|
+
id="accordion-panel-accordian-item-0"
|
|
75
|
+
role="region"
|
|
76
|
+
>
|
|
77
|
+
<div
|
|
78
|
+
className="css-0"
|
|
79
|
+
id="card"
|
|
80
|
+
>
|
|
81
|
+
<div
|
|
82
|
+
className="css-0"
|
|
83
|
+
>
|
|
84
|
+
<div
|
|
85
|
+
className="the-wrap css-0"
|
|
86
|
+
>
|
|
87
|
+
<div
|
|
88
|
+
className="the-crop css-0"
|
|
89
|
+
>
|
|
90
|
+
<img
|
|
91
|
+
alt="Alt text"
|
|
92
|
+
className="css-0"
|
|
93
|
+
src="https://cdn.onebauer.media/one/media/6176/76fd/405b/ab5f/f20f/2d52/gerri-1500-1.jpg?format=jpg&quality=80&width=850&ratio=1-1&resize=aspectfit"
|
|
94
|
+
/>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
<div
|
|
99
|
+
className="card-body css-0"
|
|
100
|
+
>
|
|
101
|
+
<h4
|
|
102
|
+
className="chakra-heading css-0"
|
|
103
|
+
id="heading1"
|
|
104
|
+
>
|
|
105
|
+
Gerry Kellman
|
|
106
|
+
</h4>
|
|
107
|
+
<div
|
|
108
|
+
className="css-0"
|
|
109
|
+
>
|
|
110
|
+
Gerri is
|
|
111
|
+
<b>
|
|
112
|
+
one of Logan's most trusted confidantes
|
|
113
|
+
</b>
|
|
114
|
+
, one who serves many roles within the company. She's one of the most powerful people at Waystar Royco outside of the family itself.
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
`;
|
|
123
|
+
|
|
124
|
+
exports[`Accordion Renders the UI snapshot correctly 2`] = `
|
|
125
|
+
<div
|
|
126
|
+
className="chakra-accordion css-0"
|
|
127
|
+
id="accordian"
|
|
128
|
+
>
|
|
129
|
+
<div
|
|
130
|
+
className="chakra-accordion__item css-1fsnuue"
|
|
131
|
+
>
|
|
132
|
+
<button
|
|
133
|
+
aria-controls="accordion-panel-accordian-item-0"
|
|
134
|
+
aria-expanded={false}
|
|
135
|
+
className="chakra-accordion__button css-ubg1nw"
|
|
136
|
+
disabled={false}
|
|
137
|
+
id="accordion-button-accordian-item-0"
|
|
138
|
+
onClick={[Function]}
|
|
139
|
+
onFocus={[Function]}
|
|
140
|
+
onKeyDown={[Function]}
|
|
141
|
+
type="button"
|
|
142
|
+
>
|
|
143
|
+
<div
|
|
144
|
+
className="css-1eziwv"
|
|
145
|
+
>
|
|
146
|
+
Gerry Kellman
|
|
147
|
+
</div>
|
|
148
|
+
<svg
|
|
149
|
+
aria-hidden={true}
|
|
150
|
+
className="chakra-icon css-onkibi"
|
|
151
|
+
focusable={false}
|
|
152
|
+
id="accordion-accordian-icon-0"
|
|
153
|
+
role="img"
|
|
154
|
+
title="plus icon"
|
|
155
|
+
viewBox="0 0 24 24"
|
|
156
|
+
>
|
|
157
|
+
<g
|
|
158
|
+
stroke="currentColor"
|
|
159
|
+
strokeWidth="1.5"
|
|
160
|
+
>
|
|
161
|
+
<path
|
|
162
|
+
d="M9,9a3,3,0,1,1,4,2.829,1.5,1.5,0,0,0-1,1.415V14.25"
|
|
163
|
+
fill="none"
|
|
164
|
+
strokeLinecap="round"
|
|
165
|
+
/>
|
|
166
|
+
<path
|
|
167
|
+
d="M12,17.25a.375.375,0,1,0,.375.375A.375.375,0,0,0,12,17.25h0"
|
|
168
|
+
fill="currentColor"
|
|
169
|
+
strokeLinecap="round"
|
|
170
|
+
/>
|
|
171
|
+
<circle
|
|
172
|
+
cx="12"
|
|
173
|
+
cy="12"
|
|
174
|
+
fill="none"
|
|
175
|
+
r="11.25"
|
|
176
|
+
strokeMiterlimit="10"
|
|
177
|
+
/>
|
|
178
|
+
</g>
|
|
179
|
+
</svg>
|
|
180
|
+
</button>
|
|
181
|
+
<div
|
|
182
|
+
className="chakra-collapse"
|
|
183
|
+
style={
|
|
184
|
+
Object {
|
|
185
|
+
"display": "none",
|
|
186
|
+
"height": "0px",
|
|
187
|
+
"opacity": 0,
|
|
188
|
+
"overflow": "hidden",
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
>
|
|
192
|
+
<div
|
|
193
|
+
aria-labelledby="accordion-button-accordian-item-0"
|
|
194
|
+
className="chakra-accordion__panel css-0"
|
|
195
|
+
id="accordion-panel-accordian-item-0"
|
|
196
|
+
role="region"
|
|
197
|
+
>
|
|
198
|
+
<div
|
|
199
|
+
className="css-0"
|
|
200
|
+
id="card"
|
|
201
|
+
>
|
|
202
|
+
<div
|
|
203
|
+
className="css-0"
|
|
204
|
+
>
|
|
205
|
+
<div
|
|
206
|
+
className="the-wrap css-0"
|
|
207
|
+
>
|
|
208
|
+
<div
|
|
209
|
+
className="the-crop css-0"
|
|
210
|
+
>
|
|
211
|
+
<img
|
|
212
|
+
alt="Alt text"
|
|
213
|
+
className="css-0"
|
|
214
|
+
src="https://cdn.onebauer.media/one/media/6176/76fd/405b/ab5f/f20f/2d52/gerri-1500-1.jpg?format=jpg&quality=80&width=850&ratio=1-1&resize=aspectfit"
|
|
215
|
+
/>
|
|
216
|
+
</div>
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
<div
|
|
220
|
+
className="card-body css-0"
|
|
221
|
+
>
|
|
222
|
+
<h4
|
|
223
|
+
className="chakra-heading css-0"
|
|
224
|
+
id="heading1"
|
|
225
|
+
>
|
|
226
|
+
Gerry Kellman
|
|
227
|
+
</h4>
|
|
228
|
+
<div
|
|
229
|
+
className="css-0"
|
|
230
|
+
>
|
|
231
|
+
Gerri is
|
|
232
|
+
<b>
|
|
233
|
+
one of Logan's most trusted confidantes
|
|
234
|
+
</b>
|
|
235
|
+
, one who serves many roles within the company. She's one of the most powerful people at Waystar Royco outside of the family itself.
|
|
236
|
+
</div>
|
|
237
|
+
</div>
|
|
238
|
+
</div>
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
</div>
|
|
243
|
+
`;
|
|
@@ -49,11 +49,13 @@ export const enumValues = getStorybookEnumValues(
|
|
|
49
49
|
| Component Version | DS Version |
|
|
50
50
|
| ----------------- | ---------- |
|
|
51
51
|
| Added | `0.0.3` |
|
|
52
|
-
| Latest | `0.25.
|
|
52
|
+
| Latest | `0.25.12` |
|
|
53
53
|
|
|
54
54
|
<Description of={Breadcrumbs} />
|
|
55
55
|
|
|
56
|
-
The `Breadcrumbs` component is a navigation element that provides a breadcrumb
|
|
56
|
+
The `Breadcrumbs` component is a navigation element that provides a breadcrumb
|
|
57
|
+
path that reflects the site structure and allows a user to navigate to any page
|
|
58
|
+
available in the breadcrumb hierarchy.
|
|
57
59
|
|
|
58
60
|
<Canvas withToolbar>
|
|
59
61
|
<Story
|
|
@@ -81,6 +83,15 @@ The `Breadcrumbs` component is a navigation element that provides a breadcrumb p
|
|
|
81
83
|
|
|
82
84
|
<ArgsTable story="Breadcrumbs with Controls" />
|
|
83
85
|
|
|
86
|
+
### Accessibility
|
|
87
|
+
|
|
88
|
+
Only one `Breadcrumbs` component should be rendered on a page. This is because
|
|
89
|
+
only one HTML `<nav>` element with `aria-label` attribute of "Breadcrumbs"
|
|
90
|
+
should be rendered. The DS `Breadcrumbs` component renders this HTML landmark
|
|
91
|
+
so only one component must be rendered on a page.
|
|
92
|
+
|
|
93
|
+
- [W3 Breadcrumbs Practice](https://www.w3.org/TR/wai-aria-practices/examples/breadcrumb/index.html)
|
|
94
|
+
|
|
84
95
|
### Long Titles
|
|
85
96
|
|
|
86
97
|
<Canvas>
|
|
@@ -149,6 +160,23 @@ The `Breadcrumbs` component background color can be set using the `colorVariant`
|
|
|
149
160
|
</DSProvider>
|
|
150
161
|
</Canvas>
|
|
151
162
|
|
|
163
|
+
<Canvas>
|
|
164
|
+
<DSProvider>
|
|
165
|
+
<Heading level={HeadingLevels.Three}>Education</Heading>
|
|
166
|
+
<Breadcrumbs
|
|
167
|
+
breadcrumbsData={[
|
|
168
|
+
{ url: "#", text: "Parent" },
|
|
169
|
+
{ url: "#", text: "Child" },
|
|
170
|
+
{
|
|
171
|
+
url: "#",
|
|
172
|
+
text: "Grandchild",
|
|
173
|
+
},
|
|
174
|
+
]}
|
|
175
|
+
colorVariant={ColorVariants.Education}
|
|
176
|
+
/>
|
|
177
|
+
</DSProvider>
|
|
178
|
+
</Canvas>
|
|
179
|
+
|
|
152
180
|
<Canvas>
|
|
153
181
|
<DSProvider>
|
|
154
182
|
<Heading level={HeadingLevels.Three}>Locations</Heading>
|
|
@@ -11,12 +11,27 @@ describe("Breadcrumbs Accessibility", () => {
|
|
|
11
11
|
{ url: "#string1", text: "string1" },
|
|
12
12
|
{ url: "#string2", text: "string2" },
|
|
13
13
|
];
|
|
14
|
+
|
|
14
15
|
it("passes axe accessibility test", async () => {
|
|
15
16
|
const { container } = render(
|
|
16
17
|
<Breadcrumbs breadcrumbsData={breadcrumbsData} />
|
|
17
18
|
);
|
|
18
19
|
expect(await axe(container)).toHaveNoViolations();
|
|
19
20
|
});
|
|
21
|
+
|
|
22
|
+
// This fails because there MUST only be one "breadcrumb" landmark item
|
|
23
|
+
// on a page. This specifically means there should be one `<nav>` element
|
|
24
|
+
// with `aria-label="Breadcrumb"`.
|
|
25
|
+
// https://www.w3.org/TR/wai-aria-practices/examples/breadcrumb/index.html
|
|
26
|
+
it("does not pass axe accessibility test", async () => {
|
|
27
|
+
const { container } = render(
|
|
28
|
+
<>
|
|
29
|
+
<Breadcrumbs breadcrumbsData={breadcrumbsData} />
|
|
30
|
+
<Breadcrumbs breadcrumbsData={breadcrumbsData} />
|
|
31
|
+
</>
|
|
32
|
+
);
|
|
33
|
+
expect(await axe(container)).not.toHaveNoViolations();
|
|
34
|
+
});
|
|
20
35
|
});
|
|
21
36
|
|
|
22
37
|
describe("Breadcrumbs Snapshot", () => {
|
|
@@ -59,6 +74,15 @@ describe("Breadcrumbs Snapshot", () => {
|
|
|
59
74
|
/>
|
|
60
75
|
)
|
|
61
76
|
.toJSON();
|
|
77
|
+
const breadcrumbsEducationVariant = renderer
|
|
78
|
+
.create(
|
|
79
|
+
<Breadcrumbs
|
|
80
|
+
breadcrumbsData={breadcrumbsData}
|
|
81
|
+
colorVariant={ColorVariants.Education}
|
|
82
|
+
id="breadcrumbs-test"
|
|
83
|
+
/>
|
|
84
|
+
)
|
|
85
|
+
.toJSON();
|
|
62
86
|
const breadcrumbsAdditionalStyles = renderer
|
|
63
87
|
.create(
|
|
64
88
|
<Breadcrumbs
|
|
@@ -75,6 +99,7 @@ describe("Breadcrumbs Snapshot", () => {
|
|
|
75
99
|
expect(breadcrumbsVariantColor).toMatchSnapshot();
|
|
76
100
|
expect(breadcrumbsBlogsVariant).toMatchSnapshot();
|
|
77
101
|
expect(breadcrumbsLocationsVariant).toMatchSnapshot();
|
|
102
|
+
expect(breadcrumbsEducationVariant).toMatchSnapshot();
|
|
78
103
|
expect(breadcrumbsAdditionalStyles).toMatchSnapshot();
|
|
79
104
|
});
|
|
80
105
|
});
|
|
@@ -6,8 +6,6 @@ import {
|
|
|
6
6
|
useStyleConfig,
|
|
7
7
|
} from "@chakra-ui/react";
|
|
8
8
|
|
|
9
|
-
import generateUUID from "../../helpers/generateUUID";
|
|
10
|
-
import { ColorVariants } from "./BreadcrumbsTypes";
|
|
11
9
|
import Icon from "../Icons/Icon";
|
|
12
10
|
import {
|
|
13
11
|
IconNames,
|
|
@@ -15,6 +13,8 @@ import {
|
|
|
15
13
|
IconSizes,
|
|
16
14
|
IconTypes,
|
|
17
15
|
} from "../Icons/IconTypes";
|
|
16
|
+
import generateUUID from "../../helpers/generateUUID";
|
|
17
|
+
import { ColorVariants } from "./BreadcrumbsTypes";
|
|
18
18
|
import { getVariant } from "../../utils/utils";
|
|
19
19
|
|
|
20
20
|
export interface BreadcrumbsDataProps {
|
|
@@ -83,9 +83,15 @@ function Breadcrumbs(props: React.PropsWithChildren<BreadcrumbProps>) {
|
|
|
83
83
|
const styles = useStyleConfig("Breadcrumb", { variant });
|
|
84
84
|
const finalStyles = { ...styles, ...additionalStyles };
|
|
85
85
|
const breadcrumbItems = getElementsFromData(breadcrumbsData, id);
|
|
86
|
+
const ariaAttrs = { "aria-label": "Breadcrumb" };
|
|
86
87
|
|
|
87
88
|
return (
|
|
88
|
-
<ChakraBreadcrumb
|
|
89
|
+
<ChakraBreadcrumb
|
|
90
|
+
className={className}
|
|
91
|
+
id={id}
|
|
92
|
+
{...ariaAttrs}
|
|
93
|
+
__css={finalStyles}
|
|
94
|
+
>
|
|
89
95
|
{breadcrumbItems}
|
|
90
96
|
</ChakraBreadcrumb>
|
|
91
97
|
);
|