OneLauncher-Cracked/apps/onelauncher/old_frontend/src/utils/theming.ts
2025-05-11 20:34:30 +02:00

52 lines
1.2 KiB
TypeScript

// When adding a theme, make sure to add the theme here and define the colors in the CSS file!
export const DEFAULT_THEME = 'OneLauncher-Dark';
export const THEMES = {
OneLauncher: {
variants: [
{
name: 'Dark',
type: 'dark',
},
{
name: 'Light',
type: 'light',
},
],
},
} as const satisfies Record<string, Theme>;
export function setAppTheme(name: string, variant: ThemeVariant) {
document.body.setAttribute('data-theme', `${name}-${variant.name}`);
document.body.setAttribute('data-theme-type', variant.type);
}
export function splitMergedTheme(merged: string): {
theme: keyof typeof THEMES;
variant: ThemeVariant;
} {
const [name, ...variants] = merged.split('-');
const foundVariant = THEMES[name as keyof typeof THEMES]?.variants.find(variant => variant.name === variants.join('-')) ?? undefined;
if (!name || !foundVariant)
return {
theme: 'OneLauncher',
variant: THEMES.OneLauncher.variants[0],
};
return {
theme: name as keyof typeof THEMES,
variant: foundVariant,
};
}
export interface Theme {
variants: ThemeVariant[];
}
export type ThemeTypes = 'dark' | 'light';
export interface ThemeVariant {
type: ThemeTypes;
name: string;
};