import type { Theme } from "./themes.ts"; interface ThemeSettings { preference: Theme | "system"; value: Theme; } export function useThemeSettings(getDefaultTheme?: () => Theme) { getDefaultTheme ??= () => "dark"; const $settings = useCookie("color-mode", { maxAge: 60 * 60 * 24 * 365 * 10, sameSite: "lax", secure: true, httpOnly: false, path: "/", }); // reset theme settings to a default value if the cookie is missing or contains invalid value if ($settings.value == null || typeof $settings.value !== "object") { $settings.value = { preference: "system", value: getDefaultTheme(), }; } return reactive({ preferred: computed({ get: () => $settings.value.preference ?? "system", set: (value) => ($settings.value.preference = value), }), active: computed({ get: () => $settings.value.value ?? getDefaultTheme(), set: (value) => ($settings.value.value = value), }), }); }