{"version":3,"file":"ThemeProvider.mjs","names":["React","useForkRef","useEnhancedEffect","useContextTokens","useContext","themeContext","useContextTheme","ref","available","tokens","tokensKey","useMemo","Object","entries","map","key","value","join","undefined","current","style","setProperty","token","contextThemeEnhance","getAvailable","props","existingRef","values","enhanceRef","useRef","refArr","createContext","ThemeProvider","providedTokens","children","providedStyle","restProps","contextTokens","display","createElement","Provider","_extends"],"sources":["../../src/utils/ThemeProvider.tsx"],"sourcesContent":["import React from 'react';\n\nimport { useForkRef } from './ref';\nimport useEnhancedEffect from './use/useEnhancedEffect';\n\ntype Tokens = { [tokenName: string]: string };\nexport type ThemeProviderProps = JSX.IntrinsicElements['div'] & {\n  tokens: Tokens;\n  children: React.ReactNode;\n};\n\nexport const useContextTokens = () => React.useContext(themeContext);\n\nexport const useContextTheme = (ref: React.RefObject<HTMLElement>, available?: boolean) => {\n  const tokens = useContextTokens();\n  const tokensKey = React.useMemo(() => {\n    if (!tokens) return '';\n    return Object.entries(tokens)\n      .map(([key, value]) => `${key}-${value}`)\n      .join('/');\n  }, [tokens]);\n  useEnhancedEffect(() => {\n    if (available !== undefined && !available) return;\n    if (!ref.current || !ref.current.style || !ref.current.style.setProperty) return;\n    for (const token in tokens) {\n      ref.current.style.setProperty(token, tokens[token]);\n    }\n  }, [tokensKey, available]);\n};\nexport const contextThemeEnhance = <T extends Record<string, any> = {}>(\n  getAvailable?: (props: T) => boolean | undefined,\n) => {\n  return (props: T) => {\n    const existingRef = props.ref;\n    const available = React.useMemo(() => getAvailable?.(props), Object.values(props));\n    const enhanceRef: any = React.useRef();\n    const refArr: any = React.useMemo(\n      () => (existingRef ? [existingRef, enhanceRef] : [enhanceRef]),\n      [existingRef, enhanceRef],\n    );\n    const ref = useForkRef(refArr);\n    useContextTheme(enhanceRef, available);\n\n    return { ...props, ref };\n  };\n};\n\nconst themeContext = React.createContext<Tokens | null>(null);\n\nexport const ThemeProvider = (props: ThemeProviderProps): React.ReactElement => {\n  const { tokens: providedTokens = {}, children, style: providedStyle = {}, ...restProps } = props;\n  const contextTokens = React.useContext(themeContext);\n  const tokens = React.useMemo(\n    () => (contextTokens === null ? providedTokens : { ...contextTokens, ...providedTokens }),\n    [contextTokens, providedTokens],\n  );\n  const style: React.CSSProperties = React.useMemo(() => {\n    return {\n      display: 'contents',\n      ...tokens,\n      ...providedStyle,\n    };\n  }, [tokens, providedStyle]);\n\n  return (\n    <themeContext.Provider value={tokens}>\n      <div {...restProps} style={style}>\n        {children}\n      </div>\n    </themeContext.Provider>\n  );\n};\n"],"mappings":"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","ignoreList":[]}