fix(a11y): close cross-app interaction gaps
CI and Deploy / test (pull_request) Successful in 4m54s
CI and Deploy / deploy (pull_request) Has been skipped

This commit is contained in:
cesnimda
2026-08-15 17:49:42 +02:00
parent deed948183
commit a7c25499bb
23 changed files with 224 additions and 61 deletions
+18 -13
View File
@@ -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.