UNPKG

@bruitt/classnames

Version:

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

87 lines (65 loc) 2.51 kB
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var flatten = _interopDefault(require('ramda/src/flatten')); var type = _interopDefault(require('ramda/src/type')); var uniq = _interopDefault(require('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; exports.withStyles = withStyles; exports.default = classnames; //# sourceMappingURL=classnames.js.map