defmodule Clsx do
@moduledoc """
Simple helper functions to conditionally determine class names.
This library is largely inspired by the JavaScript library
[clsx](https://www.npmjs.com/package/clsx), commonly used in the
React ecosystem.
"""
def clsx([]), do: ""
def clsx(enumerable) when is_list(enumerable) or is_map(enumerable) do
enumerable
|> Enum.map(&clsx/1)
|> Enum.reject(fn el -> el in ["", nil] end)
|> Enum.join(" ")
end
def clsx(string) when is_binary(string), do: string
def clsx(false), do: ""
def clsx(nil), do: ""
def clsx(atom) when is_atom(atom), do: Atom.to_string(atom)
def clsx({_, falsey}) when falsey in [nil, false], do: ""
def clsx({name, _}), do: name
end