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

va-process-list-item: move status eyebrow into header so that it gets read by screen readers #1437

Merged
merged 5 commits into from
Dec 17, 2024

Conversation

powellkerry
Copy link
Contributor

@powellkerry powellkerry commented Dec 13, 2024

Chromatic

https://98739-proc-list-eyebrow-acc--65a6e2ed2314f7b8f98609d8.chromatic.com

Description

This PR moves the status eyebrow text inside the header so that it doesn't get skipped by screen readers.

* moving the eyebrow into the header caused the color of the eyebrow in the current step to be blue. I overrode this so that they are #3d4551

Closes 98739

QA Checklist

  • [ x] Component maintains 1:1 parity with design mocks
  • [ x] Text is consistent with what's been provided in the mocks
  • [ x] Component behaves as expected across breakpoints
  • Accessibility expert has signed off on code changes (if applicable. If not applicable provide reason why)
  • [ x] Designer has signed off on changes (if applicable. If not applicable provide reason why)
  • [ x] Tab order and focus state work as expected
  • [ x] Changes have been tested against screen readers (if applicable. If not applicable provide reason why)
  • [ x] New components are covered by e2e tests; updates to existing components are covered by existing test suite
  • [ x] Changes have been tested in vets-website using Verdaccio (if applicable. If not applicable provide reason why)

Screenshots

No visual differences:

Before:
Screenshot 2024-12-13 at 10 46 06 AM

After:
Screenshot 2024-12-16 at 10 14 02 AM

Acceptance criteria

  • QA checklist has been completed
  • [ x] Screenshots have been attached that cover desktop and mobile screens

Definition of done

  • [ x] Documentation has been updated, if applicable
  • [ x] A link has been provided to the originating GitHub issue (or connected to it via ZenHub)

@powellkerry powellkerry added the patch Patch change in semantic versioning label Dec 13, 2024
{header ? <HeaderLevel part="header" class='usa-process-list__heading'>{header}</HeaderLevel> : null}
{header || status ? (
// aria-label hack to avoid header being read twice in voiceOver
<HeaderLevel part="header" class='usa-process-list__heading' aria-label={`${status ? `${statusTextMap[status]}: ` : ''}${header}`}>
Copy link
Contributor Author

@powellkerry powellkerry Dec 13, 2024

Choose a reason for hiding this comment

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

In VoiceOver when there are multiple elements in the header it will read it as "Header level 3; two items;" and repeats the heading text multiple times. The aria-label in the header and aria-hidden on the container fixes this issue, but it seems like there should be a better solution? @rsmithadhoc do you have a suggestion?

Copy link
Contributor

Choose a reason for hiding this comment

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

I tested in other screen readers, JAWS didn't recognize the headings at all. I'll take a look and see if there's a better solution.

Copy link
Contributor

Choose a reason for hiding this comment

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

@powellkerry
I think the original HTML may be the way to go here.

    <h2>
        <span></span>
        <span></span>
    </h2>

When reading the page, I see that VoiceOver reads the heading, then repeats the 2 items within the heading, like you said. But when using the command to read the next heading it only reads it once and using the headings menu it only reads it once, as expected.

While not ideal for VoiceOver, we may have to accept it for now. It may be confusing, but I don't think it would hinder the user in navigating the page. JAWS and NVDA only read it once when reading the page. I also tested them reading next heading or using their headings menu and it also functioned as intended with the original HTML.

I think the HTML is fine in the original way, so VoiceOver should be able to handle it. I think it also keeps things much simpler and should work in a wider range of places, as aria-hidden can cause some issues, like I saw with JAWS.

Thanks!

@powellkerry powellkerry marked this pull request as ready for review December 13, 2024 17:57
@powellkerry powellkerry requested a review from a team as a code owner December 13, 2024 17:57
Copy link
Contributor

@Andrew565 Andrew565 left a comment

Choose a reason for hiding this comment

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

Development looks good to me!

@powellkerry powellkerry merged commit 31d3ce2 into main Dec 17, 2024
8 checks passed
@powellkerry powellkerry deleted the 98739-proc-list-eyebrow-acc branch December 17, 2024 15:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
patch Patch change in semantic versioning
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Staging Review finding: Process list eyebrow text may be missed by screen reader users
4 participants