UNPKG

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
"use strict"; 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;