import { create } from 'zustand'; import { persist } from 'zustand/middleware'; interface UIState { sidebarOpen: boolean; language: 'zh-CN' | 'en-US'; theme: 'light' | 'dark'; toggleSidebar: () => void; setSidebarOpen: (open: boolean) => void; setLanguage: (lang: 'zh-CN' | 'en-US') => void; setTheme: (theme: 'light' | 'dark') => void; } // 初始化时检测屏幕宽度,小屏幕下默认关闭侧边栏 const getInitialSidebarState = () => { if (typeof window !== 'undefined') { return window.innerWidth >= 768; // md breakpoint } return true; }; export const useUIStore = create()( persist( (set) => ({ sidebarOpen: getInitialSidebarState(), language: 'zh-CN', theme: 'light', toggleSidebar: () => set((state) => ({ sidebarOpen: !state.sidebarOpen })), setSidebarOpen: (open) => set({ sidebarOpen: open }), setLanguage: (language) => set({ language }), setTheme: (theme) => set({ theme }), }), { name: 'ui-storage', partialize: (state) => ({ language: state.language, theme: state.theme, }), } ) );