import { useRef, type RefObject } from "react"; import { ChartNoAxesCombined, ClipboardPenLine, Gauge, MapPin, BookOpenCheck, Table2, ListTree, ChevronDown, CircleCheck } from "lucide-react"; import { Badge } from "@/shared/ui/badge"; import { Button } from "@/shared/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/shared/ui/dropdown-menu"; import type { AnswerUiBlock } from "./contract"; import { canExpandAnswer } from "./answer-presentation"; const contentKinds = [ { type: "Result", label: "结果", icon: CircleCheck, selector: "[data-answer-result]" }, { type: "Metric", label: "指标", icon: Gauge, selector: ".answer-ui-metric" }, { type: "Chart", label: "趋势", icon: ChartNoAxesCombined, selector: ".answer-ui-chart" }, { type: "Table", label: "表格", icon: Table2, selector: "[data-answer-table]" }, { type: "Evidence", label: "依据", icon: BookOpenCheck, selector: ".answer-ui-evidence" }, { type: "MapLocation", label: "地图", icon: MapPin, selector: ".answer-ui-location" }, { type: "FollowUpForm", label: "补充资料", icon: ClipboardPenLine, selector: ".answer-ui-form" } ] as const; /** Navigate the mounted answer so chart selections and unsent forms survive. */ export function AnswerContentNav({ block, contentRef }: { block: AnswerUiBlock; contentRef: RefObject; }) { const navigationTarget = useRef(null); const elements = Object.values(block.spec.elements); const items = contentKinds.map((kind) => ({ ...kind, count: elements.filter((element) => element.type === kind.type).length })).filter((item) => item.count > 0); if (items.length < 2 || !canExpandAnswer([{ type: "answer-ui", block }])) return null; return ( ); }