import { useState } from 'react'; interface ResultCardProps { title: string; score: number; snippet: string; expanded?: boolean; onToggle?: () => void; } function ScoreBadge({ score }: { score: number }) { const pct = Math.round(score * 100); const bg = pct >= 80 ? 'var(--score-good-bg)' : pct >= 50 ? 'var(--score-mid-bg)' : 'var(--score-bad-bg)'; const color = pct >= 80 ? '#2e7d32' : pct >= 50 ? '#f57f17' : 'var(--text-secondary)'; return ( {pct}% ); } export default function ResultCard({ title, score, snippet, expanded: expandedProp, onToggle }: ResultCardProps) { const [localExpanded, setLocalExpanded] = useState(false); const isControlled = expandedProp !== undefined; const expanded = isControlled ? expandedProp : localExpanded; function handleToggle() { if (isControlled) { onToggle?.(); } else { setLocalExpanded(e => !e); } } const preview = snippet.length > 200 ? snippet.slice(0, 200) + '\u2026' : snippet; return (
{ (e.currentTarget as HTMLDivElement).style.boxShadow = '0 2px 8px var(--shadow)'; }} onMouseLeave={e => { (e.currentTarget as HTMLDivElement).style.boxShadow = 'none'; }} >
{title} {expanded ? '\u25B2' : '\u25BC'}
{expanded ? snippet : preview}
); }