{"version":3,"file":"useThemeState.hook.cjs","sources":["../../../../../../../src/components/theme-provider/hooks/use-theme-provider/helpers/use-theme-state/useThemeState.hook.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\r\n\r\nimport type { ThemeValue } from '@components/theme-provider/types/ThemeProvider.props.ts'\r\nimport { getSystemTheme } from '@components/theme-provider/utils/getSystemTheme.utils.ts'\r\nimport { resolveTheme } from '@components/theme-provider/utils/resolveTheme.utils.ts'\r\nimport type {\r\n    UseThemeStateOptions\r\n} from '@components/theme-provider/hooks/use-theme-provider/helpers/use-theme-state/types'\r\n\r\n/**\r\n * Resolves the controlled or uncontrolled mode and tracks the system preference.\r\n */\r\nexport const useThemeState = ({\r\n    controlledTheme,\r\n    defaultTheme,\r\n    onThemeChange,\r\n}: UseThemeStateOptions) => {\r\n    const [internalTheme, setInternalTheme] = useState<ThemeValue>(defaultTheme)\r\n    const activeTheme = controlledTheme ?? internalTheme\r\n    const [systemTheme, setSystemTheme] = useState<'light' | 'dark'>(getSystemTheme)\r\n\r\n    useEffect(() => {\r\n        if (activeTheme !== 'system') {\r\n            return\r\n        }\r\n\r\n        const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')\r\n        const handleChange = (event: MediaQueryListEvent) => {\r\n            setSystemTheme(event.matches ? 'dark' : 'light')\r\n        }\r\n\r\n        mediaQuery.addEventListener('change', handleChange)\r\n        return () => mediaQuery.removeEventListener('change', handleChange)\r\n    }, [activeTheme])\r\n\r\n    const setTheme = useCallback((nextTheme: ThemeValue) => {\r\n        if (controlledTheme === undefined) {\r\n            setInternalTheme(nextTheme)\r\n        }\r\n        onThemeChange?.(nextTheme)\r\n    }, [controlledTheme, onThemeChange])\r\n\r\n    return {\r\n        activeTheme,\r\n        resolvedTheme: resolveTheme(activeTheme, systemTheme),\r\n        setTheme,\r\n    }\r\n}\r\n"],"names":["useThemeState","controlledTheme","defaultTheme","onThemeChange","internalTheme","setInternalTheme","useState","activeTheme","systemTheme","setSystemTheme","getSystemTheme","useEffect","mediaQuery","handleChange","event","setTheme","useCallback","nextTheme","resolveTheme"],"mappings":"uNAYaA,EAAgB,CAAC,CAC1B,gBAAAC,EACA,aAAAC,EACA,cAAAC,CACJ,IAA4B,CACxB,KAAM,CAACC,EAAeC,CAAgB,EAAIC,EAAAA,SAAqBJ,CAAY,EACrEK,EAAcN,GAAmBG,EACjC,CAACI,EAAaC,CAAc,EAAIH,EAAAA,SAA2BI,EAAAA,cAAc,EAE/EC,EAAAA,UAAU,IAAM,CACZ,GAAIJ,IAAgB,SAChB,OAGJ,MAAMK,EAAa,OAAO,WAAW,8BAA8B,EAC7DC,EAAgBC,GAA+B,CACjDL,EAAeK,EAAM,QAAU,OAAS,OAAO,CACnD,EAEA,OAAAF,EAAW,iBAAiB,SAAUC,CAAY,EAC3C,IAAMD,EAAW,oBAAoB,SAAUC,CAAY,CACtE,EAAG,CAACN,CAAW,CAAC,EAEhB,MAAMQ,EAAWC,cAAaC,GAA0B,CAChDhB,IAAoB,QACpBI,EAAiBY,CAAS,EAE9Bd,IAAgBc,CAAS,CAC7B,EAAG,CAAChB,EAAiBE,CAAa,CAAC,EAEnC,MAAO,CACH,YAAAI,EACA,cAAeW,EAAAA,aAAaX,EAAaC,CAAW,EACpD,SAAAO,CAAA,CAER"}