File
Blob: src/client/components/FileIcon.tsx
| 1 | import type { FileIconName } from "@/shared/web"; |
| 2 | import { |
| 3 | Database, |
| 4 | File, |
| 5 | FileCode2, |
| 6 | FileDiff, |
| 7 | FileImage, |
| 8 | FileSpreadsheet, |
| 9 | FileSymlink, |
| 10 | FileText, |
| 11 | Folder, |
| 12 | Terminal, |
| 13 | type LucideIcon, |
| 14 | } from "lucide-react"; |
| 15 | |
| 16 | type FileIconProps = { |
| 17 | name: FileIconName; |
| 18 | className?: string; |
| 19 | }; |
| 20 | |
| 21 | const iconByName: Record<FileIconName, LucideIcon> = { |
| 22 | code: FileCode2, |
| 23 | database: Database, |
| 24 | diff: FileDiff, |
| 25 | file: File, |
| 26 | folder: Folder, |
| 27 | image: FileImage, |
| 28 | spreadsheet: FileSpreadsheet, |
| 29 | symlink: FileSymlink, |
| 30 | terminal: Terminal, |
| 31 | text: FileText, |
| 32 | }; |
| 33 | |
| 34 | export function FileIcon({ name, className }: FileIconProps) { |
| 35 | const Icon = iconByName[name]; |
| 36 | return <Icon className={className} aria-hidden="true" />; |
| 37 | } |