defmodule <%= @module_name %>.UI.AlertDialog do @moduledoc """ A simple alert dialog component. """ use Phoenix.Component import <%= @module_name %>.UI.Helper @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: <%= @module_name %>.UI.Button.get_button_variant()) attr(:size, :string, default: "default", values: <%= @module_name %>.UI.Button.get_button_size()) attr(:class, :any, default: nil) attr(:rest, :global) slot(:inner_block, required: true) def trigger(assigns) do ~H""" <<%= @module_name %>.UI.Button.root data-hs-overlay={"##{@trigger}"} variant={@variant} size={@size} class={cn([@class])} {@rest} > <%= render_slot(@inner_block) %> .UI.Button.root> """ 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: <%= @module_name %>.UI.Button.get_button_variant()) attr(:class, :any, default: nil) attr(:rest, :global) slot(:inner_block, required: true) def action(assigns) do ~H""" <<%= @module_name %>.UI.Button.root variant={@variant} class={cn([@class])} {@rest}> <%= render_slot(@inner_block) %> .UI.Button.root> """ end attr(:class, :any, default: nil) attr(:rest, :global) slot(:inner_block, required: true) def cancel(assigns) do ~H""" <<%= @module_name %>.UI.Button.root variant="outline" class={cn(["mt-2 sm:mt-0", @class])} {@rest}> <%= render_slot(@inner_block) %> .UI.Button.root> """ end end