import { ChevronRight, HardDrive } from "lucide-react"; import { useState } from "react"; import { cn } from "~/lib/utils.ts"; import { collapseCrumbs, segments } from "./model.ts"; /** * 路径面包屑:根名 + 各段,可点击跳转;每段也是拖放目标(拖入 = 移动到该目录)。 * 窄屏折叠为"根 / … / 父 / 当前"。 */ export function PathBreadcrumb({ rootName, path, onNavigate, onDropTo, className, }: { rootName: string; path: string; onNavigate: (path: string) => void; /** 有值时每段可作为拖放目标 */ onDropTo?: (path: string, e: React.DragEvent) => void; className?: string; }) { const segs = segments(path); const crumbs = [ { label: rootName, path: "" }, ...segs.map((s, i) => ({ label: s, path: segs.slice(0, i + 1).join("/") })), ]; const [over, setOver] = useState(null); const render = (items: ((typeof crumbs)[number] | null)[], key: string, extra?: string) => (
    {items.map((c, i) => { const last = i === items.length - 1; return (
  1. {i > 0 ? : null} {c === null ? ( … ) : ( )}
  2. ); })}
); return ( ); }