import type { ComponentType, ComponentProps } from 'react'; import { FolderOpen } from 'lucide-react'; type IconProps = ComponentProps<'svg'>; type IconComponent = ComponentType; const ANTIGRAVITY_COMMANDS = ['antigravity', 'agy'] as const; const [PRIMARY_ANTIGRAVITY_COMMAND, LEGACY_ANTIGRAVITY_COMMAND] = ANTIGRAVITY_COMMANDS; /** * Cursor editor logo icon - from LobeHub icons */ export function CursorIcon(props: IconProps) { return ( ); } /** * VS Code editor logo icon */ export function VSCodeIcon(props: IconProps) { return ( ); } /** * VS Code Insiders editor logo icon (same as VS Code) */ export function VSCodeInsidersIcon(props: IconProps) { return ; } /** * Kiro editor logo icon (VS Code fork) */ export function KiroIcon(props: IconProps) { return ( ); } /** * Zed editor logo icon (from Simple Icons) */ export function ZedIcon(props: IconProps) { return ( ); } /** * Sublime Text editor logo icon */ export function SublimeTextIcon(props: IconProps) { return ( ); } /** * macOS Finder icon */ export function FinderIcon(props: IconProps) { return ( ); } /** * Windsurf editor logo icon (by Codeium) - from LobeHub icons */ export function WindsurfIcon(props: IconProps) { return ( ); } /** * Trae editor logo icon (by ByteDance) - from LobeHub icons */ export function TraeIcon(props: IconProps) { return ( ); } /** * JetBrains Rider logo icon */ export function RiderIcon(props: IconProps) { return ( ); } /** * JetBrains WebStorm logo icon */ export function WebStormIcon(props: IconProps) { return ( ); } /** * Xcode logo icon */ export function XcodeIcon(props: IconProps) { return ( ); } /** * Android Studio logo icon */ export function AndroidStudioIcon(props: IconProps) { return ( ); } /** * Google Antigravity IDE logo icon - stylized "A" arch shape */ export function AntigravityIcon(props: IconProps) { return ( ); } /** * Get the appropriate icon component for an editor command */ export function getEditorIcon(command: string): IconComponent { // Handle direct CLI commands const cliIcons: Record = { cursor: CursorIcon, code: VSCodeIcon, 'code-insiders': VSCodeInsidersIcon, kido: KiroIcon, zed: ZedIcon, subl: SublimeTextIcon, windsurf: WindsurfIcon, trae: TraeIcon, rider: RiderIcon, webstorm: WebStormIcon, xed: XcodeIcon, studio: AndroidStudioIcon, [PRIMARY_ANTIGRAVITY_COMMAND]: AntigravityIcon, [LEGACY_ANTIGRAVITY_COMMAND]: AntigravityIcon, open: FinderIcon, explorer: FolderOpen, 'xdg-open': FolderOpen, }; // Check direct match first if (cliIcons[command]) { return cliIcons[command]; } // Handle 'open' commands (macOS) - both 'open -a AppName' and 'open "/path/to/App.app"' if (command.startsWith('open')) { const cmdLower = command.toLowerCase(); if (cmdLower.includes('cursor')) return CursorIcon; if (cmdLower.includes('visual studio code - insiders')) return VSCodeInsidersIcon; if (cmdLower.includes('visual studio code')) return VSCodeIcon; if (cmdLower.includes('kiro')) return KiroIcon; if (cmdLower.includes('zed')) return ZedIcon; if (cmdLower.includes('sublime')) return SublimeTextIcon; if (cmdLower.includes('windsurf')) return WindsurfIcon; if (cmdLower.includes('trae')) return TraeIcon; if (cmdLower.includes('rider')) return RiderIcon; if (cmdLower.includes('webstorm')) return WebStormIcon; if (cmdLower.includes('xcode')) return XcodeIcon; if (cmdLower.includes('android studio')) return AndroidStudioIcon; if (cmdLower.includes('antigravity')) return AntigravityIcon; // If just 'open' without app name, it's Finder if (command === 'open') return FinderIcon; } return FolderOpen; }