Skip to content

fix(a11y): name table header menus and profile links from their visible text - #699

Merged
therealbrad merged 3 commits into
mainfrom
fix/a11y-label-in-name
Oct 16, 2026
Merged

therealbrad merged 3 commits into
mainfrom
fix/a11y-label-in-name

Conversation

@therealbrad

Copy link
Copy Markdown
Contributor

Description

The accessibility smoke gate fails on main since #698 moved @axe-core/playwright from 4.13 to 4.14. axe-core 4.14 no longer marks label-content-name-mismatch (WCAG 2.5.3 Label in Name) as experimental, so the gate now checks it on every page:

  • Column header menu trigger (DataTable, VirtualizedTableEngine): its aria-label="Column options" replaced the visible column name. The trigger is now named from its content, with "Column options" as screen-reader-only text after the label, so the accessible name reads "Name … Column options".
  • Profile links (UserNameCell, UserMention): the link's aria-label ("Profile of …") didn't include the avatar initials shown inside it. The link is now named from its content, with "Profile of " as screen-reader-only text and the avatar aria-hidden, so the accessible name is unchanged.

A run on release/v1.2 also reached report views that main's scan doesn't open by default. This PR fixes the shared code those views use:

  • Scrollable regions: the report content area and the virtualized table body can now take focus, so keyboard users can scroll content that has nothing else to focus (WCAG 2.1.1). The table body is a rowgroup, which is a valid child of the table role.
  • Report builder filters: the "Filters" label is now tied to the filter-type select, which had no accessible name.
  • Accessible Dark theme text colors: --destructive and --success are tuned for white text on a filled background and fall to 3.1:1 and 3.5:1 when used as text on the page. In that theme only, .text-destructive and .text-success now get lighter shades (≥4.6:1 on every surface, including hovered rows); fills are unchanged.

Related Issue

None. Found by the a11y smoke run on release/v1.2 and confirmed on main.

Type of Change

  • Bug fix (non-breaking change that fixes an issue)

How Has This Been Tested?

  • A11y smoke: failed on main before the change (admin-fields, admin-users, case-detail, both themes); passes on this branch in both themes. The same changes, plus the v1.2-only report builder fixes, pass on a release/v1.2 branch.
  • Unit tests: the full suite passes. The table, assignment and share-link tests now find the trigger by role and name, not aria-label. The requirements list test compares visible header labels.
  • E2E: sorting.spec.ts checks that the accessible name puts the column label before "Column options"; its role-based selectors still match.

Checklist

  • My code follows the project's style guidelines
  • I have performed a self-review of my code
  • New and existing unit tests pass locally with my changes

Additional Notes

The same changes are going to release/v1.2.

…le text

axe-core 4.14 (#698) enforces label-content-name-mismatch (WCAG 2.5.3),
which the accessibility smoke gate now fails on:

- The column header menu trigger's aria-label "Column options" replaced
  the visible column name. It is now named from its content, with
  "Column options" as screen-reader-only text after the label.
- Profile links named "Profile of <name>" also showed the avatar
  initials; the avatar is now aria-hidden.

Report views the scan reaches on release/v1.2 use the same shared code:

- Report content and virtualized table bodies can now take focus, so
  keyboard users can scroll content with nothing else to focus.
- In the Accessible Dark theme, text-destructive and text-success get
  lighter shades that meet 4.5:1 on every surface; fills are unchanged.
@therealbrad
therealbrad merged commit bbda532 into main Oct 16, 2026
10 checks passed
@therealbrad
therealbrad deleted the fix/a11y-label-in-name branch October 16, 2026 12:33
@therealbrad

Copy link
Copy Markdown
Contributor Author

🎉 This PR is included in version 1.1.9 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

mongkhonthamPEG pushed a commit to mongkhonthamPEG/testplanit that referenced this pull request Oct 17, 2026
## [1.1.9](TestPlanIt/testplanit@v1.1.8...v1.1.9) (2026-10-16)

### Bug Fixes

* **a11y:** name table header menus and profile links from their visible text ([TestPlanIt#699](TestPlanIt#699)) ([bbda532](TestPlanIt@bbda532)), closes [TestPlanIt#698](TestPlanIt#698)
* **deps:** resolve 18 of 21 open Dependabot alerts ([TestPlanIt#698](TestPlanIt#698)) ([a70654f](TestPlanIt@a70654f))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant