chore: initial commit for phase05

This commit is contained in:
hibna
2026-02-21 16:59:21 +03:00
parent 218452706c
commit 0941a9ba46
43 changed files with 4431 additions and 17 deletions
+25
View File
@@ -0,0 +1,25 @@
import { useCallback, useSyncExternalStore } from 'react';
function getTheme(): 'dark' | 'light' {
return document.documentElement.classList.contains('dark') ? 'dark' : 'light';
}
const listeners = new Set<() => void>();
function subscribe(listener: () => void) {
listeners.add(listener);
return () => listeners.delete(listener);
}
export function useTheme() {
const theme = useSyncExternalStore(subscribe, getTheme);
const toggleTheme = useCallback(() => {
const next = getTheme() === 'dark' ? 'light' : 'dark';
document.documentElement.classList.toggle('dark', next === 'dark');
localStorage.setItem('theme', next);
listeners.forEach((l) => l());
}, []);
return { theme, toggleTheme };
}