defmodule PUI.Alert do @moduledoc """ Alert component for displaying important messages and status updates. ## Basic Usage <.alert>
This is an alert message.
## With Icon <.alert> <:icon> <.icon name="hero-information-circle" class="size-5" />Alert with an icon.
## With Title and Description <.alert> <:icon> <.icon name="hero-check-circle" class="size-5" /> <:title>Success! <:description>Your changes have been saved successfully. ## Destructive Variant Use the destructive variant for errors and warnings: <.alert variant="destructive"> <:icon> <.icon name="hero-exclamation-triangle" class="size-5" /> <:title>Error <:description>Something went wrong. ## Without Description <.alert> <:icon> <.icon name="hero-exclamation-triangle" class="size-5" /> <:title>Warning ## Attributes | Attribute | Type | Default | Description | |-----------|------|---------|-------------| | `variant` | `string` | `"default"` | Alert style: "default" or "destructive" | | `class` | `string` | `""` | Additional CSS classes | ## Slots | Slot | Description | |------|-------------| | `icon` | Optional icon displayed at the start | | `title` | Alert title text | | `description` | Detailed description text | | `inner_block` | Custom content (alternative to slots) | """ use Phoenix.Component attr :class, :string, default: "" attr :variant, :string, values: ["default", "destructive", "unstyled"], default: "default" attr :role, :string, default: nil attr :rest, :global slot :icon, required: false slot :title, required: false do attr :class, :string end slot :description, required: false do attr :class, :string end slot :inner_block def alert(%{variant: variant} = assigns) do is_unstyled = variant == "unstyled" variant_class = if is_unstyled do "" else case assigns[:variant] do "default" -> "bg-card text-card-foreground" "destructive" -> "text-destructive bg-card [&>svg]:text-current *:data-[alert-desc]:text-destructive/90" end end role = case assigns[:role] do nil -> if assigns[:variant] == "destructive", do: "alert", else: "status" value -> value end assigns = assign(assigns, variant_class: variant_class, is_unstyled: is_unstyled, role: role) ~H"""