fix(a11y): close cross-app interaction gaps
This commit is contained in:
@@ -1,21 +1,26 @@
|
||||
# Accessibility code-review evidence
|
||||
|
||||
Captured: 2026-08-02
|
||||
Updated: 2026-08-15
|
||||
|
||||
Classification: inspected in code and component tests only. Manual browser/assistive-technology verification was blocked by the missing in-app browser client.
|
||||
Classification: code inspection, component tests and local authenticated Chromium. Native assistive-technology and production checks remain external.
|
||||
|
||||
## Confirmed code-level issues
|
||||
## Corrected issues
|
||||
|
||||
- Icon-only controls lack programmatic names in `CompaniesTable.tsx:139,186`, `Correspondence.tsx:472`, `JobTable.tsx:493,704,745-748`, `SavedViewsMenu.tsx:93,153`, and `CvBuilderPage.tsx:96`. Tooltips or HTML `title` alone are not a reliable accessible name.
|
||||
- Attachment preview/download/rename/delete buttons use `title` without `aria-label` at `Attachments.tsx:320-330`.
|
||||
- CV cards are clickable `Paper` elements with pointer styling but no link/button role, `tabIndex`, or keyboard activation at `CvBuilderPage.tsx:91-98`.
|
||||
- The public CV iframe is fixed at 210mm wide at `PublicCvPage.tsx:53-62`; at 375px and 768px this is a code-supported overflow risk, but visual clipping was not manually verified.
|
||||
- Every frontend `IconButton` now has an explicit programmatic name. This includes shell navigation/user/settings/search, company edit, correspondence delete, table columns and row actions, saved views, attachments, and CV Builder navigation. File-specific actions include the affected record name.
|
||||
- CV cards expose link semantics, keyboard focus, a visible focus indicator and Enter/Space activation. Their nested action menu remains independent of card navigation.
|
||||
- The anonymous public CV no longer puts a fixed 210mm element directly into a narrow page. It retains a full A4 iframe viewport, measures multi-page document height and scales the complete frame to the available width. Local Chromium proves no outer or inner horizontal overflow at 375px.
|
||||
- Semantic alert surfaces remain theme-owned. Authenticated Chromium measures the dark-mode missing-job Alert foreground against its composited background at or above WCAG AA 4.5:1.
|
||||
- The public loading state is announced with `role=status` and uses a stronger readable foreground.
|
||||
|
||||
## Positive evidence
|
||||
## Verification
|
||||
|
||||
- Forms generally use MUI labels and many dialog close/action buttons have explicit `aria-label` values.
|
||||
- CV editor move/hide controls and checklist controls carry accessible names.
|
||||
- MUI supplies baseline focus and dialog semantics, though manual focus trapping/return was not checked.
|
||||
- Public CV iframe has a title and sandbox attribute.
|
||||
- Focused accessibility-related UI: 4 suites, 9/9 tests.
|
||||
- Full frontend: 54/54 suites, 228/228 tests.
|
||||
- Optimized production frontend build/TypeScript: pass.
|
||||
- Full Playwright: 7/7; final targeted workspace/public-CV rerun: 2/2.
|
||||
- Static `IconButton` audit: no control without an explicit `aria-label`.
|
||||
|
||||
No axe, pa11y, or Lighthouse dependency/configuration is present. No automated accessibility gate runs in CI.
|
||||
## Remaining external and future gates
|
||||
|
||||
- Native screen-reader/switch-control and operating-system high-contrast checks are not available in the local automated environment and remain a production-readiness spot check.
|
||||
- No axe, pa11y or Lighthouse dependency/configuration is present, so CI does not yet run a general automated accessibility crawler. Adding one requires an approved dependency change and should complement, not replace, the focused semantic and contrast assertions above.
|
||||
|
||||
Reference in New Issue
Block a user