Files
openchamber/packages/ui/src/lib/theme/themes/index.ts
T

35 lines
1.3 KiB
TypeScript
Raw Normal View History

2025-12-07 19:32:53 +02:00
import type { Theme } from '@/types/theme';
import { presetThemes } from './presets';
import flexokiLightRaw from './flexoki-light.json';
import flexokiDarkRaw from './flexoki-dark.json';
2025-12-07 19:32:53 +02:00
export const flexokiLightTheme = flexokiLightRaw as Theme;
export const flexokiDarkTheme = flexokiDarkRaw as Theme;
2025-12-07 19:32:53 +02:00
export const DEFAULT_LIGHT_THEME_ID = 'flexoki-light' as const;
export const DEFAULT_DARK_THEME_ID = 'flexoki-dark' as const;
export const themes: Theme[] = [flexokiLightTheme, flexokiDarkTheme, ...presetThemes];
2025-12-07 19:32:53 +02:00
export function getThemeById(id: string): Theme | undefined {
// Back-compat for a short-lived rename.
const resolvedId =
id === 'app-light' ? 'flexoki-light' :
id === 'app-dark' ? 'flexoki-dark' :
id;
return themes.find(theme => theme.metadata.id === resolvedId);
2025-12-07 19:32:53 +02:00
}
export function getDefaultTheme(prefersDark: boolean): Theme {
const variant: Theme['metadata']['variant'] = prefersDark ? 'dark' : 'light';
const defaultId = prefersDark ? DEFAULT_DARK_THEME_ID : DEFAULT_LIGHT_THEME_ID;
const defaultTheme = getThemeById(defaultId);
if (defaultTheme && defaultTheme.metadata.variant === variant) {
return defaultTheme;
}
return themes.find((theme) => theme.metadata.variant === variant) ?? themes[0] ?? flexokiLightTheme;
2025-12-07 19:32:53 +02:00
}