defmodule PetalComponents.Alert do use Phoenix.Component alias PetalComponents.Heroicons def alert(assigns) do assigns = assigns |> assign_new(:state, fn -> "info" end) |> assign_new(:size, fn -> "xl" end) |> assign_new(:class, fn -> "" end) ~H""" <%= unless label_blank?(assigns) do %>
<%= if assigns[:inner_block] do %> <%= render_slot(@inner_block) %> <% else %> <%= @label %> <% end %>
<% end %> """ end defp alert_classes(assigns) do size_css = case assigns[:size] do "xs" -> "text-xs leading-4 px-2.5 py-1" "sm" -> "text-sm leading-4 px-2.5 py-1" "md" -> "text-sm leading-5 px-4 py-2" "lg" -> "text-base leading-6 px-4 py-2" "xl" -> "text-base leading-6 px-6 py-3" end state_css = get_state_classes(assigns[:state]) custom_classes = assigns[:class] || "" """ #{state_css} #{size_css} #{custom_classes} font-medium rounded-xl inline-flex items-center justify-start focus:outline-none """ end defp get_state_classes("info"), do: "w-full text-blue-500 bg-blue-100 flex gap-2 items-center whitespace-nowrap" defp get_state_classes("success"), do: "w-full text-green-600 bg-green-100 flex gap-2 items-center whitespace-nowrap" defp get_state_classes("warning"), do: "w-full text-yellow-600 bg-yellow-100 flex gap-2 items-center whitespace-nowrap" defp get_state_classes("danger"), do: "w-full text-red-600 bg-red-100 flex gap-2 items-center whitespace-nowrap" defp get_icon("info"), do: :information_circle defp get_icon("success"), do: :check_circle defp get_icon("warning"), do: :exclamation_circle defp get_icon("danger"), do: :x_circle defp label_blank?(assigns) do (!assigns[:label] || assigns[:label] == "") && !assigns[:inner_block] end end