UNPKG

@variantjs/core

Version:

VariantJS common functions and utilities

47 lines (36 loc) 1.14 kB
import { ObjectWithClassName, Variants, WithVariantProps } from './types/Variants'; import mergeClasses from './mergeClasses'; const getCustomPropsFromVariant = <P extends ObjectWithClassName>( variants?: Variants<P>, variant?: string, ): WithVariantProps<P> | undefined => { if (variant !== undefined && variants) { return variants[variant]; } return undefined; }; const parseVariant = <P extends ObjectWithClassName>( props: WithVariantProps<P>, globalConfiguration?: WithVariantProps<P>, defaultConfiguration?: WithVariantProps<P>, ): P => { const { variants, variant, ...mainProps } = { ...defaultConfiguration, ...globalConfiguration, ...props, }; const customProps = getCustomPropsFromVariant(variants, variant); const mergedProps = { ...mainProps, ...customProps, }; const { classes, fixedClasses, class: className, ...componentProps } = mergedProps; const mergedClasses: string = mergeClasses(className, classes, fixedClasses); if (mergedClasses) { (componentProps as P).class = mergedClasses; } return componentProps as P; }; export default parseVariant;