1
0
mirror of https://github.com/XFox111/TabsAsideExtension.git synced 2026-04-23 08:18:41 +03:00
Files
TabsAsideExtension/contexts/ThemeProvider.tsx
xfox111 2bd9337e63 Major 3.0 (#118)
Co-authored-by: Maison da Silva <maisonmdsgreen@hotmail.com>
2025-07-30 15:02:26 +03:00

36 lines
1.1 KiB
TypeScript

import { FluentProvider, Theme, webDarkTheme, webLightTheme } from "@fluentui/react-components";
import { createContext } from "react";
const ThemeContext = createContext<ThemeContextType>({ theme: webLightTheme, isDark: false });
const media: MediaQueryList = window.matchMedia("(prefers-color-scheme: dark)");
export default function ThemeProvider(props: React.PropsWithChildren): React.ReactElement
{
const [isDark, setIsDark] = useState<boolean>(media.matches);
const theme = useMemo(() => isDark ? webDarkTheme : webLightTheme, [isDark]);
useEffect(() =>
{
const updateTheme = (args: MediaQueryListEvent) => setIsDark(args.matches);
media.addEventListener("change", updateTheme);
return () => media.removeEventListener("change", updateTheme);
}, []);
return (
<ThemeContext.Provider value={ { theme, isDark } }>
<FluentProvider theme={ theme }>
{ props.children }
</FluentProvider>
</ThemeContext.Provider>
);
}
export const useTheme = (): ThemeContextType => useContext(ThemeContext);
export type ThemeContextType =
{
theme: Theme;
isDark: boolean;
};