import { useCallback, type KeyboardEvent } from "react" import { useOpenFile } from "../../hooks/useOpenFile" interface FilePartProps { part: { id: string type: "file" mime: string filename?: string url: string source?: { type: "file" | "symbol" text: { value: string start: number end: number } path: string range?: { start: { line: number; character: number } end: { line: number; character: number } } name?: string kind?: number } } } export function FilePart({ part }: FilePartProps) { const openFile = useOpenFile() const isSymbol = part.source?.type === "symbol" const displayName = isSymbol && part.source?.name ? part.source.name : part.filename || part.source?.path || "file" const effectivePath = part.source?.path || part.filename || part.url const range = part.source?.range const handleOpen = useCallback(() => { if (!effectivePath) return openFile({ path: effectivePath, display: displayName, range, }) }, [displayName, effectivePath, openFile, range]) const handleKeyDown = useCallback( (event: KeyboardEvent) => { if (event.key === "Enter" || event.key === " ") { event.preventDefault() handleOpen() } }, [handleOpen], ) const getFileIcon = () => { if (isSymbol) { return ( ) } return ( ) } return ( {getFileIcon()} {displayName} {isSymbol && part.source?.range && ( :{part.source.range.start.line + 1} )} ) }