diff --git a/app/theme-registy.js b/app/theme-registy.js index c8dee96..f1af43a 100644 --- a/app/theme-registy.js +++ b/app/theme-registy.js @@ -1,8 +1,7 @@ 'use client' import PropTypes from 'prop-types' -import {useState, useMemo, useEffect, createContext} from 'react' -import {createTheme, ThemeProvider} from '@mui/material/styles' +import {experimental_extendTheme as extendTheme, Experimental_CssVarsProvider as CssVarsProvider, getInitColorSchemeScript} from '@mui/material/styles' import CssBaseline from '@mui/material/CssBaseline' import {grey, green, red, yellow} from '@mui/material/colors' @@ -17,13 +16,10 @@ import PlausibleProvider from 'next-plausible' import ChanjeTem from '../components/chanje-tem' import NextAppDirEmotionCacheProvider from './emotion-cache-provider' -export const ColorModeContext = createContext({toggleColorMode: () => {}}) - -const getDesignTokens = mode => ({ - palette: { - mode, - ...(mode === 'light' - ? { +const theme = extendTheme({ + colorSchemes: { + light: { + palette: { primary: green, secondary: red, divider: green[200], @@ -35,7 +31,9 @@ const getDesignTokens = mode => ({ secondary: grey[800], }, } - : { + }, + dark: { + palette: { primary: { main: yellow[500], contrastText: '#000' @@ -47,58 +45,33 @@ const getDesignTokens = mode => ({ divider: green[700], background: { default: '#082211', - paper: '#082211', + paper: '#082211' }, text: { primary: '#fff', - secondary: grey[100], - }, - }), - }, + secondary: grey[100] + } + } + } + } }) export default function ThemeRegistry(props) { - const [mode, setMode] = useState('light') - const colorMode = useMemo( - () => ({ - toggleColorMode: () => { - setMode(prevMode => - prevMode === 'light' ? 'dark' : 'light', - ) - }, - }), - [], - ) - const theme = useMemo(() => createTheme(getDesignTokens(mode)), [mode]) - const {children} = props - useEffect(() => { - const vyeLokalMod = localStorage.getItem('oki-dark') - const lokalMod = localStorage.getItem('oki-tem') - if (lokalMod === 'dark' || (vyeLokalMod && vyeLokalMod === 'true')) { - setMode('dark') - } else { - setMode('light') - } - - if (lokalMod && vyeLokalMod) { - localStorage.removeItem('oki-dark') - } - }, []) - return ( - - - - + <> + {getInitColorSchemeScript()} + + + {children} - - - - + + + + ) } diff --git a/components/chanje-tem.js b/components/chanje-tem.js index e8e40b0..7f9abbb 100644 --- a/components/chanje-tem.js +++ b/components/chanje-tem.js @@ -1,12 +1,10 @@ 'use client' -import {useContext} from 'react' -import {styled, useTheme} from '@mui/material/styles' +import {styled, useColorScheme} from '@mui/material/styles' import LightModeIcon from '@mui/icons-material/LightMode' import DarkModeIcon from '@mui/icons-material/DarkMode' import {Box} from '@mui/material' import {usePathname} from 'next/navigation' -import {ColorModeContext} from '../app/theme-registy' const PREFIX = 'chanje-tem' @@ -33,23 +31,17 @@ const StyledBox = styled(Box)({ }) export default function ChanjeTem() { - const colorMode = useContext(ColorModeContext) - const theme = useTheme() + const {mode, setMode} = useColorScheme() const pathname = usePathname() const selectedPath = pathname === '/' ? 'akey' : pathname.split('/')[1] - const jereClik = seletedMode => { - colorMode.toggleColorMode() - localStorage.setItem('oki-tem', seletedMode) - } - return (
- {theme.palette.mode === 'dark' ? ( - jereClik('light')} /> + {mode === 'dark' ? ( + setMode(mode === 'light' ? 'dark' : 'light')} /> ) : ( - jereClik('dark')} /> + setMode(mode === 'light' ? 'dark' : 'light')} /> )}
diff --git a/components/footer.js b/components/footer.js index 9f63c77..b26d02c 100644 --- a/components/footer.js +++ b/components/footer.js @@ -29,8 +29,10 @@ const Root = styled('div')(( [`& .${classes.footer}`]: { padding: theme.spacing(1, 2), marginTop: 'auto', - backgroundColor: - theme.palette.mode === 'light' ? theme.palette.grey[100] : '#1E3526' + backgroundColor: theme.palette.grey[100], + [theme.getColorSchemeSelector('dark')]: { + backgroundColor: '#1E3526' + } }, [`& .${classes.text}`]: {