46 lines
1.0 KiB
TypeScript
46 lines
1.0 KiB
TypeScript
"use client";
|
|
|
|
import { Dispatch, ReactNode, SetStateAction, createContext } from "react";
|
|
import { ThemeProvider, useTheme } from "next-themes";
|
|
import { Toaster } from "sonner";
|
|
import useLocalStorage from "@/lib/hooks/use-local-storage";
|
|
|
|
export const AppContext = createContext<{
|
|
font: string;
|
|
setFont: Dispatch<SetStateAction<string>>;
|
|
}>({
|
|
font: "Default",
|
|
setFont: () => {},
|
|
});
|
|
|
|
const ToasterProvider = () => {
|
|
const { theme } = useTheme() as {
|
|
theme: "light" | "dark" | "system";
|
|
};
|
|
return <Toaster theme={theme} />;
|
|
};
|
|
|
|
export default function Providers({ children }: { children: ReactNode }) {
|
|
const [font, setFont] = useLocalStorage<string>("novel__font", "Default");
|
|
|
|
return (
|
|
<ThemeProvider
|
|
attribute="class"
|
|
value={{
|
|
light: "light-theme",
|
|
dark: "dark-theme",
|
|
}}
|
|
>
|
|
<AppContext.Provider
|
|
value={{
|
|
font,
|
|
setFont,
|
|
}}
|
|
>
|
|
<ToasterProvider />
|
|
{children}
|
|
</AppContext.Provider>
|
|
</ThemeProvider>
|
|
);
|
|
}
|