import { useTranslation } from "../i18n"; import type { Model, Provider } from "../types"; interface ProviderListProps { providers: Provider[]; defaultModel: string | null; models: Record; onEdit: (name: string) => void; onDelete: (name: string) => void; onAdd: () => void; onSwitchProvider: (name: string) => void; } const PROVIDER_ICONS: Record = { kimi: "K", anthropic: "A", openai: "O", openai_responses: "R", "google-genai": "G", vertexai: "V", }; function getInitial(provider: Provider): string { return ( PROVIDER_ICONS[provider.provider_type] || provider.name.charAt(0).toUpperCase() ); } function getProviderColor(type: string): string { switch (type) { case "kimi": return "from-blue-500 to-cyan-400"; case "anthropic": return "from-orange-500 to-red-400"; case "openai": return "from-green-500 to-emerald-400"; case "openai_responses": return "from-teal-500 to-green-400"; case "google-genai": return "from-purple-500 to-pink-400"; case "vertexai": return "from-indigo-500 to-purple-400"; default: return "from-gray-500 to-gray-400"; } } export function ProviderList({ providers, defaultModel, models, onEdit, onDelete, onAdd, onSwitchProvider, }: ProviderListProps) { const { t } = useTranslation(); return (

{t("providers")}

{providers.length === 0 ? (
{t("noProviders")}
) : (
{providers.map((provider) => { const providerModels = Object.values(models).filter( (m) => m.provider === provider.name ); const defaultModelName = defaultModel ? models[defaultModel]?.display_name || defaultModel : null; const isKimiNative = provider.managed === true; const isActive = !isKimiNative && provider.active === true; return (
onEdit(provider.name)} >
{getInitial(provider)}

{provider.name}

{isActive && ( {t("inUse")} )} {provider.note && ( {provider.note} )}
{provider.official_url || provider.base_url || t("noUrl")} {provider.provider_type} {t("modelCount", { count: providerModels.length })}
{defaultModel && models[defaultModel]?.provider === provider.name && ( {t("defaultModel", { name: defaultModelName ?? "" })} )}
); })}
)}
); }