MCPcopy Index your code
hub / github.com/codeaashu/claude-code / ThemeProvider

Function ThemeProvider

web/components/layout/ThemeProvider.tsx:20–55  ·  view source on GitHub ↗
({ children }: { children: React.ReactNode })

Source from the content-addressed store, hash-verified

18});
19
20export function ThemeProvider({ children }: { children: React.ReactNode }) {
21 const { settings, updateSettings } = useChatStore();
22 const [resolvedTheme, setResolvedTheme] = useState<"light" | "dark">("dark");
23
24 useEffect(() => {
25 const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
26
27 const resolve = () => {
28 if (settings.theme === "system") {
29 return mediaQuery.matches ? "dark" : "light";
30 }
31 return settings.theme;
32 };
33
34 const apply = () => {
35 const resolved = resolve();
36 setResolvedTheme(resolved);
37 // Dark is the default; add `.light` class for light theme
38 document.documentElement.classList.toggle("light", resolved === "light");
39 };
40
41 apply();
42 mediaQuery.addEventListener("change", apply);
43 return () => mediaQuery.removeEventListener("change", apply);
44 }, [settings.theme]);
45
46 const setTheme = (theme: Theme) => {
47 updateSettings({ theme });
48 };
49
50 return (
51 <ThemeContext.Provider value={{ theme: settings.theme, setTheme, resolvedTheme }}>
52 {children}
53 </ThemeContext.Provider>
54 );
55}
56
57export const useTheme = () => useContext(ThemeContext);

Callers

nothing calls this directly

Calls 1

applyFunction · 0.70

Tested by

no test coverage detected