fix(a11y): add missing ARIA row/rowgroup structure to grid headers - #2694
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #2694 +/- ##
=======================================
Coverage 100.0% 100.0%
=======================================
Files 200 200
Lines 25462 25465 +3
Branches 8998 8999 +1
=======================================
+ Hits 25462 25465 +3
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
angular-slickgrid
aurelia-slickgrid
slickgrid-react
slickgrid-vue
@slickgrid-universal/angular-row-detail-plugin
@slickgrid-universal/aurelia-row-detail-plugin
@slickgrid-universal/react-row-detail-plugin
@slickgrid-universal/vue-row-detail-plugin
@slickgrid-universal/binding
@slickgrid-universal/common
@slickgrid-universal/composite-editor-component
@slickgrid-universal/custom-footer-component
@slickgrid-universal/custom-tooltip-plugin
@slickgrid-universal/empty-warning-component
@slickgrid-universal/event-pub-sub
@slickgrid-universal/excel-export
@slickgrid-universal/graphql
@slickgrid-universal/odata
@slickgrid-universal/pagination-component
@slickgrid-universal/pdf-export
@slickgrid-universal/row-detail-view-plugin
@slickgrid-universal/rxjs-observable
@slickgrid-universal/sql
@slickgrid-universal/text-export
@slickgrid-universal/utils
@slickgrid-universal/vanilla-bundle
@slickgrid-universal/vanilla-force-bundle
@slickgrid-universal/web-mcp
commit: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
vibe coded with Copilot using GPT-5.3-Codex and double-checked implementation with Claude Sonnet 5
Describe your change
This PR supersedes #2680 and keeps the same a11y intent, with a standards-safe focus sink implementation.
The grid container uses role="grid" and header cells use role="columnheader", but intermediate header containers did not expose the required rowgroup and row hierarchy in the accessibility tree. That can produce two common audit failures:
Nothing is visually broken, but assistive technology does not get a complete grid header structure.
This patch adds the missing header and filter-row role skeleton at creation time:
Focus sink handling is intentionally different from #2680:
Scope note:
aria-colcount and aria-rowcount behavior remains unchanged.
How to reproduce
Run an a11y audit (axe or Lighthouse) on any page with a grid.
Before:
After:
Verification
Updated unit tests in slickGrid.spec.ts verify:
Targeted test run passed:
Attribution
Caveat
One caveat worth knowing (not a bug, just a limitation):
If a consumer moves
_containerto a different DOM parent after grid init, the focus sinks stay attached to the original parent reference, not wherever the container moved to. This is a narrow edge case — SlickGrid doesn't support post-init container relocation elsewhere either, so it's consistent with existing assumptions, not a new regression.