@gravity-ui/graph
Version:
Modern graph editor component
25 lines (24 loc) • 999 B
JavaScript
/**
* Utility function for combining CSS class names
* Accepts strings, objects with truthy/falsy values, or undefined values
* @param classes - Array of class names (strings), conditional classes (objects), or undefined
* @returns Combined class names as a single string
*/
export const cn = (...classes) => {
return classes.reduce((acc, curr) => {
// Skip undefined values
if (!curr)
return acc;
// Handle string class names
if (typeof curr === "string") {
return acc ? `${acc} ${curr}` : curr;
}
// Handle conditional classes (objects with truthy/falsy values)
const items = Object.entries(curr)
.filter(([_, value]) => value) // Only include classes where value is truthy
.map(([key]) => key) // Extract the class name (key)
.join(" ");
// eslint-disable-next-line no-nested-ternary
return items ? (acc ? `${acc} ${items}` : items) : acc;
}, "");
};