'use client' import { useState } from 'react' import { updateAISettings } from '@/app/actions/ai-settings' import { updateUserSettings } from '@/app/actions/user-settings' import { useLanguage } from '@/lib/i18n' import { toast } from 'sonner' import { Palette, Type, LayoutGrid, Maximize2 } from 'lucide-react' interface AppearanceSettingsClientProps { initialFontSize: string initialTheme: string initialNotesViewMode: 'masonry' | 'tabs' initialCardSizeMode?: 'variable' | 'uniform' initialFontFamily?: string } export function AppearanceSettingsClient({ initialFontSize, initialTheme, initialNotesViewMode, initialCardSizeMode = 'variable', initialFontFamily = 'inter', }: AppearanceSettingsClientProps) { const { t } = useLanguage() const [theme, setTheme] = useState(initialTheme || 'light') const [fontSize, setFontSize] = useState(initialFontSize || 'medium') const [notesViewMode, setNotesViewMode] = useState<'masonry' | 'tabs'>(initialNotesViewMode) const [cardSizeMode, setCardSizeMode] = useState<'variable' | 'uniform'>(initialCardSizeMode) const [fontFamily, setFontFamily] = useState(initialFontFamily) const handleThemeChange = async (value: string) => { setTheme(value) localStorage.setItem('theme-preference', value) const root = document.documentElement root.removeAttribute('data-theme') root.classList.remove('dark') if (value === 'auto') { if (window.matchMedia('(prefers-color-scheme: dark)').matches) root.classList.add('dark') } else if (value === 'dark') { root.classList.add('dark') } else { root.setAttribute('data-theme', value) if (['midnight'].includes(value)) root.classList.add('dark') } await updateUserSettings({ theme: value as any }) toast.success(t('settings.settingsSaved') || 'Saved') } const handleFontSizeChange = async (value: string) => { setFontSize(value) const map: Record = { small: '14px', medium: '16px', large: '18px', 'extra-large': '20px' } document.documentElement.style.setProperty('--user-font-size', map[value] || '16px') await updateAISettings({ fontSize: value as any }) toast.success(t('settings.settingsSaved') || 'Saved') } const handleNotesViewChange = async (value: string) => { const mode = value === 'tabs' ? 'tabs' : 'masonry' setNotesViewMode(mode) await updateAISettings({ notesViewMode: mode }) toast.success(t('settings.settingsSaved') || 'Saved') } const handleCardSizeModeChange = async (value: string) => { const mode = value === 'uniform' ? 'uniform' : 'variable' setCardSizeMode(mode) localStorage.setItem('card-size-mode', mode) await updateUserSettings({ cardSizeMode: mode }) toast.success(t('settings.settingsSaved') || 'Saved') } const handleFontFamilyChange = async (value: string) => { const font = value === 'system' ? 'system' : 'inter' setFontFamily(font) localStorage.setItem('font-family', font) const root = document.documentElement font === 'system' ? root.classList.add('font-system') : root.classList.remove('font-system') await updateAISettings({ fontFamily: font }) toast.success(t('settings.settingsSaved') || 'Saved') } const SelectCard = ({ icon: Icon, title, description, value, options, onChange, }: { icon: React.ElementType title: string description: string value: string options: { value: string; label: string }[] onChange: (v: string) => void }) => (

{title}

{description}

) return (

{t('appearance.title')}

{t('appearance.description')}

) }