mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-01-15 21:53:36 +01:00
31 lines
877 B
TypeScript
31 lines
877 B
TypeScript
import { useEffect } from 'react';
|
|
import type { Appearance } from '../lib/theme/window';
|
|
import {
|
|
getAppearance,
|
|
setAppearance,
|
|
subscribeToPreferredAppearanceChange,
|
|
} from '../lib/theme/window';
|
|
import { useKeyValue } from './useKeyValue';
|
|
|
|
export function useTheme() {
|
|
const appearanceKv = useKeyValue<Appearance>({
|
|
key: 'appearance',
|
|
defaultValue: getAppearance(),
|
|
});
|
|
|
|
const handleToggleAppearance = async () => {
|
|
appearanceKv.set(appearanceKv.value === 'dark' ? 'light' : 'dark');
|
|
};
|
|
|
|
// Set appearance when preferred theme changes
|
|
useEffect(() => subscribeToPreferredAppearanceChange(appearanceKv.set), [appearanceKv.set]);
|
|
|
|
// Sync appearance when k/v changes
|
|
useEffect(() => setAppearance(appearanceKv.value), [appearanceKv.value]);
|
|
|
|
return {
|
|
appearance: appearanceKv.value,
|
|
toggleAppearance: handleToggleAppearance,
|
|
};
|
|
}
|