29 lines
877 B
TypeScript
29 lines
877 B
TypeScript
"use client";
|
|
|
|
import { useEffect } from 'react';
|
|
import { useThemeStore } from '@/stores/theme-store';
|
|
|
|
export function ThemeProvider({ children }: { children: React.ReactNode }) {
|
|
const initializeTheme = useThemeStore((state) => state.initializeTheme);
|
|
|
|
useEffect(() => {
|
|
initializeTheme();
|
|
}, [initializeTheme]);
|
|
|
|
useEffect(() => {
|
|
if (process.env.NODE_ENV === 'production') return;
|
|
|
|
const handleKeyDown = (e: KeyboardEvent) => {
|
|
if ((e.ctrlKey || e.metaKey) && e.shiftKey && e.key.toLowerCase() === 'l') {
|
|
e.preventDefault();
|
|
const { resolvedTheme, setTheme } = useThemeStore.getState();
|
|
setTheme(resolvedTheme === 'dark' ? 'light' : 'dark');
|
|
}
|
|
};
|
|
|
|
window.addEventListener('keydown', handleKeyDown);
|
|
return () => window.removeEventListener('keydown', handleKeyDown);
|
|
}, []);
|
|
|
|
return <>{children}</>;
|
|
} |