2023-04-13 09:37:02 +03:00
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Take any number of parameters and returns a space-concatenated string.
|
|
|
|
* If a parameter is a non-empty string, it's automatically added to the result.
|
|
|
|
* If a parameter is an object, for each entry, if the value is truthy, then the key
|
|
|
|
* is added to the result.
|
|
|
|
*
|
|
|
|
* For example: `classnames("hi", null, undefined, false, { foo: true, bar: false })` will
|
|
|
|
* return `"hi foo"`
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param {...string|object} argss
|
|
|
|
* @returns String
|
|
|
|
*/
|
2023-05-20 15:26:49 +03:00
|
|
|
module.exports = function (...args) {
|
2023-04-13 09:37:02 +03:00
|
|
|
let className = "";
|
|
|
|
|
|
|
|
for (const arg of args) {
|
|
|
|
if (!arg) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (typeof arg == "string") {
|
|
|
|
className += " " + arg;
|
|
|
|
} else if (Object(arg) === arg) {
|
|
|
|
// We don't test that we have an Object literal, so we can be as fast as we can
|
|
|
|
for (const key in arg) {
|
|
|
|
if (arg[key]) {
|
|
|
|
className += " " + key;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return className.trim();
|
|
|
|
};
|