@variantjs/core
Version:
VariantJS common functions and utilities
47 lines (36 loc) • 1.14 kB
text/typescript
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;