From 074ae281bdc4020f9b98e3cd07bc8349c7099190 Mon Sep 17 00:00:00 2001 From: "adam.samec" Date: Tue, 9 Nov 2021 10:59:51 +0100 Subject: [PATCH 01/70] Add accessibility scenarios for the Accordion, Button and Popover components --- .../Accordion.stories.tsx | 62 ++++++++++++++++++ .../AccessibilityScenarios/Button.stories.tsx | 28 ++++++++ .../ListOfScenarios.stories.mdx | 22 +++++-- .../AccessibilityScenarios/Menu.stories.tsx | 6 +- .../Popover.stories.tsx | 64 +++++++++++++++++++ .../src/AccessibilityScenarios/utils.tsx | 6 +- 6 files changed, 175 insertions(+), 13 deletions(-) create mode 100644 packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx create mode 100644 packages/react-components/src/AccessibilityScenarios/Button.stories.tsx create mode 100644 packages/react-components/src/AccessibilityScenarios/Popover.stories.tsx diff --git a/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx new file mode 100644 index 0000000000000..4fdeb184af72d --- /dev/null +++ b/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx @@ -0,0 +1,62 @@ +import * as React from 'react'; + +// https://github.com/microsoft/fluentui/pull/18695#issuecomment-868432982 +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import { Accordion, AccordionItem, AccordionHeader, AccordionPanel } from '@fluentui/react-accordion'; +import { Scenario, APP_TITLE, APP_TITLE_SEPARATOR } from './utils'; + +export const SimpleFormAccordionAccessibilityScenario: React.FunctionComponent = () => { + return ( + + + + Personal details + + + + + +
+ + + + +
+
+
+ + Residence + + + + + + + + + + + Hobbies + +
+ + + + + + + + +
+
+
+
+
+ ); +}; + +export default { + title: `Simple Form Accordion${APP_TITLE_SEPARATOR}${APP_TITLE}`, + id: 'accordion-accessibility-scenario', +}; diff --git a/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx new file mode 100644 index 0000000000000..62b483b6c902f --- /dev/null +++ b/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx @@ -0,0 +1,28 @@ +import * as React from 'react'; + +// https://github.com/microsoft/fluentui/pull/18695#issuecomment-868432982 +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import { Button } from '@fluentui/react-button'; +import { Scenario, APP_TITLE, APP_TITLE_SEPARATOR } from './utils'; + +export const CalendarButtonsAccessibilityScenario: React.FunctionComponent = () => { + const onSaveButtonClick = React.useCallback(() => { + alert('The calendar event would have been saved.'); + }, []); + + return ( + + <> + + + + + + ); +}; + +export default { + title: `Calendar Buttons${APP_TITLE_SEPARATOR}${APP_TITLE}`, + id: 'button-accessibility-scenario', +}; diff --git a/packages/react-components/src/AccessibilityScenarios/ListOfScenarios.stories.mdx b/packages/react-components/src/AccessibilityScenarios/ListOfScenarios.stories.mdx index 60b6bc88ef78a..ad7286b897d02 100644 --- a/packages/react-components/src/AccessibilityScenarios/ListOfScenarios.stories.mdx +++ b/packages/react-components/src/AccessibilityScenarios/ListOfScenarios.stories.mdx @@ -1,16 +1,24 @@ import { Meta } from '@storybook/addon-docs'; -import { FullscreenLink } from './utils'; +import { FullscreenLink, APP_TITLE, APP_TITLE_SEPARATOR } from './utils'; - + -## Accessibility Scenarios +# Accessibility Scenarios Accessibility scenarios are used to validate accessibility of components and demonstrate common UI patterns using Fluent UI components. -### Component: Accordion +## Component: Accordion -### Component: Menu +- -- +## Component: Button -### Component: Popover +- + +## Component: Menu + +- + +## Component: Popover + +- diff --git a/packages/react-components/src/AccessibilityScenarios/Menu.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Menu.stories.tsx index 9a530dbeb4927..7a9ddf2ca4f75 100644 --- a/packages/react-components/src/AccessibilityScenarios/Menu.stories.tsx +++ b/packages/react-components/src/AccessibilityScenarios/Menu.stories.tsx @@ -18,7 +18,7 @@ import { MenuItemCheckbox, MenuItemRadio, } from '@fluentui/react-menu'; -import { Scenario } from './utils'; +import { Scenario, APP_TITLE, APP_TITLE_SEPARATOR } from './utils'; interface StatusSubmenuProps { checkedValues: Record; @@ -73,7 +73,7 @@ export const ProfileMenuAccessibilityScenario: React.FunctionComponent = () => { }; return ( - + @@ -107,6 +107,6 @@ export const ProfileMenuAccessibilityScenario: React.FunctionComponent = () => { }; export default { - title: 'Accessibility Scenarios/ProfileMenu', + title: `Profile Menu${APP_TITLE_SEPARATOR}${APP_TITLE}`, id: 'menu-accessibility-scenario', }; diff --git a/packages/react-components/src/AccessibilityScenarios/Popover.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Popover.stories.tsx new file mode 100644 index 0000000000000..1ee522eb487f1 --- /dev/null +++ b/packages/react-components/src/AccessibilityScenarios/Popover.stories.tsx @@ -0,0 +1,64 @@ +import * as React from 'react'; + +// https://github.com/microsoft/fluentui/pull/18695#issuecomment-868432982 +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import { Button } from '@fluentui/react-button'; + +// https://github.com/microsoft/fluentui/pull/18695#issuecomment-868432982 +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import { Popover, PopoverTrigger, PopoverSurface } from '@fluentui/react-popover'; + +import { Scenario, APP_TITLE, APP_TITLE_SEPARATOR } from './utils'; + +interface IAddPeopleContentProps { + setPopoverOpened: (state: boolean) => void; +} + +const AddPeopleContent: React.FunctionComponent = (props: IAddPeopleContentProps) => { + const { setPopoverOpened } = props; + + return ( + <> + + + + + ); +}; + +export const AddPeoplePopoverAccessibilityScenario: React.FunctionComponent = () => { + const [popoverOpened, setPopoverOpened] = React.useState(false); + + return ( + + { + setPopoverOpened(data.open); + }} + trapFocus + > + + + + + + + + + + ); +}; + +export default { + title: `Add People Popover${APP_TITLE_SEPARATOR}${APP_TITLE}`, + id: 'popover-accessibility-scenario', +}; diff --git a/packages/react-components/src/AccessibilityScenarios/utils.tsx b/packages/react-components/src/AccessibilityScenarios/utils.tsx index 2af5b21792706..f60b9a97bbafd 100644 --- a/packages/react-components/src/AccessibilityScenarios/utils.tsx +++ b/packages/react-components/src/AccessibilityScenarios/utils.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; -const APP_TITLE = 'Fluent UI usage scenarios'; -const APP_TITLE_SEPARATOR = ' | '; +export const APP_TITLE = 'Accessibility Scenarios'; +export const APP_TITLE_SEPARATOR = ' | '; interface FullscreenLinkProps { parent: string; @@ -18,7 +18,7 @@ export const FullscreenLink = (props: FullscreenLinkProps) => ( ); export const BackLink = () => ( - Go back to main menu + Go back to main menu ); export const Scenario: React.FunctionComponent<{ pageTitle: string }> = ({ pageTitle, children }) => { From 3352e776320fc297aba92ee3ea5e7d41f7df56d3 Mon Sep 17 00:00:00 2001 From: "adam.samec" Date: Wed, 10 Nov 2021 17:38:56 +0100 Subject: [PATCH 02/70] Change scenario titles --- .../src/AccessibilityScenarios/Accordion.stories.tsx | 2 +- .../src/AccessibilityScenarios/Button.stories.tsx | 2 +- .../src/AccessibilityScenarios/Menu.stories.tsx | 2 +- .../src/AccessibilityScenarios/Popover.stories.tsx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx index 4fdeb184af72d..166149c776b48 100644 --- a/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx +++ b/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx @@ -57,6 +57,6 @@ export const SimpleFormAccordionAccessibilityScenario: React.FunctionComponent = }; export default { - title: `Simple Form Accordion${APP_TITLE_SEPARATOR}${APP_TITLE}`, + title: 'Accessibility Scenarios / Simple Form Accordion', id: 'accordion-accessibility-scenario', }; diff --git a/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx index 62b483b6c902f..d518a9ca3eb96 100644 --- a/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx +++ b/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx @@ -23,6 +23,6 @@ export const CalendarButtonsAccessibilityScenario: React.FunctionComponent = () }; export default { - title: `Calendar Buttons${APP_TITLE_SEPARATOR}${APP_TITLE}`, + title: 'Accessibility Scenarios / Calendar Buttons', id: 'button-accessibility-scenario', }; diff --git a/packages/react-components/src/AccessibilityScenarios/Menu.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Menu.stories.tsx index 7a9ddf2ca4f75..f6d005bc827ba 100644 --- a/packages/react-components/src/AccessibilityScenarios/Menu.stories.tsx +++ b/packages/react-components/src/AccessibilityScenarios/Menu.stories.tsx @@ -107,6 +107,6 @@ export const ProfileMenuAccessibilityScenario: React.FunctionComponent = () => { }; export default { - title: `Profile Menu${APP_TITLE_SEPARATOR}${APP_TITLE}`, + title: 'Accessibility Scenarios / Profile Menu', id: 'menu-accessibility-scenario', }; diff --git a/packages/react-components/src/AccessibilityScenarios/Popover.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Popover.stories.tsx index 1ee522eb487f1..ce0bc836a4b51 100644 --- a/packages/react-components/src/AccessibilityScenarios/Popover.stories.tsx +++ b/packages/react-components/src/AccessibilityScenarios/Popover.stories.tsx @@ -59,6 +59,6 @@ export const AddPeoplePopoverAccessibilityScenario: React.FunctionComponent = () }; export default { - title: `Add People Popover${APP_TITLE_SEPARATOR}${APP_TITLE}`, + title: 'Accessibility Scenarios / Add people Popover', id: 'popover-accessibility-scenario', }; From 5e45bbd19371ab4eabbcbf8c714967ee5892cdcf Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 11 Nov 2021 12:17:00 +0100 Subject: [PATCH 03/70] Use string directly as component prop value Co-authored-by: Peter Varholak --- .../src/AccessibilityScenarios/Accordion.stories.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx index 166149c776b48..1ebd8917130c9 100644 --- a/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx +++ b/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx @@ -9,7 +9,7 @@ import { Scenario, APP_TITLE, APP_TITLE_SEPARATOR } from './utils'; export const SimpleFormAccordionAccessibilityScenario: React.FunctionComponent = () => { return ( - + Personal details From 0e82680ff8fdc4bdc5a0ae1c29cd4d4e8a94d717 Mon Sep 17 00:00:00 2001 From: "adam.samec" Date: Thu, 11 Nov 2021 16:48:44 +0100 Subject: [PATCH 04/70] replace alert with status text and fix warnings --- .../src/AccessibilityScenarios/Accordion.stories.tsx | 2 +- .../src/AccessibilityScenarios/Button.stories.tsx | 8 ++++++-- .../src/AccessibilityScenarios/Menu.stories.tsx | 2 +- .../src/AccessibilityScenarios/Popover.stories.tsx | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx index 1ebd8917130c9..eb65783e956c1 100644 --- a/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx +++ b/packages/react-components/src/AccessibilityScenarios/Accordion.stories.tsx @@ -4,7 +4,7 @@ import * as React from 'react'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore import { Accordion, AccordionItem, AccordionHeader, AccordionPanel } from '@fluentui/react-accordion'; -import { Scenario, APP_TITLE, APP_TITLE_SEPARATOR } from './utils'; +import { Scenario } from './utils'; export const SimpleFormAccordionAccessibilityScenario: React.FunctionComponent = () => { return ( diff --git a/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx index d518a9ca3eb96..1faf267a638ba 100644 --- a/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx +++ b/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx @@ -4,11 +4,12 @@ import * as React from 'react'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore import { Button } from '@fluentui/react-button'; -import { Scenario, APP_TITLE, APP_TITLE_SEPARATOR } from './utils'; +import { Scenario } from './utils'; export const CalendarButtonsAccessibilityScenario: React.FunctionComponent = () => { + const [statusText, setStatusText] = React.useState('Not saved.'); const onSaveButtonClick = React.useCallback(() => { - alert('The calendar event would have been saved.'); + setStatusText('The event has been saved.'); }, []); return ( @@ -17,6 +18,9 @@ export const CalendarButtonsAccessibilityScenario: React.FunctionComponent = () +

