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