57 lines
3.0 KiB
JavaScript
57 lines
3.0 KiB
JavaScript
/**
|
|
* Copyright 2022 Joe Bell. All rights reserved.
|
|
*
|
|
* This file is licensed to you under the Apache License, Version 2.0
|
|
* (the "License"); you may not use this file except in compliance with the
|
|
* License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
* WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the
|
|
* License for the specific language governing permissions and limitations under
|
|
* the License.
|
|
*/ import { clsx } from "clsx";
|
|
const falsyToString = (value)=>typeof value === "boolean" ? `${value}` : value === 0 ? "0" : value;
|
|
export const cx = clsx;
|
|
export const cva = (base, config)=>(props)=>{
|
|
var _config_compoundVariants;
|
|
if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);
|
|
const { variants, defaultVariants } = config;
|
|
const getVariantClassNames = Object.keys(variants).map((variant)=>{
|
|
const variantProp = props === null || props === void 0 ? void 0 : props[variant];
|
|
const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];
|
|
if (variantProp === null) return null;
|
|
const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);
|
|
return variants[variant][variantKey];
|
|
});
|
|
const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{
|
|
let [key, value] = param;
|
|
if (value === undefined) {
|
|
return acc;
|
|
}
|
|
acc[key] = value;
|
|
return acc;
|
|
}, {});
|
|
const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{
|
|
let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;
|
|
return Object.entries(compoundVariantOptions).every((param)=>{
|
|
let [key, value] = param;
|
|
return Array.isArray(value) ? value.includes({
|
|
...defaultVariants,
|
|
...propsWithoutUndefined
|
|
}[key]) : ({
|
|
...defaultVariants,
|
|
...propsWithoutUndefined
|
|
})[key] === value;
|
|
}) ? [
|
|
...acc,
|
|
cvClass,
|
|
cvClassName
|
|
] : acc;
|
|
}, []);
|
|
return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);
|
|
};
|
|
|