import clsx from "clsx"; import type { ComponentType } from "react"; import { AlertTriangle, Lock, ShieldCheck, Snowflake } from "lucide-react"; import type { ModelFlags } from "@/lib/types"; export interface FlagNotesProps { flags?: ModelFlags; className?: string; } interface Note { key: keyof ModelFlags; Icon: ComponentType<{ size?: number | string; className?: string }>; iconClass: string; labelClass: string; label: string; text: string; } const NOTES: Note[] = [ { key: "contamination", Icon: AlertTriangle, iconClass: "text-warn", labelClass: "text-warn", label: "Contamination", text: "this model’s family seeded the ViMedCSS labels (Gemini 2.5 Pro, then human-verified at κ 0.65), so its scores carry a permanent contamination flag.", }, { key: "referenceOnly", Icon: Lock, iconClass: "text-muted", labelClass: "text-text", label: "Reference-only", text: "CC-BY-NC-ND — cannot be fine-tuned or deployed commercially; shown as a yardstick.", }, { key: "frozen", Icon: Snowflake, iconClass: "text-muted", labelClass: "text-text", label: "Frozen", text: "the maintaining organization has stopped updates; results are pinned to the last public checkpoint.", }, { key: "zone1", Icon: ShieldCheck, iconClass: "text-accent", labelClass: "text-text", label: "Zone 1", text: "self-hostable on a single 24 GB GPU with a license clean for deployment.", }, ]; /** Plain-language explanations for each active flag (pairs with FlagBadges icons). */ export default function FlagNotes({ flags, className }: FlagNotesProps) { if (!flags) return null; const active = NOTES.filter((n) => flags[n.key]); if (active.length === 0) return null; return (