import type { ReactNode } from "react"; import { cn, formatDateTime } from "~/lib/utils.ts"; import type { StatusTone } from "./status-badge.tsx"; export type TimelineItem = { id: string; /** ISO 时间;显示为本地时间 */ at?: string | null; title: ReactNode; description?: ReactNode; /** 圆点语气,与 StatusBadge 一致;标题里仍要有文字说明状态 */ tone?: StatusTone; /** 右侧附加信息(耗时、次数等) */ meta?: ReactNode; /** 展开区(json-view 等) */ children?: ReactNode; }; const DOT: Record = { success: "bg-success", warning: "bg-warning", destructive: "bg-destructive", neutral: "bg-muted-foreground/60", }; /** 纵向时间线(业务时间线、步骤尝试、审计轨迹)。items 按展示顺序传入 */ export function Timeline({ items, className }: { items: TimelineItem[]; className?: string }) { return (
    {items.map((it, i) => (
  1. {i < items.length - 1 ? ( ) : null}
    {it.title}
    {it.meta ?
    {it.meta}
    : null}
    {it.at ?

    {formatDateTime(it.at)}

    : null} {it.description ? (
    {it.description}
    ) : null} {it.children ?
    {it.children}
    : null}
  2. ))}
); }