import { Link } from "@tanstack/react-router" import type { PrimitiveAtom } from "jotai" import { atom } from "jotai" import { Fragment } from "react" import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from "@/components/ui/breadcrumb" import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip" import type { FileDragInfo } from "@/files/use-file-drop" import { useFileDrop } from "@/files/use-file-drop" import { cn } from "@/lib/utils" import type { DirectoryInfoWithPath } from "@/vfs/vfs" import type { PathSegment } from "../lib/path" /** * This is a placeholder file drag info atom that always stores null and is never mutated. */ const nullFileDragInfoAtom = atom(null) export function DirectoryPathBreadcrumb({ directory, rootLabel, directoryUrlFn, fileDragInfoAtom = nullFileDragInfoAtom, }: { directory: DirectoryInfoWithPath rootLabel: string directoryUrlFn: (directoryId: string) => string fileDragInfoAtom?: PrimitiveAtom }) { if (directory.path.length === 1) { return ( {rootLabel} ) } const breadcrumbItems: React.ReactNode[] = [ , ] for (let i = 1; i < directory.path.length - 1; i++) { breadcrumbItems.push( , ) } return ( {breadcrumbItems} {directory.name}{" "} ) } function FilePathBreadcrumbItem({ segment, label, directoryUrlFn, fileDragInfoAtom, }: { segment: PathSegment label?: string directoryUrlFn: (directoryId: string) => string fileDragInfoAtom: PrimitiveAtom }) { const { isDraggedOver, dropHandlers } = useFileDrop({ destDir: segment.id, dragInfoAtom: fileDragInfoAtom, enabled: true, }) const dirName = label || segment.name return ( {dirName} Move to {dirName} ) }