@nypl/design-system-react-components 0.25.0 → 0.25.4
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 +142 -1
- package/README.md +98 -50
- package/dist/components/Accordion/Accordion.d.ts +14 -14
- package/dist/components/Breadcrumbs/Breadcrumbs.d.ts +15 -14
- package/dist/components/Breadcrumbs/BreadcrumbsTypes.d.ts +6 -0
- package/dist/components/Button/Button.d.ts +13 -8
- package/dist/components/Button/ButtonTypes.d.ts +3 -1
- package/dist/components/Card/Card.d.ts +36 -52
- package/dist/components/Card/CardTypes.d.ts +2 -17
- package/dist/components/Checkbox/Checkbox.d.ts +17 -13
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +45 -0
- package/dist/components/CheckboxGroup/CheckboxGroupLayoutTypes.d.ts +4 -0
- package/dist/components/ComponentWrapper/ComponentWrapper.d.ts +15 -0
- package/dist/components/DatePicker/DatePicker.d.ts +37 -35
- package/dist/components/Fieldset/Fieldset.d.ts +25 -0
- package/dist/components/Form/Form.d.ts +13 -8
- package/dist/components/Form/FormTypes.d.ts +2 -8
- package/dist/components/Grid/GridTypes.d.ts +9 -0
- package/dist/components/Grid/SimpleGrid.d.ts +14 -0
- package/dist/components/Heading/Heading.d.ts +4 -4
- package/dist/components/HelperErrorText/HelperErrorText.d.ts +17 -14
- package/dist/components/Hero/Hero.d.ts +19 -14
- package/dist/components/Hero/HeroTypes.d.ts +10 -5
- package/dist/components/HorizontalRule/HorizontalRule.d.ts +10 -9
- package/dist/components/Icons/Icon.d.ts +19 -14
- package/dist/components/Icons/IconSvgs.d.ts +11 -0
- package/dist/components/Icons/IconTypes.d.ts +89 -64
- package/dist/components/Image/Image.d.ts +19 -9
- package/dist/components/Image/ImageTypes.d.ts +20 -0
- package/dist/components/Label/Label.d.ts +5 -17
- package/dist/components/Link/Link.d.ts +12 -12
- package/dist/components/List/List.d.ts +19 -14
- package/dist/components/Notification/Notification.d.ts +37 -16
- package/dist/components/Pagination/Pagination.d.ts +16 -13
- package/dist/components/Pagination/Pagination.stories.d.ts +2 -0
- package/dist/components/ProgressIndicator/ProgressIndicator.d.ts +29 -0
- package/dist/components/ProgressIndicator/ProgressIndicatorTypes.d.ts +8 -0
- package/dist/components/Radio/Radio.d.ts +2 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts +4 -2
- package/dist/components/SearchBar/SearchBar.d.ts +45 -27
- package/dist/components/Select/Select.d.ts +34 -35
- package/dist/components/Select/SelectTypes.d.ts +4 -0
- package/dist/components/SkeletonLoader/SkeletonLoader.d.ts +18 -14
- package/dist/components/SkeletonLoader/SkeletonLoaderTypes.d.ts +2 -2
- package/dist/components/Slider/Slider.d.ts +57 -0
- package/dist/components/StatusBadge/StatusBadge.d.ts +8 -6
- package/dist/components/StatusBadge/StatusBadgeTypes.d.ts +5 -0
- package/dist/components/StyleGuide/ColorCard.d.ts +12 -0
- package/dist/components/Tabs/Tabs.d.ts +1 -1
- package/dist/components/Template/Template.d.ts +91 -0
- package/dist/components/Text/Text.d.ts +16 -0
- package/dist/components/Text/TextTypes.d.ts +6 -0
- package/dist/components/TextInput/TextInput.d.ts +44 -31
- package/dist/components/TextInput/TextInputTypes.d.ts +5 -0
- package/dist/components/VideoPlayer/VideoPlayer.d.ts +6 -8
- package/dist/components/VideoPlayer/VideoPlayerTypes.d.ts +2 -2
- package/dist/design-system-react-components.cjs.development.js +6473 -2630
- 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 +6463 -2631
- package/dist/design-system-react-components.esm.js.map +1 -1
- package/dist/hooks/tests/useCarouselStyles.test.d.ts +1 -0
- package/dist/hooks/useCarouselStyles.d.ts +16 -0
- package/dist/hooks/useNYPLTheme.d.ts +54 -0
- package/dist/hooks/useWindowSize.d.ts +10 -0
- package/dist/index.d.ts +19 -7
- package/dist/resources.scss +180 -170
- package/dist/styles.css +1 -1
- package/dist/theme/components/accordion.d.ts +25 -0
- package/dist/theme/components/breadcrumb.d.ts +90 -0
- package/dist/theme/components/button.d.ts +39 -15
- package/dist/theme/components/card.d.ts +168 -0
- package/dist/theme/components/checkbox.d.ts +12 -8
- package/dist/theme/components/checkboxGroup.d.ts +12 -0
- package/dist/theme/components/componentWrapper.d.ts +11 -0
- package/dist/theme/components/datePicker.d.ts +16 -0
- package/dist/theme/components/fieldset.d.ts +27 -0
- package/dist/theme/components/global.d.ts +65 -0
- package/dist/theme/components/globalMixins.d.ts +23 -0
- package/dist/theme/components/heading.d.ts +55 -20
- package/dist/theme/components/helperErrorText.d.ts +10 -0
- package/dist/theme/components/hero.d.ts +493 -0
- package/dist/theme/components/horizontalRule.d.ts +14 -0
- package/dist/theme/components/icon.d.ts +13 -0
- package/dist/theme/components/image.d.ts +31 -0
- package/dist/theme/components/label.d.ts +18 -0
- package/dist/theme/components/link.d.ts +49 -0
- package/dist/theme/components/list.d.ts +89 -0
- package/dist/theme/components/notification.d.ts +75 -0
- package/dist/theme/components/pagination.d.ts +19 -0
- package/dist/theme/components/progressIndicator.d.ts +50 -0
- package/dist/theme/components/radio.d.ts +8 -7
- package/dist/theme/components/radioGroup.d.ts +12 -0
- package/dist/theme/components/searchBar.d.ts +20 -0
- package/dist/theme/components/select.d.ts +67 -0
- package/dist/theme/components/skeletonLoader.d.ts +98 -0
- package/dist/theme/components/slider.d.ts +51 -0
- package/dist/theme/components/statusBadge.d.ts +25 -0
- package/dist/theme/components/tabs.d.ts +63 -12
- package/dist/theme/components/template.d.ts +105 -0
- package/dist/theme/components/text.d.ts +20 -0
- package/dist/theme/components/textInput.d.ts +112 -0
- package/dist/theme/components/videoPlayer.d.ts +40 -0
- package/dist/theme/foundations/breakpoints.d.ts +8 -8
- package/dist/theme/foundations/global.d.ts +8 -0
- package/dist/theme/foundations/radii.d.ts +5 -0
- package/dist/theme/foundations/shadows.d.ts +4 -0
- package/dist/theme/foundations/spacing.d.ts +16 -16
- package/dist/utils/utils.d.ts +6 -0
- package/package.json +72 -82
- package/src/__tests__/setup.ts +2 -2
- package/src/components/Accordion/Accordion.stories.mdx +223 -34
- package/src/components/Accordion/Accordion.test.tsx +135 -19
- package/src/components/Accordion/Accordion.tsx +81 -56
- package/src/components/Autosuggest/Autosuggest.stories.mdx +4 -4
- package/src/components/Autosuggest/Autosuggest.stories.tsx +3 -2
- package/src/components/Autosuggest/_Autosuggest.scss +5 -5
- package/src/components/Breadcrumbs/Breadcrumbs.stories.mdx +48 -50
- package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +54 -25
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +75 -73
- package/src/components/Breadcrumbs/BreadcrumbsTypes.tsx +6 -0
- package/src/components/Breadcrumbs/__snapshots__/Breadcrumbs.test.tsx.snap +298 -0
- package/src/components/Button/Button.stories.mdx +45 -36
- package/src/components/Button/Button.test.tsx +37 -11
- package/src/components/Button/Button.tsx +22 -34
- package/src/components/Button/ButtonTypes.tsx +2 -0
- package/src/components/Button/__snapshots__/Button.test.tsx.snap +50 -8
- package/src/components/Card/Card.stories.mdx +314 -273
- package/src/components/Card/Card.test.tsx +157 -91
- package/src/components/Card/Card.tsx +195 -145
- package/src/components/Card/CardTypes.tsx +2 -19
- package/src/components/Card/__snapshots__/Card.test.tsx.snap +410 -0
- package/src/components/CardEdition/CardEdition.stories.tsx +26 -53
- package/src/components/CardEdition/CardEdition.test.tsx +23 -31
- package/src/components/CardEdition/_CardEdition.scss +22 -23
- package/src/components/Chakra/Box.stories.mdx +15 -16
- package/src/components/Chakra/Center.stories.mdx +56 -24
- package/src/components/Chakra/Grid.stories.mdx +92 -0
- package/src/components/Chakra/Stack.stories.mdx +38 -21
- package/src/components/Checkbox/Checkbox.stories.mdx +33 -11
- package/src/components/Checkbox/Checkbox.test.tsx +47 -2
- package/src/components/Checkbox/Checkbox.tsx +44 -41
- package/src/components/Checkbox/__snapshots__/Checkbox.test.tsx.snap +92 -7
- package/src/components/CheckboxGroup/CheckboxGroup.stories.mdx +329 -0
- package/src/components/CheckboxGroup/CheckboxGroup.test.tsx +372 -0
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +152 -0
- package/src/components/CheckboxGroup/CheckboxGroupLayoutTypes.tsx +4 -0
- package/src/components/CheckboxGroup/__snapshots__/CheckboxGroup.test.tsx.snap +1326 -0
- package/src/components/ComponentWrapper/ComponentWrapper.tsx +63 -0
- package/src/components/DatePicker/DatePicker.stories.mdx +163 -62
- package/src/components/DatePicker/DatePicker.test.tsx +264 -64
- package/src/components/DatePicker/DatePicker.tsx +165 -134
- package/src/components/DatePicker/_DatePicker.scss +33 -66
- package/src/components/DatePicker/__snapshots__/DatePicker.test.tsx.snap +818 -0
- package/src/components/Fieldset/Fieldset.stories.mdx +55 -0
- package/src/components/Fieldset/Fieldset.test.tsx +125 -0
- package/src/components/Fieldset/Fieldset.tsx +52 -0
- package/src/components/Fieldset/__snapshots__/Fieldset.test.tsx.snap +68 -0
- package/src/components/Form/Form.stories.mdx +70 -27
- package/src/components/Form/Form.test.tsx +58 -45
- package/src/components/Form/Form.tsx +50 -21
- package/src/components/Form/FormTypes.tsx +3 -8
- package/src/components/Form/__snapshots__/Form.test.tsx.snap +24 -14
- package/src/components/Grid/GridTypes.tsx +9 -0
- package/src/components/Grid/SimpleGrid.stories.mdx +268 -0
- package/src/components/Grid/SimpleGrid.test.tsx +66 -0
- package/src/components/Grid/SimpleGrid.tsx +37 -0
- package/src/components/Grid/__snapshots__/SimpleGrid.test.tsx.snap +8 -0
- package/src/components/Heading/Heading.stories.mdx +3 -3
- package/src/components/Heading/Heading.tsx +12 -6
- package/src/components/HelperErrorText/HelperErrorText.stories.mdx +124 -0
- package/src/components/HelperErrorText/HelperErrorText.test.tsx +39 -44
- package/src/components/HelperErrorText/HelperErrorText.tsx +37 -39
- package/src/components/HelperErrorText/__snapshots__/HelperErrorText.test.tsx.snap +25 -0
- package/src/components/Hero/Hero.stories.mdx +198 -121
- package/src/components/Hero/Hero.test.tsx +537 -107
- package/src/components/Hero/Hero.tsx +79 -92
- package/src/components/Hero/HeroTypes.tsx +18 -5
- package/src/components/Hero/__snapshots__/Hero.test.tsx.snap +307 -0
- package/src/components/HorizontalRule/HorizontalRule.stories.mdx +8 -6
- package/src/components/HorizontalRule/HorizontalRule.test.tsx +33 -28
- package/src/components/HorizontalRule/HorizontalRule.tsx +27 -29
- package/src/components/HorizontalRule/__snapshots__/HorizontalRule.test.tsx.snap +27 -9
- package/src/components/Icons/Icon.stories.mdx +94 -77
- package/src/components/Icons/Icon.test.tsx +48 -22
- package/src/components/Icons/Icon.tsx +78 -61
- package/src/components/Icons/IconSvgs.tsx +22 -0
- package/src/components/Icons/IconTypes.tsx +91 -64
- package/src/components/Image/Image.stories.mdx +220 -0
- package/src/components/Image/Image.test.tsx +131 -29
- package/src/components/Image/Image.tsx +84 -56
- package/src/components/Image/ImageTypes.ts +22 -0
- package/src/components/Image/__snapshots__/Image.test.tsx.snap +190 -0
- package/src/components/Input/Input.stories.tsx +23 -67
- package/src/components/Input/Input.test.tsx +4 -4
- package/src/components/Input/_Input.scss +23 -14
- package/src/components/Label/Label.stories.mdx +28 -7
- package/src/components/Label/Label.test.tsx +43 -12
- package/src/components/Label/Label.tsx +21 -34
- package/src/components/Label/__snapshots__/Label.test.tsx.snap +41 -0
- package/src/components/Link/Link.stories.mdx +41 -41
- package/src/components/Link/Link.test.tsx +33 -44
- package/src/components/Link/Link.tsx +117 -100
- package/src/components/List/List.stories.mdx +124 -51
- package/src/components/List/List.test.tsx +142 -63
- package/src/components/List/List.tsx +89 -93
- package/src/components/List/__snapshots__/List.test.tsx.snap +109 -0
- package/src/components/Modal/Modal.stories.mdx +3 -3
- package/src/components/Modal/_Modal.scss +2 -2
- package/src/components/Notification/Notification.stories.mdx +119 -111
- package/src/components/Notification/Notification.test.tsx +102 -126
- package/src/components/Notification/Notification.tsx +157 -161
- package/src/components/Notification/__snapshots__/Notification.test.tsx.snap +159 -8
- package/src/components/Pagination/Pagination.stories.mdx +26 -27
- package/src/components/Pagination/Pagination.stories.tsx +11 -16
- package/src/components/Pagination/Pagination.test.tsx +276 -140
- package/src/components/Pagination/Pagination.tsx +174 -154
- package/src/components/Pagination/__snapshots__/Pagination.test.tsx.snap +285 -0
- package/src/components/ProgressIndicator/ProgressIndicator.stories.mdx +292 -0
- package/src/components/ProgressIndicator/ProgressIndicator.test.tsx +225 -0
- package/src/components/ProgressIndicator/ProgressIndicator.tsx +126 -0
- package/src/components/ProgressIndicator/ProgressIndicatorTypes.ts +8 -0
- package/src/components/ProgressIndicator/__snapshots__/ProgressIndicator.test.tsx.snap +357 -0
- package/src/components/Radio/Radio.test.tsx +20 -4
- package/src/components/Radio/Radio.tsx +6 -3
- package/src/components/Radio/__snapshots__/Radio.test.tsx.snap +3 -0
- package/src/components/RadioGroup/RadioGroup.stories.mdx +4 -5
- package/src/components/RadioGroup/RadioGroup.test.tsx +24 -1
- package/src/components/RadioGroup/RadioGroup.tsx +21 -29
- package/src/components/RadioGroup/__snapshots__/RadioGroup.test.tsx.snap +42 -72
- package/src/components/SearchBar/SearchBar.Test.tsx +170 -16
- package/src/components/SearchBar/SearchBar.stories.mdx +294 -219
- package/src/components/SearchBar/SearchBar.tsx +161 -46
- package/src/components/Select/Select.stories.mdx +188 -170
- package/src/components/Select/Select.test.tsx +132 -375
- package/src/components/Select/Select.tsx +121 -165
- package/src/components/Select/SelectTypes.tsx +5 -0
- package/src/components/SkeletonLoader/SkeletonLoader.stories.mdx +33 -76
- package/src/components/SkeletonLoader/SkeletonLoader.test.tsx +97 -177
- package/src/components/SkeletonLoader/SkeletonLoader.tsx +75 -70
- package/src/components/SkeletonLoader/SkeletonLoaderTypes.tsx +2 -2
- package/src/components/SkeletonLoader/__snapshots__/SkeletonLoader.test.tsx.snap +739 -0
- package/src/components/Slider/Slider.stories.mdx +529 -0
- package/src/components/Slider/Slider.test.tsx +653 -0
- package/src/components/Slider/Slider.tsx +303 -0
- package/src/components/Slider/__snapshots__/Slider.test.tsx.snap +1946 -0
- package/src/components/StatusBadge/StatusBadge.stories.mdx +91 -0
- package/src/components/StatusBadge/StatusBadge.test.tsx +35 -7
- package/src/components/StatusBadge/StatusBadge.tsx +24 -25
- package/src/components/StatusBadge/StatusBadgeTypes.tsx +5 -0
- package/src/components/StatusBadge/__snapshots__/StatusBadge.test.tsx.snap +28 -0
- package/src/components/StyleGuide/Bidirectionality.stories.mdx +17 -17
- package/src/components/StyleGuide/Breakpoints.stories.mdx +34 -10
- package/src/components/StyleGuide/Buttons.stories.mdx +102 -86
- package/src/components/StyleGuide/ColorCard.tsx +46 -0
- package/src/components/StyleGuide/Colors.stories.mdx +196 -0
- package/src/components/StyleGuide/DesignTokens.stories.mdx +170 -0
- package/src/components/StyleGuide/Forms.stories.mdx +9 -7
- package/src/components/StyleGuide/Iconography.stories.mdx +119 -127
- package/src/components/StyleGuide/Spacing.stories.mdx +31 -23
- package/src/components/StyleGuide/Typography.stories.mdx +202 -189
- package/src/components/StyleGuide/UIDocCard.tsx +1 -1
- package/src/components/Tabs/Tabs.stories.mdx +73 -11
- package/src/components/Tabs/Tabs.tsx +88 -67
- package/src/components/Template/Template.stories.mdx +572 -0
- package/src/components/Template/Template.test.tsx +124 -0
- package/src/components/Template/Template.tsx +226 -0
- package/src/components/Text/Text.stories.mdx +70 -0
- package/src/components/Text/Text.test.tsx +63 -0
- package/src/components/Text/Text.tsx +55 -0
- package/src/components/Text/TextTypes.tsx +6 -0
- package/src/components/Text/__snapshots__/Text.test.tsx.snap +33 -0
- package/src/components/TextInput/TextInput.stories.mdx +89 -90
- package/src/components/TextInput/TextInput.test.tsx +84 -85
- package/src/components/TextInput/TextInput.tsx +121 -95
- package/src/components/TextInput/TextInputTypes.tsx +8 -0
- package/src/components/VideoPlayer/VideoPlayer.stories.mdx +17 -4
- package/src/components/VideoPlayer/VideoPlayer.test.tsx +54 -53
- package/src/components/VideoPlayer/VideoPlayer.tsx +50 -51
- package/src/components/VideoPlayer/VideoPlayerTypes.tsx +2 -2
- package/src/components/VideoPlayer/__snapshots__/VideoPlayer.test.tsx.snap +91 -0
- package/src/docs/Chakra.stories.mdx +246 -65
- package/src/docs/Intro.stories.mdx +18 -13
- package/src/hooks/tests/useCarouselStyles.test.ts +140 -0
- package/src/hooks/tests/useNYPLTheme.test.tsx +36 -0
- package/src/hooks/useCarouselStyles.ts +34 -0
- package/src/hooks/useNYPLTheme.ts +67 -0
- package/src/hooks/useWindowSize.ts +40 -0
- package/src/index.ts +39 -16
- package/src/resources.scss +5 -5
- package/src/styles/base/{_02-breakpoints.scss → _01-breakpoints.scss} +9 -10
- package/src/styles/base/{_03-mixins.scss → _02-mixins.scss} +16 -5
- package/src/styles/base/_03-base.scss +25 -0
- package/src/styles/base/{_05-focus.scss → _04-focus.scss} +0 -15
- package/src/styles/base/_place-holder.scss +14 -3
- package/src/styles/{03-space → space}/_space-inline.scss +14 -14
- package/src/styles/{03-space → space}/_space-inset.scss +10 -10
- package/src/styles/space/_space-stack.scss +116 -0
- package/src/styles.scss +13 -62
- package/src/theme/components/accordion.ts +30 -0
- package/src/theme/components/breadcrumb.ts +77 -0
- package/src/theme/components/button.ts +91 -71
- package/src/theme/components/card.ts +174 -0
- package/src/theme/components/checkbox.ts +22 -29
- package/src/theme/components/checkboxGroup.ts +8 -0
- package/src/theme/components/componentWrapper.ts +10 -0
- package/src/theme/components/datePicker.ts +17 -0
- package/src/theme/components/fieldset.ts +18 -0
- package/src/theme/components/global.ts +82 -0
- package/src/theme/components/globalMixins.ts +24 -0
- package/src/theme/components/heading.ts +25 -13
- package/src/theme/components/helperErrorText.ts +9 -0
- package/src/theme/components/hero.ts +240 -0
- package/src/theme/components/horizontalRule.ts +13 -0
- package/src/theme/components/icon.ts +79 -0
- package/src/theme/components/image.ts +116 -0
- package/src/theme/components/label.ts +10 -0
- package/src/theme/components/link.ts +51 -0
- package/src/theme/components/list.ts +73 -0
- package/src/theme/components/notification.ts +93 -0
- package/src/theme/components/pagination.ts +20 -0
- package/src/theme/components/progressIndicator.ts +62 -0
- package/src/theme/components/radio.ts +22 -33
- package/src/theme/components/radioGroup.ts +8 -0
- package/src/theme/components/searchBar.ts +21 -0
- package/src/theme/components/select.ts +53 -0
- package/src/theme/components/skeletonLoader.ts +107 -0
- package/src/theme/components/slider.ts +79 -0
- package/src/theme/components/statusBadge.ts +26 -0
- package/src/theme/components/tabs.ts +102 -69
- package/src/theme/components/template.ts +114 -0
- package/src/theme/components/text.ts +31 -0
- package/src/theme/components/textInput.ts +62 -0
- package/src/theme/components/videoPlayer.ts +49 -0
- package/src/theme/foundations/breakpoints.ts +8 -8
- package/src/theme/foundations/colors.ts +29 -13
- package/src/theme/foundations/global.ts +8 -0
- package/src/theme/foundations/radii.ts +6 -0
- package/src/theme/foundations/shadows.ts +5 -0
- package/src/theme/foundations/spacing.ts +24 -24
- package/src/theme/index.ts +74 -13
- package/src/utils/componentCategories.ts +12 -5
- package/src/utils/utils.ts +13 -0
- package/dist/components/Accordion/Accordion.stories.d.ts +0 -6
- package/dist/components/HelperErrorText/HelperErrorText.stories.d.ts +0 -16
- package/dist/components/Image/Image.stories.d.ts +0 -18
- package/dist/components/List/List.stories.d.ts +0 -7
- package/dist/components/StatusBadge/StatusBadge.stories.d.ts +0 -8
- package/dist/components/StyleGuide/Colors.stories.d.ts +0 -25
- package/dist/components/Template/Template.stories.d.ts +0 -30
- package/dist/theme/components/customRadioGroup.d.ts +0 -17
- package/src/components/Accordion/Accordion.stories.tsx +0 -66
- package/src/components/Accordion/_Accordion.scss +0 -81
- package/src/components/Breadcrumbs/_Breadcrumbs.scss +0 -97
- package/src/components/Button/_Button.scss +0 -56
- package/src/components/Card/_Card.scss +0 -308
- package/src/components/Form/_Form.scss +0 -67
- package/src/components/HelperErrorText/HelperErrorText.stories.tsx +0 -48
- package/src/components/HelperErrorText/_HelperErrorText.scss +0 -9
- package/src/components/Hero/_Hero.scss +0 -256
- package/src/components/HorizontalRule/_HorizontalRule.scss +0 -15
- package/src/components/Icons/_Icons.scss +0 -116
- package/src/components/Image/Image.stories.tsx +0 -54
- package/src/components/Image/_Image.scss +0 -38
- package/src/components/Label/_Label.scss +0 -22
- package/src/components/Link/_Link.scss +0 -73
- package/src/components/List/List.stories.tsx +0 -139
- package/src/components/List/_List.scss +0 -76
- package/src/components/Notification/_Notification.scss +0 -110
- package/src/components/Pagination/_Pagination.scss +0 -40
- package/src/components/SearchBar/_SearchBar.scss +0 -16
- package/src/components/Select/_Select.scss +0 -82
- package/src/components/SkeletonLoader/_SkeletonLoader.scss +0 -142
- package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -34
- package/src/components/StatusBadge/_StatusBadge.scss +0 -23
- package/src/components/StyleGuide/Colors.stories.tsx +0 -289
- package/src/components/Template/Template.stories.tsx +0 -86
- package/src/components/Template/_Template.scss +0 -63
- package/src/components/TextInput/_TextInput.scss +0 -59
- package/src/components/VideoPlayer/_VideoPlayer.scss +0 -38
- package/src/styles/01-colors/_colors-brand.scss +0 -56
- package/src/styles/01-colors/_colors-utility.scss +0 -65
- package/src/styles/02-typography/_type-scale.css +0 -11
- package/src/styles/02-typography/_type-weight.css +0 -7
- package/src/styles/02-typography/_typefaces.css +0 -4
- package/src/styles/03-space/_space-stack.scss +0 -116
- package/src/styles/03-space/_space.css +0 -30
- package/src/styles/base/_04-base.scss +0 -19
- package/src/styles/base/_card-grid.scss +0 -78
- package/src/styles/base/_typography.scss +0 -11
- package/src/theme/components/customRadioGroup.ts +0 -18
|
@@ -2,16 +2,16 @@ import {
|
|
|
2
2
|
Meta,
|
|
3
3
|
Story,
|
|
4
4
|
ArgsTable,
|
|
5
|
-
|
|
5
|
+
Canvas,
|
|
6
6
|
Description,
|
|
7
7
|
} from "@storybook/addon-docs/blocks";
|
|
8
8
|
import Accordion from "./Accordion";
|
|
9
9
|
import { withDesign } from "storybook-addon-designs";
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
10
|
+
import Card, { CardHeading, CardContent } from "../Card/Card";
|
|
11
|
+
import { CardLayouts } from "../Card/CardTypes";
|
|
12
|
+
import { ImageRatios } from "../Image/ImageTypes";
|
|
13
|
+
import { HeadingLevels } from "../Heading/HeadingTypes";
|
|
13
14
|
import { Source } from "@storybook/addon-docs/blocks";
|
|
14
|
-
import dedent from "ts-dedent";
|
|
15
15
|
import ReactDOMServer from "react-dom/server";
|
|
16
16
|
import { getCategory } from "../../utils/componentCategories";
|
|
17
17
|
|
|
@@ -28,7 +28,8 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
28
28
|
jest: ["Accordion.test.tsx"],
|
|
29
29
|
}}
|
|
30
30
|
argTypes={{
|
|
31
|
-
|
|
31
|
+
contentData: { table: { disable: true } },
|
|
32
|
+
id: { table: { disable: true } },
|
|
32
33
|
}}
|
|
33
34
|
/>
|
|
34
35
|
|
|
@@ -37,52 +38,240 @@ import { getCategory } from "../../utils/componentCategories";
|
|
|
37
38
|
| Component Version | DS Version |
|
|
38
39
|
| ----------------- | ---------- |
|
|
39
40
|
| Added | `0.1.0` |
|
|
40
|
-
| Latest | `0.
|
|
41
|
+
| Latest | `0.25.1` |
|
|
41
42
|
|
|
42
43
|
<Description of={Accordion} />
|
|
43
44
|
|
|
44
|
-
The Accordion component
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
The `Accordion` component displays a list of high-level options that can
|
|
46
|
+
expand/collapse to reveal associated sections of content. This component pushes
|
|
47
|
+
existing content on the page down. Each accordion item is self contained but
|
|
48
|
+
when multiple are rendered together, they render in a "FAQ" style. When multiple
|
|
49
|
+
accordions are rendered together, they can each open and close independent of
|
|
50
|
+
each other.
|
|
49
51
|
|
|
50
|
-
|
|
52
|
+
The only way to render an `Accordion` component is to pass in an array of objects
|
|
53
|
+
with `label` and `panel` properties for each accordion item. Note that you can
|
|
54
|
+
pass in a string or DOM elements into the `panel` property in each object. This
|
|
55
|
+
approach is needed because, internally, we deal with the logic to render the
|
|
56
|
+
necessary icon, Chakra components, and styles.
|
|
57
|
+
|
|
58
|
+
<Canvas withToolbar>
|
|
51
59
|
<Story
|
|
52
60
|
name="Basic"
|
|
53
61
|
args={{
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
62
|
+
isDefaultOpen: false,
|
|
63
|
+
contentData: [
|
|
64
|
+
{
|
|
65
|
+
label: "Tom Nook",
|
|
66
|
+
panel: (
|
|
67
|
+
<Card
|
|
68
|
+
layout={CardLayouts.Row}
|
|
69
|
+
center
|
|
70
|
+
imageSrc="https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
|
|
71
|
+
imageAlt="Alt text"
|
|
72
|
+
imageAspectRatio={ImageRatios.TwoByOne}
|
|
73
|
+
>
|
|
74
|
+
<CardHeading level={HeadingLevels.Four} id="heading1">
|
|
75
|
+
Tom Nook
|
|
76
|
+
</CardHeading>
|
|
77
|
+
<CardContent>
|
|
78
|
+
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional
|
|
79
|
+
character in the Animal Crossing series who operates the village
|
|
80
|
+
store.
|
|
81
|
+
</CardContent>
|
|
82
|
+
</Card>
|
|
83
|
+
),
|
|
84
|
+
},
|
|
85
|
+
],
|
|
57
86
|
}}
|
|
58
87
|
>
|
|
59
88
|
{(args) => <Accordion {...args} />}
|
|
60
89
|
</Story>
|
|
61
|
-
</
|
|
90
|
+
</Canvas>
|
|
91
|
+
|
|
92
|
+
```jsx
|
|
93
|
+
const contentData = [
|
|
94
|
+
{
|
|
95
|
+
label: "Tom Nook",
|
|
96
|
+
panel: (
|
|
97
|
+
<Card
|
|
98
|
+
layout={CardLayouts.Row}
|
|
99
|
+
center
|
|
100
|
+
imageSrc="https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
|
|
101
|
+
imageAlt="Alt text"
|
|
102
|
+
imageAspectRatio={ImageRatios.TwoByOne}
|
|
103
|
+
>
|
|
104
|
+
<CardHeading level={HeadingLevels.Four} id="heading1">
|
|
105
|
+
Tom Nook
|
|
106
|
+
</CardHeading>
|
|
107
|
+
<CardContent>
|
|
108
|
+
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional
|
|
109
|
+
character in the Animal Crossing series who operates the
|
|
110
|
+
village store.
|
|
111
|
+
</CardContent>
|
|
112
|
+
</Card>
|
|
113
|
+
),
|
|
114
|
+
},
|
|
115
|
+
];
|
|
116
|
+
|
|
117
|
+
...
|
|
118
|
+
|
|
119
|
+
<Accordion contentData={contentData} />
|
|
120
|
+
```
|
|
62
121
|
|
|
63
122
|
<ArgsTable story="Basic" />
|
|
64
123
|
|
|
65
124
|
## FAQ example
|
|
66
125
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
<
|
|
72
|
-
|
|
73
|
-
|
|
126
|
+
export const faqContent = [
|
|
127
|
+
{
|
|
128
|
+
label: "Tom Nook",
|
|
129
|
+
panel: (
|
|
130
|
+
<Card
|
|
131
|
+
layout={CardLayouts.Row}
|
|
132
|
+
center
|
|
133
|
+
imageSrc="https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
|
|
134
|
+
imageAlt="Alt text"
|
|
135
|
+
imageAspectRatio={ImageRatios.TwoByOne}
|
|
136
|
+
>
|
|
137
|
+
<CardHeading level={HeadingLevels.Four} id="heading1-tom">
|
|
138
|
+
Tom Nook
|
|
139
|
+
</CardHeading>
|
|
140
|
+
<CardContent>
|
|
141
|
+
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional character
|
|
142
|
+
in the Animal Crossing series who operates the village store.
|
|
143
|
+
</CardContent>
|
|
144
|
+
</Card>
|
|
145
|
+
),
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
label: "Isabelle",
|
|
149
|
+
panel: (
|
|
150
|
+
<Card
|
|
151
|
+
layout={CardLayouts.Row}
|
|
152
|
+
center
|
|
153
|
+
imageSrc="https://play.nintendo.com/images/AC_Isabelle_7XU6aGu.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
|
|
154
|
+
imageAlt="Alt text"
|
|
155
|
+
imageAspectRatio={ImageRatios.TwoByOne}
|
|
156
|
+
>
|
|
157
|
+
<CardHeading level={HeadingLevels.Four} id="heading1-isabelle">
|
|
158
|
+
Isabelle
|
|
159
|
+
</CardHeading>
|
|
160
|
+
<CardContent>
|
|
161
|
+
Isabelle, known as Shizue in Japan, is a fictional character from the
|
|
162
|
+
Animal Crossing series of video games. She is a kindly Shih Tzu that
|
|
163
|
+
debuted in the 2012 release Animal Crossing: New Leaf, where she
|
|
164
|
+
serves as the secretary to the player character.
|
|
165
|
+
</CardContent>
|
|
166
|
+
</Card>
|
|
167
|
+
),
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
label: "K.K. Slider",
|
|
171
|
+
panel: (
|
|
172
|
+
<Card
|
|
173
|
+
layout={CardLayouts.Row}
|
|
174
|
+
center
|
|
175
|
+
imageSrc="https://play.nintendo.com/images/AC_KK_jh4yj5t.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
|
|
176
|
+
imageAlt="Alt text"
|
|
177
|
+
imageAspectRatio={ImageRatios.TwoByOne}
|
|
178
|
+
>
|
|
179
|
+
<CardHeading level={HeadingLevels.Four} id="heading1-kkslider">
|
|
180
|
+
K.K. Slider
|
|
181
|
+
</CardHeading>
|
|
182
|
+
<CardContent>
|
|
183
|
+
<p>
|
|
184
|
+
Totakeke, more commonly known as <b>K.K. Slider or K.K.</b>, is a
|
|
185
|
+
fictional character within the Animal Crossing franchise. One of the
|
|
186
|
+
franchise's most popular characters, he debuted in the title Animal
|
|
187
|
+
Crossing, and has appeared in every installment since.
|
|
188
|
+
</p>
|
|
189
|
+
</CardContent>
|
|
190
|
+
</Card>
|
|
191
|
+
),
|
|
192
|
+
},
|
|
193
|
+
];
|
|
74
194
|
|
|
75
|
-
|
|
195
|
+
Building out FAQ-like accordions happens automatically when there are more than
|
|
196
|
+
one object in the array passed into the `contentData` prop.
|
|
76
197
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
198
|
+
<Canvas withToolbar>
|
|
199
|
+
<Story name="FAQ">
|
|
200
|
+
<Accordion contentData={faqContent} />
|
|
201
|
+
</Story>
|
|
202
|
+
</Canvas>
|
|
81
203
|
|
|
82
|
-
|
|
204
|
+
```jsx
|
|
205
|
+
export const faqContent = [
|
|
206
|
+
{
|
|
207
|
+
label: "Tom Nook",
|
|
208
|
+
panel: (
|
|
209
|
+
<Card
|
|
210
|
+
layout={CardLayouts.Row}
|
|
211
|
+
center
|
|
212
|
+
imageSrc="https://play.nintendo.com/images/AC_Tom_FRYtwIN.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
|
|
213
|
+
imageAlt="Alt text"
|
|
214
|
+
imageAspectRatio={ImageRatios.TwoByOne}
|
|
215
|
+
>
|
|
216
|
+
<CardHeading level={HeadingLevels.Four} id="heading1-tom">
|
|
217
|
+
Tom Nook
|
|
218
|
+
</CardHeading>
|
|
219
|
+
<CardContent>
|
|
220
|
+
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional character
|
|
221
|
+
in the Animal Crossing series who operates the village store.
|
|
222
|
+
</CardContent>
|
|
223
|
+
</Card>
|
|
224
|
+
),
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
label: "Isabelle",
|
|
228
|
+
panel: (
|
|
229
|
+
<Card
|
|
230
|
+
layout={CardLayouts.Row}
|
|
231
|
+
center
|
|
232
|
+
imageSrc="https://play.nintendo.com/images/AC_Isabelle_7XU6aGu.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
|
|
233
|
+
imageAlt="Alt text"
|
|
234
|
+
imageAspectRatio={ImageRatios.TwoByOne}
|
|
235
|
+
>
|
|
236
|
+
<CardHeading level={HeadingLevels.Four} id="heading1-isabelle">
|
|
237
|
+
Isabelle
|
|
238
|
+
</CardHeading>
|
|
239
|
+
<CardContent>
|
|
240
|
+
Isabelle, known as Shizue in Japan, is a fictional character from the
|
|
241
|
+
Animal Crossing series of video games. She is a kindly Shih Tzu that
|
|
242
|
+
debuted in the 2012 release Animal Crossing: New Leaf, where she
|
|
243
|
+
serves as the secretary to the player character.
|
|
244
|
+
</CardContent>
|
|
245
|
+
</Card>
|
|
246
|
+
),
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
label: "K.K. Slider",
|
|
250
|
+
panel: (
|
|
251
|
+
<Card
|
|
252
|
+
layout={CardLayouts.Row}
|
|
253
|
+
center
|
|
254
|
+
imageSrc="https://play.nintendo.com/images/AC_KK_jh4yj5t.17345b1513ac044897cfc243542899dce541e8dc.9afde10b.png"
|
|
255
|
+
imageAlt="Alt text"
|
|
256
|
+
imageAspectRatio={ImageRatios.TwoByOne}
|
|
257
|
+
>
|
|
258
|
+
<CardHeading level={HeadingLevels.Four} id="heading1-kkslider">
|
|
259
|
+
K.K. Slider
|
|
260
|
+
</CardHeading>
|
|
261
|
+
<CardContent>
|
|
262
|
+
<p>
|
|
263
|
+
Totakeke, more commonly known as <b>K.K. Slider or K.K.</b>, is a
|
|
264
|
+
fictional character within the Animal Crossing franchise. One of the
|
|
265
|
+
franchise's most popular characters, he debuted in the title Animal
|
|
266
|
+
Crossing, and has appeared in every installment since.
|
|
267
|
+
</p>
|
|
268
|
+
</CardContent>
|
|
269
|
+
</Card>
|
|
270
|
+
),
|
|
271
|
+
},
|
|
272
|
+
];
|
|
83
273
|
|
|
84
|
-
|
|
85
|
-
<Story story={stories.AccordionScroll} />
|
|
86
|
-
</Preview>
|
|
274
|
+
...
|
|
87
275
|
|
|
88
|
-
<
|
|
276
|
+
<Accordion contentData={faqContent} />
|
|
277
|
+
```
|
|
@@ -1,37 +1,153 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { render, screen } from "@testing-library/react";
|
|
3
3
|
import { axe } from "jest-axe";
|
|
4
|
+
import userEvent from "@testing-library/user-event";
|
|
4
5
|
|
|
5
6
|
import Accordion from "./Accordion";
|
|
6
7
|
|
|
7
8
|
describe("Accordion Accessibility", () => {
|
|
8
|
-
it("passes axe accessibility test", async () => {
|
|
9
|
+
it("passes axe accessibility test for one item", async () => {
|
|
9
10
|
const { container } = render(
|
|
10
11
|
<Accordion
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
contentData={[
|
|
13
|
+
{
|
|
14
|
+
label: "Tom Nook",
|
|
15
|
+
panel: (
|
|
16
|
+
<p>
|
|
17
|
+
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional
|
|
18
|
+
character in the Animal Crossing series who operates the village
|
|
19
|
+
store.
|
|
20
|
+
</p>
|
|
21
|
+
),
|
|
22
|
+
},
|
|
23
|
+
]}
|
|
24
|
+
/>
|
|
17
25
|
);
|
|
18
26
|
expect(await axe(container)).toHaveNoViolations();
|
|
19
27
|
});
|
|
20
|
-
});
|
|
21
28
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
render(
|
|
29
|
+
it("passes axe accessibility test for multiple items", async () => {
|
|
30
|
+
const { container } = render(
|
|
25
31
|
<Accordion
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
contentData={[
|
|
33
|
+
{
|
|
34
|
+
label: "Tom Nook",
|
|
35
|
+
panel: (
|
|
36
|
+
<p>
|
|
37
|
+
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional
|
|
38
|
+
character in the Animal Crossing series who operates the village
|
|
39
|
+
store.
|
|
40
|
+
</p>
|
|
41
|
+
),
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
label: "Isabelle",
|
|
45
|
+
panel:
|
|
46
|
+
"Isabelle, known as Shizue in Japan, is a fictional character " +
|
|
47
|
+
"from the Animal Crossing series of video games. She is a kindly Shih " +
|
|
48
|
+
"Tzu that debuted in the 2012 release Animal Crossing: New Leaf, where " +
|
|
49
|
+
"she serves as the secretary to the player character.",
|
|
50
|
+
},
|
|
51
|
+
]}
|
|
52
|
+
/>
|
|
32
53
|
);
|
|
54
|
+
expect(await axe(container)).toHaveNoViolations();
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
export const contentData = [
|
|
59
|
+
{
|
|
60
|
+
label: "Tom Nook",
|
|
61
|
+
panel: (
|
|
62
|
+
<p>
|
|
63
|
+
Tom Nook, <b>known in Japan as Tanukichi</b>, is a fictional character
|
|
64
|
+
in the Animal Crossing series who operates the village store.
|
|
65
|
+
</p>
|
|
66
|
+
),
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
label: "Isabelle",
|
|
70
|
+
panel:
|
|
71
|
+
"Isabelle, known as Shizue in Japan, is a fictional character " +
|
|
72
|
+
"from the Animal Crossing series of video games. She is a kindly Shih " +
|
|
73
|
+
"Tzu that debuted in the 2012 release Animal Crossing: New Leaf, where " +
|
|
74
|
+
"she serves as the secretary to the player character.",
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
label: "K.K. Slider",
|
|
78
|
+
panel:
|
|
79
|
+
"<p>Totakeke, more commonly known as <b>K.K. Slider or K.K.</b>, is a " +
|
|
80
|
+
"fictional character within the Animal Crossing franchise. One of the " +
|
|
81
|
+
"franchise's most popular characters, he debuted in the title Animal " +
|
|
82
|
+
"Crossing, and has appeared in every installment since.</p>",
|
|
83
|
+
},
|
|
84
|
+
];
|
|
85
|
+
|
|
86
|
+
describe("Accordion", () => {
|
|
87
|
+
it("renders a visible button with a label to click on", () => {
|
|
88
|
+
render(<Accordion contentData={[contentData[0]]} />);
|
|
89
|
+
const accordionLabel = screen.getByRole("button", { name: "Tom Nook" });
|
|
90
|
+
|
|
91
|
+
expect(accordionLabel).toBeInTheDocument();
|
|
92
|
+
// Closed by default.
|
|
93
|
+
expect(accordionLabel).toHaveAttribute("aria-expanded", "false");
|
|
94
|
+
expect(screen.getByText(/known in Japan as Tanukichi/i)).not.toBeVisible();
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("opens the panel by default with isDefaultOpen passed", () => {
|
|
98
|
+
render(<Accordion isDefaultOpen contentData={[contentData[0]]} />);
|
|
99
|
+
const accordionLabel = screen.getByRole("button", { name: "Tom Nook" });
|
|
100
|
+
|
|
101
|
+
expect(accordionLabel).toBeInTheDocument();
|
|
102
|
+
expect(accordionLabel).toHaveAttribute("aria-expanded", "true");
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it("opens the accordion when the label is clicked", () => {
|
|
106
|
+
render(<Accordion contentData={[contentData[0]]} />);
|
|
107
|
+
|
|
108
|
+
const accordionLabel = screen.getByRole("button", { name: "Tom Nook" });
|
|
109
|
+
expect(accordionLabel).toHaveAttribute("aria-expanded", "false");
|
|
110
|
+
userEvent.click(accordionLabel);
|
|
111
|
+
expect(accordionLabel).toHaveAttribute("aria-expanded", "true");
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it("renders multiple accordion items grouped together", () => {
|
|
115
|
+
render(<Accordion contentData={contentData} />);
|
|
116
|
+
|
|
117
|
+
const accordion1 = screen.getByRole("button", { name: "Tom Nook" });
|
|
118
|
+
const accordion2 = screen.getByRole("button", { name: "Isabelle" });
|
|
119
|
+
const accordion3 = screen.getByRole("button", { name: "K.K. Slider" });
|
|
120
|
+
|
|
121
|
+
expect(accordion1).toHaveAttribute("aria-expanded", "false");
|
|
122
|
+
expect(accordion2).toHaveAttribute("aria-expanded", "false");
|
|
123
|
+
expect(accordion3).toHaveAttribute("aria-expanded", "false");
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it("opens each accordion item independently of each other", () => {
|
|
127
|
+
render(<Accordion contentData={contentData} />);
|
|
128
|
+
|
|
129
|
+
const accordion1 = screen.getByRole("button", { name: "Tom Nook" });
|
|
130
|
+
const accordion2 = screen.getByRole("button", { name: "Isabelle" });
|
|
131
|
+
const accordion3 = screen.getByRole("button", { name: "K.K. Slider" });
|
|
132
|
+
|
|
133
|
+
expect(accordion1).toHaveAttribute("aria-expanded", "false");
|
|
134
|
+
expect(accordion2).toHaveAttribute("aria-expanded", "false");
|
|
135
|
+
expect(accordion3).toHaveAttribute("aria-expanded", "false");
|
|
136
|
+
|
|
137
|
+
userEvent.click(accordion1);
|
|
138
|
+
expect(accordion1).toHaveAttribute("aria-expanded", "true");
|
|
139
|
+
expect(accordion2).toHaveAttribute("aria-expanded", "false");
|
|
140
|
+
expect(accordion3).toHaveAttribute("aria-expanded", "false");
|
|
141
|
+
|
|
142
|
+
userEvent.click(accordion2);
|
|
143
|
+
expect(accordion1).toHaveAttribute("aria-expanded", "true");
|
|
144
|
+
expect(accordion2).toHaveAttribute("aria-expanded", "true");
|
|
145
|
+
expect(accordion3).toHaveAttribute("aria-expanded", "false");
|
|
33
146
|
|
|
34
|
-
|
|
35
|
-
|
|
147
|
+
userEvent.click(accordion3);
|
|
148
|
+
userEvent.click(accordion1);
|
|
149
|
+
expect(accordion1).toHaveAttribute("aria-expanded", "false");
|
|
150
|
+
expect(accordion2).toHaveAttribute("aria-expanded", "true");
|
|
151
|
+
expect(accordion3).toHaveAttribute("aria-expanded", "true");
|
|
36
152
|
});
|
|
37
153
|
});
|
|
@@ -1,69 +1,94 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import
|
|
2
|
+
import {
|
|
3
|
+
Box,
|
|
4
|
+
Accordion as ChakraAccordion,
|
|
5
|
+
AccordionItem,
|
|
6
|
+
AccordionButton,
|
|
7
|
+
AccordionPanel,
|
|
8
|
+
} from "@chakra-ui/react";
|
|
9
|
+
|
|
3
10
|
import Icon from "../Icons/Icon";
|
|
4
|
-
import { IconNames } from "../Icons/IconTypes";
|
|
11
|
+
import { IconNames, IconSizes } from "../Icons/IconTypes";
|
|
12
|
+
import generateUUID from "../../helpers/generateUUID";
|
|
13
|
+
|
|
14
|
+
export interface AccordionContentDataProps {
|
|
15
|
+
label: string;
|
|
16
|
+
panel: string | React.ReactNode;
|
|
17
|
+
}
|
|
5
18
|
|
|
6
19
|
export interface AccordionProps {
|
|
7
|
-
/**
|
|
8
|
-
|
|
9
|
-
/** BlockName for use with BEM. See how to work with blockNames and BEM here: http://getbem.com/introduction/ */
|
|
10
|
-
blockName?: string;
|
|
11
|
-
/** className you can add in addition to 'input' */
|
|
12
|
-
className?: string;
|
|
13
|
-
/** Whether the accordion is open by default */
|
|
14
|
-
defaultOpen?: boolean;
|
|
20
|
+
/** Array of data to display */
|
|
21
|
+
contentData: AccordionContentDataProps[];
|
|
15
22
|
/** ID that other components can cross reference for accessibility purposes */
|
|
16
23
|
id?: string;
|
|
17
|
-
/**
|
|
18
|
-
|
|
19
|
-
/** Modifiers array for use with BEM. See how to work with modifiers and BEM here: http://getbem.com/introduction/ */
|
|
20
|
-
modifiers?: string[];
|
|
24
|
+
/** Whether the accordion is open by default only on its initial rendering */
|
|
25
|
+
isDefaultOpen?: boolean;
|
|
21
26
|
}
|
|
22
27
|
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
className,
|
|
32
|
-
inputId,
|
|
33
|
-
defaultOpen = false,
|
|
34
|
-
accordionLabel,
|
|
35
|
-
children,
|
|
36
|
-
} = props;
|
|
28
|
+
/**
|
|
29
|
+
* Get the minus or plus icon depending on whether the accordion
|
|
30
|
+
* is open or closed.
|
|
31
|
+
*/
|
|
32
|
+
const getIcon = (isExpanded = false) => {
|
|
33
|
+
const iconName = isExpanded ? IconNames.Minus : IconNames.Plus;
|
|
34
|
+
return <Icon name={iconName} size={IconSizes.Small} />;
|
|
35
|
+
};
|
|
37
36
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
decorative={true}
|
|
56
|
-
name={IconNames.minus}
|
|
57
|
-
modifiers={["small", `${IconNames.minus}`]}
|
|
58
|
-
/>
|
|
59
|
-
<Icon
|
|
60
|
-
decorative={true}
|
|
61
|
-
name={IconNames.plus}
|
|
62
|
-
modifiers={["small", `${IconNames.plus}`]}
|
|
37
|
+
/**
|
|
38
|
+
* Returns `AccordionItems` for every accordion object in the data
|
|
39
|
+
* array. This automatically creates the `AccordionButton` and `AccordionPanel`
|
|
40
|
+
* combination that is required for the Chakra `Accordion` component.
|
|
41
|
+
*/
|
|
42
|
+
const getElementsFromContentData = (data = []) => {
|
|
43
|
+
// For FAQ-style multiple accordions, the button should be bigger.
|
|
44
|
+
// Otherwise, use the default.
|
|
45
|
+
const multiplePadding = data?.length > 1 ? 4 : null;
|
|
46
|
+
|
|
47
|
+
return data.map((content, index) => {
|
|
48
|
+
// This is done to support both string and DOM element input.
|
|
49
|
+
const panel =
|
|
50
|
+
typeof content.panel === "string" ? (
|
|
51
|
+
<AccordionPanel
|
|
52
|
+
key={index}
|
|
53
|
+
dangerouslySetInnerHTML={{ __html: content.panel }}
|
|
63
54
|
/>
|
|
64
|
-
|
|
55
|
+
) : (
|
|
56
|
+
<AccordionPanel key={index}>{content.panel}</AccordionPanel>
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<AccordionItem key={index}>
|
|
61
|
+
{/* Get the current state to render the correct icon. */}
|
|
62
|
+
{({ isExpanded }) => (
|
|
63
|
+
<>
|
|
64
|
+
<AccordionButton padding={multiplePadding}>
|
|
65
|
+
<Box flex="1" textAlign="left">
|
|
66
|
+
{content.label}
|
|
67
|
+
</Box>
|
|
68
|
+
{getIcon(isExpanded)}
|
|
69
|
+
</AccordionButton>
|
|
70
|
+
{panel}
|
|
71
|
+
</>
|
|
72
|
+
)}
|
|
73
|
+
</AccordionItem>
|
|
74
|
+
);
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Accordion component that shows content on toggle. Can be used to display
|
|
80
|
+
* multiple accordion items together.
|
|
81
|
+
*/
|
|
82
|
+
function Accordion(props: React.PropsWithChildren<AccordionProps>) {
|
|
83
|
+
const { contentData, id = generateUUID(), isDefaultOpen = false } = props;
|
|
65
84
|
|
|
66
|
-
|
|
67
|
-
|
|
85
|
+
// Pass `0` to open the first accordion in the 0-index based array.
|
|
86
|
+
const openFirstAccordion = isDefaultOpen ? 0 : undefined;
|
|
87
|
+
return (
|
|
88
|
+
<ChakraAccordion id={id} defaultIndex={[openFirstAccordion]} allowMultiple>
|
|
89
|
+
{getElementsFromContentData(contentData)}
|
|
90
|
+
</ChakraAccordion>
|
|
68
91
|
);
|
|
69
92
|
}
|
|
93
|
+
|
|
94
|
+
export default Accordion;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Meta, Story,
|
|
1
|
+
import { Meta, Story, Canvas } from "@storybook/addon-docs/blocks";
|
|
2
2
|
import Autosuggest from "react-autosuggest";
|
|
3
3
|
import * as stories from "./Autosuggest.stories.tsx";
|
|
4
4
|
import { getCategory } from "../../utils/componentCategories";
|
|
@@ -19,9 +19,9 @@ every input element. Since the suggestion dropdown will appear on top of page co
|
|
|
19
19
|
we've added a min-height to make it easier to see the dropdown. This is for demonstration
|
|
20
20
|
purposes only and you will not need to do this in your application.
|
|
21
21
|
|
|
22
|
-
<
|
|
22
|
+
<Canvas withToolbar>
|
|
23
23
|
<Story name="Basic" story={stories.AutosuggestLibrary} />
|
|
24
|
-
</
|
|
24
|
+
</Canvas>
|
|
25
25
|
|
|
26
26
|
## With custom icons
|
|
27
27
|
|
|
@@ -34,7 +34,7 @@ typing "c" or "tr" in the following input.
|
|
|
34
34
|
const renderSuggestion = (suggestion) => (
|
|
35
35
|
<span>
|
|
36
36
|
{suggestion}
|
|
37
|
-
<Icon name={IconNames
|
|
37
|
+
<Icon name={IconNames.Check} />
|
|
38
38
|
</span>
|
|
39
39
|
);
|
|
40
40
|
```
|
|
@@ -29,7 +29,7 @@ const libraryRenderInputComponent = (
|
|
|
29
29
|
>
|
|
30
30
|
Home Library
|
|
31
31
|
</Label>
|
|
32
|
-
<HelperErrorText id="id-helperText"
|
|
32
|
+
<HelperErrorText id="id-helperText" isInvalid={false}>
|
|
33
33
|
Select your home library. Start by typing the name of the library. Try{" "}
|
|
34
34
|
{'"'}ba{'"'}.
|
|
35
35
|
</HelperErrorText>
|
|
@@ -99,6 +99,7 @@ const LibraryExample = ({ renderInputComponent }) => {
|
|
|
99
99
|
const renderSuggestion = (suggestion) => <span>{suggestion.label}</span>;
|
|
100
100
|
// Autosuggest will pass through all these props to the Input component.
|
|
101
101
|
const inputProps = {
|
|
102
|
+
"aria-label": "Home Library",
|
|
102
103
|
placeholder: "Type a library name",
|
|
103
104
|
value,
|
|
104
105
|
onChange,
|
|
@@ -168,7 +169,7 @@ const FishExample = () => {
|
|
|
168
169
|
const renderSuggestion = (suggestion) => (
|
|
169
170
|
<span>
|
|
170
171
|
{suggestion}
|
|
171
|
-
<Icon name={IconNames
|
|
172
|
+
<Icon name={IconNames.Check} />
|
|
172
173
|
</span>
|
|
173
174
|
);
|
|
174
175
|
const getSuggestionValue = (suggestion) => suggestion;
|