1 line
6.4 KiB
JSON
1 line
6.4 KiB
JSON
{"ast":null,"code":"import React,{createContext,useContext,useState,useEffect}from'react';import{ThemeProvider as MuiThemeProvider,CssBaseline}from'@mui/material';import{lightTheme,darkTheme}from'./theme';import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";const ThemeContext=/*#__PURE__*/createContext(undefined);export const ThemeProvider=_ref=>{let{children}=_ref;const[mode,setModeState]=useState('light');// Load theme preference from localStorage or system preference\nuseEffect(()=>{const savedMode=localStorage.getItem('theme-mode');if(savedMode){setModeState(savedMode);}else{// Check system preference\nconst prefersDark=window.matchMedia('(prefers-color-scheme: dark)').matches;setModeState(prefersDark?'dark':'light');}},[]);// Listen for system theme changes\nuseEffect(()=>{const mediaQuery=window.matchMedia('(prefers-color-scheme: dark)');const handleChange=e=>{if(!localStorage.getItem('theme-mode')){setModeState(e.matches?'dark':'light');}};mediaQuery.addEventListener('change',handleChange);return()=>mediaQuery.removeEventListener('change',handleChange);},[]);const setMode=newMode=>{setModeState(newMode);localStorage.setItem('theme-mode',newMode);};const toggleMode=()=>{const newMode=mode==='light'?'dark':'light';setMode(newMode);};const theme=mode==='light'?lightTheme:darkTheme;return/*#__PURE__*/_jsx(ThemeContext.Provider,{value:{mode,toggleMode,setMode},children:/*#__PURE__*/_jsxs(MuiThemeProvider,{theme:theme,children:[/*#__PURE__*/_jsx(CssBaseline,{}),children]})});};export const useTheme=()=>{const context=useContext(ThemeContext);if(!context){throw new Error('useTheme must be used within a ThemeProvider');}return context;};","map":{"version":3,"names":["React","createContext","useContext","useState","useEffect","ThemeProvider","MuiThemeProvider","CssBaseline","lightTheme","darkTheme","jsx","_jsx","jsxs","_jsxs","ThemeContext","undefined","_ref","children","mode","setModeState","savedMode","localStorage","getItem","prefersDark","window","matchMedia","matches","mediaQuery","handleChange","e","addEventListener","removeEventListener","setMode","newMode","setItem","toggleMode","theme","Provider","value","useTheme","context","Error"],"sources":["/home/gnx/Desktop/ETB/ETB-FrontEnd/src/theme/ThemeProvider.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react';\nimport { ThemeProvider as MuiThemeProvider, CssBaseline } from '@mui/material';\nimport { lightTheme, darkTheme } from './theme';\n\ninterface ThemeContextType {\n mode: 'light' | 'dark';\n toggleMode: () => void;\n setMode: (mode: 'light' | 'dark') => void;\n}\n\nconst ThemeContext = createContext<ThemeContextType | undefined>(undefined);\n\ninterface ThemeProviderProps {\n children: ReactNode;\n}\n\nexport const ThemeProvider: React.FC<ThemeProviderProps> = ({ children }) => {\n const [mode, setModeState] = useState<'light' | 'dark'>('light');\n\n // Load theme preference from localStorage or system preference\n useEffect(() => {\n const savedMode = localStorage.getItem('theme-mode');\n if (savedMode) {\n setModeState(savedMode as 'light' | 'dark');\n } else {\n // Check system preference\n const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n setModeState(prefersDark ? 'dark' : 'light');\n }\n }, []);\n\n // Listen for system theme changes\n useEffect(() => {\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = (e: MediaQueryListEvent) => {\n if (!localStorage.getItem('theme-mode')) {\n setModeState(e.matches ? 'dark' : 'light');\n }\n };\n\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }, []);\n\n const setMode = (newMode: 'light' | 'dark') => {\n setModeState(newMode);\n localStorage.setItem('theme-mode', newMode);\n };\n\n const toggleMode = () => {\n const newMode = mode === 'light' ? 'dark' : 'light';\n setMode(newMode);\n };\n\n const theme = mode === 'light' ? lightTheme : darkTheme;\n\n return (\n <ThemeContext.Provider value={{ mode, toggleMode, setMode }}>\n <MuiThemeProvider theme={theme}>\n <CssBaseline />\n {children}\n </MuiThemeProvider>\n </ThemeContext.Provider>\n );\n};\n\nexport const useTheme = (): ThemeContextType => {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n};\n"],"mappings":"AAAA,MAAO,CAAAA,KAAK,EAAIC,aAAa,CAAEC,UAAU,CAAEC,QAAQ,CAAEC,SAAS,KAAmB,OAAO,CACxF,OAASC,aAAa,GAAI,CAAAC,gBAAgB,CAAEC,WAAW,KAAQ,eAAe,CAC9E,OAASC,UAAU,CAAEC,SAAS,KAAQ,SAAS,CAAC,OAAAC,GAAA,IAAAC,IAAA,CAAAC,IAAA,IAAAC,KAAA,yBAQhD,KAAM,CAAAC,YAAY,cAAGb,aAAa,CAA+Bc,SAAS,CAAC,CAM3E,MAAO,MAAM,CAAAV,aAA2C,CAAGW,IAAA,EAAkB,IAAjB,CAAEC,QAAS,CAAC,CAAAD,IAAA,CACtE,KAAM,CAACE,IAAI,CAAEC,YAAY,CAAC,CAAGhB,QAAQ,CAAmB,OAAO,CAAC,CAEhE;AACAC,SAAS,CAAC,IAAM,CACd,KAAM,CAAAgB,SAAS,CAAGC,YAAY,CAACC,OAAO,CAAC,YAAY,CAAC,CACpD,GAAIF,SAAS,CAAE,CACbD,YAAY,CAACC,SAA6B,CAAC,CAC7C,CAAC,IAAM,CACL;AACA,KAAM,CAAAG,WAAW,CAAGC,MAAM,CAACC,UAAU,CAAC,8BAA8B,CAAC,CAACC,OAAO,CAC7EP,YAAY,CAACI,WAAW,CAAG,MAAM,CAAG,OAAO,CAAC,CAC9C,CACF,CAAC,CAAE,EAAE,CAAC,CAEN;AACAnB,SAAS,CAAC,IAAM,CACd,KAAM,CAAAuB,UAAU,CAAGH,MAAM,CAACC,UAAU,CAAC,8BAA8B,CAAC,CACpE,KAAM,CAAAG,YAAY,CAAIC,CAAsB,EAAK,CAC/C,GAAI,CAACR,YAAY,CAACC,OAAO,CAAC,YAAY,CAAC,CAAE,CACvCH,YAAY,CAACU,CAAC,CAACH,OAAO,CAAG,MAAM,CAAG,OAAO,CAAC,CAC5C,CACF,CAAC,CAEDC,UAAU,CAACG,gBAAgB,CAAC,QAAQ,CAAEF,YAAY,CAAC,CACnD,MAAO,IAAMD,UAAU,CAACI,mBAAmB,CAAC,QAAQ,CAAEH,YAAY,CAAC,CACrE,CAAC,CAAE,EAAE,CAAC,CAEN,KAAM,CAAAI,OAAO,CAAIC,OAAyB,EAAK,CAC7Cd,YAAY,CAACc,OAAO,CAAC,CACrBZ,YAAY,CAACa,OAAO,CAAC,YAAY,CAAED,OAAO,CAAC,CAC7C,CAAC,CAED,KAAM,CAAAE,UAAU,CAAGA,CAAA,GAAM,CACvB,KAAM,CAAAF,OAAO,CAAGf,IAAI,GAAK,OAAO,CAAG,MAAM,CAAG,OAAO,CACnDc,OAAO,CAACC,OAAO,CAAC,CAClB,CAAC,CAED,KAAM,CAAAG,KAAK,CAAGlB,IAAI,GAAK,OAAO,CAAGV,UAAU,CAAGC,SAAS,CAEvD,mBACEE,IAAA,CAACG,YAAY,CAACuB,QAAQ,EAACC,KAAK,CAAE,CAAEpB,IAAI,CAAEiB,UAAU,CAAEH,OAAQ,CAAE,CAAAf,QAAA,cAC1DJ,KAAA,CAACP,gBAAgB,EAAC8B,KAAK,CAAEA,KAAM,CAAAnB,QAAA,eAC7BN,IAAA,CAACJ,WAAW,GAAE,CAAC,CACdU,QAAQ,EACO,CAAC,CACE,CAAC,CAE5B,CAAC,CAED,MAAO,MAAM,CAAAsB,QAAQ,CAAGA,CAAA,GAAwB,CAC9C,KAAM,CAAAC,OAAO,CAAGtC,UAAU,CAACY,YAAY,CAAC,CACxC,GAAI,CAAC0B,OAAO,CAAE,CACZ,KAAM,IAAI,CAAAC,KAAK,CAAC,8CAA8C,CAAC,CACjE,CACA,MAAO,CAAAD,OAAO,CAChB,CAAC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} |