@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
package/src/__tests__/setup.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
2
|
-
import "@testing-library/jest-dom";
|
|
3
|
-
// Import this to be able to call this jest-axe assertion for all test files:
|
|
4
|
-
// expect(...).toHaveNoViolations();
|
|
5
|
-
import "jest-axe/extend-expect";
|
|
6
|
-
|
|
7
|
-
const { JSDOM } = require("jsdom");
|
|
8
|
-
|
|
9
|
-
const jsdom = new JSDOM("<!doctype html><html><body></body></html>", {
|
|
10
|
-
url: "http://localhost",
|
|
11
|
-
});
|
|
12
|
-
const { window } = jsdom;
|
|
13
|
-
const exposedProperties = ["window", "navigator", "document"];
|
|
14
|
-
|
|
15
|
-
(global as any).window = window;
|
|
16
|
-
(global as any).document = window.document;
|
|
17
|
-
Object.keys((document as Document).defaultView).forEach((property) => {
|
|
18
|
-
if (typeof (global as any)[property] === "undefined") {
|
|
19
|
-
exposedProperties.push(property);
|
|
20
|
-
(global as any)[property] = (document as any).defaultView[property];
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
// We expect an error to be thrown and we do catch, but it still gets
|
|
25
|
-
// logged and we don't want to see expected errors while we test.
|
|
26
|
-
jest.spyOn(global.console, "error").mockImplementation(() => jest.fn());
|
|
27
|
-
jest.spyOn(global.console, "warn").mockImplementation(() => jest.fn());
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { range } from "../../utils/utils";
|
|
2
|
-
|
|
3
|
-
describe("range", () => {
|
|
4
|
-
it("returns an array of values not including the stop argument", () => {
|
|
5
|
-
expect(range(1, 2)).toEqual([1]);
|
|
6
|
-
expect(range(4, 7)).toEqual([4, 5, 6]);
|
|
7
|
-
expect(range(2, 9)).toEqual([2, 3, 4, 5, 6, 7, 8]);
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
it("returns an array of values skipping by the step argument", () => {
|
|
11
|
-
expect(range(1, 10, 2)).toEqual([1, 3, 5, 7, 9]);
|
|
12
|
-
expect(range(4, 8, 3)).toEqual([4, 7]);
|
|
13
|
-
expect(range(2, 20, 2)).toEqual([2, 4, 6, 8, 10, 12, 14, 16, 18]);
|
|
14
|
-
expect(range(2, 20, 4)).toEqual([2, 6, 10, 14, 18]);
|
|
15
|
-
expect(range(2, 6, 2)).toEqual([2, 4]);
|
|
16
|
-
expect(range(2, 20, 5)).toEqual([2, 7, 12, 17]);
|
|
17
|
-
});
|
|
18
|
-
});
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { Meta } from "@storybook/addon-docs";
|
|
2
|
-
|
|
3
|
-
import { getCategory } from "../../utils/componentCategories";
|
|
4
|
-
|
|
5
|
-
<Meta title={getCategory("Skip Navigation")} />
|
|
6
|
-
|
|
7
|
-
# Skip Navigation
|
|
8
|
-
|
|
9
|
-
| Table of Contents |
|
|
10
|
-
| ---------------------------------------------- |
|
|
11
|
-
| 1. [General Information](#general-information) |
|
|
12
|
-
| 2. [Resources](#resources) |
|
|
13
|
-
|
|
14
|
-
## General Information
|
|
15
|
-
|
|
16
|
-
An application's "skip navigation" is used to skip to the primary or main
|
|
17
|
-
content of a page. This component usually contains one link that is located at
|
|
18
|
-
the top of the page and is visually hidden until a user focuses on the link.
|
|
19
|
-
In the case of NYPL applications, the skip navigation contains two links; the
|
|
20
|
-
first link points to the main content of the page and the second link points to
|
|
21
|
-
accessibility information on [NYPL.org/accessibility](https://nypl.org/accessibility).
|
|
22
|
-
For most digitial applications on the NYPL.org platform, the [NYPL Header](https://github.com/NYPL/dgx-header-component)
|
|
23
|
-
is used and this component already renders a skip navigation area with links.
|
|
24
|
-
|
|
25
|
-
In the Reservoir Design System (DS), the `SkipNavigation` component renders two
|
|
26
|
-
links.
|
|
27
|
-
|
|
28
|
-
The first link points to the `"#mainContent"` anchor which an NYPL page
|
|
29
|
-
is expected to have. The `TemplateAppContainer` component renders as a `main`
|
|
30
|
-
HTML element with a default `id` of `"mainContent"`. While it's possible to
|
|
31
|
-
update the target of the skip link and the id of the `<main>` element, this is
|
|
32
|
-
not recommended. When using the DS' `SkipNavigation` and `TemplateAppContainer`
|
|
33
|
-
components, this accessibility combination is automatically handled. When not
|
|
34
|
-
using the `TemplateAppContainer` component, make sure to render a `main` HTML
|
|
35
|
-
element with an `id` of `"mainContent"`.
|
|
36
|
-
|
|
37
|
-
The second link points to additional accessibility information on [NYPL.org/accessibility](https://nypl.org/accessibility).
|
|
38
|
-
|
|
39
|
-
## Resources
|
|
40
|
-
|
|
41
|
-
- [WebAim Skip Navigation Link](https://webaim.org/techniques/skipnav/)
|
|
42
|
-
- [A11ymatters Skip Navigation Link](https://www.a11ymatters.com/pattern/skip-link/)
|
|
@@ -1,333 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ArgsTable,
|
|
3
|
-
Canvas,
|
|
4
|
-
Description,
|
|
5
|
-
Meta,
|
|
6
|
-
Story,
|
|
7
|
-
} from "@storybook/addon-docs";
|
|
8
|
-
import ReactDOMServer from "react-dom/server";
|
|
9
|
-
import { withDesign } from "storybook-addon-designs";
|
|
10
|
-
|
|
11
|
-
import Accordion from "./Accordion";
|
|
12
|
-
import Card, { CardHeading, CardContent } from "../Card/Card";
|
|
13
|
-
import { getCategory } from "../../utils/componentCategories";
|
|
14
|
-
|
|
15
|
-
<Meta
|
|
16
|
-
title={getCategory("Accordion")}
|
|
17
|
-
component={Accordion}
|
|
18
|
-
decorators={[withDesign]}
|
|
19
|
-
parameters={{
|
|
20
|
-
design: {
|
|
21
|
-
type: "figma",
|
|
22
|
-
url: "https://www.figma.com/file/qShodlfNCJHb8n03IFyApM/Master?node-id=10734%3A2520",
|
|
23
|
-
},
|
|
24
|
-
jest: ["Accordion.test.tsx"],
|
|
25
|
-
}}
|
|
26
|
-
argTypes={{
|
|
27
|
-
accordionData: { control: false },
|
|
28
|
-
id: { control: false },
|
|
29
|
-
isDefaultOpen: { table: { defaultValue: { summary: false } } },
|
|
30
|
-
}}
|
|
31
|
-
/>
|
|
32
|
-
|
|
33
|
-
# Accordion
|
|
34
|
-
|
|
35
|
-
| Component Version | DS Version |
|
|
36
|
-
| ----------------- | ---------- |
|
|
37
|
-
| Added | `0.1.0` |
|
|
38
|
-
| Latest | `1.0.2` |
|
|
39
|
-
|
|
40
|
-
## Table of Contents
|
|
41
|
-
|
|
42
|
-
- [Overview](#overview)
|
|
43
|
-
- [Component Props](#component-props)
|
|
44
|
-
- [Accessibility](#accessibility)
|
|
45
|
-
- [FAQ Example](#faq-example)
|
|
46
|
-
|
|
47
|
-
## Overview
|
|
48
|
-
|
|
49
|
-
<Description of={Accordion} />
|
|
50
|
-
|
|
51
|
-
The `Accordion` component displays a list of high-level options that can
|
|
52
|
-
expand and collapse to reveal associated sections of content. This component
|
|
53
|
-
pushes existing content on the page down. Each accordion item is self contained,
|
|
54
|
-
but when the data for multiple accordions is passed in through the `accordionData`
|
|
55
|
-
prop, the `Accordion` components are grouped together and rendered under a single
|
|
56
|
-
element. When grouped like this, each `Accordion` component still opens and
|
|
57
|
-
closes independent from the others in the group.
|
|
58
|
-
|
|
59
|
-
The only way to render an `Accordion` component is to pass in an array of objects
|
|
60
|
-
with `label`, `panel`, and optional `accordionType` properties for each accordion item.
|
|
61
|
-
Note that you can pass in a string or DOM elements into the `panel` property in each
|
|
62
|
-
object. This approach is needed because, internally, we deal with the logic to render
|
|
63
|
-
the necessary icon, Chakra components, and styles. Additionally, the `accordionType`
|
|
64
|
-
prop can be used to change the accordion button's background color. It takes a value
|
|
65
|
-
of `"default"` for `"ui.white"`, `"warning"` for `"ui.status.primary"`, and
|
|
66
|
-
`"error"` for `"ui.status.secondary"`.
|
|
67
|
-
|
|
68
|
-
```jsx
|
|
69
|
-
const accordionData = [
|
|
70
|
-
{
|
|
71
|
-
accordionType: "default",
|
|
72
|
-
label: "Tom Nook",
|
|
73
|
-
panel: (
|
|
74
|
-
<Card
|
|
75
|
-
imageProps={{
|
|
76
|
-
alt: "Alt text",
|
|
77
|
-
aspectRatio: "twoByOne",
|
|
78
|
-
src: "https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
79
|
-
}}
|
|
80
|
-
isCentered
|
|
81
|
-
layout="row"
|
|
82
|
-
>
|
|
83
|
-
<CardHeading level="four" id="heading1">
|
|
84
|
-
Tom Nook
|
|
85
|
-
</CardHeading>
|
|
86
|
-
<CardContent>
|
|
87
|
-
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional
|
|
88
|
-
character in the Animal Crossing series who operates the
|
|
89
|
-
village store.
|
|
90
|
-
</CardContent>
|
|
91
|
-
</Card>
|
|
92
|
-
),
|
|
93
|
-
},
|
|
94
|
-
];
|
|
95
|
-
|
|
96
|
-
...
|
|
97
|
-
|
|
98
|
-
<Accordion accordionData={accordionData} />
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
## Component Props
|
|
102
|
-
|
|
103
|
-
export const accordionData = [
|
|
104
|
-
{
|
|
105
|
-
accordionType: "default",
|
|
106
|
-
label: "Tom Nook",
|
|
107
|
-
panel: (
|
|
108
|
-
<Card
|
|
109
|
-
imageProps={{
|
|
110
|
-
alt: "Alt text",
|
|
111
|
-
aspectRatio: "twoByOne",
|
|
112
|
-
src: "https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
113
|
-
}}
|
|
114
|
-
isCentered
|
|
115
|
-
layout="row"
|
|
116
|
-
>
|
|
117
|
-
<CardHeading level="four" id="heading1">
|
|
118
|
-
Tom Nook
|
|
119
|
-
</CardHeading>
|
|
120
|
-
<CardContent>
|
|
121
|
-
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional character
|
|
122
|
-
in the Animal Crossing series who operates the village store.
|
|
123
|
-
</CardContent>
|
|
124
|
-
</Card>
|
|
125
|
-
),
|
|
126
|
-
},
|
|
127
|
-
];
|
|
128
|
-
|
|
129
|
-
<Canvas withToolbar>
|
|
130
|
-
<Story
|
|
131
|
-
name="Accordion with Controls"
|
|
132
|
-
args={{
|
|
133
|
-
id: "accordion-id",
|
|
134
|
-
isDefaultOpen: false,
|
|
135
|
-
}}
|
|
136
|
-
>
|
|
137
|
-
{(args) => <Accordion accordionData={accordionData} {...args} />}
|
|
138
|
-
</Story>
|
|
139
|
-
</Canvas>
|
|
140
|
-
|
|
141
|
-
<ArgsTable story="Accordion with Controls" />
|
|
142
|
-
|
|
143
|
-
## Accessibility
|
|
144
|
-
|
|
145
|
-
- Follows [U.S. Web Design System (USWDS)](https://designsystem.digital.gov/components/accordion/)
|
|
146
|
-
guidelines:
|
|
147
|
-
- Use the `button` HTML element for screenreaders and keyboards.
|
|
148
|
-
- Use the `aria-expanded` attribute to indicate whether the `Accordion` is
|
|
149
|
-
expanded (`true`) or collapsed (`false`).
|
|
150
|
-
- Use the `aria-controls` attribute to associate the control with the panel.
|
|
151
|
-
- Deviates from USWDS in that the user can open multiple panels. Opening one,
|
|
152
|
-
does not collapse already expanded panel.
|
|
153
|
-
- The open and close icons are decorative (`aria-hidden` is `true`).
|
|
154
|
-
- Visible focus goes around full button and full button is clickable
|
|
155
|
-
|
|
156
|
-
Resources:
|
|
157
|
-
|
|
158
|
-
- [W3C WAI-Aria Practices - Accordion](https://www.w3.org/TR/wai-aria-practices-1.1/#accordion)
|
|
159
|
-
- [USWDS Accordion](https://designsystem.digital.gov/components/accordion/)
|
|
160
|
-
- [Chakra Accordion](https://chakra-ui.com/docs/components/disclosure/accordion)
|
|
161
|
-
|
|
162
|
-
## FAQ Example
|
|
163
|
-
|
|
164
|
-
export const faqContent = [
|
|
165
|
-
{
|
|
166
|
-
accordionType: "default",
|
|
167
|
-
label: "Tom Nook",
|
|
168
|
-
panel: (
|
|
169
|
-
<Card
|
|
170
|
-
imageProps={{
|
|
171
|
-
alt: "Alt text",
|
|
172
|
-
aspectRatio: "twoByOne",
|
|
173
|
-
src: "https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
174
|
-
}}
|
|
175
|
-
isCentered
|
|
176
|
-
layout="row"
|
|
177
|
-
>
|
|
178
|
-
<CardHeading level="four" id="heading1-tom">
|
|
179
|
-
Tom Nook
|
|
180
|
-
</CardHeading>
|
|
181
|
-
<CardContent>
|
|
182
|
-
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional character
|
|
183
|
-
in the Animal Crossing series who operates the village store.
|
|
184
|
-
</CardContent>
|
|
185
|
-
</Card>
|
|
186
|
-
),
|
|
187
|
-
},
|
|
188
|
-
{
|
|
189
|
-
accordionType: "warning",
|
|
190
|
-
label: "Isabelle",
|
|
191
|
-
panel: (
|
|
192
|
-
<Card
|
|
193
|
-
imageProps={{
|
|
194
|
-
alt: "Alt text",
|
|
195
|
-
aspectRatio: "twoByOne",
|
|
196
|
-
src: "https://play.nintendo.com/images/AC_Isabelle_7XU6aGu.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
197
|
-
}}
|
|
198
|
-
isCentered
|
|
199
|
-
layout="row"
|
|
200
|
-
>
|
|
201
|
-
<CardHeading level="four" id="heading1-isabelle">
|
|
202
|
-
Isabelle
|
|
203
|
-
</CardHeading>
|
|
204
|
-
<CardContent>
|
|
205
|
-
Isabelle, known as Shizue in Japan, is a fictional character from the
|
|
206
|
-
Animal Crossing series of video games. She is a kindly Shih Tzu that
|
|
207
|
-
debuted in the 2012 release Animal Crossing: New Leaf, where she
|
|
208
|
-
serves as the secretary to the player character.
|
|
209
|
-
</CardContent>
|
|
210
|
-
</Card>
|
|
211
|
-
),
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
accordionType: "error",
|
|
215
|
-
label: "K.K. Slider",
|
|
216
|
-
panel: (
|
|
217
|
-
<Card
|
|
218
|
-
imageProps={{
|
|
219
|
-
alt: "Alt text",
|
|
220
|
-
aspectRatio: "twoByOne",
|
|
221
|
-
src: "https://play.nintendo.com/images/AC_KK_jh4yj5t.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
222
|
-
}}
|
|
223
|
-
isCentered
|
|
224
|
-
layout="row"
|
|
225
|
-
>
|
|
226
|
-
<CardHeading level="four" id="heading1-kkslider">
|
|
227
|
-
K.K. Slider
|
|
228
|
-
</CardHeading>
|
|
229
|
-
<CardContent>
|
|
230
|
-
<p>
|
|
231
|
-
Totakeke, more commonly known as <b>K.K. Slider or K.K.</b>, is a
|
|
232
|
-
fictional character within the Animal Crossing franchise. One of the
|
|
233
|
-
franchise's most popular characters, he debuted in the title Animal
|
|
234
|
-
Crossing, and has appeared in every installment since.
|
|
235
|
-
</p>
|
|
236
|
-
</CardContent>
|
|
237
|
-
</Card>
|
|
238
|
-
),
|
|
239
|
-
},
|
|
240
|
-
];
|
|
241
|
-
|
|
242
|
-
Building out FAQ-like accordions happens automatically when there are more than
|
|
243
|
-
one object in the array passed into the `accordionData` prop.
|
|
244
|
-
|
|
245
|
-
<Canvas withToolbar>
|
|
246
|
-
<Story name="FAQ Example">
|
|
247
|
-
<Accordion accordionData={faqContent} />
|
|
248
|
-
</Story>
|
|
249
|
-
</Canvas>
|
|
250
|
-
|
|
251
|
-
```jsx
|
|
252
|
-
export const faqContent = [
|
|
253
|
-
{
|
|
254
|
-
accordionType: "default",
|
|
255
|
-
label: "Tom Nook",
|
|
256
|
-
panel: (
|
|
257
|
-
<Card
|
|
258
|
-
imageProps={{
|
|
259
|
-
alt: "Alt text",
|
|
260
|
-
aspectRatio: "twoByOne",
|
|
261
|
-
src: "https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
262
|
-
}}
|
|
263
|
-
isCentered
|
|
264
|
-
layout="row"
|
|
265
|
-
>
|
|
266
|
-
<CardHeading level="four" id="heading1-tom">
|
|
267
|
-
Tom Nook
|
|
268
|
-
</CardHeading>
|
|
269
|
-
<CardContent>
|
|
270
|
-
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional character
|
|
271
|
-
in the Animal Crossing series who operates the village store.
|
|
272
|
-
</CardContent>
|
|
273
|
-
</Card>
|
|
274
|
-
),
|
|
275
|
-
},
|
|
276
|
-
{
|
|
277
|
-
accordionType: "warning",
|
|
278
|
-
label: "Isabelle",
|
|
279
|
-
panel: (
|
|
280
|
-
<Card
|
|
281
|
-
imageProps={{
|
|
282
|
-
alt: "Alt text",
|
|
283
|
-
aspectRatio: "twoByOne",
|
|
284
|
-
src: "https://play.nintendo.com/images/AC_Isabelle_7XU6aGu.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
285
|
-
}}
|
|
286
|
-
isCentered
|
|
287
|
-
layout="row"
|
|
288
|
-
>
|
|
289
|
-
<CardHeading level="four" id="heading1-isabelle">
|
|
290
|
-
Isabelle
|
|
291
|
-
</CardHeading>
|
|
292
|
-
<CardContent>
|
|
293
|
-
Isabelle, known as Shizue in Japan, is a fictional character from the
|
|
294
|
-
Animal Crossing series of video games. She is a kindly Shih Tzu that
|
|
295
|
-
debuted in the 2012 release Animal Crossing: New Leaf, where she
|
|
296
|
-
serves as the secretary to the player character.
|
|
297
|
-
</CardContent>
|
|
298
|
-
</Card>
|
|
299
|
-
),
|
|
300
|
-
},
|
|
301
|
-
{
|
|
302
|
-
accordionType: "error",
|
|
303
|
-
label: "K.K. Slider",
|
|
304
|
-
panel: (
|
|
305
|
-
<Card
|
|
306
|
-
imageProps={{
|
|
307
|
-
alt: "Alt text",
|
|
308
|
-
aspectRatio: "twoByOne",
|
|
309
|
-
src: "https://play.nintendo.com/images/AC_KK_jh4yj5t.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
310
|
-
}}
|
|
311
|
-
isCentered
|
|
312
|
-
layout="row"
|
|
313
|
-
>
|
|
314
|
-
<CardHeading level="four" id="heading1-kkslider">
|
|
315
|
-
K.K. Slider
|
|
316
|
-
</CardHeading>
|
|
317
|
-
<CardContent>
|
|
318
|
-
<p>
|
|
319
|
-
Totakeke, more commonly known as <b>K.K. Slider or K.K.</b>, is a
|
|
320
|
-
fictional character within the Animal Crossing franchise. One of the
|
|
321
|
-
franchise's most popular characters, he debuted in the title Animal
|
|
322
|
-
Crossing, and has appeared in every installment since.
|
|
323
|
-
</p>
|
|
324
|
-
</CardContent>
|
|
325
|
-
</Card>
|
|
326
|
-
),
|
|
327
|
-
},
|
|
328
|
-
];
|
|
329
|
-
|
|
330
|
-
...
|
|
331
|
-
|
|
332
|
-
<Accordion accordionData={faqContent} />
|
|
333
|
-
```
|
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import { axe } from "jest-axe";
|
|
3
|
-
import { render, screen } from "@testing-library/react";
|
|
4
|
-
import renderer from "react-test-renderer";
|
|
5
|
-
import userEvent from "@testing-library/user-event";
|
|
6
|
-
|
|
7
|
-
import Accordion from "./Accordion";
|
|
8
|
-
import Card, { CardContent, CardHeading } from "../Card/Card";
|
|
9
|
-
|
|
10
|
-
describe("Accordion Accessibility", () => {
|
|
11
|
-
it("passes axe accessibility test for one item", async () => {
|
|
12
|
-
const { container } = render(
|
|
13
|
-
<Accordion
|
|
14
|
-
accordionData={[
|
|
15
|
-
{
|
|
16
|
-
label: "Tom Nook",
|
|
17
|
-
panel: (
|
|
18
|
-
<p>
|
|
19
|
-
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional
|
|
20
|
-
character in the Animal Crossing series who operates the village
|
|
21
|
-
store.
|
|
22
|
-
</p>
|
|
23
|
-
),
|
|
24
|
-
},
|
|
25
|
-
]}
|
|
26
|
-
/>
|
|
27
|
-
);
|
|
28
|
-
expect(await axe(container)).toHaveNoViolations();
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
it("passes axe accessibility test for multiple items", async () => {
|
|
32
|
-
const { container } = render(
|
|
33
|
-
<Accordion
|
|
34
|
-
accordionData={[
|
|
35
|
-
{
|
|
36
|
-
label: "Tom Nook",
|
|
37
|
-
panel: (
|
|
38
|
-
<p>
|
|
39
|
-
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional
|
|
40
|
-
character in the Animal Crossing series who operates the village
|
|
41
|
-
store.
|
|
42
|
-
</p>
|
|
43
|
-
),
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
label: "Isabelle",
|
|
47
|
-
panel:
|
|
48
|
-
"Isabelle, known as Shizue in Japan, is a fictional character " +
|
|
49
|
-
"from the Animal Crossing series of video games. She is a kindly Shih " +
|
|
50
|
-
"Tzu that debuted in the 2012 release Animal Crossing: New Leaf, where " +
|
|
51
|
-
"she serves as the secretary to the player character.",
|
|
52
|
-
},
|
|
53
|
-
]}
|
|
54
|
-
/>
|
|
55
|
-
);
|
|
56
|
-
expect(await axe(container)).toHaveNoViolations();
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
export const accordionData = [
|
|
61
|
-
{
|
|
62
|
-
label: "Tom Nook",
|
|
63
|
-
panel: (
|
|
64
|
-
<p>
|
|
65
|
-
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional character
|
|
66
|
-
in the Animal Crossing series who operates the village store.
|
|
67
|
-
</p>
|
|
68
|
-
),
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
label: "Isabelle",
|
|
72
|
-
panel:
|
|
73
|
-
"Isabelle, known as Shizue in Japan, is a fictional character " +
|
|
74
|
-
"from the Animal Crossing series of video games. She is a kindly Shih " +
|
|
75
|
-
"Tzu that debuted in the 2012 release Animal Crossing: New Leaf, where " +
|
|
76
|
-
"she serves as the secretary to the player character.",
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
label: "K.K. Slider",
|
|
80
|
-
panel:
|
|
81
|
-
"<p>Totakeke, more commonly known as <b>K.K. Slider or K.K.</b>, is a " +
|
|
82
|
-
"fictional character within the Animal Crossing franchise. One of the " +
|
|
83
|
-
"franchise's most popular characters, he debuted in the title Animal " +
|
|
84
|
-
"Crossing, and has appeared in every installment since.</p>",
|
|
85
|
-
},
|
|
86
|
-
];
|
|
87
|
-
|
|
88
|
-
describe("Accordion", () => {
|
|
89
|
-
it("renders a visible button with a label to click on", () => {
|
|
90
|
-
render(<Accordion accordionData={[accordionData[0]]} />);
|
|
91
|
-
const accordionLabel = screen.getByRole("button", { name: "Tom Nook" });
|
|
92
|
-
|
|
93
|
-
expect(accordionLabel).toBeInTheDocument();
|
|
94
|
-
// Closed by default.
|
|
95
|
-
expect(accordionLabel).toHaveAttribute("aria-expanded", "false");
|
|
96
|
-
expect(screen.getByText(/known in Japan as Tanukichi/i)).not.toBeVisible();
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
it("opens the panel by default with isDefaultOpen passed", () => {
|
|
100
|
-
render(<Accordion isDefaultOpen accordionData={[accordionData[0]]} />);
|
|
101
|
-
const accordionLabel = screen.getByRole("button", { name: "Tom Nook" });
|
|
102
|
-
|
|
103
|
-
expect(accordionLabel).toBeInTheDocument();
|
|
104
|
-
expect(accordionLabel).toHaveAttribute("aria-expanded", "true");
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
it("opens the accordion when the label is clicked", () => {
|
|
108
|
-
render(<Accordion accordionData={[accordionData[0]]} />);
|
|
109
|
-
|
|
110
|
-
const accordionLabel = screen.getByRole("button", { name: "Tom Nook" });
|
|
111
|
-
expect(accordionLabel).toHaveAttribute("aria-expanded", "false");
|
|
112
|
-
userEvent.click(accordionLabel);
|
|
113
|
-
expect(accordionLabel).toHaveAttribute("aria-expanded", "true");
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
it("renders multiple accordion items grouped together", () => {
|
|
117
|
-
render(<Accordion accordionData={accordionData} />);
|
|
118
|
-
|
|
119
|
-
const accordion1 = screen.getByRole("button", { name: "Tom Nook" });
|
|
120
|
-
const accordion2 = screen.getByRole("button", { name: "Isabelle" });
|
|
121
|
-
const accordion3 = screen.getByRole("button", { name: "K.K. Slider" });
|
|
122
|
-
|
|
123
|
-
expect(accordion1).toHaveAttribute("aria-expanded", "false");
|
|
124
|
-
expect(accordion2).toHaveAttribute("aria-expanded", "false");
|
|
125
|
-
expect(accordion3).toHaveAttribute("aria-expanded", "false");
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
it("opens each accordion item independently of each other", () => {
|
|
129
|
-
render(<Accordion accordionData={accordionData} />);
|
|
130
|
-
|
|
131
|
-
const accordion1 = screen.getByRole("button", { name: "Tom Nook" });
|
|
132
|
-
const accordion2 = screen.getByRole("button", { name: "Isabelle" });
|
|
133
|
-
const accordion3 = screen.getByRole("button", { name: "K.K. Slider" });
|
|
134
|
-
|
|
135
|
-
expect(accordion1).toHaveAttribute("aria-expanded", "false");
|
|
136
|
-
expect(accordion2).toHaveAttribute("aria-expanded", "false");
|
|
137
|
-
expect(accordion3).toHaveAttribute("aria-expanded", "false");
|
|
138
|
-
|
|
139
|
-
userEvent.click(accordion1);
|
|
140
|
-
expect(accordion1).toHaveAttribute("aria-expanded", "true");
|
|
141
|
-
expect(accordion2).toHaveAttribute("aria-expanded", "false");
|
|
142
|
-
expect(accordion3).toHaveAttribute("aria-expanded", "false");
|
|
143
|
-
|
|
144
|
-
userEvent.click(accordion2);
|
|
145
|
-
expect(accordion1).toHaveAttribute("aria-expanded", "true");
|
|
146
|
-
expect(accordion2).toHaveAttribute("aria-expanded", "true");
|
|
147
|
-
expect(accordion3).toHaveAttribute("aria-expanded", "false");
|
|
148
|
-
|
|
149
|
-
userEvent.click(accordion3);
|
|
150
|
-
userEvent.click(accordion1);
|
|
151
|
-
expect(accordion1).toHaveAttribute("aria-expanded", "false");
|
|
152
|
-
expect(accordion2).toHaveAttribute("aria-expanded", "true");
|
|
153
|
-
expect(accordion3).toHaveAttribute("aria-expanded", "true");
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
it("Renders the UI snapshot correctly", () => {
|
|
157
|
-
const accordionData = [
|
|
158
|
-
{
|
|
159
|
-
label: "Gerry Kellman",
|
|
160
|
-
panel: (
|
|
161
|
-
<Card
|
|
162
|
-
id="card"
|
|
163
|
-
imageProps={{
|
|
164
|
-
alt: "Alt text",
|
|
165
|
-
aspectRatio: "twoByOne",
|
|
166
|
-
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",
|
|
167
|
-
}}
|
|
168
|
-
isCentered
|
|
169
|
-
layout="row"
|
|
170
|
-
>
|
|
171
|
-
<CardHeading id="heading1" level="four">
|
|
172
|
-
Gerry Kellman
|
|
173
|
-
</CardHeading>
|
|
174
|
-
<CardContent>
|
|
175
|
-
Gerri is <b>one of Logan's most trusted confidantes</b>, one who
|
|
176
|
-
serves many roles within the company. She's one of the most
|
|
177
|
-
powerful people at Waystar Royco outside of the family itself.
|
|
178
|
-
</CardContent>
|
|
179
|
-
</Card>
|
|
180
|
-
),
|
|
181
|
-
},
|
|
182
|
-
];
|
|
183
|
-
|
|
184
|
-
const primary = renderer
|
|
185
|
-
.create(<Accordion accordionData={accordionData} id="accordian" />)
|
|
186
|
-
.toJSON();
|
|
187
|
-
const defaultOpen = renderer
|
|
188
|
-
.create(
|
|
189
|
-
<Accordion accordionData={accordionData} id="accordian" isDefaultOpen />
|
|
190
|
-
)
|
|
191
|
-
.toJSON();
|
|
192
|
-
const withError = renderer
|
|
193
|
-
.create(
|
|
194
|
-
<Accordion
|
|
195
|
-
accordionData={[{ ...accordionData[0], accordionType: "error" }]}
|
|
196
|
-
id="accordian"
|
|
197
|
-
isDefaultOpen
|
|
198
|
-
/>
|
|
199
|
-
)
|
|
200
|
-
.toJSON();
|
|
201
|
-
const withWarning = renderer
|
|
202
|
-
.create(
|
|
203
|
-
<Accordion
|
|
204
|
-
accordionData={[{ ...accordionData[0], accordionType: "warning" }]}
|
|
205
|
-
id="accordian"
|
|
206
|
-
isDefaultOpen
|
|
207
|
-
/>
|
|
208
|
-
)
|
|
209
|
-
.toJSON();
|
|
210
|
-
const withChakraProps = renderer
|
|
211
|
-
.create(
|
|
212
|
-
<Accordion
|
|
213
|
-
accordionData={accordionData}
|
|
214
|
-
id="accordian"
|
|
215
|
-
p="s"
|
|
216
|
-
color="ui.error.primary"
|
|
217
|
-
/>
|
|
218
|
-
)
|
|
219
|
-
.toJSON();
|
|
220
|
-
const withOtherProps = renderer
|
|
221
|
-
.create(
|
|
222
|
-
<Accordion
|
|
223
|
-
accordionData={accordionData}
|
|
224
|
-
id="accordian"
|
|
225
|
-
data-testid="testid"
|
|
226
|
-
/>
|
|
227
|
-
)
|
|
228
|
-
.toJSON();
|
|
229
|
-
|
|
230
|
-
expect(primary).toMatchSnapshot();
|
|
231
|
-
expect(defaultOpen).toMatchSnapshot();
|
|
232
|
-
expect(withChakraProps).toMatchSnapshot();
|
|
233
|
-
expect(withOtherProps).toMatchSnapshot();
|
|
234
|
-
expect(withError).toMatchSnapshot();
|
|
235
|
-
expect(withWarning).toMatchSnapshot();
|
|
236
|
-
});
|
|
237
|
-
});
|