mirror of
https://github.com/codeaashu/claude-code.git
synced 2026-04-08 22:28:48 +03:00
claude-code
This commit is contained in:
106
web/components/tools/FileIcon.tsx
Normal file
106
web/components/tools/FileIcon.tsx
Normal file
@@ -0,0 +1,106 @@
|
||||
"use client";
|
||||
|
||||
import {
|
||||
FileText,
|
||||
FileCode,
|
||||
FileJson,
|
||||
FileImage,
|
||||
File,
|
||||
Database,
|
||||
Settings,
|
||||
Package,
|
||||
Globe,
|
||||
BookOpen,
|
||||
type LucideIcon,
|
||||
} from "lucide-react";
|
||||
|
||||
const EXT_MAP: Record<string, LucideIcon> = {
|
||||
// JavaScript / TypeScript
|
||||
js: FileCode,
|
||||
jsx: FileCode,
|
||||
ts: FileCode,
|
||||
tsx: FileCode,
|
||||
mjs: FileCode,
|
||||
cjs: FileCode,
|
||||
// Web
|
||||
html: Globe,
|
||||
htm: Globe,
|
||||
css: FileCode,
|
||||
scss: FileCode,
|
||||
sass: FileCode,
|
||||
less: FileCode,
|
||||
// Data
|
||||
json: FileJson,
|
||||
jsonc: FileJson,
|
||||
yaml: FileJson,
|
||||
yml: FileJson,
|
||||
toml: FileJson,
|
||||
xml: FileJson,
|
||||
csv: Database,
|
||||
// Config
|
||||
env: Settings,
|
||||
gitignore: Settings,
|
||||
eslintrc: Settings,
|
||||
prettierrc: Settings,
|
||||
editorconfig: Settings,
|
||||
// Docs
|
||||
md: BookOpen,
|
||||
mdx: BookOpen,
|
||||
txt: FileText,
|
||||
rst: FileText,
|
||||
// Images
|
||||
png: FileImage,
|
||||
jpg: FileImage,
|
||||
jpeg: FileImage,
|
||||
gif: FileImage,
|
||||
svg: FileImage,
|
||||
ico: FileImage,
|
||||
webp: FileImage,
|
||||
// Package
|
||||
lock: Package,
|
||||
// Python
|
||||
py: FileCode,
|
||||
pyc: FileCode,
|
||||
// Ruby
|
||||
rb: FileCode,
|
||||
// Go
|
||||
go: FileCode,
|
||||
// Rust
|
||||
rs: FileCode,
|
||||
// Java / Kotlin
|
||||
java: FileCode,
|
||||
kt: FileCode,
|
||||
// C / C++
|
||||
c: FileCode,
|
||||
cpp: FileCode,
|
||||
h: FileCode,
|
||||
hpp: FileCode,
|
||||
// Shell
|
||||
sh: FileCode,
|
||||
bash: FileCode,
|
||||
zsh: FileCode,
|
||||
fish: FileCode,
|
||||
// SQL
|
||||
sql: Database,
|
||||
};
|
||||
|
||||
function getExtension(filePath: string): string {
|
||||
const parts = filePath.split(".");
|
||||
if (parts.length < 2) return "";
|
||||
return parts[parts.length - 1].toLowerCase();
|
||||
}
|
||||
|
||||
export function getFileIcon(filePath: string): LucideIcon {
|
||||
const ext = getExtension(filePath);
|
||||
return EXT_MAP[ext] ?? File;
|
||||
}
|
||||
|
||||
interface FileIconProps {
|
||||
filePath: string;
|
||||
className?: string;
|
||||
}
|
||||
|
||||
export function FileIcon({ filePath, className }: FileIconProps) {
|
||||
const Icon = getFileIcon(filePath);
|
||||
return <Icon className={className} />;
|
||||
}
|
||||
Reference in New Issue
Block a user