-
Michael Huynh authoredMichael Huynh authored
theme.tsx 1.16 KiB
import { useSelector } from 'react-redux';
import { isNonProductionEnvironment } from 'loot-core/src/shared/environment';
import type { Theme } from 'loot-core/src/types/prefs';
import * as darkTheme from './themes/dark';
import * as developmentTheme from './themes/development';
import * as lightTheme from './themes/light';
const themes = {
light: { name: 'Light', colors: lightTheme },
dark: { name: 'Dark', colors: darkTheme },
...(isNonProductionEnvironment() && {
development: { name: 'Development', colors: developmentTheme },
}),
};
export const themeOptions = Object.entries(themes).map(
([key, { name }]) => [key, name] as [Theme, string],
);
export function useTheme() {
return useSelector(state => state.prefs.global?.theme) || 'light';
}
export function ThemeStyle() {
let theme = useTheme();
let themeColors = themes[theme].colors;
let css = Object.keys(themeColors)
.map(key => ` --color-${key}: ${themeColors[key]};`)
.join('\n');
return <style>{`:root {\n${css}}`}</style>;
}
export const theme = Object.fromEntries(
Object.keys(lightTheme).map(key => [key, `var(--color-${key})`]),
) as Record<keyof typeof lightTheme, string>;