From 2accb2b092db38cb33a40fe490b74fe78c73e20f Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 18 May 2026 22:48:34 +0000 Subject: [PATCH] feat(ui): D.5a migrate Results header + 4-card metric strip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR 6 of 16 in the UI consistency overhaul. Promotes the AnalysisResults page header to and wraps the top TEMPO/KEY/METER/ CHARACTER metric strip in a with cards inside. Stacked on PR #69 (D.4 FileUpload). Will rebase onto main after #69 merges. Header (AnalysisResults.tsx:835-880 → :835-878): -

+ Download buttons row → with both Download buttons in the action slot. - The Activity icon prefix on the h1 disappears — the SectionHeader LED dot already carries the "results are live" semantic. - The subtitle (sourceFileName · interpretationSubtitle) stays as a separate

sibling, preserving data-testid="analysis-results- subtitle" and the existing text-role-meta styling. Indented pl-4 to align under the title after the LED. - Download data: - + + + } + /> + {headerSubtitle && ( +

- - Download report - - + {headerSubtitle} +

+ )} -
- {/* TEMPO */} - - - TEMPO - - } - value={finalBpm} - unit="BPM" - headerRight={} - footer={ -
- {/* Audit Finding #4: `SCORE 0.86` badge retired in favor of the - canonical band pill — same vocabulary as Key, Character, and - every other confidence surface. */} - - {phase1.bpmSource && ( - - {phase1.bpmSource.replace(/_/g, ' ')} - - )} -
- } - /> - - {/* KEY SIG */} - - - KEY SIG - - } - value={{finalKey}} - headerRight={ -
- - {lowConfidenceIndicator(keyIsApproximate)} -
- } - footer={ -
- - {/* Audit Finding #4: `CONF 62%` text replaced with the canonical - band pill so every confidence reads in the same vocabulary. */} - -
- } - /> - - {/* METER */} - - - METER - - } - value={phase1.timeSignature} - footer={} - /> - - {/* CHARACTER — genre primary, characteristic pills secondary */} - {phase1.genreDetail ? ( - - - CHARACTER - - } - value={{phase1.genreDetail.genre}} + +
+ {/* TEMPO */} + } + label="TEMPO" + value={finalBpm} + unit="BPM" headerRight={} footer={
- + {/* Audit Finding #4: `SCORE 0.86` badge retired in favor of the + canonical band pill — same vocabulary as Key, Character, and + every other confidence surface. */} + + {phase1.bpmSource && ( + + {phase1.bpmSource.replace(/_/g, ' ')} + + )} +
+ } + /> + + {/* KEY SIG */} + } + label="KEY SIG" + value={{finalKey}} + headerRight={ +
+ + {lowConfidenceIndicator(keyIsApproximate)} +
+ } + footer={ +
- {/* Audit Finding #4: `CONF X%` replaced with the canonical - band pill — same vocabulary across every confidence. */} - + {/* Audit Finding #4: `CONF 62%` text replaced with the canonical + band pill so every confidence reads in the same vocabulary. */} +
} /> - ) : ( - - - CHARACTER - - } - value={SCANNING...} - footer={ - characteristicPills.length > 0 ? ( -
- {characteristicPills.map((item, idx) => ( - - {shortenCharacteristicName(item.name)} - - ))} -
- ) : undefined - } + + {/* METER */} + } + label="METER" + value={phase1.timeSignature} + footer={} /> - )} -
+ + {/* CHARACTER — genre primary, characteristic pills secondary */} + {phase1.genreDetail ? ( + } + label="CHARACTER" + value={{phase1.genreDetail.genre}} + headerRight={} + footer={ +
+ + + {/* Audit Finding #4: `CONF X%` replaced with the canonical + band pill — same vocabulary across every confidence. */} + +
+ } + /> + ) : ( + } + label="CHARACTER" + value={ + + SCANNING... + + } + footer={ + characteristicPills.length > 0 ? ( +
+ {characteristicPills.map((item, idx) => ( + + {shortenCharacteristicName(item.name)} + + ))} +
+ ) : undefined + } + /> + )} +
+ {/* Audit Finding #1: MeasurementDashboard was here at the top of the results scroll, ahead of Style / Sonic Elements / Mix Chain / Patches.