// Flat monochrome file & folder icons — all use currentColor / var(--text-dim) interface IconProps { size?: number; } const DIM = "var(--text-dim)"; // ── Folder ──────────────────────────────────────────────────────────────── export function FolderIcon({ size = 14, open = false }: IconProps & { open?: boolean }) { if (open) { return ( ); } return ( ); } // ── Generic file (fallback) ──────────────────────────────────────────────── export function GenericFileIcon({ size = 14 }: IconProps) { return ( ); } // ── File with label text (used for most types) ──────────────────────────── // Renders the file outline + a short text badge function LabelFileIcon({ label, size = 14 }: { label: string; size?: number }) { const s = size / 14; // scale factor return ( {label} ); } // ── Specific icons ──────────────────────────────────────────────────────── export function TypeScriptIcon({ size = 14 }: IconProps) { return ; } export function TypeScriptReactIcon({ size = 14 }: IconProps) { return ; } export function JavaScriptIcon({ size = 14 }: IconProps) { return ; } export function JavaScriptReactIcon({ size = 14 }: IconProps) { return ; } export function PythonIcon({ size = 14 }: IconProps) { return ; } export function JsonIcon({ size = 14 }: IconProps) { return ; } export function CssIcon({ size = 14 }: IconProps) { return ; } export function ScssIcon({ size = 14 }: IconProps) { return ; } export function HtmlIcon({ size = 14 }: IconProps) { return ; } export function MarkdownIcon({ size = 14 }: IconProps) { // file outline + M↓ symbol return ( {/* M */} {/* down arrow */} ); } export function YamlIcon({ size = 14 }: IconProps) { return ; } export function TomlIcon({ size = 14 }: IconProps) { return ; } export function ShellIcon({ size = 14 }: IconProps) { // file outline + > prompt return ( ); } export function RustIcon({ size = 14 }: IconProps) { return ; } export function GoIcon({ size = 14 }: IconProps) { return ; } export function SqlIcon({ size = 14 }: IconProps) { return ; } export function GraphqlIcon({ size = 14 }: IconProps) { return ; } export function TerraformIcon({ size = 14 }: IconProps) { return ; } export function DockerfileIcon({ size = 14 }: IconProps) { // file outline + container stack return ( ); } export function EnvIcon({ size = 14 }: IconProps) { // file outline + key symbol return ( ); } export function GitIcon({ size = 14 }: IconProps) { // file outline + git branch lines return ( ); } export function LockFileIcon({ size = 14 }: IconProps) { return ( ); } export function DocFileIcon({ size = 14 }: IconProps) { return ; } export function PdfFileIcon({ size = 14 }: IconProps) { return ; } export function ConfigIcon({ size = 14 }: IconProps) { return ( ); } // ── Main resolver ───────────────────────────────────────────────────────── export function getFileIcon(name: string, size = 14): React.ReactNode { const lower = name.toLowerCase(); const ext = lower.split(".").pop() ?? ""; if (lower === "dockerfile" || lower.startsWith("dockerfile.")) return ; if (lower === ".env" || lower.startsWith(".env.")) return ; if (lower === ".gitignore" || lower === ".gitattributes" || lower === ".gitmodules") return ; if (lower === "package-lock.json" || lower === "yarn.lock" || lower === "bun.lock" || lower === "pnpm-lock.yaml" || lower === "cargo.lock") return ; if (lower.endsWith(".config.ts") || lower.endsWith(".config.js") || lower.endsWith(".config.mjs") || lower.endsWith(".config.cjs")) return ; if ([".eslintrc", ".eslintrc.js", ".eslintrc.json", ".eslintrc.yml", "eslint.config.mjs", "eslint.config.js"].includes(lower)) return ; switch (ext) { case "ts": return ; case "tsx": return ; case "js": case "mjs": case "cjs": return ; case "jsx": return ; case "py": return ; case "json": case "jsonl": return ; case "css": case "less": return ; case "scss": return ; case "html": case "htm": return ; case "md": case "mdx": return ; case "yaml": case "yml": return ; case "toml": return ; case "sh": case "bash": case "zsh": case "fish": return ; case "rs": return ; case "go": return ; case "sql": return ; case "graphql": case "gql": return ; case "tf": case "hcl": return ; case "docx": return ; case "pdf": return ; case "lock": return ; default: return ; } }