mcpIconAssets.ts55 lines · main
| 1 | /// <reference path="../../types/assets.d.ts" /> |
| 2 | |
| 3 | import antigravityIcon from '../assets/antigravity-icon.svg' |
| 4 | import claudeIcon from '../assets/claude-icon.svg' |
| 5 | import copilotDarkIcon from '../assets/copilot-icon-dark.svg' |
| 6 | import copilotIcon from '../assets/copilot-icon.svg' |
| 7 | import cursorIcon from '../assets/cursor-icon.svg' |
| 8 | import factoryDarkIcon from '../assets/factory-icon-dark.svg' |
| 9 | import factoryIcon from '../assets/factory-icon.svg' |
| 10 | import geminiCliIcon from '../assets/gemini-cli-icon.svg' |
| 11 | import gooseDarkIcon from '../assets/goose-icon-dark.svg' |
| 12 | import gooseIcon from '../assets/goose-icon.svg' |
| 13 | import kiroIcon from '../assets/kiro-icon.svg' |
| 14 | import openaiDarkIcon from '../assets/openai-icon-dark.svg' |
| 15 | import openaiIcon from '../assets/openai-icon.svg' |
| 16 | import opencodeDarkIcon from '../assets/opencode-icon-dark.svg' |
| 17 | import opencodeIcon from '../assets/opencode-icon.svg' |
| 18 | import vscodeIcon from '../assets/vscode-icon.svg' |
| 19 | import windsurfDarkIcon from '../assets/windsurf-icon-dark.svg' |
| 20 | import windsurfIcon from '../assets/windsurf-icon.svg' |
| 21 | |
| 22 | type ImportedAssetModule = string | { src: string } |
| 23 | |
| 24 | type McpClientIconAsset = { |
| 25 | light: ImportedAssetModule |
| 26 | dark: ImportedAssetModule |
| 27 | } |
| 28 | |
| 29 | const MCP_CLIENT_ICON_ASSETS = { |
| 30 | antigravity: { light: antigravityIcon, dark: antigravityIcon }, |
| 31 | claude: { light: claudeIcon, dark: claudeIcon }, |
| 32 | copilot: { light: copilotIcon, dark: copilotDarkIcon }, |
| 33 | cursor: { light: cursorIcon, dark: cursorIcon }, |
| 34 | factory: { light: factoryIcon, dark: factoryDarkIcon }, |
| 35 | 'gemini-cli': { light: geminiCliIcon, dark: geminiCliIcon }, |
| 36 | goose: { light: gooseIcon, dark: gooseDarkIcon }, |
| 37 | kiro: { light: kiroIcon, dark: kiroIcon }, |
| 38 | openai: { light: openaiIcon, dark: openaiDarkIcon }, |
| 39 | opencode: { light: opencodeIcon, dark: opencodeDarkIcon }, |
| 40 | vscode: { light: vscodeIcon, dark: vscodeIcon }, |
| 41 | windsurf: { light: windsurfIcon, dark: windsurfDarkIcon }, |
| 42 | } satisfies Record<string, McpClientIconAsset> |
| 43 | |
| 44 | export type McpClientIconName = keyof typeof MCP_CLIENT_ICON_ASSETS |
| 45 | |
| 46 | function normalizeAssetUrl(asset: ImportedAssetModule): string { |
| 47 | return typeof asset === 'string' ? asset : asset.src |
| 48 | } |
| 49 | |
| 50 | export function getMcpClientIconAssetUrl(icon: string, useDarkVariant: boolean): string { |
| 51 | const iconAssets = MCP_CLIENT_ICON_ASSETS[icon.toLowerCase() as McpClientIconName] |
| 52 | if (!iconAssets) return '' |
| 53 | |
| 54 | return normalizeAssetUrl(useDarkVariant ? iconAssets.dark : iconAssets.light) |
| 55 | } |