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

Make SubNav SubMenus accessible using keyboard #679

Merged
merged 8 commits into from
Aug 8, 2024

Conversation

joshfarrant
Copy link
Contributor

@joshfarrant joshfarrant commented Aug 5, 2024

Summary

Makes the submenu's arrow icon focusable, activating it (with Space or Enter) will open the submenu. Tabbing to the next or previous item will collapse the submenu. Esc intentionally doesn't close the menu to match the behaviour of the WAI example referenced for this change.

List of notable changes:

  • Added useIsChildFocused hook to detect whether a given element has a child which is focused
  • Split out SubNavLinkWithSubmenu from SubNavLink component.
    • This is an internal change and doesn't affect the public API of the component. It was done to better separate nav items with and without submenus and remove unnecessary hooks calls from items without submenus.

What should reviewers focus on?

  • Ensure that keyboard navigation works as expected
  • I'm using an onKeyDown event to detect when Space or Enter are pressed, rather than using onClick. The reason is that I don't want the caret to be clickable, as that would differ from the component's existing behaviour. Using onClick would allow users to click the caret and keep the menu open until they click away. If this is the desired behaviour, I'd be happy to switch to onClick instead, however my concern is that the arrow icon would be quite a small tap target.

Steps to test:

  1. Take a look at a story containing a submenu and try navigating using the keyboard.
  2. Open the menu by activating the arrow button
  3. Test that you can tab forwards and backwards through the dropdown
  4. Test that tabbing through the dropdown to the next item closes the dropdown
  5. Test that tabbing back to the previous item closes the dropdown

Supporting resources (related issues, external links, etc):

Contributor checklist:

  • All new and existing CI checks pass
  • Tests prove that the feature works and covers both happy and unhappy paths
  • Any drop in coverage, breaking changes or regressions have been documented above
  • New visual snapshots have been generated / updated for any UI changes
  • All developer debugging and non-functional logging has been removed
  • Related issues have been referenced in the PR description

Reviewer checklist:

  • Check that pull request and proposed changes adhere to our contribution guidelines and code of conduct
  • Check that tests prove the feature works and covers both happy and unhappy paths
  • Check that there aren't other open Pull Requests for the same update/change

Screenshots:

Please try to provide before and after screenshots or videos

Before After
Export-1722930600800.mp4
Export-1722930428822.mp4

Copy link

changeset-bot bot commented Aug 5, 2024

🦋 Changeset detected

Latest commit: f1264f9

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 6 packages
Name Type
@primer/react-brand Patch
@primer/brand-primitives Patch
@primer/brand-e2e Patch
@primer/brand-fonts Patch
@primer/brand-config Patch
@primer/brand-storybook Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link
Contributor

github-actions bot commented Aug 5, 2024

🟢 No design token changes found

Copy link
Contributor

github-actions bot commented Aug 5, 2024

⚠️ Visual differences found

Our visual comparison tests found UI differences.

Please review the differences by using the test artifacts to ensure that the changes were intentional.

Artifacts can be downloaded and reviewed locally.

Download links are available at the bottom of the workflow summary screen.

Example:

artifacts section of workflow run

If the changes are expected, please run npm run test:visual:update-snapshots to replace the previous fixtures.

Review visual differences

@joshfarrant joshfarrant marked this pull request as ready for review August 6, 2024 08:53
@joshfarrant joshfarrant requested a review from rezrah August 6, 2024 08:53
@joshfarrant joshfarrant force-pushed the joshfarrant/subnav-submenu-a11y branch from 92f36be to c539e70 Compare August 6, 2024 14:34
Copy link
Collaborator

@rezrah rezrah left a comment

Choose a reason for hiding this comment

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

Looks great 🙌

@joshfarrant joshfarrant force-pushed the joshfarrant/subnav-submenu-a11y branch from 6a50d02 to f1264f9 Compare August 8, 2024 13:38
@joshfarrant joshfarrant merged commit 30f717d into main Aug 8, 2024
18 checks passed
@joshfarrant joshfarrant deleted the joshfarrant/subnav-submenu-a11y branch August 8, 2024 13:59
@primer-css primer-css mentioned this pull request Aug 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants