M0-M11 狩夜人笔记初始实现:11里程碑+86测试
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
import { create } from 'zustand';
|
||||
import { applyTheme } from '../appearance/themes';
|
||||
|
||||
export interface Settings {
|
||||
fontSize: number; // 12-20
|
||||
fontFamily: string;
|
||||
autoSaveInterval: number; // 秒 1-30,真实生效
|
||||
showLineNumbers: boolean; // 代码块行号,真实生效
|
||||
wordWrap: boolean; // 自动换行,真实生效
|
||||
confirmDelete: boolean; // 删除前确认,真实生效
|
||||
}
|
||||
|
||||
const DEFAULTS: Settings = {
|
||||
fontSize: 14,
|
||||
fontFamily: 'Consolas, monospace',
|
||||
autoSaveInterval: 1,
|
||||
showLineNumbers: false,
|
||||
wordWrap: true,
|
||||
confirmDelete: true,
|
||||
};
|
||||
|
||||
const KEY = 'dsh-settings';
|
||||
|
||||
function load(): Settings {
|
||||
try { const raw = localStorage.getItem(KEY); if (raw) return { ...DEFAULTS, ...JSON.parse(raw) }; } catch {}
|
||||
return DEFAULTS;
|
||||
}
|
||||
|
||||
interface SettingsState extends Settings {
|
||||
set: <K extends keyof Settings>(key: K, value: Settings[K]) => void;
|
||||
persist: () => void;
|
||||
}
|
||||
|
||||
export const useSettings = create<SettingsState>((set, get) => ({
|
||||
...load(),
|
||||
set: (key, value) => { set({ [key]: value } as any); get().persist(); },
|
||||
persist: () => { try { localStorage.setItem(KEY, JSON.stringify({ fontSize: get().fontSize, fontFamily: get().fontFamily, autoSaveInterval: get().autoSaveInterval, showLineNumbers: get().showLineNumbers, wordWrap: get().wordWrap, confirmDelete: get().confirmDelete })); } catch {} },
|
||||
}));
|
||||
Reference in New Issue
Block a user