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

Apply correct markup to selected breadcrumb items #833

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

Conversation

rezrah
Copy link
Collaborator

@rezrah rezrah commented Nov 26, 2024

Summary

Fixes #819

Changes the markup applied to selected breadcrumb items to be a non-interactive element. This removes tab focus from these items, making them inaccessible via keyboard navigation.

🔗 Preview

List of notable changes:

  • Updated tests
  • Updated markup rendering

Steps to test:

  1. Verify tests cover the branching logic adequately

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
  • UI Changes contain new visual snapshots (generated by adding update snapshots label to the PR)
  • 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:

Before:

Screen.Recording.2024-11-14.at.9.41.02.AM.mov

After:

Screen.Recording.2024-11-26.at.14.10.41.mov

Copy link

changeset-bot bot commented Nov 26, 2024

🦋 Changeset detected

Latest commit: 3401070

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 Nov 26, 2024

🟢 No design token changes found

Copy link
Contributor

github-actions bot commented Nov 26, 2024

🟢 No visual differences found

Our visual comparison tests did not find any differences in the UI.

Copy link
Contributor

@joshfarrant joshfarrant left a comment

Choose a reason for hiding this comment

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

Looks good! A couple of tiny things but happy to approve as neither are required changes

Comment on lines +68 to +77
const breadcrumbLinkEls = getAllByRole('link')
expect(breadcrumbLinkEls).toHaveLength(2)

const item1 = breadcrumbLinkEls[0]
expect(item1.textContent).toBe('Resources')
expect(item1.getAttribute('href')).toBe('/')

const item2 = breadcrumbLinkEls[1]
expect(item2.textContent).toBe('GitHub Copilot')
expect(item2.getAttribute('href')).toBe('/copilot')
Copy link
Contributor

Choose a reason for hiding this comment

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

Purely a preference thing, but this could be simplified slightly to:

Suggested change
const breadcrumbLinkEls = getAllByRole('link')
expect(breadcrumbLinkEls).toHaveLength(2)
const item1 = breadcrumbLinkEls[0]
expect(item1.textContent).toBe('Resources')
expect(item1.getAttribute('href')).toBe('/')
const item2 = breadcrumbLinkEls[1]
expect(item2.textContent).toBe('GitHub Copilot')
expect(item2.getAttribute('href')).toBe('/copilot')
expect(getAllByRole('link')).toHaveLength(2)
expect(getByRole('link', {name: 'Resources'})).toHaveAttribute('href', '/')
expect(getByRole('link', {name: 'GitHub Copilot'})).toHaveAttribute('href', '/copilot')

Appreciate the current approach is more in line with the rest of the file, so feel free to disregard this 🙂

size="100"
variant="muted"
className={clsx(styles.Breadcrumbs__link, styles['Breadcrumbs__link--selected'], className)}
aria-current={ariaCurrent ? ariaCurrent : 'page'}
Copy link
Contributor

Choose a reason for hiding this comment

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

Nit, but you could simplify this to

Suggested change
aria-current={ariaCurrent ? ariaCurrent : 'page'}
aria-current="page"

and remove 'aria-current' from the props destructure above.

If the user passes their own aria-current to Breadcrumbs.Item then that will override this on the line below as part of {...rest}

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.

🐛 [a11y] - Breadcrumbs accessibility issues
2 participants