-
Notifications
You must be signed in to change notification settings - Fork 350
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add visible label and ARIA label to Dropdown widget #1845
Conversation
npm Snapshot: PublishedGood news!! We've packaged up the latest commit from this PR (4840dc0) and published it to npm. You Example: yarn add @khanacademy/perseus@PR1845 If you are working in Khan Academy's webapp, you can run: ./dev/tools/bump_perseus_version.sh -t PR1845 |
Size Change: +395 B (+0.03%) Total Size: 1.29 MB
ℹ️ View Unchanged
|
GeraldRequired Reviewers
Don't want to be involved in this pull request? Comment |
> | ||
this article. If left blank, the value will | ||
default to "Select an answer". | ||
</a> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
NIT: Perhaps linking the article this way:
Please see this
<a
href="https://www.w3.org/WAI/tips/designing/#ensure-that-form-elements-include-clearly-associated-labels"
target="_blank"
>
article on writing accessible labels
</a>
for more information. If left blank, the value will default to "Select an answer".
</SingleSelect> | ||
</div> | ||
<UniqueIDProvider scope="dropdown-widget" mockOnFirstRender={true}> | ||
{(ids) => ( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While we still have code that hasn't yet been converted, we are moving towards using React's useId
hook. Example usage.
this.props.ariaLabel || | ||
this.context.strings.selectAnAnswer | ||
} | ||
aria-labelledby={ids.get("dropdown-label")} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if this should be moved into the aria-label
logic. In the case where both a visible label and an aria label are specified, the visible label would be read instead of the aria label (since aria-labelledby
takes precedence). Perhaps aria-label
could be changed to:
aria-label={
this.props.ariaLabel ||
this.props.visibleLabel ||
this.context.strings.selectAnAnswer
}
/> | ||
<InfoTip> | ||
<p>Optional visible label</p> | ||
</InfoTip> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks so much for getting this accessible! Just a few comments.
Webapp PR that adds support for labels: https://github.com/Khan/webapp/pull/27222 |
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## @khanacademy/[email protected] ### Major Changes - [#1930](#1930) [`834bd8bfb`](834bd8b) Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Remove PerseusExampleWidgetOptions, PerseusSimpleMarkdownTesterWidgetOptions, and PerseusExampleWidgetOptions types - widgets no longer exist ### Minor Changes - [#1845](#1845) [`066daab0e`](066daab) Thanks [@daniellewhyte](https://github.com/daniellewhyte)! - Add labels to Dropdown widget ### Patch Changes - [#1904](#1904) [`83b1beab8`](83b1bea) Thanks [@mark-fitzgerald](https://github.com/mark-fitzgerald)! - Upgrade Storybook to v8.x - [#1925](#1925) [`89244ccc0`](89244cc) Thanks [@handeyeco](https://github.com/handeyeco)! - Remove some uses of findDOMNode - Updated dependencies \[[`83b1beab8`](83b1bea)]: - @khanacademy/[email protected] ## @khanacademy/[email protected] ### Minor Changes - [#1845](#1845) [`066daab0e`](066daab) Thanks [@daniellewhyte](https://github.com/daniellewhyte)! - Add labels to Dropdown widget ### Patch Changes - [#1904](#1904) [`83b1beab8`](83b1bea) Thanks [@mark-fitzgerald](https://github.com/mark-fitzgerald)! - Upgrade Storybook to v8.x - [#1893](#1893) [`3d777d1c1`](3d777d1) Thanks [@catandthemachines](https://github.com/catandthemachines)! - Removing usage of createReactClass from several component files. - Updated dependencies \[[`83b1beab8`](83b1bea), [`066daab0e`](066daab), [`834bd8bfb`](834bd8b), [`89244ccc0`](89244cc)]: - @khanacademy/[email protected] - @khanacademy/[email protected] ## @khanacademy/[email protected] ### Patch Changes - [#1904](#1904) [`83b1beab8`](83b1bea) Thanks [@mark-fitzgerald](https://github.com/mark-fitzgerald)! - Upgrade Storybook to v8.x ## @khanacademy/[email protected] ### Patch Changes - [#1904](#1904) [`83b1beab8`](83b1bea) Thanks [@mark-fitzgerald](https://github.com/mark-fitzgerald)! - Upgrade Storybook to v8.x - [#1904](#1904) [`83b1beab8`](83b1bea) Thanks [@mark-fitzgerald](https://github.com/mark-fitzgerald)! - Upgrade Storybook to v8.x - Updated dependencies \[[`83b1beab8`](83b1bea)]: - @khanacademy/[email protected]
## Summary: This PR contains two fixes for the aria-label in the dropdown widget: 1. Change the logic of the aria label Follow up from Mark's comment on #1845 This commit ensures that the visible label does not override the aria label. Motivation: There may be additional info for the screen reader in the aria label that may not be in the visible label. This changes also removes the aria-labelledby from the Dropdown which was causing the screen reader output to be garbled in Safari. 2. Pass in a space `(" ")` for empty placeholder. Wonder Blocks adds a nbsp when an empty string is passed in as one of the option items. This does not work well with screen readers. When testing with Voice Over on Safari and Firefox, it reads out the space and the aria label as a series of characters (instead of words). https://github.com/user-attachments/assets/6ed58cfe-e849-4c96-a661-7d8c25f25617 The root cause for this should be fixed in Wonder Blocks and I’ve started a discussion with the WB team [here](https://khanacademy.slack.com/archives/C4PE1QM5Y/p1733761447231789) (I haven't been able to find a solution in WB yet). Given that this bug exists on prod in webapp, it feels appropriate to go ahead and implement this fix in Perseus. Issue: LIT-1476, LIT-1482 ## Test plan: Test with the new [Dropdown with empty placeholder story](http://localhost:6007/?path=/story/perseus-widgets-dropdown--dropdown-with-empty-placeholder) - Dropdown displays inline when nothing is selected - Screen reader does not say "space" when no option is selected. And does not spell out aria-label https://github.com/user-attachments/assets/b4ee0524-50e7-4000-a66e-2bb0590d5c3f Author: daniellewhyte Reviewers: mark-fitzgerald, catandthemachines Required Reviewers: Approved By: mark-fitzgerald Checks: ✅ Publish npm snapshot (ubuntu-latest, 20.x), ✅ Check builds for changes in size (ubuntu-latest, 20.x), ✅ Check for .changeset entries for all changed files (ubuntu-latest, 20.x), ✅ Lint, Typecheck, Format, and Test (ubuntu-latest, 20.x), ✅ Cypress (ubuntu-latest, 20.x), ✅ Publish Storybook to Chromatic (ubuntu-latest, 20.x), ✅ .github/dependabot.yml Pull Request URL: #1953
Summary:
This commit adds two new fields to the Dropdown widget:
ariaLabel
andvisibleLabel
.Issue: LIT-1424
Test plan:
Screen reader walkthrough with
visibleLabel
:Dropdown.visible.label.mov
Screen reader walkthrough with
ariaLabel
only:(This will probably be most instances as the dropdown widget is mostly used inline, and the visible label makes things too cramped.)
Dropdown.ARIA.label.mov
Updates to widget editor:
You can also see examples in the course editor on this ZND: https://prod-znd-241122-danielle-dw2.khanacademy.org/devadmin/content/articles/dropdown-with-labels/x56e2ea23d30e405c