import { useState } from 'react'; import './ContextPanel.css'; const ChevronIcon = ({ open }) => ( ); const PinIcon = () => ( ); function Section({ title, icon, children, defaultOpen = true }) { const [open, setOpen] = useState(defaultOpen); return (
{open &&
{children}
}
); } function EvidenceChunk({ chunk, idx }) { const [expanded, setExpanded] = useState(false); return (
[E{idx + 1}] {chunk.doc_id} p.{chunk.page_start}–{chunk.page_end} {chunk.cross_score != null && ( {(chunk.cross_score * 100).toFixed(0)}% )}

{chunk.text}

{chunk.text?.length > 180 && ( )}
); } function CitationCard({ citation, idx }) { return (
[{citation.evidence_id}] {citation.doc_id} p.{citation.pages}
{citation.text_preview && (

{citation.text_preview}

)}
); } function VerificationBlock({ turn }) { if (!turn) return

Select a response to view verification

; const confidence = turn.confidence ?? 0; const coverage = turn.citation_coverage ?? 0; const support = turn.support_ratio ?? 0; const verdictColors = { supported: 'var(--success)', partially_supported: 'var(--warning)', refused: 'var(--error)', }; return (
Verdict {turn.verdict?.replace(/_/g, ' ')}
Confidence{Math.round(confidence * 100)}%
0.75 ? 'linear-gradient(90deg,#10b981,#34d399)' : confidence > 0.45 ? 'linear-gradient(90deg,#f59e0b,#fbbf24)' : 'linear-gradient(90deg,#ef4444,#f87171)' }} />
Support Ratio{Math.round(support * 100)}%
Citation Coverage{Math.round(coverage * 100)}%
); } export default function ContextPanel({ activeEvidence, activeTurn, pins, onPin, onUnpin }) { const evidence = activeEvidence?.evidence || []; const citations = activeEvidence?.citations || []; return ( ); }