import { useState } from 'react'; import { Dialog, DialogContent, DialogTitle, DialogDescription } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Checkbox } from '@/components/ui/checkbox'; import { Plus } from 'lucide-react'; import { useI18n } from '@/lib/hooks/use-i18n'; export interface NewAudioProviderData { name: string; baseUrl: string; defaultModel: string; requiresApiKey: boolean; } interface AddAudioProviderDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onAdd: (data: NewAudioProviderData) => void; type: 'tts' | 'asr'; } export function AddAudioProviderDialog({ open, onOpenChange, onAdd, type, }: AddAudioProviderDialogProps) { const { t } = useI18n(); const [name, setName] = useState(''); const [baseUrl, setBaseUrl] = useState(''); const [defaultModel, setDefaultModel] = useState(''); const [requiresApiKey, setRequiresApiKey] = useState(false); // Reset form when dialog closes const [prevOpen, setPrevOpen] = useState(open); if (open !== prevOpen) { setPrevOpen(open); if (!open) { setName(''); setBaseUrl(''); setDefaultModel(''); setRequiresApiKey(false); } } const handleAdd = () => { if (!name.trim() || !baseUrl.trim()) return; onAdd({ name: name.trim(), baseUrl: baseUrl.trim(), defaultModel: defaultModel.trim(), requiresApiKey, }); onOpenChange(false); }; const titleKey = type === 'tts' ? 'settings.addCustomTTSProvider' : 'settings.addCustomASRProvider'; return ( {t(titleKey)} {t('settings.addCustomAudioProviderDescription')}

{t(titleKey)}

{t('settings.addCustomAudioProviderDescription')}

setName(e.target.value)} />
setBaseUrl(e.target.value)} />
{/* Default Model — TTS only (ASR models are managed in provider settings) */} {type === 'tts' && (
setDefaultModel(e.target.value)} />

{t('settings.defaultModelHint')}

)}
setRequiresApiKey(checked as boolean)} />
); }