xuxi
Version:
Dynamically utility for combining different types of values into a single value.
33 lines (32 loc) • 1.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.variant = variant;
/**
* A utility function for managing values based on variant configurations.
*
* This function simplifies the handling of value generation with support for variants, default values, and dynamic overrides.
* @template T - The type of variant keys and their possible values.
* @param {VariantRecord<T>} keys - The configuration object containing:
* - `assign` (optional): A base value to always include.
* - `variants`: An object defining variant keys and their possible values as classes.
* - `defaultVariants` (optional): Default variant values for each variant key.
* @returns {(result?: VariantResult<T>) => string} - A function that takes a `result` object to override default variants
* and generates a class name string.
* @example
* @see {@link https://ilkhoeri.github.io/xuxi/variant Docs}
*/
function variant(keys) {
return (result = {}) => {
const mergedVariant = { ...keys.defaultVariants, ...result };
const variants = Object.keys(keys.variants)
.map(key => {
var _a;
const variantKey = mergedVariant[key] || ((_a = keys.defaultVariants) === null || _a === void 0 ? void 0 : _a[key]);
return variantKey ? keys.variants[key][variantKey] : undefined;
})
.filter(Boolean)
.join(' ')
.trim();
return keys.assign ? [keys.assign, variants].join(' ').trim() : variants;
};
}