"use client"; import type { FindingDto } from "@/lib/api"; import { VerdictBadge } from "./verdict-badge"; import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription, } from "@/components/ui/sheet"; import { Badge } from "@/components/ui/badge"; import { Separator } from "@/components/ui/separator"; import { FileCode, AlertTriangle, BookOpen, Shield } from "lucide-react"; interface FindingDetailSheetProps { finding: FindingDto | null; isOpen: boolean; onClose: () => void; } export function FindingDetailSheet({ finding, isOpen, onClose }: FindingDetailSheetProps) { if (!finding) return null; return ( !open && onClose()}>
{finding.concept_path} .{finding.predicate}
{/* Code Location */}

Source Location

File: {finding.file}
Line: {finding.line}
Value in code: {finding.code_value}
{/* Conflict Details */} {finding.conflicts.length > 0 && (

Conflicting Sources ({finding.conflicts.length})

{finding.conflicts.map((conflict, index) => (
{conflict.source_class} {conflict.policy_source && ( via {conflict.policy_source.pack_name} v{conflict.policy_source.pack_version} )}
Expected: {conflict.value}
{conflict.citation && (
{conflict.citation}
)}
))}
)} {/* Acknowledgment */} {finding.acknowledgment && (

Acknowledged

By: {finding.acknowledgment.by}
Reason: {finding.acknowledgment.reason}
{finding.acknowledgment.timestamp}
)} {/* Debug Trace */} {finding.trace && (

Resolution Trace

Code claim: {finding.trace.code_claim}
Authority match: {finding.trace.authority_match}
Authority tier: {finding.trace.authority_tier}
Resolution: {finding.trace.resolution}
)} {/* Conflict Score */}
Conflict Score {(finding.conflict_score * 100).toFixed(1)}%
); }