import React from 'react'; import { ReactNode, createContext, useMemo, useState } from 'react'; import { ThemeProvider, createTheme } from '@mui/material/styles'; import useMediaQuery from '@mui/material/useMediaQuery'; import type { PaletteMode } from '@mui/material'; type ThemeContextType = { toggleColorMode: () => void; }; type ThemeProviderProps = { children: ReactNode; }; export const ThemeContext = createContext({ toggleColorMode: () => {}, }); function ThemeContextProvider({ children }: ThemeProviderProps) { const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)'); const [mode, setMode] = useState<'light' | 'dark'>( prefersDarkMode ? 'dark' : 'light' ); const toggleColorMode = () => { setMode((prevMode: PaletteMode) => prevMode === 'light' ? 'dark' : 'light' ); }; const getDesignTokens = (mode: PaletteMode) => ({ palette: { mode, ...(mode === 'light' ? { primary: { main: '#007bff', }, } : { primary: { main: '#78bef8', }, }), }, }); const theme = useMemo(() => createTheme(getDesignTokens(mode)), [mode]); return ( {children} ); } export default ThemeContextProvider;