/** * Settings State Store * Manages application settings */ import { create } from 'zustand'; import { persist } from 'zustand/middleware'; import i18n from '@/i18n'; type Theme = 'light' | 'dark' | 'system'; type UpdateChannel = 'stable' | 'beta' | 'dev'; interface SettingsState { // General theme: Theme; language: string; startMinimized: boolean; launchAtStartup: boolean; // Gateway gatewayAutoStart: boolean; gatewayPort: number; // Update updateChannel: UpdateChannel; autoCheckUpdate: boolean; autoDownloadUpdate: boolean; // UI State sidebarCollapsed: boolean; devModeUnlocked: boolean; // Setup setupComplete: boolean; // Actions setTheme: (theme: Theme) => void; setLanguage: (language: string) => void; setStartMinimized: (value: boolean) => void; setLaunchAtStartup: (value: boolean) => void; setGatewayAutoStart: (value: boolean) => void; setGatewayPort: (port: number) => void; setUpdateChannel: (channel: UpdateChannel) => void; setAutoCheckUpdate: (value: boolean) => void; setAutoDownloadUpdate: (value: boolean) => void; setSidebarCollapsed: (value: boolean) => void; setDevModeUnlocked: (value: boolean) => void; markSetupComplete: () => void; resetSettings: () => void; } const defaultSettings = { theme: 'system' as Theme, language: (() => { const lang = navigator.language.toLowerCase(); if (lang.startsWith('zh')) return 'zh'; if (lang.startsWith('ja')) return 'ja'; return 'en'; })(), startMinimized: false, launchAtStartup: false, gatewayAutoStart: true, gatewayPort: 18789, updateChannel: 'stable' as UpdateChannel, autoCheckUpdate: true, autoDownloadUpdate: false, sidebarCollapsed: false, devModeUnlocked: false, setupComplete: false, }; export const useSettingsStore = create()( persist( (set) => ({ ...defaultSettings, setTheme: (theme) => set({ theme }), setLanguage: (language) => { i18n.changeLanguage(language); set({ language }); }, setStartMinimized: (startMinimized) => set({ startMinimized }), setLaunchAtStartup: (launchAtStartup) => set({ launchAtStartup }), setGatewayAutoStart: (gatewayAutoStart) => set({ gatewayAutoStart }), setGatewayPort: (gatewayPort) => set({ gatewayPort }), setUpdateChannel: (updateChannel) => set({ updateChannel }), setAutoCheckUpdate: (autoCheckUpdate) => set({ autoCheckUpdate }), setAutoDownloadUpdate: (autoDownloadUpdate) => set({ autoDownloadUpdate }), setSidebarCollapsed: (sidebarCollapsed) => set({ sidebarCollapsed }), setDevModeUnlocked: (devModeUnlocked) => set({ devModeUnlocked }), markSetupComplete: () => set({ setupComplete: true }), resetSettings: () => set(defaultSettings), }), { name: 'clawx-settings', } ) );