// src/renderer/src/stores/app.ts import { defineStore } from 'pinia' import { ref } from 'vue' export type ThemeMode = 'system' | 'dark' | 'light' export const useAppStore = defineStore('app', () => { const theme = ref((localStorage.getItem('theme') as ThemeMode) || 'system') const isDark = ref(true) const fontSize = ref(Number(localStorage.getItem('fontSize')) || 13) const scanCount = ref(Number(localStorage.getItem('scanCount')) || 100) function applyTheme(mode: ThemeMode, osDark?: boolean) { theme.value = mode const dark = mode === 'system' ? (osDark ?? true) : mode === 'dark' isDark.value = dark document.documentElement.classList.toggle('light', !dark) } if (window.electronAPI) { window.electronAPI.theme.onOsUpdated((osDark: boolean) => { if (theme.value === 'system') { applyTheme('system', osDark) } }) } window.electronAPI?.theme.get().then((osDark: boolean) => { applyTheme(theme.value, osDark) }) function setTheme(mode: ThemeMode) { applyTheme(mode) localStorage.setItem('theme', mode) window.electronAPI?.theme.set(mode) } function setFontSize(size: number) { fontSize.value = size localStorage.setItem('fontSize', String(size)) } function setScanCount(count: number) { scanCount.value = count localStorage.setItem('scanCount', String(count)) } return { theme, isDark, fontSize, scanCount, setTheme, setFontSize, setScanCount } })