lib/petal/container.ex

defmodule PetalComponents.Container do
  use Phoenix.Component

  # <.container max_width="sm|md|lg|xl" />
  # <.container no_padding_on_mobile={true} />
  def container(assigns) do
    assigns = assign_new(assigns, :max_width, fn -> "lg" end)

    ~H"""
    <div class={get_full_width_classes(assigns)}>
      <%= render_slot(@inner_block) %>
    </div>
    """
  end

  defp get_full_width_classes(assigns) do
    base_classes = "mx-auto sm:px-6 lg:px-8"

    max_width_class =
      case assigns.max_width do
        "sm" -> "max-w-3xl"
        "md" -> "max-w-5xl"
        "lg" -> "max-w-7xl"
        "full" -> "max-w-full"
      end

    custom_classes = assigns[:class] || ""
    underline_classes = if assigns[:no_padding_on_mobile], do: "", else: "px-4"

    [max_width_class, base_classes, custom_classes, underline_classes]
    |> Enum.join(" ")
  end
end