{"version":3,"file":"index.cjs","sources":["../../react-theme-common/dist/index.mjs","../src/context.ts","../src/use-amp.ts","../src/multi-theme-provider.tsx","../src/theme-provider.tsx","../src/use-theme.ts"],"sourcesContent":["import{useLayoutEffect as t,useEffect as e}from\"react\";const r=t=>{if(3!==(t=t.replace(/^#/,\"\")).length&&4!==t.length||(t=t.split(\"\").map(t=>t+t).join(\"\")),6!==t.length&&8!==t.length||!/^[0-9A-Fa-f]{6,8}$/.test(t))return{r:0,g:0,b:0,a:0};const e=parseInt(t,16),r=8===t.length;return{r:e>>(r?24:16)&255,g:e>>(r?16:8)&255,b:e>>(r?8:0)&255,a:r?(255&e)/255:1}},o=t=>t.trim().replace(/\\s/gm,\"-\"),n=t=>{const e=[],r=[];for(const{name:o,theme:{colors:n}}of t){const s=JSON.stringify(Object.keys(n).sort());if(!0===(0===r.length?r.push(s):r[0]!==s))throw new Error(\"Invalid theme config: Themes have different color keys;\");if(e.includes(o))throw new Error(`Theme name ${o} is duplicated`);e.push(o);for(const r in n){const o=n[r]?.length;for(const n of e){const e=t.find(({name:t})=>t===n)?.theme?.colors[r]?.length;if(e!==o)throw new Error(`Invalid theme config: Themes have different lengths of color ${r};`)}}}},s=\"preferred-color-scheme\",a=t=>{localStorage.setItem(s,t)},i=()=>localStorage.getItem(s),c=(t=\"light\")=>{try{if(!window)return t;const e=i();return e||(window.matchMedia?window.matchMedia(\"(prefers-color-scheme: dark)\").matches?(a(\"dark\"),\"dark\"):(a(\"light\"),\"light\"):(a(t),t))}catch{return t}},f=/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/,h=(t,e)=>{if(!t)return\"\";const{colors:n,typography:s,spacing:a}=t,i=(t=>{let e=\"\";if(!t)return e;const o={white:\"#fff\",black:\"#000\",...t};for(const t in o){const n=o[t];if(n){if(\"string\"==typeof n){if(f.test(n)){const{r:o,g:s,b:a,a:i}=r(n);e+=`--color-${t}-base:${o},${s},${a};`,e+=`--color-${t}:rgba(var(--color-${t}-base),${i});`;continue}e+=`--color-${t}:${n};`;continue}for(let o=0;o<(n?.length??0);o++)if(n[o]){if(f.test(n[o])){const{r:s,g:a,b:i,a:c}=r(n[o]);e+=`--color-${t}-${100*(o+1)}-base:${s},${a},${i};`,e+=`--color-${t}-${100*(o+1)}:rgba(var(--color-${t}-${100*(o+1)}-base),${c});`;continue}e+=`--color-${t}-${100*(o+1)}:${n[o]};`}}}return e})(n),c=e?`body.kami-ui-${o(e)}`:\":root\",{vars:h,outsideVars:l}=((t,e)=>{let r=\"\",o=\"\";if(!t)return{vars:r,outsideVars:o};if(t?.borderRadius){const n=[\"2xs\",\"1xs\",\"s\",\"m\",\"l\",\"1xl\",\"2xl\"],s=t.borderRadius,a=t=>{switch(t){case 3:return 2;case 5:return 1;default:return 0}},i=s.length;switch(typeof s[0]){case\"string\":for(let t=0;t<i;t++)try{r+=`--br-${n[t+a(i)]}:${s[t]};`}catch{}break;case\"object\":try{for(const{breakpoint:t,size:i}of s){r+=\"@media \";const s=[];t?.min&&s.push(`(min-width:${t.min})`),t?.max&&s.push(`(max-width:${t.max})`),t?.orientation&&s.push(`(orientation:${t.orientation})`),o+=s.join(\" and \"),o+=`{ ${e} {`;try{for(let t=0;t<i.length;t++)o+=`--br-${n[t+a(i.length)]}:${i[t]};`}catch{}o+=\"}}\"}}catch{}}}const n=[\"0px\",\"2px\",\"4px\",\"8px\",\"12px\",\"16px\",\"20px\",\"24px\",\"28px\",\"32px\",\"36px\",\"40px\",\"44px\",\"48px\",\"52px\",\"64px\",\"72px\",\"80px\",\"88px\",\"96px\"],{space:s=n}=t;switch(typeof s[0]){case\"string\":try{for(let t=0;t<s.length;t++)r+=`--space-${t}:${s[t]};`}catch{}break;case\"object\":try{for(const{breakpoint:t,size:r}of s){o+=\"@media \",t?.min&&(o+=`and (min-width:${t.min}) `),t?.max&&(o+=`and (max-width:${t.max}) `),t?.orientation&&(o+=`and (orientation:${t.orientation}) `),o+=`{ ${e} {`;try{for(let t=0;t<r.length;t++)o+=`--space-${t}:${r[t]};`}catch{}o+=\"}}\"}}catch{}}return{vars:r,outsideVars:o}})(a,c),{vars:$,outsideVars:p}=((t,e)=>{let r=\"\",o=\"\";if(!t)return{vars:r,outsideVars:o};const{fontSizes:n,fontFamilies:s}=t;if(s)for(const t in s)r+=`--font-${t}:${s[t]};`;const a=n?.length;if(!a&&\"object\"==typeof n)return{vars:r,outsideVars:o};const i=[\"4xs\",\"3xs\",\"2xs\",\"1xs\",\"s\",\"m\",\"l\",\"1xl\",\"2xl\",\"3xl\",\"4xl\"],c=t=>{switch(t){case 7:return 2;case 9:return 1;default:return 0}};switch(typeof n[0]){case\"string\":try{for(let t=0;t<a;t++)r+=`--fs-${i[t+c(a)]}:${n[t]};`}catch{}break;case\"object\":try{for(const{breakpoint:t,size:r}of n){o+=\"@media \";const n=[];t?.min&&n.push(`(min-width:${t.min})`),t?.max&&n.push(`(max-width:${t.max})`),t?.orientation&&n.push(`(orientation:${t.orientation})`),o+=n.join(\" and \"),o+=`{ ${e} {`;try{for(let t=0;t<r.length;t++)o+=`--fs-${i[t+c(r.length)]}:${r[t]};`}catch{}o+=\"}}\"}}catch{}}return{vars:r,outsideVars:o}})(s,c);return`${c} { ${i}${$}${h} } ${p} ${l}`},l=\"undefined\"!=typeof window?t:e;export{c as detectColorScheme,i as getSavedThemeScheme,r as hexToRgb,a as saveColorScheme,o as stringTrimmer,h as themeBuilder,n as themeValidator,l as useIsomorphicLayoutEffect};\n//# sourceMappingURL=index.mjs.map\n","import type { MultiThemeProviderProps } from \"@kami-ui/types\";\nimport { createContext } from \"react\";\n\nexport const ThemeContext = createContext<{\n  themes: MultiThemeProviderProps[\"themes\"];\n  disableConsole: boolean;\n}>({\n  themes: [],\n  disableConsole: false,\n});\n","import { useEffect, useState } from \"react\";\n\nconst useAmp = () => {\n  const [isAmp, setIsAmp] = useState(() => {\n    // SSR Detection - try to detect from various global contexts\n    if (typeof window === \"undefined\") {\n      try {\n        // Method 1: Check Next.js context (if available)\n        if (\n          typeof (globalThis as any) !== \"undefined\" &&\n          (globalThis as any)?.__NEXT_DATA__\n        ) {\n          const nextData = (globalThis as any)?.__NEXT_DATA__;\n          if (!!nextData?.query && !!nextData?.query?.amp) {\n            return true;\n          }\n        }\n\n        // Method 2: Check common server request objects\n        let requestUrl = \"\";\n\n        // Express.js style\n        if (!!(globalThis as any)?.req && !!(globalThis as any)?.req?.url) {\n          requestUrl = (globalThis as any)?.req?.url;\n        }\n        // Other frameworks might store request differently\n        else if (\n          !!(globalThis as any)?.request &&\n          !!(globalThis as any)?.request.url\n        ) {\n          requestUrl = (globalThis as any)?.request?.url;\n        }\n        // Remix style\n        else if (\n          !!(globalThis as any)?.__remix_request &&\n          (globalThis as any)?.__remix_request?.url\n        ) {\n          requestUrl = (globalThis as any)?.__remix_request?.url;\n        }\n        // Vite SSR\n        else if (\n          !!(globalThis as any)?.__vite_ssr_request &&\n          !!(globalThis as any)?.__vite_ssr_request?.url\n        ) {\n          requestUrl = (globalThis as any)?.__vite_ssr_request?.url;\n        }\n\n        if (requestUrl) {\n          const url = new URL(requestUrl, \"http://localhost\");\n          const hasAmpParam = url.searchParams.get(\"amp\") === \"1\";\n          const hasAmpPath =\n            url.pathname.includes(\"/amp/\") || url.pathname.endsWith(\"/amp\");\n          return hasAmpParam || hasAmpPath;\n        }\n\n        // Method 3: Check environment variables or process context\n        if (typeof process !== \"undefined\" && process.env) {\n          // Some frameworks set AMP mode in env\n          if (\n            process.env.AMP_MODE === \"true\" ||\n            process.env.NEXT_AMP === \"true\"\n          ) {\n            return true;\n          }\n        }\n\n        return false;\n      } catch {\n        // Fail silently on SSR\n        return false;\n      }\n    }\n\n    return false;\n  });\n\n  useEffect(() => {\n    // Client-side detection (runs after hydration)\n    const checkAmpStatus = () => {\n      // Method 1: Check URL parameter (?amp=1 or /amp/)\n      const url = new URL(window.location.href);\n      const hasAmpParam = url.searchParams.get(\"amp\") === \"1\";\n      const hasAmpPath =\n        url.pathname.includes(\"/amp/\") || url.pathname.endsWith(\"/amp\");\n\n      // Method 2: Check for AMP runtime\n      const hasAmpRuntime = typeof (window as any)?.AMP !== \"undefined\";\n\n      // Method 3: Check for AMP-specific elements\n      const hasAmpBoilerplate =\n        document.querySelector(\"style[amp-boilerplate]\") !== null;\n      const hasAmpCustom = document.querySelector(\"style[amp-custom]\") !== null;\n\n      // Method 4: Check document type/attributes\n      const hasAmpAttribute =\n        document.documentElement.hasAttribute(\"amp\") ||\n        document.documentElement.hasAttribute(\"⚡\");\n\n      // Method 5: Check meta tags\n      const hasAmpMeta = document.querySelector('meta[name=\"amp\"]') !== null;\n\n      return (\n        hasAmpParam ||\n        hasAmpPath ||\n        hasAmpRuntime ||\n        hasAmpBoilerplate ||\n        hasAmpCustom ||\n        hasAmpAttribute ||\n        hasAmpMeta\n      );\n    };\n\n    // Update state with client-side detection\n    setIsAmp(checkAmpStatus());\n\n    // Listen for URL changes (for SPAs)\n    const handleLocationChange = () => {\n      setIsAmp(checkAmpStatus());\n    };\n\n    // Listen for popstate events (back/forward navigation)\n    window.addEventListener(\"popstate\", handleLocationChange);\n\n    return () => {\n      window.removeEventListener(\"popstate\", handleLocationChange);\n    };\n  }, []);\n\n  return isAmp;\n};\nexport default useAmp;\n","import {\n  detectColorScheme,\n  stringTrimmer,\n  themeBuilder,\n  themeValidator,\n  useIsomorphicLayoutEffect,\n} from \"@kami-ui/react-theme-common\";\nimport type { MultiThemeProviderProps } from \"@kami-ui/types\";\nimport Head from \"next/head\";\nimport { ThemeContext } from \"./context\";\nimport useAmp from \"./use-amp\";\n\nconst PreChildren = ({\n  themes,\n  defaultThemeName,\n}: Pick<MultiThemeProviderProps, \"themes\" | \"defaultThemeName\">) => {\n  useIsomorphicLayoutEffect(() => {\n    if (!document?.body) return;\n    const savedScheme = detectColorScheme();\n    let notHasBodyClass = true;\n    for (const bodyClass of Array.from(document.body.classList)) {\n      if (bodyClass.startsWith(\"kami-ui-\")) {\n        notHasBodyClass = false;\n        break;\n      }\n    }\n    let themeIndexRaw = -1;\n    if (defaultThemeName) {\n      themeIndexRaw = themes.findIndex(({ name }) => {\n        return name === defaultThemeName;\n      });\n    }\n    if (themeIndexRaw === -1) {\n      themeIndexRaw = themes.findIndex(({ name }) => {\n        return name.includes(savedScheme);\n      });\n    }\n    const themeIndex = themeIndexRaw === -1 ? 0 : themeIndexRaw;\n    if (notHasBodyClass && themes[themeIndex]?.name) {\n      document.body.classList.add(\n        `kami-ui-${stringTrimmer(themes[themeIndex].name)}`,\n      );\n    }\n  }, []);\n\n  return <></>;\n};\n\nconst MultiThemeProvider = ({\n  themes = [],\n  injectInBody = false,\n  disableConsole = false,\n  disableOnAmp = true,\n  autoMaintainTheme = true,\n  children,\n  defaultThemeName,\n}: MultiThemeProviderProps) => {\n  const isAmp = useAmp();\n  themeValidator(themes);\n  const styles = themes\n    .map(({ name, theme }) => {\n      return themeBuilder(theme, name);\n    })\n    .join(\"\");\n  const styleElem = (\n    <style id=\"kami-ui-styles\" dangerouslySetInnerHTML={{ __html: styles }} />\n  );\n  const elem = injectInBody ? styleElem : <Head>{styleElem}</Head>;\n  const value = { themes, disableConsole };\n\n  return (\n    <ThemeContext.Provider value={value}>\n      {autoMaintainTheme && (\n        <PreChildren\n          themes={themes}\n          defaultThemeName={defaultThemeName ?? \"\"}\n        />\n      )}\n      {!(disableOnAmp && isAmp) && elem}\n      {children}\n    </ThemeContext.Provider>\n  );\n};\n\nexport { MultiThemeProvider };\n","import { themeBuilder } from \"@kami-ui/react-theme-common\";\nimport type { ThemeProviderProps } from \"@kami-ui/types\";\nimport Head from \"next/head\";\nimport useAmp from \"./use-amp\";\n\nexport const ThemeProvider = ({\n  injectInBody = false,\n  disableOnAmp = true,\n  theme,\n  mode,\n  children,\n}: ThemeProviderProps) => {\n  const isAmp = useAmp();\n  const styles = themeBuilder(theme, mode);\n  const styleElem = (\n    <style id=\"kami-ui-styles\" dangerouslySetInnerHTML={{ __html: styles }} />\n  );\n  const elem = injectInBody ? styleElem : <Head>{styleElem}</Head>;\n  return (\n    <>\n      {!(disableOnAmp && isAmp) && elem}\n      {children}\n    </>\n  );\n};\n","import { saveColorScheme, stringTrimmer } from \"@kami-ui/react-theme-common\";\nimport { ColorsObject } from \"@kami-ui/types\";\nimport { useContext } from \"react\";\nimport { ThemeContext } from \"./context\";\n\nexport const useTheme = () => {\n  const { themes, disableConsole } = useContext(ThemeContext);\n  const warn = (message: string) => {\n    // eslint-disable-next-line no-console -- controlled by disableConsole\n    if (!disableConsole) console.warn(message);\n  };\n  const updateTheme = (themeName: string) => {\n    if (!(document && themeName)) return;\n    const theme = themes.find(({ name }) => {\n      return name === themeName;\n    });\n    if (!theme) {\n      if (!disableConsole) warn(`Theme ${themeName} not found`);\n      return;\n    }\n    for (const bodyClass of Array.from(document.body.classList)) {\n      if (bodyClass.startsWith(\"kami-ui-\")) {\n        document.body.classList.remove(bodyClass);\n        break;\n      }\n    }\n    document.body.classList.add(`kami-ui-${stringTrimmer(themeName)}`);\n    try {\n      if (themeName.includes(\"dark\")) {\n        saveColorScheme(\"dark\");\n      } else if (themeName.includes(\"light\")) {\n        saveColorScheme(\"light\");\n      } else {\n        // do nothing\n      }\n    } catch {\n      if (!disableConsole)\n        warn(`Failed to update theme ${themeName} in local storage`);\n    }\n  };\n  const getTheme = (themeName: string | undefined) => {\n    return themes.find(({ name }) => {\n      return name === themeName;\n    });\n  };\n  const getColor = (color: keyof ColorsObject, index: number) => {\n    try {\n      const currentBodyClass = Array.from(document.body.classList).find(\n        (bodyClass) => {\n          return bodyClass.startsWith(\"kami-ui-\");\n        },\n      );\n      const currentTheme = getTheme(\n        currentBodyClass?.replace(\"kami-ui-\", \"\") ?? themes?.[0]?.name,\n      );\n      if (!currentTheme) {\n        if (!disableConsole) warn(`Current theme not found`);\n        return null;\n      }\n      const fetchedColor = currentTheme?.theme?.colors?.[color]?.[index];\n      if (!color) {\n        if (!disableConsole)\n          warn(\n            `--color-${fetchedColor}-${index + 1}00 in theme ${currentTheme?.name} not found`,\n          );\n        return null;\n      }\n      return fetchedColor ?? null;\n    } catch {\n      return null;\n    }\n  };\n  const getCurrentTheme = (): string | null => {\n    const currentBodyClass =\n      Array.from(document.body.classList).find((bodyClass) => {\n        return bodyClass.startsWith(\"kami-ui-\");\n      }) ?? \"\";\n    return currentBodyClass.replace(\"kami-ui-\", \"\") || null;\n  };\n  return { updateTheme, getColor, getTheme, getCurrentTheme };\n};\n"],"names":["r","t","replace","length","split","map","join","test","g","b","a","e","parseInt","o","trim","s","localStorage","setItem","c","window","getItem","matchMedia","matches","f","h","colors","n","typography","spacing","i","white","black","vars","outsideVars","l","borderRadius","breakpoint","size","min","push","max","orientation","space","$","p","fontSizes","fontFamilies","ThemeContext","createContext","themes","disableConsole","useAmp","isAmp","setIsAmp","useState","globalThis","__NEXT_DATA__","nextData","query","amp","requestUrl","req","url","request","__remix_request","__vite_ssr_request","URL","hasAmpParam","searchParams","get","hasAmpPath","pathname","includes","endsWith","process","env","AMP_MODE","NEXT_AMP","useEffect","checkAmpStatus","location","href","hasAmpRuntime","AMP","hasAmpBoilerplate","document","querySelector","hasAmpCustom","hasAmpAttribute","documentElement","hasAttribute","hasAmpMeta","handleLocationChange","addEventListener","removeEventListener","PreChildren","defaultThemeName","useIsomorphicLayoutEffect","body","savedScheme","detectColorScheme","notHasBodyClass","bodyClass","Array","from","classList","startsWith","themeIndexRaw","findIndex","name","themeIndex","add","stringTrimmer","_jsx","injectInBody","disableOnAmp","autoMaintainTheme","children","theme","JSON","stringify","Object","keys","sort","Error","find","themeValidator","styles","themeBuilder","styleElem","id","dangerouslySetInnerHTML","__html","elem","Head","value","_jsxs","Provider","mode","_Fragment","useContext","warn","message","console","getTheme","themeName","updateTheme","remove","saveColorScheme","getColor","color","index","currentBodyClass","currentTheme","fetchedColor","getCurrentTheme"],"mappings":"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"}