Files
Calbook/components/layout/theme-provider.tsx

35 lines
799 B
TypeScript

"use client";
import { ThemeProvider as NextThemesProvider } from "next-themes";
import { type ReactNode } from "react";
export type ThemeModeSetting = "light" | "dark" | "auto";
function toNextTheme(mode: ThemeModeSetting): "light" | "dark" | "system" {
if (mode === "light") return "light";
if (mode === "dark") return "dark";
return "system";
}
export function ThemeProvider({
children,
mode = "auto"
}: {
children: ReactNode;
mode?: ThemeModeSetting;
}) {
const defaultTheme = toNextTheme(mode);
const enableSystem = mode === "auto";
return (
<NextThemesProvider
attribute="class"
defaultTheme={defaultTheme}
enableSystem={enableSystem}
forcedTheme={mode === "auto" ? undefined : mode}
>
{children}
</NextThemesProvider>
);
}