@nypl/design-system-react-components 0.25.12 → 0.26.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +131 -1
- package/README.md +10 -10
- package/dist/components/Accordion/Accordion.d.ts +6 -4
- package/dist/components/Accordion/AccordionTypes.d.ts +5 -0
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +4 -4
- package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +1 -1
- package/dist/components/Button/Button.d.ts +2 -2
- package/dist/components/Card/Card.d.ts +22 -29
- package/dist/components/Checkbox/Checkbox.d.ts +3 -3
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +9 -6
- package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +1 -1
- package/dist/components/DatePicker/DatePicker.d.ts +5 -6
- package/dist/components/Fieldset/Fieldset.d.ts +5 -6
- package/dist/components/Form/Form.d.ts +6 -6
- package/dist/components/Grid/GridTypes.d.ts +7 -7
- package/dist/components/Grid/SimpleGrid.d.ts +1 -1
- package/dist/components/Heading/Heading.d.ts +5 -5
- package/dist/components/Heading/HeadingTypes.d.ts +1 -1
- package/dist/components/HelperErrorText/HelperErrorText.d.ts +9 -8
- package/dist/components/Hero/Hero.d.ts +9 -5
- package/dist/components/HorizontalRule/HorizontalRule.d.ts +2 -10
- package/dist/components/Icons/Icon.d.ts +2 -1
- package/dist/components/Icons/IconTypes.d.ts +1 -0
- package/dist/components/Image/Image.d.ts +27 -9
- package/dist/components/Image/ImageTypes.d.ts +4 -4
- package/dist/components/Label/Label.d.ts +7 -4
- package/dist/components/Link/Link.d.ts +1 -1
- package/dist/components/List/List.d.ts +11 -11
- package/dist/components/List/ListTypes.d.ts +1 -1
- package/dist/components/Logo/Logo.d.ts +2 -1
- package/dist/components/Logo/LogoSvgs.d.ts +2 -0
- package/dist/components/Logo/LogoTypes.d.ts +4 -2
- package/dist/components/Notification/Notification.d.ts +7 -7
- package/dist/components/Pagination/Pagination.d.ts +2 -2
- package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +3 -3
- package/dist/components/Radio/Radio.d.ts +5 -7
- package/dist/components/RadioGroup/RadioGroup.d.ts +16 -8
- package/dist/components/SearchBar/SearchBar.d.ts +4 -4
- package/dist/components/Select/Select.d.ts +12 -8
- package/dist/components/Select/SelectTypes.d.ts +4 -0
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +8 -6
- package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +0 -4
- package/dist/components/Slider/Slider.d.ts +6 -4
- package/dist/components/StatusBadge/StatusBadge.d.ts +5 -1
- package/dist/components/StructuredContent/StructuredContent.d.ts +10 -23
- package/dist/components/Table/Table.d.ts +1 -1
- package/dist/components/Tabs/Tabs.d.ts +7 -6
- package/dist/components/Template/Template.d.ts +17 -8
- package/dist/components/Text/Text.d.ts +4 -4
- package/dist/components/Text/TextTypes.d.ts +1 -1
- package/dist/components/TextInput/TextInput.d.ts +7 -7
- package/dist/components/Toggle/Toggle.d.ts +8 -10
- package/dist/components/Toggle/{ToggleSizes.d.ts → ToggleTypes.d.ts} +1 -1
- package/dist/components/VideoPlayer/VideoPlayer.d.ts +2 -1
- package/dist/design-system-react-components.cjs.development.js +2075 -1468
- package/dist/design-system-react-components.cjs.development.js.map +1 -1
- package/dist/design-system-react-components.cjs.production.min.js +1 -1
- package/dist/design-system-react-components.cjs.production.min.js.map +1 -1
- package/dist/design-system-react-components.esm.js +2086 -1483
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/helpers/enums.d.ts +4 -0
- package/dist/hooks/useCarouselStyles.d.ts +3 -2
- package/dist/hooks/useNYPLTheme.d.ts +12 -0
- package/dist/index.d.ts +11 -9
- package/dist/styles.css +1 -1
- package/dist/theme/components/accordion.d.ts +7 -12
- package/dist/theme/components/breadcrumb.d.ts +3 -0
- package/dist/theme/components/button.d.ts +10 -2
- package/dist/theme/components/card.d.ts +44 -24
- package/dist/theme/components/checkbox.d.ts +6 -4
- package/dist/theme/components/checkboxGroup.d.ts +4 -2
- package/dist/theme/components/componentWrapper.d.ts +2 -2
- package/dist/theme/components/customTable.d.ts +84 -1
- package/dist/theme/components/fieldset.d.ts +4 -14
- package/dist/theme/components/global.d.ts +25 -18
- package/dist/theme/components/heading.d.ts +53 -0
- package/dist/theme/components/helperErrorText.d.ts +1 -0
- package/dist/theme/components/hero.d.ts +21 -15
- package/dist/theme/components/image.d.ts +1 -1
- package/dist/theme/components/label.d.ts +9 -10
- package/dist/theme/components/list.d.ts +99 -9
- package/dist/theme/components/notification.d.ts +4 -4
- package/dist/theme/components/pagination.d.ts +2 -5
- package/dist/theme/components/radio.d.ts +7 -4
- package/dist/theme/components/radioGroup.d.ts +4 -2
- package/dist/theme/components/select.d.ts +37 -5
- package/dist/theme/components/skeletonLoader.d.ts +2 -2
- package/dist/theme/components/slider.d.ts +6 -3
- package/dist/theme/components/structuredContent.d.ts +197 -0
- package/dist/theme/components/textInput.d.ts +18 -6
- package/dist/theme/components/toggle.d.ts +20 -5
- package/dist/theme/foundations/global.d.ts +2 -0
- package/dist/theme/foundations/radii.d.ts +1 -0
- package/dist/theme/foundations/spacing.d.ts +46 -43
- package/package.json +5 -6
- package/src/components/AccessibilityGuide/SkipNavigation.stories.mdx +34 -0
- package/src/components/Accordion/Accordion.stories.mdx +150 -66
- package/src/components/Accordion/Accordion.test.tsx +65 -17
- package/src/components/Accordion/Accordion.tsx +61 -27
- package/src/components/Accordion/AccordionTypes.tsx +5 -0
- package/src/components/Accordion/__snapshots__/Accordion.test.tsx.snap +505 -14
- package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -3
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +37 -19
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +57 -36
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +14 -13
- package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +1 -1
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +211 -12
- package/src/components/Button/Button.stories.mdx +87 -23
- package/src/components/Button/Button.test.tsx +25 -0
- package/src/components/Button/Button.tsx +18 -7
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +27 -7
- package/src/components/Card/Card.stories.mdx +493 -329
- package/src/components/Card/Card.test.tsx +138 -18
- package/src/components/Card/Card.tsx +151 -85
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +221 -101
- package/src/components/Chakra/Center.stories.mdx +2 -2
- package/src/components/Chakra/Grid.stories.mdx +4 -4
- package/src/components/Checkbox/Checkbox.stories.mdx +73 -9
- package/src/components/Checkbox/Checkbox.test.tsx +89 -10
- package/src/components/Checkbox/Checkbox.tsx +26 -16
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +209 -6
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +135 -23
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +216 -90
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +39 -26
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +493 -89
- package/src/components/ComponentWrapper/ComponentWrapper.test.tsx +12 -0
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +39 -41
- package/src/components/ComponentWrapper/__snapshots__/ComponentWrapper.test.tsx.snap +47 -34
- package/src/components/DatePicker/DatePicker.stories.mdx +63 -27
- package/src/components/DatePicker/DatePicker.test.tsx +94 -15
- package/src/components/DatePicker/DatePicker.tsx +67 -58
- package/src/components/DatePicker/_DatePicker.scss +71 -13
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +250 -206
- package/src/components/Fieldset/Fieldset.stories.mdx +33 -3
- package/src/components/Fieldset/Fieldset.test.tsx +58 -28
- package/src/components/Fieldset/Fieldset.tsx +35 -30
- package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +40 -19
- package/src/components/Form/Form.stories.mdx +118 -47
- package/src/components/Form/Form.test.tsx +59 -16
- package/src/components/Form/Form.tsx +89 -65
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +83 -5
- package/src/components/Grid/GridTypes.tsx +7 -7
- package/src/components/Grid/SimpleGrid.stories.mdx +87 -41
- package/src/components/Grid/SimpleGrid.test.tsx +24 -9
- package/src/components/Grid/SimpleGrid.tsx +29 -20
- package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +16 -1
- package/src/components/Heading/Heading.stories.mdx +56 -25
- package/src/components/Heading/Heading.test.tsx +17 -7
- package/src/components/Heading/Heading.tsx +60 -58
- package/src/components/Heading/HeadingTypes.tsx +1 -1
- package/src/components/Heading/__snapshots__/Heading.test.tsx.snap +27 -8
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +64 -42
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +15 -0
- package/src/components/HelperErrorText/HelperErrorText.tsx +40 -35
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +35 -4
- package/src/components/Hero/Hero.stories.mdx +143 -113
- package/src/components/Hero/Hero.test.tsx +146 -58
- package/src/components/Hero/Hero.tsx +144 -112
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +89 -17
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +26 -4
- package/src/components/HorizontalRule/HorizontalRule.test.tsx +9 -17
- package/src/components/HorizontalRule/HorizontalRule.tsx +9 -25
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +18 -5
- package/src/components/Icons/Icon.stories.mdx +80 -23
- package/src/components/Icons/Icon.test.tsx +51 -2
- package/src/components/Icons/Icon.tsx +93 -71
- package/src/components/Icons/IconTypes.tsx +1 -0
- package/src/components/Icons/__snapshots__/Icon.test.tsx.snap +129 -0
- package/src/components/Image/Image.stories.mdx +160 -71
- package/src/components/Image/Image.test.tsx +40 -48
- package/src/components/Image/Image.tsx +80 -48
- package/src/components/Image/ImageTypes.ts +4 -4
- package/src/components/Image/__snapshots__/Image.test.tsx.snap +84 -21
- package/src/components/Label/Label.stories.mdx +42 -20
- package/src/components/Label/Label.test.tsx +42 -17
- package/src/components/Label/Label.tsx +22 -13
- package/src/components/Label/__snapshots__/Label.test.tsx.snap +19 -15
- package/src/components/Link/Link.stories.mdx +25 -1
- package/src/components/Link/Link.test.tsx +21 -0
- package/src/components/Link/Link.tsx +16 -9
- package/src/components/Link/__snapshots__/Link.test.tsx.snap +37 -11
- package/src/components/List/List.stories.mdx +75 -40
- package/src/components/List/List.test.tsx +73 -22
- package/src/components/List/List.tsx +44 -28
- package/src/components/List/ListTypes.tsx +1 -1
- package/src/components/List/__snapshots__/List.test.tsx.snap +110 -8
- package/src/components/Logo/Logo.stories.mdx +40 -16
- package/src/components/Logo/Logo.test.tsx +29 -2
- package/src/components/Logo/Logo.tsx +28 -11
- package/src/components/Logo/LogoSvgs.tsx +4 -0
- package/src/components/Logo/LogoTypes.tsx +3 -1
- package/src/components/Logo/__snapshots__/Logo.test.tsx.snap +73 -2
- package/src/components/Modal/Modal.stories.mdx +13 -0
- package/src/components/Notification/Notification.stories.mdx +29 -5
- package/src/components/Notification/Notification.test.tsx +23 -0
- package/src/components/Notification/Notification.tsx +53 -51
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +158 -29
- package/src/components/Pagination/Pagination.stories.mdx +27 -6
- package/src/components/Pagination/Pagination.test.tsx +55 -2
- package/src/components/Pagination/Pagination.tsx +12 -9
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +244 -27
- package/src/components/Placeholder/Placeholder.tsx +3 -1
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +76 -10
- package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +87 -13
- package/src/components/ProgressIndicator/ProgressIndicator.tsx +20 -10
- package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +101 -14
- package/src/components/Radio/Radio.stories.mdx +75 -11
- package/src/components/Radio/Radio.test.tsx +83 -9
- package/src/components/Radio/Radio.tsx +70 -62
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +163 -5
- package/src/components/RadioGroup/RadioGroup.stories.mdx +293 -94
- package/src/components/RadioGroup/RadioGroup.test.tsx +193 -68
- package/src/components/RadioGroup/RadioGroup.tsx +110 -101
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +1258 -902
- package/src/components/SearchBar/SearchBar.stories.mdx +101 -36
- package/src/components/SearchBar/{SearchBar.Test.tsx → SearchBar.test.tsx} +46 -4
- package/src/components/SearchBar/SearchBar.tsx +20 -11
- package/src/components/SearchBar/__snapshots__/SearchBar.test.tsx.snap +1039 -0
- package/src/components/Select/Select.stories.mdx +151 -62
- package/src/components/Select/Select.test.tsx +56 -44
- package/src/components/Select/Select.tsx +125 -104
- package/src/components/Select/SelectTypes.tsx +5 -0
- package/src/components/Select/__snapshots__/Select.test.tsx.snap +749 -409
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +53 -23
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +14 -8
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +80 -78
- package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +0 -5
- package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +169 -10
- package/src/components/Slider/Slider.stories.mdx +123 -41
- package/src/components/Slider/Slider.test.tsx +65 -17
- package/src/components/Slider/Slider.tsx +30 -23
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +403 -226
- package/src/components/StatusBadge/StatusBadge.stories.mdx +19 -1
- package/src/components/StatusBadge/StatusBadge.test.tsx +19 -1
- package/src/components/StatusBadge/StatusBadge.tsx +25 -20
- package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +22 -3
- package/src/components/StructuredContent/StructuredContent.stories.mdx +229 -61
- package/src/components/StructuredContent/StructuredContent.test.tsx +162 -101
- package/src/components/StructuredContent/StructuredContent.tsx +98 -103
- package/src/components/StructuredContent/__snapshots__/StructuredContent.test.tsx.snap +102 -17
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +5 -5
- package/src/components/StyleGuide/Breakpoints.stories.mdx +6 -6
- package/src/components/StyleGuide/Buttons.stories.mdx +2 -12
- package/src/components/StyleGuide/ColorCard.tsx +4 -4
- package/src/components/StyleGuide/Colors.stories.mdx +1 -2
- package/src/components/StyleGuide/DesignTokens.stories.mdx +56 -26
- package/src/components/StyleGuide/Forms.stories.mdx +27 -12
- package/src/components/StyleGuide/Iconography.stories.mdx +2 -12
- package/src/components/StyleGuide/Spacing.stories.mdx +80 -41
- package/src/components/StyleGuide/Typography.stories.mdx +47 -33
- package/src/components/Table/Table.stories.mdx +38 -11
- package/src/components/Table/Table.test.tsx +16 -1
- package/src/components/Table/Table.tsx +10 -8
- package/src/components/Table/__snapshots__/Table.test.tsx.snap +408 -5
- package/src/components/Tabs/Tabs.stories.mdx +59 -10
- package/src/components/Tabs/Tabs.test.tsx +29 -11
- package/src/components/Tabs/Tabs.tsx +28 -21
- package/src/components/Tabs/__snapshots__/Tabs.test.tsx.snap +394 -5
- package/src/components/Template/Template.stories.mdx +73 -32
- package/src/components/Template/Template.test.tsx +68 -5
- package/src/components/Template/Template.tsx +89 -71
- package/src/components/Template/__snapshots__/Template.test.tsx.snap +195 -22
- package/src/components/Text/Text.stories.mdx +32 -15
- package/src/components/Text/Text.test.tsx +14 -11
- package/src/components/Text/Text.tsx +13 -16
- package/src/components/Text/TextTypes.tsx +1 -1
- package/src/components/Text/__snapshots__/Text.test.tsx.snap +21 -4
- package/src/components/TextInput/TextInput.stories.mdx +73 -27
- package/src/components/TextInput/TextInput.test.tsx +65 -50
- package/src/components/TextInput/TextInput.tsx +123 -115
- package/src/components/TextInput/__snapshots__/TextInput.test.tsx.snap +96 -73
- package/src/components/Toggle/Toggle.stories.mdx +74 -26
- package/src/components/Toggle/Toggle.test.tsx +41 -10
- package/src/components/Toggle/Toggle.tsx +29 -26
- package/src/components/Toggle/{ToggleSizes.tsx → ToggleTypes.tsx} +1 -1
- package/src/components/Toggle/__snapshots__/Toggle.test.tsx.snap +191 -4
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +52 -4
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +41 -6
- package/src/components/VideoPlayer/VideoPlayer.tsx +134 -120
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +81 -39
- package/src/docs/Chakra.stories.mdx +50 -9
- package/src/docs/Welcome.stories.mdx +168 -0
- package/src/{components/Card/CardTypes.tsx → helpers/enums.ts} +2 -2
- package/src/hooks/tests/useNYPLTheme.test.tsx +1 -1
- package/src/hooks/useCarouselStyles.stories.mdx +30 -0
- package/src/hooks/useCarouselStyles.ts +3 -2
- package/src/hooks/useNYPLTheme.stories.mdx +101 -0
- package/src/hooks/useNYPLTheme.ts +31 -7
- package/src/hooks/useWindowSize.stories.mdx +23 -0
- package/src/index.ts +11 -15
- package/src/styles/base/_place-holder.scss +1 -1
- package/src/theme/components/accordion.ts +7 -12
- package/src/theme/components/breadcrumb.ts +3 -0
- package/src/theme/components/button.ts +15 -7
- package/src/theme/components/card.ts +56 -36
- package/src/theme/components/checkbox.ts +10 -8
- package/src/theme/components/checkboxGroup.ts +4 -2
- package/src/theme/components/componentWrapper.ts +2 -2
- package/src/theme/components/customTable.ts +39 -31
- package/src/theme/components/fieldset.ts +1 -2
- package/src/theme/components/global.ts +29 -23
- package/src/theme/components/heading.ts +1 -1
- package/src/theme/components/helperErrorText.ts +1 -0
- package/src/theme/components/hero.ts +14 -16
- package/src/theme/components/icon.ts +5 -2
- package/src/theme/components/image.ts +1 -1
- package/src/theme/components/label.ts +4 -3
- package/src/theme/components/list.ts +73 -66
- package/src/theme/components/notification.ts +7 -7
- package/src/theme/components/pagination.ts +2 -5
- package/src/theme/components/progressIndicator.ts +3 -3
- package/src/theme/components/radio.ts +9 -9
- package/src/theme/components/radioGroup.ts +4 -2
- package/src/theme/components/select.ts +35 -16
- package/src/theme/components/skeletonLoader.ts +3 -3
- package/src/theme/components/slider.ts +8 -7
- package/src/theme/components/statusBadge.ts +2 -2
- package/src/theme/components/structuredContent.ts +66 -1
- package/src/theme/components/tabs.ts +2 -2
- package/src/theme/components/template.ts +9 -9
- package/src/theme/components/textInput.ts +13 -12
- package/src/theme/components/toggle.ts +43 -13
- package/src/theme/components/videoPlayer.ts +1 -1
- package/src/theme/foundations/colors.ts +1 -1
- package/src/theme/foundations/radii.ts +1 -0
- package/src/theme/foundations/spacing.ts +70 -22
- package/src/theme/foundations/typography.ts +2 -2
- package/src/utils/componentCategories.ts +28 -21
- package/dist/components/Card/CardTypes.d.ts +0 -4
- package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +0 -4
- package/dist/components/RadioGroup/RadioGroupLayoutTypes.d.ts +0 -4
- package/dist/components/SearchBar/SearchBar.Test.d.ts +0 -1
- package/dist/helpers/generateUUID.d.ts +0 -1
- package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +0 -4
- package/src/components/RadioGroup/RadioGroupLayoutTypes.tsx +0 -4
- package/src/docs/Intro.stories.mdx +0 -53
- package/src/helpers/generateUUID.tsx +0 -5
|
@@ -9,10 +9,11 @@ import ReactDOMServer from "react-dom/server";
|
|
|
9
9
|
import { withDesign } from "storybook-addon-designs";
|
|
10
10
|
|
|
11
11
|
import Accordion from "./Accordion";
|
|
12
|
+
import { AccordionTypes } from "./AccordionTypes";
|
|
12
13
|
import Card, { CardHeading, CardContent } from "../Card/Card";
|
|
13
|
-
import { CardLayouts } from "../Card/CardTypes";
|
|
14
14
|
import { HeadingLevels } from "../Heading/HeadingTypes";
|
|
15
15
|
import { ImageRatios } from "../Image/ImageTypes";
|
|
16
|
+
import { LayoutTypes } from "../../helpers/enums";
|
|
16
17
|
import { getCategory } from "../../utils/componentCategories";
|
|
17
18
|
|
|
18
19
|
<Meta
|
|
@@ -27,7 +28,7 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
27
28
|
jest: ["Accordion.test.tsx"],
|
|
28
29
|
}}
|
|
29
30
|
argTypes={{
|
|
30
|
-
|
|
31
|
+
accordionData: { control: false },
|
|
31
32
|
id: { control: false },
|
|
32
33
|
isDefaultOpen: { table: { defaultValue: { summary: false } } },
|
|
33
34
|
}}
|
|
@@ -38,37 +39,85 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
38
39
|
| Component Version | DS Version |
|
|
39
40
|
| ----------------- | ---------- |
|
|
40
41
|
| Added | `0.1.0` |
|
|
41
|
-
| Latest | `0.
|
|
42
|
+
| Latest | `0.26.0` |
|
|
43
|
+
|
|
44
|
+
## Table of Contents
|
|
45
|
+
|
|
46
|
+
- [Overview](#overview)
|
|
47
|
+
- [Component Props](#component-props)
|
|
48
|
+
- [Accessibility](#accessibility)
|
|
49
|
+
- [FAQ Example](#faq-example)
|
|
50
|
+
|
|
51
|
+
## Overview
|
|
42
52
|
|
|
43
53
|
<Description of={Accordion} />
|
|
44
54
|
|
|
45
55
|
The `Accordion` component displays a list of high-level options that can
|
|
46
|
-
expand
|
|
47
|
-
existing content on the page down. Each accordion item is self contained
|
|
48
|
-
when
|
|
49
|
-
|
|
50
|
-
each
|
|
56
|
+
expand and collapse to reveal associated sections of content. This component
|
|
57
|
+
pushes existing content on the page down. Each accordion item is self contained,
|
|
58
|
+
but when the data for multiple accordions is passed in through the `accordionData`
|
|
59
|
+
prop, the `Accordion` components are grouped together and rendered under a single
|
|
60
|
+
element. When grouped like this, each `Accordion` component still opens and
|
|
61
|
+
closes independent from the others in the group.
|
|
51
62
|
|
|
52
63
|
The only way to render an `Accordion` component is to pass in an array of objects
|
|
53
|
-
with `label` and `
|
|
54
|
-
pass in a string or DOM elements into the `panel` property in each
|
|
55
|
-
approach is needed because, internally, we deal with the logic to render
|
|
56
|
-
necessary icon, Chakra components, and styles.
|
|
64
|
+
with `label`, `panel`, and optional `accordionType` properties for each accordion item.
|
|
65
|
+
Note that you can pass in a string or DOM elements into the `panel` property in each
|
|
66
|
+
object. This approach is needed because, internally, we deal with the logic to render
|
|
67
|
+
the necessary icon, Chakra components, and styles. Additionally, the `accordionType`
|
|
68
|
+
prop can be used to change the accordion button's background color. It takes a value
|
|
69
|
+
from the AccordionTypes enum: AccordionTypes.Default is `ui.white`, AccordionTypes.Warning
|
|
70
|
+
is `ui.status.primary`, and AccordionTypes.Error is `ui.status.secondary`.
|
|
71
|
+
|
|
72
|
+
```jsx
|
|
73
|
+
const accordionData = [
|
|
74
|
+
{
|
|
75
|
+
label: "Tom Nook",
|
|
76
|
+
panel: (
|
|
77
|
+
<Card
|
|
78
|
+
layout={CardLayouts.Row}
|
|
79
|
+
center
|
|
80
|
+
imageSrc="https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
|
|
81
|
+
imageAlt="Alt text"
|
|
82
|
+
imageAspectRatio={ImageRatios.TwoByOne}
|
|
83
|
+
>
|
|
84
|
+
<CardHeading level={HeadingLevels.Four} id="heading1">
|
|
85
|
+
Tom Nook
|
|
86
|
+
</CardHeading>
|
|
87
|
+
<CardContent>
|
|
88
|
+
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional
|
|
89
|
+
character in the Animal Crossing series who operates the
|
|
90
|
+
village store.
|
|
91
|
+
</CardContent>
|
|
92
|
+
</Card>
|
|
93
|
+
),
|
|
94
|
+
},
|
|
95
|
+
];
|
|
96
|
+
|
|
97
|
+
...
|
|
98
|
+
|
|
99
|
+
<Accordion accordionData={accordionData} />
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Component Props
|
|
57
103
|
|
|
58
104
|
<Canvas withToolbar>
|
|
59
105
|
<Story
|
|
60
106
|
name="Accordion with Controls"
|
|
61
107
|
args={{
|
|
62
|
-
|
|
108
|
+
accordionData: [
|
|
63
109
|
{
|
|
110
|
+
accordionType: AccordionTypes.Default,
|
|
64
111
|
label: "Tom Nook",
|
|
65
112
|
panel: (
|
|
66
113
|
<Card
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
114
|
+
imageProps={{
|
|
115
|
+
alt: "Alt text",
|
|
116
|
+
aspectRatio: ImageRatios.TwoByOne,
|
|
117
|
+
src: "https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
118
|
+
}}
|
|
119
|
+
isCentered
|
|
120
|
+
layout={LayoutTypes.Row}
|
|
72
121
|
>
|
|
73
122
|
<CardHeading level={HeadingLevels.Four} id="heading1">
|
|
74
123
|
Tom Nook
|
|
@@ -90,50 +139,70 @@ necessary icon, Chakra components, and styles.
|
|
|
90
139
|
</Story>
|
|
91
140
|
</Canvas>
|
|
92
141
|
|
|
142
|
+
<ArgsTable story="Accordion with Controls" />
|
|
143
|
+
|
|
93
144
|
```jsx
|
|
94
|
-
const
|
|
145
|
+
const accordionData = [
|
|
95
146
|
{
|
|
147
|
+
accordionType: AccordionTypes.Default,
|
|
96
148
|
label: "Tom Nook",
|
|
97
149
|
panel: (
|
|
98
150
|
<Card
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
151
|
+
imageProps={{
|
|
152
|
+
alt: "Alt text",
|
|
153
|
+
aspectRatio: ImageRatios.TwoByOne,
|
|
154
|
+
src: "https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
155
|
+
}}
|
|
156
|
+
isCentered
|
|
157
|
+
layout={LayoutTypes.Row}
|
|
104
158
|
>
|
|
105
159
|
<CardHeading level={HeadingLevels.Four} id="heading1">
|
|
106
160
|
Tom Nook
|
|
107
161
|
</CardHeading>
|
|
108
162
|
<CardContent>
|
|
109
|
-
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional
|
|
110
|
-
|
|
111
|
-
village store.
|
|
163
|
+
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional character
|
|
164
|
+
in the Animal Crossing series who operates the village store.
|
|
112
165
|
</CardContent>
|
|
113
166
|
</Card>
|
|
114
167
|
),
|
|
115
168
|
},
|
|
116
169
|
];
|
|
170
|
+
```
|
|
117
171
|
|
|
118
|
-
|
|
172
|
+
## Accessibility
|
|
119
173
|
|
|
120
|
-
|
|
121
|
-
|
|
174
|
+
- Follows [U.S. Web Design System (USWDS)](https://designsystem.digital.gov/components/accordion/)
|
|
175
|
+
guidelines:
|
|
176
|
+
- Use the `button` HTML element for screenreaders and keyboards.
|
|
177
|
+
- Use the `aria-expanded` attribute to indicate whether the `Accordion` is
|
|
178
|
+
expanded (`true`) or collapsed (`false`).
|
|
179
|
+
- Use the `aria-controls` attribute to associate the control with the panel.
|
|
180
|
+
- Deviates from USWDS in that the user can open multiple panels. Opening one,
|
|
181
|
+
does not collapse already expanded panel.
|
|
182
|
+
- The open and close icons are decorative (`aria-hidden` is `true`).
|
|
183
|
+
- Visible focus goes around full button and full button is clickable
|
|
122
184
|
|
|
123
|
-
|
|
185
|
+
Resources:
|
|
124
186
|
|
|
125
|
-
|
|
187
|
+
- [W3C WAI-Aria Practices - Accordion](https://www.w3.org/TR/wai-aria-practices-1.1/#accordion)
|
|
188
|
+
- [USWDS Accordion](https://designsystem.digital.gov/components/accordion/)
|
|
189
|
+
- [Chakra Accordion](https://chakra-ui.com/docs/components/disclosure/accordion)
|
|
190
|
+
|
|
191
|
+
## FAQ Example
|
|
126
192
|
|
|
127
193
|
export const faqContent = [
|
|
128
194
|
{
|
|
195
|
+
accordionType: AccordionTypes.Default,
|
|
129
196
|
label: "Tom Nook",
|
|
130
197
|
panel: (
|
|
131
198
|
<Card
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
199
|
+
imageProps={{
|
|
200
|
+
alt: "Alt text",
|
|
201
|
+
aspectRatio: ImageRatios.TwoByOne,
|
|
202
|
+
src: "https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
203
|
+
}}
|
|
204
|
+
isCentered
|
|
205
|
+
layout={LayoutTypes.Row}
|
|
137
206
|
>
|
|
138
207
|
<CardHeading level={HeadingLevels.Four} id="heading1-tom">
|
|
139
208
|
Tom Nook
|
|
@@ -146,14 +215,17 @@ export const faqContent = [
|
|
|
146
215
|
),
|
|
147
216
|
},
|
|
148
217
|
{
|
|
218
|
+
accordionType: AccordionTypes.Warning,
|
|
149
219
|
label: "Isabelle",
|
|
150
220
|
panel: (
|
|
151
221
|
<Card
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
222
|
+
imageProps={{
|
|
223
|
+
alt: "Alt text",
|
|
224
|
+
aspectRatio: ImageRatios.TwoByOne,
|
|
225
|
+
src: "https://play.nintendo.com/images/AC_Isabelle_7XU6aGu.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
226
|
+
}}
|
|
227
|
+
isCentered
|
|
228
|
+
layout={LayoutTypes.Row}
|
|
157
229
|
>
|
|
158
230
|
<CardHeading level={HeadingLevels.Four} id="heading1-isabelle">
|
|
159
231
|
Isabelle
|
|
@@ -168,14 +240,17 @@ export const faqContent = [
|
|
|
168
240
|
),
|
|
169
241
|
},
|
|
170
242
|
{
|
|
243
|
+
accordionType: AccordionTypes.Error,
|
|
171
244
|
label: "K.K. Slider",
|
|
172
245
|
panel: (
|
|
173
246
|
<Card
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
247
|
+
imageProps={{
|
|
248
|
+
alt: "Alt text",
|
|
249
|
+
aspectRatio: ImageRatios.TwoByOne,
|
|
250
|
+
src: "https://play.nintendo.com/images/AC_KK_jh4yj5t.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
251
|
+
}}
|
|
252
|
+
isCentered
|
|
253
|
+
layout={LayoutTypes.Row}
|
|
179
254
|
>
|
|
180
255
|
<CardHeading level={HeadingLevels.Four} id="heading1-kkslider">
|
|
181
256
|
K.K. Slider
|
|
@@ -194,25 +269,28 @@ export const faqContent = [
|
|
|
194
269
|
];
|
|
195
270
|
|
|
196
271
|
Building out FAQ-like accordions happens automatically when there are more than
|
|
197
|
-
one object in the array passed into the `
|
|
272
|
+
one object in the array passed into the `accordionData` prop.
|
|
198
273
|
|
|
199
274
|
<Canvas withToolbar>
|
|
200
|
-
<Story name="FAQ">
|
|
201
|
-
<Accordion
|
|
275
|
+
<Story name="FAQ Example">
|
|
276
|
+
<Accordion accordionData={faqContent} />
|
|
202
277
|
</Story>
|
|
203
278
|
</Canvas>
|
|
204
279
|
|
|
205
280
|
```jsx
|
|
206
281
|
export const faqContent = [
|
|
207
282
|
{
|
|
283
|
+
accordionType: AccordionTypes.Default,
|
|
208
284
|
label: "Tom Nook",
|
|
209
285
|
panel: (
|
|
210
286
|
<Card
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
287
|
+
imageProps={{
|
|
288
|
+
alt: "Alt text",
|
|
289
|
+
aspectRatio: ImageRatios.TwoByOne,
|
|
290
|
+
src: "https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
291
|
+
}}
|
|
292
|
+
isCentered
|
|
293
|
+
layout={LayoutTypes.Row}
|
|
216
294
|
>
|
|
217
295
|
<CardHeading level={HeadingLevels.Four} id="heading1-tom">
|
|
218
296
|
Tom Nook
|
|
@@ -225,14 +303,17 @@ export const faqContent = [
|
|
|
225
303
|
),
|
|
226
304
|
},
|
|
227
305
|
{
|
|
306
|
+
accordionType: AccordionTypes.Warning,
|
|
228
307
|
label: "Isabelle",
|
|
229
308
|
panel: (
|
|
230
309
|
<Card
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
310
|
+
imageProps={{
|
|
311
|
+
alt: "Alt text",
|
|
312
|
+
aspectRatio: ImageRatios.TwoByOne,
|
|
313
|
+
src: "https://play.nintendo.com/images/AC_Isabelle_7XU6aGu.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
314
|
+
}}
|
|
315
|
+
isCentered
|
|
316
|
+
layout={LayoutTypes.Row}
|
|
236
317
|
>
|
|
237
318
|
<CardHeading level={HeadingLevels.Four} id="heading1-isabelle">
|
|
238
319
|
Isabelle
|
|
@@ -247,14 +328,17 @@ export const faqContent = [
|
|
|
247
328
|
),
|
|
248
329
|
},
|
|
249
330
|
{
|
|
331
|
+
accordionType: AccordionTypes.Error,
|
|
250
332
|
label: "K.K. Slider",
|
|
251
333
|
panel: (
|
|
252
334
|
<Card
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
335
|
+
imageProps={{
|
|
336
|
+
alt: "Alt text",
|
|
337
|
+
aspectRatio: ImageRatios.TwoByOne,
|
|
338
|
+
src: "https://play.nintendo.com/images/AC_KK_jh4yj5t.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png",
|
|
339
|
+
}}
|
|
340
|
+
isCentered
|
|
341
|
+
layout={LayoutTypes.Row}
|
|
258
342
|
>
|
|
259
343
|
<CardHeading level={HeadingLevels.Four} id="heading1-kkslider">
|
|
260
344
|
K.K. Slider
|
|
@@ -274,5 +358,5 @@ export const faqContent = [
|
|
|
274
358
|
|
|
275
359
|
...
|
|
276
360
|
|
|
277
|
-
<Accordion
|
|
361
|
+
<Accordion accordionData={faqContent} />
|
|
278
362
|
```
|
|
@@ -5,16 +5,17 @@ import renderer from "react-test-renderer";
|
|
|
5
5
|
import userEvent from "@testing-library/user-event";
|
|
6
6
|
|
|
7
7
|
import Accordion from "./Accordion";
|
|
8
|
+
import { AccordionTypes } from "./AccordionTypes";
|
|
8
9
|
import Card, { CardContent, CardHeading } from "../Card/Card";
|
|
9
|
-
import { CardLayouts } from "../Card/CardTypes";
|
|
10
10
|
import { HeadingLevels } from "../Heading/HeadingTypes";
|
|
11
11
|
import { ImageRatios } from "../Image/ImageTypes";
|
|
12
|
+
import { LayoutTypes } from "../../helpers/enums";
|
|
12
13
|
|
|
13
14
|
describe("Accordion Accessibility", () => {
|
|
14
15
|
it("passes axe accessibility test for one item", async () => {
|
|
15
16
|
const { container } = render(
|
|
16
17
|
<Accordion
|
|
17
|
-
|
|
18
|
+
accordionData={[
|
|
18
19
|
{
|
|
19
20
|
label: "Tom Nook",
|
|
20
21
|
panel: (
|
|
@@ -34,7 +35,7 @@ describe("Accordion Accessibility", () => {
|
|
|
34
35
|
it("passes axe accessibility test for multiple items", async () => {
|
|
35
36
|
const { container } = render(
|
|
36
37
|
<Accordion
|
|
37
|
-
|
|
38
|
+
accordionData={[
|
|
38
39
|
{
|
|
39
40
|
label: "Tom Nook",
|
|
40
41
|
panel: (
|
|
@@ -60,7 +61,7 @@ describe("Accordion Accessibility", () => {
|
|
|
60
61
|
});
|
|
61
62
|
});
|
|
62
63
|
|
|
63
|
-
export const
|
|
64
|
+
export const accordionData = [
|
|
64
65
|
{
|
|
65
66
|
label: "Tom Nook",
|
|
66
67
|
panel: (
|
|
@@ -90,7 +91,7 @@ export const contentData = [
|
|
|
90
91
|
|
|
91
92
|
describe("Accordion", () => {
|
|
92
93
|
it("renders a visible button with a label to click on", () => {
|
|
93
|
-
render(<Accordion
|
|
94
|
+
render(<Accordion accordionData={[accordionData[0]]} />);
|
|
94
95
|
const accordionLabel = screen.getByRole("button", { name: "Tom Nook" });
|
|
95
96
|
|
|
96
97
|
expect(accordionLabel).toBeInTheDocument();
|
|
@@ -100,7 +101,7 @@ describe("Accordion", () => {
|
|
|
100
101
|
});
|
|
101
102
|
|
|
102
103
|
it("opens the panel by default with isDefaultOpen passed", () => {
|
|
103
|
-
render(<Accordion isDefaultOpen
|
|
104
|
+
render(<Accordion isDefaultOpen accordionData={[accordionData[0]]} />);
|
|
104
105
|
const accordionLabel = screen.getByRole("button", { name: "Tom Nook" });
|
|
105
106
|
|
|
106
107
|
expect(accordionLabel).toBeInTheDocument();
|
|
@@ -108,7 +109,7 @@ describe("Accordion", () => {
|
|
|
108
109
|
});
|
|
109
110
|
|
|
110
111
|
it("opens the accordion when the label is clicked", () => {
|
|
111
|
-
render(<Accordion
|
|
112
|
+
render(<Accordion accordionData={[accordionData[0]]} />);
|
|
112
113
|
|
|
113
114
|
const accordionLabel = screen.getByRole("button", { name: "Tom Nook" });
|
|
114
115
|
expect(accordionLabel).toHaveAttribute("aria-expanded", "false");
|
|
@@ -117,7 +118,7 @@ describe("Accordion", () => {
|
|
|
117
118
|
});
|
|
118
119
|
|
|
119
120
|
it("renders multiple accordion items grouped together", () => {
|
|
120
|
-
render(<Accordion
|
|
121
|
+
render(<Accordion accordionData={accordionData} />);
|
|
121
122
|
|
|
122
123
|
const accordion1 = screen.getByRole("button", { name: "Tom Nook" });
|
|
123
124
|
const accordion2 = screen.getByRole("button", { name: "Isabelle" });
|
|
@@ -129,7 +130,7 @@ describe("Accordion", () => {
|
|
|
129
130
|
});
|
|
130
131
|
|
|
131
132
|
it("opens each accordion item independently of each other", () => {
|
|
132
|
-
render(<Accordion
|
|
133
|
+
render(<Accordion accordionData={accordionData} />);
|
|
133
134
|
|
|
134
135
|
const accordion1 = screen.getByRole("button", { name: "Tom Nook" });
|
|
135
136
|
const accordion2 = screen.getByRole("button", { name: "Isabelle" });
|
|
@@ -157,17 +158,19 @@ describe("Accordion", () => {
|
|
|
157
158
|
});
|
|
158
159
|
|
|
159
160
|
it("Renders the UI snapshot correctly", () => {
|
|
160
|
-
const
|
|
161
|
+
const accordionData = [
|
|
161
162
|
{
|
|
162
163
|
label: "Gerry Kellman",
|
|
163
164
|
panel: (
|
|
164
165
|
<Card
|
|
165
|
-
center
|
|
166
166
|
id="card"
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
167
|
+
imageProps={{
|
|
168
|
+
alt: "Alt text",
|
|
169
|
+
aspectRatio: ImageRatios.TwoByOne,
|
|
170
|
+
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",
|
|
171
|
+
}}
|
|
172
|
+
isCentered
|
|
173
|
+
layout={LayoutTypes.Row}
|
|
171
174
|
>
|
|
172
175
|
<CardHeading id="heading1" level={HeadingLevels.Four}>
|
|
173
176
|
Gerry Kellman
|
|
@@ -183,15 +186,60 @@ describe("Accordion", () => {
|
|
|
183
186
|
];
|
|
184
187
|
|
|
185
188
|
const primary = renderer
|
|
186
|
-
.create(<Accordion
|
|
189
|
+
.create(<Accordion accordionData={accordionData} id="accordian" />)
|
|
187
190
|
.toJSON();
|
|
188
191
|
const defaultOpen = renderer
|
|
189
192
|
.create(
|
|
190
|
-
<Accordion
|
|
193
|
+
<Accordion accordionData={accordionData} id="accordian" isDefaultOpen />
|
|
194
|
+
)
|
|
195
|
+
.toJSON();
|
|
196
|
+
const withError = renderer
|
|
197
|
+
.create(
|
|
198
|
+
<Accordion
|
|
199
|
+
accordionData={[
|
|
200
|
+
{ ...accordionData[0], accordionType: AccordionTypes.Error },
|
|
201
|
+
]}
|
|
202
|
+
id="accordian"
|
|
203
|
+
isDefaultOpen
|
|
204
|
+
/>
|
|
205
|
+
)
|
|
206
|
+
.toJSON();
|
|
207
|
+
const withWarning = renderer
|
|
208
|
+
.create(
|
|
209
|
+
<Accordion
|
|
210
|
+
accordionData={[
|
|
211
|
+
{ ...accordionData[0], accordionType: AccordionTypes.Warning },
|
|
212
|
+
]}
|
|
213
|
+
id="accordian"
|
|
214
|
+
isDefaultOpen
|
|
215
|
+
/>
|
|
216
|
+
)
|
|
217
|
+
.toJSON();
|
|
218
|
+
const withChakraProps = renderer
|
|
219
|
+
.create(
|
|
220
|
+
<Accordion
|
|
221
|
+
accordionData={accordionData}
|
|
222
|
+
id="accordian"
|
|
223
|
+
p="s"
|
|
224
|
+
color="ui.error.primary"
|
|
225
|
+
/>
|
|
226
|
+
)
|
|
227
|
+
.toJSON();
|
|
228
|
+
const withOtherProps = renderer
|
|
229
|
+
.create(
|
|
230
|
+
<Accordion
|
|
231
|
+
accordionData={accordionData}
|
|
232
|
+
id="accordian"
|
|
233
|
+
data-testid="testid"
|
|
234
|
+
/>
|
|
191
235
|
)
|
|
192
236
|
.toJSON();
|
|
193
237
|
|
|
194
238
|
expect(primary).toMatchSnapshot();
|
|
195
239
|
expect(defaultOpen).toMatchSnapshot();
|
|
240
|
+
expect(withChakraProps).toMatchSnapshot();
|
|
241
|
+
expect(withOtherProps).toMatchSnapshot();
|
|
242
|
+
expect(withError).toMatchSnapshot();
|
|
243
|
+
expect(withWarning).toMatchSnapshot();
|
|
196
244
|
});
|
|
197
245
|
});
|
|
@@ -1,24 +1,25 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
1
|
import {
|
|
3
|
-
Box,
|
|
4
2
|
Accordion as ChakraAccordion,
|
|
5
3
|
AccordionItem,
|
|
6
4
|
AccordionButton,
|
|
7
5
|
AccordionPanel,
|
|
6
|
+
Box,
|
|
7
|
+
chakra,
|
|
8
8
|
} from "@chakra-ui/react";
|
|
9
|
+
import * as React from "react";
|
|
9
10
|
|
|
11
|
+
import { AccordionTypes } from "./AccordionTypes";
|
|
10
12
|
import Icon from "../Icons/Icon";
|
|
11
13
|
import { IconNames, IconSizes } from "../Icons/IconTypes";
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
export interface AccordionContentDataProps {
|
|
14
|
+
export interface AccordionDataProps {
|
|
15
|
+
accordionType?: AccordionTypes;
|
|
15
16
|
label: string;
|
|
16
17
|
panel: string | React.ReactNode;
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
export interface AccordionProps {
|
|
20
|
-
/** Array of data to display */
|
|
21
|
-
|
|
21
|
+
/** Array of data to display, and an optional accordionType */
|
|
22
|
+
accordionData: AccordionDataProps[];
|
|
22
23
|
/** ID that other components can cross reference for accessibility purposes */
|
|
23
24
|
id?: string;
|
|
24
25
|
/** Whether the accordion is open by default only on its initial rendering */
|
|
@@ -45,7 +46,12 @@ const getIcon = (isExpanded = false, index, id) => {
|
|
|
45
46
|
* array. This automatically creates the `AccordionButton` and `AccordionPanel`
|
|
46
47
|
* combination that is required for the Chakra `Accordion` component.
|
|
47
48
|
*/
|
|
48
|
-
const
|
|
49
|
+
const getElementsFromData = (data = [], id) => {
|
|
50
|
+
const colorMap = {
|
|
51
|
+
[AccordionTypes.Default]: "ui.white",
|
|
52
|
+
[AccordionTypes.Warning]: "ui.status.primary",
|
|
53
|
+
[AccordionTypes.Error]: "ui.status.secondary",
|
|
54
|
+
};
|
|
49
55
|
// For FAQ-style multiple accordions, the button should be bigger.
|
|
50
56
|
// Otherwise, use the default.
|
|
51
57
|
const multiplePadding = data?.length > 1 ? 4 : null;
|
|
@@ -68,20 +74,43 @@ const getElementsFromContentData = (data = [], id) => {
|
|
|
68
74
|
return (
|
|
69
75
|
<AccordionItem id={`${id}-item-${index}`} key={index}>
|
|
70
76
|
{/* Get the current state to render the correct icon. */}
|
|
71
|
-
{({ isExpanded }) =>
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
{
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
77
|
+
{({ isExpanded }) => {
|
|
78
|
+
const bgColorByAccordionType = colorMap[content.accordionType];
|
|
79
|
+
return (
|
|
80
|
+
<>
|
|
81
|
+
<AccordionButton
|
|
82
|
+
id={`${id}-button-${index}`}
|
|
83
|
+
padding={multiplePadding}
|
|
84
|
+
bg={
|
|
85
|
+
!content.accordionType
|
|
86
|
+
? colorMap.default
|
|
87
|
+
: bgColorByAccordionType
|
|
88
|
+
}
|
|
89
|
+
_expanded={{
|
|
90
|
+
bg:
|
|
91
|
+
!content.accordionType ||
|
|
92
|
+
content.accordionType === "default"
|
|
93
|
+
? "ui.gray.light-cool"
|
|
94
|
+
: bgColorByAccordionType,
|
|
95
|
+
}}
|
|
96
|
+
_hover={{
|
|
97
|
+
bg:
|
|
98
|
+
!content.accordionType ||
|
|
99
|
+
content.accordionType === "default"
|
|
100
|
+
? "transparent"
|
|
101
|
+
: bgColorByAccordionType,
|
|
102
|
+
borderColor: "ui.gray.dark",
|
|
103
|
+
}}
|
|
104
|
+
>
|
|
105
|
+
<Box flex="1" textAlign="left">
|
|
106
|
+
{content.label}
|
|
107
|
+
</Box>
|
|
108
|
+
{getIcon(isExpanded, index, id)}
|
|
109
|
+
</AccordionButton>
|
|
110
|
+
{panel}
|
|
111
|
+
</>
|
|
112
|
+
);
|
|
113
|
+
}}
|
|
85
114
|
</AccordionItem>
|
|
86
115
|
);
|
|
87
116
|
});
|
|
@@ -91,16 +120,21 @@ const getElementsFromContentData = (data = [], id) => {
|
|
|
91
120
|
* Accordion component that shows content on toggle. Can be used to display
|
|
92
121
|
* multiple accordion items together.
|
|
93
122
|
*/
|
|
94
|
-
|
|
95
|
-
const {
|
|
123
|
+
export const Accordion = chakra((props: AccordionProps) => {
|
|
124
|
+
const { accordionData, id, isDefaultOpen = false, ...rest } = props;
|
|
96
125
|
|
|
97
126
|
// Pass `0` to open the first accordion in the 0-index based array.
|
|
98
127
|
const openFirstAccordion = isDefaultOpen ? 0 : undefined;
|
|
99
128
|
return (
|
|
100
|
-
<ChakraAccordion
|
|
101
|
-
{
|
|
129
|
+
<ChakraAccordion
|
|
130
|
+
id={id}
|
|
131
|
+
defaultIndex={[openFirstAccordion]}
|
|
132
|
+
allowMultiple
|
|
133
|
+
{...rest}
|
|
134
|
+
>
|
|
135
|
+
{getElementsFromData(accordionData, id)}
|
|
102
136
|
</ChakraAccordion>
|
|
103
137
|
);
|
|
104
|
-
}
|
|
138
|
+
});
|
|
105
139
|
|
|
106
140
|
export default Accordion;
|