{"version":3,"file":"ThemeProvider.mjs","names":["React","useForkRef","useEnhancedEffect","useContextTokens","useContext","themeContext","useContextTheme","ref","available","tokens","tokensKey","useMemo","Object","entries","map","_ref","_ref2","_slicedToArray","key","value","concat","join","undefined","current","style","setProperty","token","contextThemeEnhance","getAvailable","props","existingRef","values","enhanceRef","useRef","refArr","_objectSpread","createContext","ThemeProvider","_props$tokens","providedTokens","children","_props$style","providedStyle","restProps","_objectWithoutProperties","_excluded","contextTokens","display","createElement","Provider","_extends"],"sources":["../src/ThemeProvider.tsx"],"sourcesContent":["import React from 'react';\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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"}