mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-07-01 01:23:06 +08:00
81 lines
3.1 KiB
TypeScript
81 lines
3.1 KiB
TypeScript
import type { LLMProvider } from '../../../../types/app';
|
|
import type { ProviderAuthStatusMap } from '../../../provider-auth/types';
|
|
|
|
import AgentConnectionCard from './AgentConnectionCard';
|
|
|
|
type AgentConnectionsStepProps = {
|
|
providerStatuses: ProviderAuthStatusMap;
|
|
onOpenProviderLogin: (provider: LLMProvider) => void;
|
|
};
|
|
|
|
const providerCards = [
|
|
{
|
|
provider: 'claude' as const,
|
|
title: 'Claude Code',
|
|
connectedClassName: 'bg-blue-50 dark:bg-blue-900/20 border-blue-200 dark:border-blue-800',
|
|
iconContainerClassName: 'bg-blue-100 dark:bg-blue-900/30',
|
|
loginButtonClassName: 'bg-blue-600 hover:bg-blue-700',
|
|
},
|
|
{
|
|
provider: 'cursor' as const,
|
|
title: 'Cursor',
|
|
connectedClassName: 'bg-purple-50 dark:bg-purple-900/20 border-purple-200 dark:border-purple-800',
|
|
iconContainerClassName: 'bg-purple-100 dark:bg-purple-900/30',
|
|
loginButtonClassName: 'bg-purple-600 hover:bg-purple-700',
|
|
},
|
|
{
|
|
provider: 'codex' as const,
|
|
title: 'OpenAI Codex',
|
|
connectedClassName: 'bg-gray-100 dark:bg-gray-800/50 border-gray-300 dark:border-gray-600',
|
|
iconContainerClassName: 'bg-gray-100 dark:bg-gray-800',
|
|
loginButtonClassName: 'bg-gray-800 hover:bg-gray-900 dark:bg-gray-700 dark:hover:bg-gray-600',
|
|
},
|
|
{
|
|
provider: 'gemini' as const,
|
|
title: 'Gemini',
|
|
connectedClassName: 'bg-teal-50 dark:bg-teal-900/20 border-teal-200 dark:border-teal-800',
|
|
iconContainerClassName: 'bg-teal-100 dark:bg-teal-900/30',
|
|
loginButtonClassName: 'bg-teal-600 hover:bg-teal-700',
|
|
},
|
|
{
|
|
provider: 'opencode' as const,
|
|
title: 'OpenCode',
|
|
connectedClassName: 'bg-zinc-100 dark:bg-zinc-800/50 border-zinc-300 dark:border-zinc-600',
|
|
iconContainerClassName: 'bg-zinc-100 dark:bg-zinc-800',
|
|
loginButtonClassName: 'bg-zinc-800 hover:bg-zinc-900 dark:bg-zinc-700 dark:hover:bg-zinc-600',
|
|
},
|
|
];
|
|
|
|
export default function AgentConnectionsStep({
|
|
providerStatuses,
|
|
onOpenProviderLogin,
|
|
}: AgentConnectionsStepProps) {
|
|
return (
|
|
<div className="space-y-4">
|
|
<div className="text-center">
|
|
<h2 className="font-serif text-xl font-bold tracking-tight text-foreground">Connect Your AI Agents</h2>
|
|
<p className="mx-auto mt-1 max-w-sm text-sm leading-relaxed text-muted-foreground">
|
|
Login to one or more AI coding assistants. All are optional.
|
|
</p>
|
|
</div>
|
|
|
|
<div className="-mr-1 max-h-[38vh] space-y-2 overflow-y-auto pr-1">
|
|
{providerCards.map((providerCard) => (
|
|
<AgentConnectionCard
|
|
key={providerCard.provider}
|
|
provider={providerCard.provider}
|
|
title={providerCard.title}
|
|
status={providerStatuses[providerCard.provider]}
|
|
connectedClassName={providerCard.connectedClassName}
|
|
iconContainerClassName={providerCard.iconContainerClassName}
|
|
loginButtonClassName={providerCard.loginButtonClassName}
|
|
onLogin={() => onOpenProviderLogin(providerCard.provider)}
|
|
/>
|
|
))}
|
|
</div>
|
|
|
|
<p className="text-center text-xs text-muted-foreground">You can configure these later in Settings.</p>
|
|
</div>
|
|
);
|
|
}
|