From 315035122163643baf9dff094cabcbcf1923f22e Mon Sep 17 00:00:00 2001 From: cesnimda Date: Mon, 26 Oct 2026 04:27:35 +0100 Subject: [PATCH] fix(cv): make template sample scrolling keyboard accessible --- docs/cv-redesign/CHECKPOINT_IMPLEMENTATION.md | 4 ++++ docs/cv-redesign/TODO.md | 2 ++ job-tracker-ui/src/components/cv/CvTemplatePreviewDialog.tsx | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/cv-redesign/CHECKPOINT_IMPLEMENTATION.md b/docs/cv-redesign/CHECKPOINT_IMPLEMENTATION.md index 10e423c..fcc399e 100644 --- a/docs/cv-redesign/CHECKPOINT_IMPLEMENTATION.md +++ b/docs/cv-redesign/CHECKPOINT_IMPLEMENTATION.md @@ -52,3 +52,7 @@ Actual MariaDB source-boundary successor59/59 passed (`provider-final-03`), incl ## Last-good preview scroll regression The aggregate `final-04` run exposed a real regression in both original preview-presentation recovery cases: a held refresh changed scrollTop by7px against the unchanged1px tolerance. The new page selector unmounted while `previewReady` was false, shortening the toolbar and expanding the retained preview viewport. The narrow correction keeps the selector mounted when last-good multi-page HTML exists and disables it until ready. Both original EN/light and NB/dark scenarios now pass, including held/error/retry, retained iframe identity/content and scroll checks (`preview-scroll-successor-01.json`); focused editor50/50 and a fresh static build pass. Independent review found no material issue. No oracle tolerance or original assertion changed. Full frontend successor and fresh aggregate/PDF runs remain pending; failed/interrupted `final-04` is retained. + +## Candidate sample keyboard scrolling + +`final-05` exposed `scrollable-region-focusable` in the new candidate dialog's overflowing read-only content. A labelled region with tabIndex0 makes the existing DialogContent keyboard reachable while preserving Cancel autofocus, focus trapping and Apply gating. The original four EN/Bokmål/light/dark document-settings cases now pass with all axe rules unchanged (`template-focus-browser-01.json`); these also exercise settings, canonical source, history and eight actual PDF states. Candidate unit6/6 and static build pass; independent narrow review found no material risk. Full frontend successor and `final-06` aggregate qualification remain pending; the failed predecessor is retained. diff --git a/docs/cv-redesign/TODO.md b/docs/cv-redesign/TODO.md index c573f3b..f25a9e3 100644 --- a/docs/cv-redesign/TODO.md +++ b/docs/cv-redesign/TODO.md @@ -24,4 +24,6 @@ Actual provider source-boundary suite59/59 passed with stable sources and positi `final-04` found and retained a preview scroll regression. One-condition selector lifetime fix passed the unchanged two EN/NB recovery scenarios and50 focused editor tests; static build/review pass. Full frontend successor and `final-05` aggregate qualification remain pending. +`final-05` found and retained candidate-dialog keyboard-scroll accessibility failure. Focusable labelled DialogContent fix passed all four unchanged settings/source/history/native-output cases plus6 candidate unit tests/build/review. Fresh full frontend and `final-06` aggregate remain pending. + Historical evidence: Phase 9 conditional acceptance is inherited, not fresh CV-UX test execution. Hosted isolation/production/manual/provider/AI semantic limitations remain open. Research checksum verification: 83/83; screenshot pairs: 37/37; contact sheets inspected locally. Raw third-party imagery stays outside Git/product assets. diff --git a/job-tracker-ui/src/components/cv/CvTemplatePreviewDialog.tsx b/job-tracker-ui/src/components/cv/CvTemplatePreviewDialog.tsx index 494b1e0..4251ca2 100644 --- a/job-tracker-ui/src/components/cv/CvTemplatePreviewDialog.tsx +++ b/job-tracker-ui/src/components/cv/CvTemplatePreviewDialog.tsx @@ -41,7 +41,7 @@ export default function CvTemplatePreviewDialog({ theme, onClose, onApply }: Pro return {t("cvEditorPreviewDesign")} · {labels.name} - + {t("cvEditorTemplateSampleHelp")} {labels.description}