defmodule AlertDialog do
@moduledoc """
A simple alert dialog component.
"""
use Phoenix.Component
import LiveViewUI
@doc """
Renders an alert dialog
## Examples
<.dialog :let={
%{
root: root,
trigger: trigger,
backdrop: backdrop,
content: content,
title: title,
description: description,
actions: actions
}
}>
<.trigger trigger={trigger}>Open
<.content root={root} backdrop={backdrop} content={content}>
<.header>
<.title title={title}>Are you absolutely sure?
<.description description={description}>
This action cannot be undone. This will permanently delete your account
and remove your data from our servers.
<.footer>
<.cancel actions={actions}>Cancel
<.action>Continue
"""
attr(:class, :any, default: nil)
attr(:rest, :global)
slot(:inner_block, required: true)
def root(assigns) do
~H"""
<%= render_slot(@inner_block) %>
"""
end
attr(:trigger, :string, required: true)
attr(:variant, :string, default: "default", values: Button.get_button_variant())
attr(:size, :string, default: "default", values: Button.get_button_size())
attr(:class, :any, default: nil)
attr(:rest, :global)
slot(:inner_block, required: true)
def trigger(assigns) do
~H"""
<%= render_slot(@inner_block) %>
"""
end
attr(:id, :string, required: true)
attr(:class, :any, default: nil)
attr(:rest, :global)
slot(:inner_block, required: true)
def portal(assigns) do
~H"""
<.focus_wrap
id={@id || Map.get(assigns.rest, "id", "focus-wrap")}
class={
cn([
"relative z-50 group",
"hs-overlay hs-overlay-open:opacity-100 hs-overlay-open:duration-500 hidden size-full fixed",
"top-0 start-0 z-[80] opacity-0 overflow-x-hidden transition-all overflow-y-auto pointer-events-none",
@class
])
}
{@rest}
>
<%= render_slot(@inner_block) %>
"""
end
attr(:class, :any, default: nil)
attr(:rest, :global)
def overlay(assigns) do
~H"""
"""
end
attr(:class, :any, default: nil)
attr(:rest, :global)
slot(:inner_block, required: true)
def content(assigns) do
~H"""
<%= render_slot(@inner_block) %>
"""
end
attr(:class, :any, default: nil)
attr(:rest, :global)
slot(:inner_block, required: true)
def header(assigns) do
~H"""
<%= render_slot(@inner_block) %>
"""
end
attr(:class, :any, default: nil)
attr(:rest, :global)
slot(:inner_block, required: true)
def footer(assigns) do
~H"""
<%= render_slot(@inner_block) %>
"""
end
attr(:class, :any, default: nil)
attr(:rest, :global)
slot(:inner_block, required: true)
def title(assigns) do
~H"""
<%= render_slot(@inner_block) %>
"""
end
attr(:class, :any, default: nil)
attr(:rest, :global)
slot(:inner_block, required: true)
def description(assigns) do
~H"""
<%= render_slot(@inner_block) %>
"""
end
attr(:variant, :string, default: "default", values: Button.get_button_variant())
attr(:class, :any, default: nil)
attr(:rest, :global)
slot(:inner_block, required: true)
def action(assigns) do
~H"""
<%= render_slot(@inner_block) %>
"""
end
attr(:class, :any, default: nil)
attr(:rest, :global)
slot(:inner_block, required: true)
def cancel(assigns) do
~H"""
<%= render_slot(@inner_block) %>
"""
end
end