{
"files": [
{
"content": "defmodule Shadix.Components.Alert do\n @moduledoc \"\"\"\n Alert component translated from the shadcn-ui \"alert\" component.\n\n Provides `alert/1`, `alert_title/1`, and `alert_description/1` as\n presentational Phoenix function components.\n \"\"\"\n use Phoenix.Component\n import Shadix.Cn\n\n @base \"relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current\"\n\n @variants %{\n \"default\" => \"bg-card text-card-foreground\",\n \"destructive\" =>\n \"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current\"\n }\n\n attr(:variant, :string, default: \"default\", values: ~w(default destructive))\n attr(:class, :string, default: nil)\n attr(:rest, :global)\n slot(:inner_block, required: true)\n\n def alert(assigns) do\n class = cn([@base, Map.fetch!(@variants, assigns.variant), assigns.class])\n assigns = assign(assigns, :computed_class, class)\n\n ~H\"\"\"\n <div role=\"alert\" data-slot=\"alert\" data-variant={@variant} class={@computed_class} {@rest}>\n {render_slot(@inner_block)}\n </div>\n \"\"\"\n end\n\n attr(:class, :string, default: nil)\n attr(:rest, :global)\n slot(:inner_block, required: true)\n\n def alert_title(assigns) do\n class = cn([\"col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight\", assigns.class])\n assigns = assign(assigns, :computed_class, class)\n\n ~H\"\"\"\n <div data-slot=\"alert-title\" class={@computed_class} {@rest}>\n {render_slot(@inner_block)}\n </div>\n \"\"\"\n end\n\n attr(:class, :string, default: nil)\n attr(:rest, :global)\n slot(:inner_block, required: true)\n\n def alert_description(assigns) do\n class =\n cn([\n \"col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed\",\n assigns.class\n ])\n\n assigns = assign(assigns, :computed_class, class)\n\n ~H\"\"\"\n <div data-slot=\"alert-description\" class={@computed_class} {@rest}>\n {render_slot(@inner_block)}\n </div>\n \"\"\"\n end\nend\n",
"path": "alert.ex"
}
],
"hooks": [],
"name": "alert",
"npm_deps": [],
"registry_deps": [
"cn"
]
}