import React from "react"; import { Zap } from "lucide-react"; import { ProviderCategory } from "../../types"; import { ClaudeIcon, CodexIcon } from "../BrandIcons"; interface Preset { name: string; isOfficial?: boolean; category?: ProviderCategory; } interface PresetSelectorProps { title?: string; presets: Preset[]; selectedIndex: number | null; onSelectPreset: (index: number) => void; onCustomClick: () => void; customLabel?: string; } const PresetSelector: React.FC = ({ title = "选择配置类型", presets, selectedIndex, onSelectPreset, onCustomClick, customLabel = "自定义", }) => { const getButtonClass = ( index: number, preset?: Preset, ) => { const isSelected = selectedIndex === index; const baseClass = "inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-colors"; if (isSelected) { if (preset?.isOfficial || preset?.category === "official") { // Codex 官方使用黑色背景 if (preset?.name.includes("Codex")) { return `${baseClass} bg-gray-900 text-white`; } // Claude 官方使用品牌色背景 return `${baseClass} bg-[#D97757] text-white`; } return `${baseClass} bg-blue-500 text-white`; } return `${baseClass} bg-gray-100 text-gray-500 hover:bg-gray-200`; }; const getDescription = () => { if (selectedIndex === -1) { return "手动配置供应商,需要填写完整的配置信息"; } if (selectedIndex !== null && selectedIndex >= 0) { const preset = presets[selectedIndex]; return preset?.isOfficial || preset?.category === "official" ? "官方登录,不需要填写 API Key" : "使用预设配置,只需填写 API Key"; } return null; }; return (
{presets.map((preset, index) => ( ))}
{getDescription() && (

{getDescription()}

)}
); }; export default PresetSelector;