+ Event status: {statusText} +

); diff --git a/packages/react-components/src/AccessibilityScenarios/Menu.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Menu.stories.tsx index f6d005bc827ba..81a6c5988c85f 100644 --- a/packages/react-components/src/AccessibilityScenarios/Menu.stories.tsx +++ b/packages/react-components/src/AccessibilityScenarios/Menu.stories.tsx @@ -18,7 +18,7 @@ import { MenuItemCheckbox, MenuItemRadio, } from '@fluentui/react-menu'; -import { Scenario, APP_TITLE, APP_TITLE_SEPARATOR } from './utils'; +import { Scenario } from './utils'; interface StatusSubmenuProps { checkedValues: Record; diff --git a/packages/react-components/src/AccessibilityScenarios/Popover.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Popover.stories.tsx index ce0bc836a4b51..d989d1941685f 100644 --- a/packages/react-components/src/AccessibilityScenarios/Popover.stories.tsx +++ b/packages/react-components/src/AccessibilityScenarios/Popover.stories.tsx @@ -10,7 +10,7 @@ import { Button } from '@fluentui/react-button'; // @ts-ignore import { Popover, PopoverTrigger, PopoverSurface } from '@fluentui/react-popover'; -import { Scenario, APP_TITLE, APP_TITLE_SEPARATOR } from './utils'; +import { Scenario } from './utils'; interface IAddPeopleContentProps { setPopoverOpened: (state: boolean) => void; From f9c34fce721a36f0f9eba78135ec981da49ca674 Mon Sep 17 00:00:00 2001 From: "adam.samec" Date: Thu, 11 Nov 2021 17:03:49 +0100 Subject: [PATCH 05/70] Replace useCallback with ordinary function --- .../src/AccessibilityScenarios/Button.stories.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx index 1faf267a638ba..b744f1326d0b0 100644 --- a/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx +++ b/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx @@ -8,9 +8,9 @@ import { Scenario } from './utils'; export const CalendarButtonsAccessibilityScenario: React.FunctionComponent = () => { const [statusText, setStatusText] = React.useState('Not saved.'); - const onSaveButtonClick = React.useCallback(() => { + const onSaveButtonClick = () => { setStatusText('The event has been saved.'); - }, []); + }; return ( From 930148bd0447c2a00ead32c9ab9ae4aab245b908 Mon Sep 17 00:00:00 2001 From: "adam.samec" Date: Thu, 11 Nov 2021 17:19:45 +0100 Subject: [PATCH 06/70] Revert the title for the scenarios list page --- .../src/AccessibilityScenarios/ListOfScenarios.stories.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-components/src/AccessibilityScenarios/ListOfScenarios.stories.mdx b/packages/react-components/src/AccessibilityScenarios/ListOfScenarios.stories.mdx index ad7286b897d02..db0f91c0813b1 100644 --- a/packages/react-components/src/AccessibilityScenarios/ListOfScenarios.stories.mdx +++ b/packages/react-components/src/AccessibilityScenarios/ListOfScenarios.stories.mdx @@ -1,7 +1,7 @@ import { Meta } from '@storybook/addon-docs'; -import { FullscreenLink, APP_TITLE, APP_TITLE_SEPARATOR } from './utils'; +import { FullscreenLink } from './utils'; - + # Accessibility Scenarios From 49691d4f8df2bdec690ee4ab8d7c0ff9a85f369d Mon Sep 17 00:00:00 2001 From: "adam.samec" Date: Thu, 11 Nov 2021 17:34:07 +0100 Subject: [PATCH 07/70] Removed unnecessary fragment --- .../src/AccessibilityScenarios/Button.stories.tsx | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx b/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx index b744f1326d0b0..4090b961f9135 100644 --- a/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx +++ b/packages/react-components/src/AccessibilityScenarios/Button.stories.tsx @@ -14,14 +14,12 @@ export const CalendarButtonsAccessibilityScenario: React.FunctionComponent = () return ( - <> - - - -

- Event status: {statusText} -

- + + + +

+ Event status: {statusText} +

); }; From 8bdd2c0d044a8c5f58281d9adb04e79bddcd6c32 Mon Sep 17 00:00:00 2001 From: "adam.samec" Date: Thu, 11 Nov 2021 18:46:26 +0100 Subject: [PATCH 08/70] Use