import { TLUiDialogProps, TldrawUiButton, TldrawUiButtonLabel, TldrawUiDialogBody, TldrawUiDialogCloseButton, TldrawUiDialogFooter, TldrawUiDialogHeader, TldrawUiDialogTitle, TldrawUiInput, } from "tldraw" import React from "react" import { PROVIDERS } from "../lib/settings" export function SettingsDialog({ onClose }: TLUiDialogProps) { const [apiKeys, setApiKeys] = React.useState(() => { try { const stored = localStorage.getItem("openai_api_key") if (stored) { try { const parsed = JSON.parse(stored) if (parsed.keys) { return parsed.keys } } catch (e) { // Fallback to old format return { openai: stored } } } return { openai: '', anthropic: '', google: '' } } catch (e) { return { openai: '', anthropic: '', google: '' } } }) const handleKeyChange = (provider: string, value: string) => { const newKeys = { ...apiKeys, [provider]: value } setApiKeys(newKeys) // Save to localStorage with the new structure const settings = { keys: newKeys, provider: provider === 'openai' ? 'openai' : provider, // Use the actual provider models: Object.fromEntries(PROVIDERS.map((provider) => [provider.id, provider.models[0]])), } console.log("💾 Saving settings to localStorage:", settings); localStorage.setItem("openai_api_key", JSON.stringify(settings)) } const validateKey = (provider: string, key: string) => { const providerConfig = PROVIDERS.find(p => p.id === provider) if (providerConfig && key.trim()) { return providerConfig.validate(key) } return true } return ( <> AI API Keys
{PROVIDERS.map((provider) => (
{provider.models[0]}
handleKeyChange(provider.id, value)} /> {apiKeys[provider.id] && !validateKey(provider.id, apiKeys[provider.id]) && (
Invalid API key format
)}
{provider.help && ( Learn more about {provider.name} setup → )}
))}
Note: API keys are stored locally in your browser. Make sure to use keys with appropriate usage limits for your needs.
Close ) }