"use client" import type { ReactNode } from "react" import { ChevronDown, ClipboardCheck } from "lucide-react" import { useAudienceMode } from "@/components/audience-mode-provider" import { Badge } from "@/components/ui/badge" import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible" import { Progress } from "@/components/ui/progress" import type { ReportingCompleteness } from "@/lib/backend-artifacts" import { formatFieldLabel, formatPercent, getCompletenessPopulatedCount, } from "./signal-utils" export function CompletenessPanel({ completeness, }: { completeness?: ReportingCompleteness | null }) { const { mode } = useAudienceMode() const isResearchView = mode === "research" if (!completeness) { return null } const populatedCount = getCompletenessPopulatedCount(completeness) const total = completeness.total_fields_evaluated const missingFields = completeness.missing_required_fields ?? [] const partialFields = completeness.partial_fields ?? [] return (

{isResearchView ? "Reporting completeness" : "How well is this benchmark documented?"}

{isResearchView ? "Coverage of EvalCards-required documentation fields for this benchmark." : "A quick read on how much supporting documentation is available before leaning on the scores."}

Documentation {formatPercent(completeness.completeness_score)}
{populatedCount} of {total} fields populated
{(missingFields.length > 0 || partialFields.length > 0) && (
{missingFields.length === 0 ? (

No missing required fields recorded.

) : (
    {missingFields.slice(0, 12).map((field) => (
  • {formatFieldLabel(field)} {isResearchView && ( {field} )}
  • ))}
)}
{partialFields.length === 0 ? (

No partially populated fields recorded.

) : (
    {partialFields.slice(0, 12).map((field) => (
  • {formatFieldLabel(field.field_path)} {field.populated_subitems}/{field.total_subitems}
    {isResearchView && (
    {field.field_path}
    )}
  • ))}
)}
)}
) } function SignalListCollapsible({ title, count, children, }: { title: string count: number children: ReactNode }) { return ( {children} ) }