"use client"; import { useState } from "react"; import { Eye, EyeOff, CheckCircle, XCircle, Loader2 } from "lucide-react"; import { useChatStore } from "@/lib/store"; import { SettingRow, SectionHeader, Toggle } from "./SettingRow"; import { cn } from "@/lib/utils"; type ConnectionStatus = "idle" | "checking" | "ok" | "error"; export function ApiSettings() { const { settings, updateSettings, resetSettings } = useChatStore(); const [showKey, setShowKey] = useState(false); const [connectionStatus, setConnectionStatus] = useState("idle"); const [latencyMs, setLatencyMs] = useState(null); async function checkConnection() { setConnectionStatus("checking"); setLatencyMs(null); const start = Date.now(); try { const res = await fetch(`${settings.apiUrl}/health`, { signal: AbortSignal.timeout(5000) }); const ms = Date.now() - start; setLatencyMs(ms); setConnectionStatus(res.ok ? "ok" : "error"); } catch { setConnectionStatus("error"); } } const statusIcon = { idle: null, checking: , ok: , error: , }[connectionStatus]; const statusText = { idle: "Not checked", checking: "Checking...", ok: latencyMs !== null ? `Connected — ${latencyMs}ms` : "Connected", error: "Connection failed", }[connectionStatus]; return (
resetSettings("api")} />
updateSettings({ apiKey: e.target.value })} placeholder="sk-ant-..." className={cn( "w-full bg-surface-800 border border-surface-700 rounded-md px-3 py-1.5 pr-10 text-sm", "text-surface-200 placeholder-surface-600 focus:outline-none focus:ring-1 focus:ring-brand-500 font-mono" )} />
{settings.apiKey && (

Key ending in{" "} ...{settings.apiKey.slice(-4)}

)}
updateSettings({ apiUrl: e.target.value })} placeholder="http://localhost:3001" className={cn( "w-full bg-surface-800 border border-surface-700 rounded-md px-3 py-1.5 text-sm", "text-surface-200 placeholder-surface-600 focus:outline-none focus:ring-1 focus:ring-brand-500 font-mono" )} />
{statusIcon} {statusText}
updateSettings({ streamingEnabled: v })} />
); }