35 lines
799 B
TypeScript
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>
|
|
);
|
|
}
|