UNPKG

@bruitt/classnames

Version:

A simple utility to manage CSS modules with SUIT CSS -like naming conventions on React

85 lines (64 loc) 2.33 kB
import flatten from 'ramda/src/flatten'; import type from 'ramda/src/type'; import uniq from 'ramda/src/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; export default classnames; export { withStyles }; //# sourceMappingURL=classnames.module.js.map