@bruitt/classnames
Version:
A simple utility to manage CSS modules with SUIT CSS -like naming conventions on React
92 lines (70 loc) • 3.05 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('ramda/src/flatten'), require('ramda/src/type'), require('ramda/src/uniq')) :
typeof define === 'function' && define.amd ? define(['exports', 'ramda/src/flatten', 'ramda/src/type', 'ramda/src/uniq'], factory) :
(factory((global.classnames = {}),global.flatten,global.type,global.uniq));
}(this, (function (exports,flatten,type,uniq) {
flatten = flatten && flatten.hasOwnProperty('default') ? flatten['default'] : flatten;
type = type && type.hasOwnProperty('default') ? type['default'] : type;
uniq = uniq && uniq.hasOwnProperty('default') ? uniq['default'] : uniq;
var settings = {
prefix: "_",
separator: "-"
};
var is = {};
["String", "Boolean", "Array", "Object", "Number"].forEach(function (typeKey) {
is[typeKey] = function (object) { return type(object) === typeKey; };
});
var exclude = function (array) {
return array.filter(function (el) { return is.String(el) && el.trim() !== ""; }).map(function (className) { return className.trim(); });
};
var split = function (className) { return className.trim().split(/ +/); };
var toClassName = function (names) { return names.join(" ").trim(); };
var getModifier = function (key, value, prefix, separator) {
if (is.String(value) || is.Number(value)) {
return prefix + key + separator + value;
}
return prefix + key;
};
var getClassNames = function (propNames, props, prefix, separator) {
if ( prefix === void 0 ) prefix = "";
if ( separator === void 0 ) separator = "";
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] || name; });
}
return [];
};
var classnames = function (classes) {
var args = [], len = arguments.length - 1;
while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
if (!classes) {
return "";
}
var prefix = settings.prefix;
var separator = settings.separator;
var mapArg = function (arg) {
switch (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 = flatten(args.map(mapArg));
return toClassName(exclude(uniq(classNames)));
};
var withStyles = function (classes) { return function () {
var args = [], len = arguments.length;
while ( len-- ) args[ len ] = arguments[ len ];
return classnames.apply(void 0, [ classes ].concat( args ));
} };
classnames.settings = settings;
exports.withStyles = withStyles;
exports.default = classnames;
})));
//# sourceMappingURL=classnames.umd.js.map