@dazl/color-scheme
Version:
Color scheme utilities and tools
31 lines (26 loc) • 963 B
text/typescript
import { useState, useEffect } from 'react';
import type { ColorSchemeConfig, CurrentState } from './types';
const api = typeof window !== 'undefined' ? window.colorSchemeApi : null;
// react hook for color scheme management
export function useColorScheme() {
const [{ config, resolved }, setScheme] = useState<CurrentState>({
config: 'system',
resolved: 'light',
});
useEffect(() => {
// eslint-disable-next-line react-hooks/set-state-in-effect
setScheme(api!.currentState);
return api!.subscribe((currentState) => setScheme(currentState));
}, []);
return {
configScheme: config,
resolvedScheme: resolved,
setColorScheme: (config: ColorSchemeConfig) => {
if (!api) return;
api.config = config;
},
isLight: resolved === 'light',
isDark: resolved === 'dark',
rootCssClass: api?.getRootCssClass(resolved) || '',
};
}