Components Alerts

Petal Pro is the full SaaS app this is built for

Auth, billing, admin, and Claude Code integration included. One purchase, unlimited projects.

Alerts

Alerts are elements that provide a subtle way to bring important information to the users attention.
Default
heex
          <.alert color="info">
  This is an info alert
</.alert>
<.alert color="success" label="This is a success alert" />
<.alert color="warning" label="This is a warning alert" />
<.alert color="danger" label="This is a danger alert that is very long" />

        
With icon
heex
          <.alert with_icon color="info" variant="dark" label="This is an info alert" />
<.alert with_icon color="success" variant="dark" label="This is a success alert" />
<.alert with_icon color="warning" variant="dark" label="This is a warning alert" />
<.alert with_icon color="danger" variant="dark">
  This is a danger alert that is very long
</.alert>

        
Dismissable
heex
          <.alert
  with_icon
  variant="soft"
  close_button_properties={["phx-click": "do_something"]}
  color="info"
  label="This is an info alert"
/>
<.alert
  with_icon
  variant="soft"
  close_button_properties={["phx-click": "do_something"]}
  color="success"
  label="This is a success alert"
/>
<.alert
  with_icon
  variant="soft"
  close_button_properties={["phx-click": "do_something"]}
  color="warning"
  label="This is a warning alert"
/>
<.alert
  variant="soft"
  with_icon
  close_button_properties={["phx-click": "do_something"]}
  color="danger"
>
  This is a danger alert that is very long
</.alert>

        
With optional heading
heex
          <div class="flex items-start max-w-sm">
  <.alert
    variant="outline"
    color="success"
    with_icon
    heading="Optional heading that is too long"
  >
    This is quite a long paragraph that takes up more than one line.
  </.alert>
</div>
<div class="flex items-start max-w-sm">
  <.alert
    variant="outline"
    color="warning"
    with_icon
    close_button_properties={["phx-click": "do_something"]}
    heading="Optional heading that is too long"
  >
    This is quite a long paragraph that takes up more than one line.
  </.alert>
</div>

        
Properties
elixir
          attr(:color, :string,
  default: "info",
  values: ["info", "success", "warning", "danger"]
)

attr(:variant, :string,
  default: "light",
  values: ["light", "soft", "dark", "outline"],
  doc: "The variant of the alert"
)

attr(:with_icon, :boolean, default: false, doc: "adds some icon base classes")
attr(:class, :any, default: nil, doc: "CSS class for parent div")
attr(:heading, :string, default: nil, doc: "label your heading")
attr(:label, :string, default: nil, doc: "label your alert")
attr(:rest, :global)

attr(:close_button_properties, :list,
  default: nil,
  doc: "a list of properties passed to the close button"
)

slot(:inner_block)