The remaining admin tables scroll from the keyboard, as Usage, Users and Audit do (#367) #1051

Merged
claude-bot merged 1 commit from fix/367-admin-table-regions into main 2026-10-03 17:39:44 +00:00
Collaborator

Part of #367; follows #1050.

Summary

Four admin tables were wrapped in .tscroll with no role, name or tab stop, so a keyboard user on a narrow screen could not scroll them (WCAG 2.1.1, axe scrollable-region-focusable):

  • Health's provider table
  • Notices
  • Backup's run history
  • the campaigns in a person's expanded row on Users

#1050's scans passed them only because the seeded data does not overflow. Each now gets the pattern Usage, Users and Audit already use: role="region", an aria-label and tabIndex={0}. Nothing visible changes except a focus ring when the region is tabbed to.

The jsx-a11y/no-noninteractive-tabindex rule warns on tabIndex on a region; the existing regions draw the same warning. Allowing region in that rule's roles would be a separate lint-config change.

Changelog

  • changelog.d/367-admin-table-regions.fixed.md

Test plan

  • On docker-test: vitest on AdminHealth, AdminNotices, AdminBackup and AdminUsers: 4 files, 22 passed. The first three gain the "named region, tabindex 0" assertion Usage's test uses.
  • eslint: 0 errors.
  • CI on this PR.

🤖 Generated with Claude Code

Part of #367; follows #1050. ## Summary Four admin tables were wrapped in `.tscroll` with no role, name or tab stop, so a keyboard user on a narrow screen could not scroll them (WCAG 2.1.1, axe `scrollable-region-focusable`): - Health's provider table - Notices - Backup's run history - the campaigns in a person's expanded row on Users #1050's scans passed them only because the seeded data does not overflow. Each now gets the pattern Usage, Users and Audit already use: `role="region"`, an `aria-label` and `tabIndex={0}`. Nothing visible changes except a focus ring when the region is tabbed to. The `jsx-a11y/no-noninteractive-tabindex` rule warns on `tabIndex` on a region; the existing regions draw the same warning. Allowing `region` in that rule's roles would be a separate lint-config change. ## Changelog - [x] `changelog.d/367-admin-table-regions.fixed.md` ## Test plan - [x] On docker-test: vitest on `AdminHealth`, `AdminNotices`, `AdminBackup` and `AdminUsers`: 4 files, 22 passed. The first three gain the "named region, tabindex 0" assertion Usage's test uses. - [x] eslint: 0 errors. - [ ] CI on this PR. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The remaining admin tables scroll from the keyboard, as Usage, Users and Audit do (#367)
All checks were successful
CI / Bot/backend version sync (pull_request) Successful in 34s
CI / Docker image build (pull_request) Successful in 36s
CI / Does this change touch the recording path? (pull_request) Successful in 41s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Feedback site tests (pull_request) Successful in 58s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m15s
CI / Backend lint (ruff) (pull_request) Successful in 1m26s
CI / Bot tests and audit (pull_request) Successful in 2m30s
CI / Frontend (shard 2/2) (pull_request) Successful in 8m46s
CI / End-to-end journeys (phone) (pull_request) Successful in 11m26s
CI / End-to-end journeys (keyboard) (pull_request) Successful in 12m23s
CI / Frontend (shard 1/2) (pull_request) Successful in 22m9s
CI / Backend migration, tests, and audit (pull_request) Successful in 23m1s
CI / End-to-end journeys (desktop) (pull_request) Successful in 24m1s
5fb28d4c69
Health, Notices, Backup and a person's campaigns wrapped their wide tables
in .tscroll with no role, name or tab stop: a keyboard user on a narrow
screen could not scroll them (WCAG 2.1.1, axe scrollable-region-focusable).
The axe pass in #1050 did not catch them only because the seeded data does
not overflow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-bot deleted branch fix/367-admin-table-regions 2026-10-03 17:39:44 +00:00
rbrooks referenced this pull request from a commit 2026-10-03 17:39:50 +00:00
Sign in to join this conversation.
No description provided.