Skip to content
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

Open
wants to merge 20 commits into
base: main
Choose a base branch
from

Conversation

daniellewhyte
Copy link
Contributor

@daniellewhyte daniellewhyte commented Nov 12, 2024

Summary:

This commit adds two new fields to the Dropdown widget: ariaLabel and visibleLabel.

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:
Screenshot 2024-11-25 at 10 24 18 AM

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

@daniellewhyte daniellewhyte self-assigned this Nov 12, 2024
Copy link
Contributor

github-actions bot commented Nov 12, 2024

npm Snapshot: Published

Good news!! We've packaged up the latest commit from this PR (ec98fa8) and published it to npm. You
can install it using the tag PR1845.

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

Copy link
Contributor

github-actions bot commented Nov 12, 2024

Size Change: +394 B (+0.03%)

Total Size: 1.29 MB

Filename Size Change
packages/perseus-editor/dist/es/index.js 697 kB +137 B (+0.02%)
packages/perseus/dist/es/index.js 421 kB +243 B (+0.06%)
packages/perseus/dist/es/strings.js 3.59 kB +14 B (+0.39%)
ℹ️ View Unchanged
Filename Size
packages/kas/dist/es/index.js 39 kB
packages/keypad-context/dist/es/index.js 760 B
packages/kmath/dist/es/index.js 4.27 kB
packages/math-input/dist/es/index.js 77.9 kB
packages/math-input/dist/es/strings.js 1.79 kB
packages/perseus-core/dist/es/index.js 1.48 kB
packages/perseus-linter/dist/es/index.js 22.2 kB
packages/pure-markdown/dist/es/index.js 3.66 kB
packages/simple-markdown/dist/es/index.js 12.5 kB

compressed-size-action

@daniellewhyte daniellewhyte marked this pull request as ready for review November 25, 2024 17:04
@daniellewhyte daniellewhyte requested a review from a team November 25, 2024 17:04
@khan-actions-bot
Copy link
Contributor

Gerald

Required Reviewers
  • @Khan/perseus for changes to .changeset/hot-chairs-sell.md, packages/perseus/src/perseus-types.ts, packages/perseus/src/strings.ts, packages/perseus/src/__testdata__/renderer.testdata.ts, packages/perseus/src/__tests__/extract-perseus-data.test.ts, packages/perseus/src/__tests__/renderer.test.tsx, packages/perseus-editor/src/widgets/dropdown-editor.tsx, packages/perseus/src/__tests__/__snapshots__/renderer.test.tsx.snap, packages/perseus/src/widget-ai-utils/dropdown/dropdown-ai-utils.test.ts, packages/perseus/src/widgets/dropdown/dropdown.stories.tsx, packages/perseus/src/widgets/dropdown/dropdown.test.ts, packages/perseus/src/widgets/dropdown/dropdown.testdata.ts, packages/perseus/src/widgets/dropdown/dropdown.tsx, packages/perseus/src/util/parse-perseus-json/perseus-parsers/dropdown-widget.ts, packages/perseus/src/widgets/dropdown/__snapshots__/dropdown.test.ts.snap

Don't want to be involved in this pull request? Comment #removeme and we won't notify you of further changes.

>
this article. If left blank, the value will
default to "Select an answer".
</a>
Copy link
Contributor

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) => (
Copy link
Contributor

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")}
Copy link
Contributor

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>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The tooltip icons seem oddly placed (being below the input field instead of after the label text). Instead of using <LabeledTextField>, would it be possible to have a separate label, followed by the <InfoTip> and then a regular <TextField>?

Tooltip Placement

Copy link
Contributor

@mark-fitzgerald mark-fitzgerald left a 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants