{"version":3,"sources":["../../src/utils/ThemeProvider.tsx"],"names":["DEFAULT_STORAGE_KEY","useState","getSystemDark","useEffect","readStoredTheme","SYSTEM_QUERY","applyMode","useMemo","isTheme","jsx","ThemeContext"],"mappings":";;;;;;;AAYO,SAAS,aAAA,CAAc;AAAA,EAC5B,QAAA;AAAA,EACA,YAAA,GAAe,QAAA;AAAA,EACf,UAAA,GAAaA;AACf,CAAA,EAIG;AACD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,eAAgB,YAAY,CAAA;AACtD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,IAAIA,cAAA,CAAS,MAAMC,4BAAe,CAAA;AAElE,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,MAAA,GAASC,6BAAgB,UAAU,CAAA;AACzC,IAAA,IAAI,MAAA,IAAU,MAAA,KAAW,KAAA,EAAO,QAAA,CAAS,MAAM,CAAA;AAAA,EAEjD,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAAD,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,UAAA,GAAaE,yBAAY,CAAA;AAC3C,IAAA,IAAI,CAAC,EAAA,EAAI;AACT,IAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAChB,aAAA,CAAc,aAAa,CAAA,GAAI,CAAA,CAAE,OAAA,GAAW,CAAA,CAAqB,OAAO,CAAA;AAC1E,IAAA,EAAA,CAAG,gBAAA,GAAmB,UAAU,QAAQ,CAAA;AACxC,IAAA,OAAO,MAAM;AACX,MAAA,EAAA,CAAG,mBAAA,GAAsB,UAAU,QAAQ,CAAA;AAAA,IAC7C,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAF,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,IAAA,GAAO,KAAA,KAAU,QAAA,GAAY,UAAA,GAAa,SAAS,OAAA,GAAW,KAAA;AACpE,IAAAG,sBAAA,CAAU,IAAI,CAAA;AACd,IAAA,IAAI;AACF,MAAA,IAAI,KAAA,KAAU,QAAA,EAAU,YAAA,CAAa,UAAA,CAAW,UAAU,CAAA;AAAA,WACrD,YAAA,CAAa,OAAA,CAAQ,UAAA,EAAY,KAAK,CAAA;AAAA,IAC7C,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,CAAQ,MAAM,yCAAyC,CAAA;AAAA,IACzD;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,UAAA,EAAY,UAAU,CAAC,CAAA;AAElC,EAAA,MAAM,KAAA,GAAQC,cAA2B,MAAM;AAC7C,IAAA,MAAM,QAAA,GACJ,KAAA,KAAU,QAAA,GAAY,UAAA,GAAa,SAAS,OAAA,GAAW,KAAA;AACzD,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,YAAA,EAAc,QAAA;AAAA,MACd,QAAA,EAAU,CAAC,IAAA,KAAS,QAAA,CAASC,qBAAQ,IAAI,CAAA,GAAI,OAAO,QAAQ,CAAA;AAAA,MAC5D,QAAQ,MACN,QAAA;AAAA,QAAS,CAAC,CAAA,KACR,CAAA,KAAM,UAAU,MAAA,GAAS,CAAA,KAAM,SAAS,QAAA,GAAW;AAAA;AACrD,KACJ;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,UAAU,CAAC,CAAA;AAEtB,EAAA,uBAAOC,cAAA,CAACC,yBAAA,EAAA,EAAa,KAAA,EAAe,QAAA,EAAS,CAAA;AAC/C","file":"ThemeProvider.cjs","sourcesContent":["import React, { useEffect, useMemo, useState } from \"react\";\nimport { ThemeContext, type ThemeContextValue } from \"./ThemeContext\";\nimport {\n  DEFAULT_STORAGE_KEY,\n  SYSTEM_QUERY,\n  readStoredTheme,\n  getSystemDark,\n  applyMode,\n  isTheme,\n  type Theme,\n} from \"./themeHelpers\";\n\nexport function ThemeProvider({\n  children,\n  defaultTheme = \"system\",\n  storageKey = DEFAULT_STORAGE_KEY,\n}: {\n  children: React.ReactNode;\n  defaultTheme?: Theme;\n  storageKey?: string;\n}) {\n  const [theme, setTheme] = useState<Theme>(defaultTheme);\n  const [systemDark, setSystemDark] = useState(() => getSystemDark());\n\n  useEffect(() => {\n    const stored = readStoredTheme(storageKey);\n    if (stored && stored !== theme) setTheme(stored);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [storageKey]);\n\n  useEffect(() => {\n    const mq = window.matchMedia?.(SYSTEM_QUERY);\n    if (!mq) return;\n    const onChange = (e: MediaQueryListEvent | MediaQueryList) =>\n      setSystemDark(\"matches\" in e ? e.matches : (e as MediaQueryList).matches);\n    mq.addEventListener?.(\"change\", onChange);\n    return () => {\n      mq.removeEventListener?.(\"change\", onChange);\n    };\n  }, []);\n\n  useEffect(() => {\n    const mode = theme === \"system\" ? (systemDark ? \"dark\" : \"light\") : theme;\n    applyMode(mode);\n    try {\n      if (theme === \"system\") localStorage.removeItem(storageKey);\n      else localStorage.setItem(storageKey, theme);\n    } catch {\n      console.error(\"Was NOT able to setup localStorage item\");\n    }\n  }, [theme, systemDark, storageKey]);\n\n  const value = useMemo<ThemeContextValue>(() => {\n    const resolved =\n      theme === \"system\" ? (systemDark ? \"dark\" : \"light\") : theme;\n    return {\n      theme,\n      resolvedMode: resolved,\n      setTheme: (next) => setTheme(isTheme(next) ? next : \"system\"),\n      toggle: () =>\n        setTheme((p) =>\n          p === \"light\" ? \"dark\" : p === \"dark\" ? \"system\" : \"light\"\n        ),\n    };\n  }, [theme, systemDark]);\n\n  return <ThemeContext value={value}>{children}</ThemeContext>;\n}\n"]}