import { useState, useCallback } from "preact/hooks"; import { useT } from "../../../shared/i18n/context"; import { useSettings } from "../../../shared/hooks/use-settings"; export function SettingsPanel() { const t = useT(); const settings = useSettings(); const [draft, setDraft] = useState(null); const [revealed, setRevealed] = useState(false); const [collapsed, setCollapsed] = useState(true); // Sync draft when settings load const displayValue = draft ?? settings.apiKey ?? ""; const handleSave = useCallback(async () => { const newKey = (draft ?? settings.apiKey ?? "").trim() || null; await settings.save(newKey); setDraft(null); }, [draft, settings]); const handleClear = useCallback(async () => { await settings.save(null); setDraft(null); setRevealed(false); }, [settings]); const isDirty = draft !== null && draft !== (settings.apiKey ?? ""); return (
{/* Header — clickable to toggle */} {/* Collapsible content */} {!collapsed && (
setDraft((e.target as HTMLInputElement).value)} onFocus={() => setRevealed(true)} placeholder={t("apiKeyLabel")} /> {/* Toggle visibility */}
{/* Save button */}
{/* Status messages */}
{settings.saved && ( {t("apiKeySaved")} )} {settings.error && ( {settings.error} )} {/* Clear key button */} {settings.apiKey && ( )}
)}
); }