Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import React, { createContext, useContext, type ReactNode, type JSX } from "react";
import { useTheme, type UseThemeResult } from "../hooks/useTheme.js";
const ThemeContext: React.Context<UseThemeResult | undefined> = createContext<
UseThemeResult | undefined
>(undefined);
/** Provides theme state to the component tree. */
export function ThemeProvider({ children }: { children: ReactNode }): JSX.Element {
const themeState = useTheme();
return <ThemeContext.Provider value={themeState}>{children}</ThemeContext.Provider>;
}
/** Consumes the theme context; must be called within a ThemeProvider. */
export function useThemeContext(): UseThemeResult {
const ctx = useContext(ThemeContext);
if (!ctx) {
throw new Error("useThemeContext must be used within ThemeProvider");
}
return ctx;
}
|