UNPKG

@hakuna-matata-ui/styled-system

Version:

Style function for css-in-js building component libraries

50 lines (42 loc) 1.62 kB
import { analyzeBreakpoints, Dict } from "@hakuna-matata-ui/utils" import type { WithCSSVar } from "../utils/types" import { createThemeVars } from "./create-theme-vars" import { extractTokens, omitVars } from "./theme-tokens" export function toCSSVar<T extends Dict>(rawTheme: T) { /** * In the case the theme has already been converted to css-var (e.g extending the theme), * we can omit the computed css vars and recompute it for the extended theme. */ const theme = omitVars(rawTheme) // omit components and breakpoints from css variable map const tokens = extractTokens(theme) const cssVarPrefix = theme.config?.cssVarPrefix const { /** * This is more like a dictionary of tokens users will type `green.500`, * and their equivalent css variable. */ cssMap, /** * The extracted css variables will be stored here, and used in * the emotion's <Global/> component to attach variables to `:root` */ cssVars, } = createThemeVars(tokens, { cssVarPrefix }) const defaultCssVars: Dict = { "--chakra-ring-inset": "var(--chakra-empty,/*!*/ /*!*/)", "--chakra-ring-offset-width": "0px", "--chakra-ring-offset-color": "#fff", "--chakra-ring-color": "rgba(66, 153, 225, 0.6)", "--chakra-ring-offset-shadow": "0 0 #0000", "--chakra-ring-shadow": "0 0 #0000", "--chakra-space-x-reverse": "0", "--chakra-space-y-reverse": "0", } Object.assign(theme, { __cssVars: { ...defaultCssVars, ...cssVars }, __cssMap: cssMap, __breakpoints: analyzeBreakpoints(theme.breakpoints), }) return theme as WithCSSVar<T> }