import { Landmark, Network, Shuffle } from "lucide-react"; import { useTheme } from "next-themes"; type IconSize = "xs" | "sm" | "md" | "lg" | "xl" | number; type IconProps = { size?: IconSize; className?: string; theme?: string; }; // Size mapping in pixels const sizeMap: Record = { xs: 20, sm: 32, md: 40, lg: 48, xl: 64, }; // Function to resolve size value const resolveSize = (size: IconSize): number => { if (typeof size === "number") return size; return sizeMap[size] || sizeMap.md; }; // Provider Icons with theme awareness where applicable export const ProviderIcons = { anthropic: ({ size = "md", className = "", theme }: IconProps) => { const resolvedSize = resolveSize(size); return theme === "light" ? ( ) : ( ); }, azure: ({ className = "" }: IconProps) => { return ( azure ); }, bedrock: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( ); }, cerebras: ({ size = "md", className = "", theme }: IconProps) => { const resolvedSize = resolveSize(size); return theme === "light" ? ( Cerebras ) : ( Cerebras ); }, cohere: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( ); }, elevenlabs: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( ); }, groq: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( ); }, mistral: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( ); }, ollama: ({ size = "md", className = "", theme }: IconProps) => { const resolvedSize = resolveSize(size); return theme === "light" ? ( ) : ( ); }, parasail: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( ); }, perplexity: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( Perplexity ); }, sgl: ({ className = "" }: IconProps) => { return ( sgl ); }, openai: ({ size = "md", className = "", theme }: IconProps) => { const resolvedSize = resolveSize(size); return theme === "light" ? ( ) : ( ); }, vertex: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( ); }, gemini: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( Gemini ); }, openrouter: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( OpenRouter ); }, huggingface: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( HuggingFace ); }, nebius: ({ className = "" }: IconProps) => { return ( nebius ); }, xai: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( Grok ); }, replicate: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( Replicate ); }, vllm: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( vLLM ); }, runway: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( Runway ); }, fireworks: ({ size = "md", className = "" }: IconProps) => { const resolvedSize = resolveSize(size); return ( Fireworks AI ); }, } as const; // Routing Engine Icons export const RoutingEngineUsedIcons = { "routing-rule": ({ className = "h-5 w-5 text-blue-800", }: { className?: string } = {}) => , governance: ({ className = "h-5 w-5 text-green-800", }: { className?: string } = {}) => , loadbalancing: ({ className = "h-5 w-5 text-red-800", }: { className?: string } = {}) => , } as const; export type RoutingEngineType = keyof typeof RoutingEngineUsedIcons; // Helper component to render provider icons export const RenderProviderIcon = ({ provider, ...props }: IconProps & { provider: keyof typeof ProviderIcons }) => { const { resolvedTheme } = useTheme(); const IconComponent = ProviderIcons[provider]; return IconComponent ? IconComponent({ ...props, theme: resolvedTheme }) : null; }; export type ProviderIconType = keyof typeof ProviderIcons; export default ProviderIcons;