{
"files": [
{
"content": "defmodule Shadix.Cn do\n @moduledoc \"\"\"\n Class-name composition for Shadix components.\n\n `cn/1` flattens a list of class values and joins the truthy, non-empty ones\n with single spaces. It does NOT resolve conflicting Tailwind utilities — that\n is handled by Tailwind v4 cascade layers, so a caller's class always wins over\n a component default regardless of order.\n \"\"\"\n\n @doc \"\"\"\n Joins a (possibly nested) list of class values into a single class string,\n dropping `nil`, `false`, and empty strings.\n\n iex> Shadix.Cn.cn([\"px-4\", nil, \"font-medium\"])\n \"px-4 font-medium\"\n \"\"\"\n @spec cn(list()) :: String.t()\n def cn(classes) when is_list(classes) do\n classes\n |> List.flatten()\n |> Enum.filter(fn c -> c && c != \"\" end)\n |> Enum.join(\" \")\n end\nend\n",
"path": "cn.ex"
}
],
"hooks": [],
"name": "cn",
"npm_deps": [],
"registry_deps": []
}