From 4f1e9dceed57133a54b7c1b4b73767216a4bf279 Mon Sep 17 00:00:00 2001 From: Dylan Kilgore Date: Wed, 24 Apr 2024 10:38:42 -0700 Subject: [PATCH 1/4] feat: accordion: deep accessibility updates --- .../Accordion/Accordion.stories.tsx | 2 +- src/components/Accordion/Accordion.test.tsx | 19 +- src/components/Accordion/Accordion.tsx | 158 +++++++++++------ src/components/Accordion/Accordion.types.ts | 32 ++++ src/components/Accordion/Locale/ar_SA.tsx | 11 ++ src/components/Accordion/Locale/bg_BG.tsx | 11 ++ src/components/Accordion/Locale/cs_CZ.tsx | 11 ++ src/components/Accordion/Locale/da_DK.tsx | 11 ++ src/components/Accordion/Locale/de_DE.tsx | 11 ++ src/components/Accordion/Locale/el_GR.tsx | 11 ++ src/components/Accordion/Locale/en_GB.tsx | 11 ++ src/components/Accordion/Locale/en_US.tsx | 11 ++ src/components/Accordion/Locale/es_DO.tsx | 11 ++ src/components/Accordion/Locale/es_ES.tsx | 11 ++ src/components/Accordion/Locale/es_MX.tsx | 11 ++ src/components/Accordion/Locale/fi_FI.tsx | 11 ++ src/components/Accordion/Locale/fr_BE.tsx | 11 ++ src/components/Accordion/Locale/fr_CA.tsx | 11 ++ src/components/Accordion/Locale/fr_FR.tsx | 11 ++ src/components/Accordion/Locale/he_IL.tsx | 11 ++ src/components/Accordion/Locale/hi_IN.tsx | 11 ++ src/components/Accordion/Locale/hr_HR.tsx | 11 ++ src/components/Accordion/Locale/ht_HT.tsx | 11 ++ src/components/Accordion/Locale/hu_HU.tsx | 11 ++ src/components/Accordion/Locale/it_IT.tsx | 11 ++ src/components/Accordion/Locale/ja_JP.tsx | 11 ++ src/components/Accordion/Locale/ko_KR.tsx | 11 ++ src/components/Accordion/Locale/ms_MY.tsx | 11 ++ src/components/Accordion/Locale/nb_NO.tsx | 11 ++ src/components/Accordion/Locale/nl_BE.tsx | 11 ++ src/components/Accordion/Locale/nl_NL.tsx | 11 ++ src/components/Accordion/Locale/pl_PL.tsx | 11 ++ src/components/Accordion/Locale/pt_BR.tsx | 11 ++ src/components/Accordion/Locale/pt_PT.tsx | 11 ++ src/components/Accordion/Locale/ro_RO.tsx | 11 ++ src/components/Accordion/Locale/ru_RU.tsx | 11 ++ src/components/Accordion/Locale/sk_SK.tsx | 11 ++ src/components/Accordion/Locale/sr_RS.tsx | 11 ++ src/components/Accordion/Locale/sv_SE.tsx | 11 ++ src/components/Accordion/Locale/te_IN.tsx | 11 ++ src/components/Accordion/Locale/th_TH.tsx | 11 ++ src/components/Accordion/Locale/tr_TR.tsx | 11 ++ src/components/Accordion/Locale/uk_UA.tsx | 11 ++ src/components/Accordion/Locale/vi_VN.tsx | 11 ++ src/components/Accordion/Locale/zh_CN.tsx | 11 ++ src/components/Accordion/Locale/zh_TW.tsx | 11 ++ .../__snapshots__/Accordion.test.tsx.snap | 163 ++++++++++++------ .../Accordion/accordion.module.scss | 93 +++++++--- src/components/Locale/Default.tsx | 2 + src/components/Locale/ar_SA.tsx | 2 + src/components/Locale/bg_BG.tsx | 2 + src/components/Locale/cs_CZ.tsx | 2 + src/components/Locale/da_DK.tsx | 2 + src/components/Locale/de_DE.tsx | 2 + src/components/Locale/el_GR.tsx | 2 + src/components/Locale/en_GB.tsx | 2 + src/components/Locale/es_DO.tsx | 2 + src/components/Locale/es_ES.tsx | 2 + src/components/Locale/es_MX.tsx | 2 + src/components/Locale/fi_FI.tsx | 2 + src/components/Locale/fr_BE.tsx | 2 + src/components/Locale/fr_CA.tsx | 2 + src/components/Locale/fr_FR.tsx | 2 + src/components/Locale/he_IL.tsx | 2 + src/components/Locale/hi_IN.tsx | 2 + src/components/Locale/hr_HR.tsx | 2 + src/components/Locale/ht_HT.tsx | 2 + src/components/Locale/hu_HU.tsx | 2 + src/components/Locale/it_IT.tsx | 2 + src/components/Locale/ja_JP.tsx | 2 + src/components/Locale/ko_KR.tsx | 2 + src/components/Locale/ms_MY.tsx | 2 + src/components/Locale/nb_NO.tsx | 2 + src/components/Locale/nl_BE.tsx | 2 + src/components/Locale/nl_NL.tsx | 2 + src/components/Locale/pl_PL.tsx | 2 + src/components/Locale/pt_BR.tsx | 2 + src/components/Locale/pt_PT.tsx | 2 + src/components/Locale/ro_RO.tsx | 2 + src/components/Locale/ru_RU.tsx | 2 + src/components/Locale/sk_SK.tsx | 2 + src/components/Locale/sr_RS.tsx | 2 + src/components/Locale/sv_SE.tsx | 2 + src/components/Locale/te_IN.tsx | 2 + src/components/Locale/th_TH.tsx | 2 + src/components/Locale/tr_TR.tsx | 2 + src/components/Locale/uk_UA.tsx | 2 + src/components/Locale/vi_VN.tsx | 2 + src/components/Locale/zh_CN.tsx | 2 + src/components/Locale/zh_TW.tsx | 2 + src/components/LocaleProvider/index.tsx | 2 + 91 files changed, 881 insertions(+), 134 deletions(-) create mode 100644 src/components/Accordion/Locale/ar_SA.tsx create mode 100644 src/components/Accordion/Locale/bg_BG.tsx create mode 100644 src/components/Accordion/Locale/cs_CZ.tsx create mode 100644 src/components/Accordion/Locale/da_DK.tsx create mode 100644 src/components/Accordion/Locale/de_DE.tsx create mode 100644 src/components/Accordion/Locale/el_GR.tsx create mode 100644 src/components/Accordion/Locale/en_GB.tsx create mode 100644 src/components/Accordion/Locale/en_US.tsx create mode 100644 src/components/Accordion/Locale/es_DO.tsx create mode 100644 src/components/Accordion/Locale/es_ES.tsx create mode 100644 src/components/Accordion/Locale/es_MX.tsx create mode 100644 src/components/Accordion/Locale/fi_FI.tsx create mode 100644 src/components/Accordion/Locale/fr_BE.tsx create mode 100644 src/components/Accordion/Locale/fr_CA.tsx create mode 100644 src/components/Accordion/Locale/fr_FR.tsx create mode 100644 src/components/Accordion/Locale/he_IL.tsx create mode 100644 src/components/Accordion/Locale/hi_IN.tsx create mode 100644 src/components/Accordion/Locale/hr_HR.tsx create mode 100644 src/components/Accordion/Locale/ht_HT.tsx create mode 100644 src/components/Accordion/Locale/hu_HU.tsx create mode 100644 src/components/Accordion/Locale/it_IT.tsx create mode 100644 src/components/Accordion/Locale/ja_JP.tsx create mode 100644 src/components/Accordion/Locale/ko_KR.tsx create mode 100644 src/components/Accordion/Locale/ms_MY.tsx create mode 100644 src/components/Accordion/Locale/nb_NO.tsx create mode 100644 src/components/Accordion/Locale/nl_BE.tsx create mode 100644 src/components/Accordion/Locale/nl_NL.tsx create mode 100644 src/components/Accordion/Locale/pl_PL.tsx create mode 100644 src/components/Accordion/Locale/pt_BR.tsx create mode 100644 src/components/Accordion/Locale/pt_PT.tsx create mode 100644 src/components/Accordion/Locale/ro_RO.tsx create mode 100644 src/components/Accordion/Locale/ru_RU.tsx create mode 100644 src/components/Accordion/Locale/sk_SK.tsx create mode 100644 src/components/Accordion/Locale/sr_RS.tsx create mode 100644 src/components/Accordion/Locale/sv_SE.tsx create mode 100644 src/components/Accordion/Locale/te_IN.tsx create mode 100644 src/components/Accordion/Locale/th_TH.tsx create mode 100644 src/components/Accordion/Locale/tr_TR.tsx create mode 100644 src/components/Accordion/Locale/uk_UA.tsx create mode 100644 src/components/Accordion/Locale/vi_VN.tsx create mode 100644 src/components/Accordion/Locale/zh_CN.tsx create mode 100644 src/components/Accordion/Locale/zh_TW.tsx diff --git a/src/components/Accordion/Accordion.stories.tsx b/src/components/Accordion/Accordion.stories.tsx index 98754d463..06c196cb5 100644 --- a/src/components/Accordion/Accordion.stories.tsx +++ b/src/components/Accordion/Accordion.stories.tsx @@ -251,7 +251,7 @@ Custom.args = { className="octuple-content" style={{ color: 'var(--grey-tertiary-color)', fontWeight: 400 }} > - Supporting text + Supporting text { const { container } = render( ); - const summary = container.querySelector('.accordion-summary'); - fireEvent.click(summary); + const summaryClickableArea = container.querySelector('.clickable-area'); + fireEvent.click(summaryClickableArea); await waitFor(() => expect( container.getElementsByClassName('accordion-summary-expanded') ).toHaveLength(1) ); expect(container.querySelector('.show')).toBeTruthy(); - fireEvent.click(summary); + fireEvent.click(summaryClickableArea); await waitFor(() => expect( container.getElementsByClassName('accordion-summary-expanded') @@ -149,8 +149,8 @@ describe('Accordion', () => { expect(container).toMatchSnapshot(); }); - test('Accordion renders custom content', () => { - const { container } = render( + test('Accordion renders custom content and its buttons are clickable', () => { + const { container, getByRole, getByText } = render( { fontWeight: 400, }} > - Supporting text + Supporting text { } /> ); + const textElement = getByText('Supporting text'); + expect(textElement).toBeInTheDocument(); + buttons.forEach((button) => { + const buttonElement = getByRole('button', { name: button.ariaLabel }); + fireEvent.click(buttonElement); + expect(buttonElement).toBeEnabled(); + }); expect(() => container).not.toThrowError(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Accordion/Accordion.tsx b/src/components/Accordion/Accordion.tsx index 3448871a7..e547655e0 100644 --- a/src/components/Accordion/Accordion.tsx +++ b/src/components/Accordion/Accordion.tsx @@ -15,6 +15,7 @@ import ThemeContext, { } from '../ConfigProvider/ThemeContext'; import { AccordionBodyProps, + AccordionLocale, AccordionProps, AccordionShape, AccordionSize, @@ -24,6 +25,10 @@ import { Badge } from '../Badge'; import { Button, ButtonShape, ButtonVariant } from '../Button'; import { Icon, IconName } from '../Icon'; import { eventKeys, mergeClasses, uniqueId } from '../../shared/utilities'; +import LocaleReceiver, { + useLocaleReceiver, +} from '../LocaleProvider/LocaleReceiver'; +import enUS from './Locale/en_US'; import styles from './accordion.module.scss'; import themedComponentStyles from './accordion.theme.module.scss'; @@ -34,7 +39,9 @@ export const AccordionSummary: FC = ({ badgeProps, children, classNames, + collapseAriaLabelText, disabled, + expandAriaLabelText, expandButtonProps, expanded, expandIconProps, @@ -77,24 +84,28 @@ export const AccordionSummary: FC = ({ ); return ( -
+
+
{iconProps && } - {children} +
+ {typeof children === 'string' ? {children} : children} +
{badgeProps && }