Tech4biz-channel/Channel-Frontend/src/hooks/use-theme.ts
2026-07-09 09:31:15 +05:30

37 lines
1.1 KiB
TypeScript

import { create } from 'zustand';
type Theme = 'dark' | 'light';
interface ThemeState {
theme: Theme;
toggleTheme: () => void;
initTheme: () => void;
}
export const useThemeStore = create<ThemeState>((set) => ({
theme: 'dark',
toggleTheme: () => set((state) => {
const newTheme = state.theme === 'dark' ? 'light' : 'dark';
localStorage.setItem('theme-preference', newTheme);
if (newTheme === 'dark') {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}
return { theme: newTheme };
}),
initTheme: () => set(() => {
const saved = localStorage.getItem('theme-preference');
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
const initialTheme = saved ? (saved as Theme) : (prefersDark ? 'dark' : 'light');
if (initialTheme === 'dark') {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}
return { theme: initialTheme };
})
}));