/** * DeltaChip — small coloured chip showing how a value compares to a baseline. * * Example: → "+10 pts" * * Colours (reuse globals.css status tokens): * above baseline → statusGood (teal) * below baseline → statusBad (coral) * within ±tolerance → statusWarn (gold, "in line") */ import styles from './DeltaChip.module.css'; interface DeltaChipProps { value: number | null | undefined; baseline: number | null | undefined; /** Unit suffix for the delta (e.g. "pts", "%") */ unit?: string; /** Absolute delta below which the chip is treated as neutral */ tolerance?: number; /** Override label when we want "vs national" under a number */ suffix?: string; /** Smaller variant for inline use next to metric values */ size?: 'sm' | 'md'; } export function DeltaChip({ value, baseline, unit = 'pts', tolerance = 1, suffix, size = 'md', }: DeltaChipProps) { if (value == null || baseline == null) return null; const delta = value - baseline; const rounded = Math.round(delta); let tone: 'good' | 'bad' | 'neutral'; if (Math.abs(delta) < tolerance) tone = 'neutral'; else if (delta > 0) tone = 'good'; else tone = 'bad'; const toneClass = tone === 'good' ? styles.good : tone === 'bad' ? styles.bad : styles.neutral; const sign = rounded > 0 ? '+' : ''; const label = `${sign}${rounded} ${unit}`.trim(); return ( {label} {suffix && {suffix}} ); }