From ffb9888fb4d3e85ebeb983986b9db398bd71fae5 Mon Sep 17 00:00:00 2001 From: cesnimda Date: Sun, 12 Jul 2026 01:59:03 +0200 Subject: [PATCH] feat(ui): circular match-score ring in job workspace MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Second UI-rework pass. The job workspace mockup's signature element is a donut "coverage" ring for the deterministic CV match score; the app had a linear progress bar instead. Replaced with a layered CircularProgress ring (track + value arc, percentage centered) while keeping every existing feature (band chip, matched/missing keyword chips, section coverage) -- this is a pure visual upgrade to the existing MatchScoreCard, not a feature reduction to match the mockup's simpler single-panel layout. Fixed match-score-panel.test.tsx's no-signal-state assertion, which expected the removed inline "—" placeholder; restored it outside the ring's conditional render. --- .../src/components/JobDetailsDialog.tsx | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/job-tracker-ui/src/components/JobDetailsDialog.tsx b/job-tracker-ui/src/components/JobDetailsDialog.tsx index c64e741..199f001 100644 --- a/job-tracker-ui/src/components/JobDetailsDialog.tsx +++ b/job-tracker-ui/src/components/JobDetailsDialog.tsx @@ -10,7 +10,6 @@ import { DialogTitle, FormControl, InputLabel, - LinearProgress, MenuItem, Select, Tab, @@ -1229,27 +1228,35 @@ function MatchScoreCard({ score, loading }: { score: MatchScore | null; loading: return ( - - - {score.hasEnoughSignal ? `${score.score}%` : "—"} - {t("matchScoreTitle")} - - - - + + {score.hasEnoughSignal ? ( + + + + + {score.score}% + {t("matchScoreTitle")} + + + ) : ( + + )} + + {!score.hasEnoughSignal ? {t("matchScoreNoSignal")} : null} + + + + + {t("matchScoreDeterministicHint")} - {score.hasEnoughSignal ? ( - - ) : ( - {t("matchScoreNoSignal")} - )} - {t("matchScoreDeterministicHint")} {t("matchScoreMatched")} -- 2.52.0