Files
2026-04-26 20:33:48 -04:00

27 lines
804 B
TypeScript

import { createCookie } from "react-router";
export type ColorScheme = "dark" | "light" | "system";
let cookie = createCookie("color_scheme", {
maxAge: 34560000,
sameSite: "lax",
});
export function isValidColorScheme(val: unknown): val is ColorScheme {
return typeof val === "string" && ["dark", "light", "system"].includes(val);
}
export async function getColorScheme(request: Request) {
const header = request.headers.get("Cookie");
const vals = await cookie.parse(header);
return ["dark", "light", "system"].includes(vals?.colorScheme) ? vals.colorScheme : "system";
}
export function setColorScheme(colorScheme: ColorScheme) {
if (colorScheme === "system") {
return cookie.serialize({}, { expires: new Date(0), maxAge: 0 });
}
return cookie.serialize({ colorScheme });
}