@pandabox/utils
Version:
A bunch of utilities
34 lines (28 loc) • 1.05 kB
text/typescript
import { traverse } from '@pandacss/shared'
import { type TokenCategory } from '@pandacss/types'
import { cssVar, type CssVarsOptions } from './css-var'
interface TokenRecord extends Record<TokenCategory | (string & {}), Record<string, number | string | undefined>> {}
export type ToTokenRecord<TTokens extends Record<string, any>> = {
[Category in TokenCategory]-?: {
[TokenName in TTokens[Category]]?: number | string
}
}
export const assignInlineVars = <TRecord extends TokenRecord>(
userVars?: Partial<TRecord>,
options?: CssVarsOptions & { separator?: string },
) => {
const vars = {} as TokenRecord
for (const [category, tokens] of Object.entries(userVars ?? {})) {
traverse(
tokens,
({ value, path }) => {
if (typeof value === 'string' || typeof value === 'number') {
const cssVarRef = cssVar.create(category + '-' + path, options).var
vars[cssVarRef] = value as any
}
},
{ separator: options?.separator ?? '-' },
)
}
return vars as Record<string, any>
}