"use client"; import type { ReviewConflict } from "@/lib/review/sse"; import type { DecisionDraft, Verdict } from "@/lib/review/decisions"; interface ConflictCardProps { index: number; conflict: ReviewConflict; draft: DecisionDraft; missing: boolean; // R1:命中段内联预览(无段号/越界时为 null,回退到「跳转」按钮)。 snippet: string | null; onVerdict: (index: number, verdict: Verdict) => void; onNote: (index: number, note: string) => void; onJump: (index: number) => void; } // R2:采纳改法=朱砂主按钮(primary),忽略/手改=次级(secondary),不再三者同权。 const VERDICT_OPTIONS: { value: Verdict; label: string; primary: boolean }[] = [ { value: "accept", label: "采纳改法", primary: true }, { value: "ignore", label: "忽略", primary: false }, { value: "manual", label: "手改", primary: false }, ]; // 裁决按钮样式:激活=朱砂填充;未激活的主按钮=朱砂描边强调,次级=低对比描边。 function verdictClass(active: boolean, primary: boolean): string { if (active) return "bg-cinnabar text-panel"; if (primary) return "border border-cinnabar text-cinnabar hover:bg-cinnabar/10"; return "border border-line text-ink-soft hover:border-cinnabar hover:text-ink"; } // 单个冲突报告卡(UX §6.4):五类徽标 + where + refs + suggestion + 裁决三态。 // 冲突=赭红;未决/缺判时加图标+文案(不单靠色,a11y §10)。 export function ConflictCard({ index, conflict, draft, missing, snippet, onVerdict, onNote, onJump, }: ConflictCardProps) { const resolved = draft.verdict !== null; return (
{conflict.suggestion}
{snippet}) : null}