aliaset
Version:
twind monorepo
34 lines (27 loc) • 973 B
text/typescript
import type { CSSObject, CSSValue } from './types'
import { register } from './internal/registry'
import { serialize } from './internal/serialize'
import { hash } from './utils'
import { Layer } from './internal/precedence'
import { merge } from './internal/merge'
import { astish } from './internal/astish'
/**
* @group Class Name Generators
* @param strings
* @param interpolations
*/
export function css(strings: TemplateStringsArray, ...interpolations: readonly CSSValue[]): string
export function css(style: CSSObject | string): string
export function css(
strings: CSSObject | string | TemplateStringsArray,
...interpolations: readonly CSSValue[]
): string {
const ast = astish(strings, interpolations)
const className = (ast.find((o) => o.label)?.label || 'css') + hash(JSON.stringify(ast))
return register(className, (rule, context) =>
merge(
ast.flatMap((css) => serialize(css, rule, context, Layer.o)),
className,
),
)
}