mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-31 00:23:38 +00:00
- Added ESLint, Prettier, TypeScript strict mode to ui/ directory - Fixed 40+ lint/format issues across ui codebase - Created extraction files for react-refresh compliance: - button-variants.ts for Button component styles - use-sidebar.ts, use-websocket-context.ts custom hooks - ws-context.ts WebSocket context provider - Fixed React hooks issues (setState ordering, dependency arrays) - Added ui:validate script to enforce quality checks - Updated husky pre-commit to validate UI files on change
25 lines
690 B
TypeScript
25 lines
690 B
TypeScript
import { useEffect, useState } from 'react';
|
|
|
|
function getInitialTheme() {
|
|
if (typeof window === 'undefined') return false;
|
|
const stored = localStorage.getItem('ccs-theme');
|
|
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
return stored === 'dark' || (!stored && prefersDark);
|
|
}
|
|
|
|
export function useTheme() {
|
|
const [isDark, setIsDark] = useState(getInitialTheme);
|
|
|
|
useEffect(() => {
|
|
document.documentElement.classList.toggle('dark', isDark);
|
|
}, [isDark]);
|
|
|
|
const toggle = () => {
|
|
const newValue = !isDark;
|
|
setIsDark(newValue);
|
|
localStorage.setItem('ccs-theme', newValue ? 'dark' : 'light');
|
|
};
|
|
|
|
return { isDark, toggle };
|
|
}
|