Files
new-api-analytics/lib/theme-sync.ts

49 lines
980 B
TypeScript

import type { Theme } from "./theme";
export type ResolvedTheme = "light" | "dark";
export type ThemeQueryMode = "light" | "dark" | "system";
export function parseThemeQuery(value: string | null | undefined): ThemeQueryMode | null {
if (!value) {
return null;
}
const normalized = value.toLowerCase();
if (normalized === "light" || normalized === "dark") {
return normalized;
}
if (normalized === "auto" || normalized === "system") {
return "system";
}
return null;
}
export function resolveStoredTheme(
theme: Theme,
prefersDark: boolean,
): ResolvedTheme {
if (theme === "system") {
return prefersDark ? "dark" : "light";
}
return theme;
}
export function resolveIncomingThemeMode(
mode: unknown,
prefersDark: boolean,
): ResolvedTheme | null {
if (mode === "light" || mode === "dark") {
return mode;
}
if (mode === "auto" || mode === "system") {
return prefersDark ? "dark" : "light";
}
return null;
}