Loading homepage
Implement classNames(...values), a utility that joins CSS class names conditionally. Accept class strings, non-zero numbers, conditional objects, and nested arrays, then return one class-name string in traversal order.
Objects contribute their enabled keys, arrays recursively contribute their contents, and falsy values contribute nothing. The returned string must have no leading or trailing whitespace.
Input: classNames('foo', 'bar') Output: 'foo bar'
Input: classNames('foo', { bar: true }) Output: 'foo bar'
Input: classNames({ 'foo-bar': true }) Output: 'foo-bar'
Input: classNames({ 'foo-bar': false }) Output: ''
Input: classNames({ foo: true }, { bar: true }) Output: 'foo bar'
Input: classNames({ foo: true, bar: true }) Output: 'foo bar'
Input: classNames({ foo: true, bar: false, qux: true }) Output: 'foo qux'
Input: classNames('a', ['b', { c: true, d: false }]) Output: 'a b c'
Input: classNames('foo', { bar: true, duck: false }, 'baz', { quux: true }) Output: 'foo bar baz quux'
Input: classNames(null, false, 'bar', undefined, { baz: null }, '') Output: 'bar'
classNames(...values) returns a string. Traverse nested arrays in order and include own object keys with truthy values.