bruitt-classnames
Version:
A simple utility to manage CSS modules with SUIT CSS -like naming conventions on React
96 lines (76 loc) • 2.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _ramda = require("ramda");
var settings = {
prefix: "-",
separator: "-"
};
var is = {};
["String", "Boolean", "Array", "Object", "Number"].forEach(function (typeKey) {
is[typeKey] = function (object) {
return (0, _ramda.type)(object) === typeKey;
};
});
var exclude = function exclude(array) {
return array.filter(function (el) {
return is.String(el) && el.trim() !== "";
}).map(function (className) {
return className.trim();
});
};
var split = function split(className) {
return className.trim().split(/ +/);
};
var toClassName = function toClassName(names) {
return names.join(" ").trim();
};
var getModifier = function getModifier(key, value, prefix, separator) {
if (is.String(value) || is.Number(value)) {
return prefix + key + separator + value;
}
return prefix + key;
};
var getClassNames = function getClassNames(propNames, props) {
var prefix = arguments.length <= 2 || arguments[2] === undefined ? "" : arguments[2];
var separator = arguments.length <= 3 || arguments[3] === undefined ? "" : arguments[3];
if (is.Object(props)) {
return Object.keys(props).filter(function (name) {
return props[name];
}).map(function (name) {
return propNames[getModifier(name, props[name], prefix, separator)];
});
}
if (is.Array(props)) {
return props.map(function (name) {
return propNames[name];
});
}
return [];
};
var classnames = function classnames(classes) {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
if (!classes) {
return "";
}
var prefix = settings.prefix;
var separator = settings.separator;
var mapArg = function mapArg(arg) {
switch ((0, _ramda.type)(arg)) {
case "String":
return getClassNames(classes, split(arg), prefix, separator);
case "Array":
case "Object":
return getClassNames(classes, arg, prefix, separator);
default:
return null;
}
};
var classNames = (0, _ramda.flatten)(args.map(mapArg));
return toClassName(exclude((0, _ramda.uniq)(classNames)));
};
classnames.settings = settings;
exports.default = classnames;