defmodule MbtaMetro.Components.BadgeStack do @moduledoc false use Phoenix.Component import MbtaMetro.Components.Badge, only: [badge: 1] attr :background, :string, default: "white" attr :class, :string, default: "" attr :badges, :list, required: true attr :variant, :string, required: true, values: ["circle", "square"] def badge_stack(%{variant: "circle"} = assigns) do circle_stack(assigns) end def badge_stack(%{variant: "square"} = assigns) do square_stack(assigns) end defp circle_stack(assigns) do ~H"""
<.badge :for={{[class, text], index} <- Enum.with_index(@badges)} variant="circle" class={"ring-#{@background} ring-2 #{zindex(index)} #{@class} #{class}"} > <%= text %>
""" end defp square_stack(assigns) do ~H"""
<%= for {[class, text], index} <- Enum.with_index(@badges) do %> <.badge variant="square" class={"px-2 first:px-2.5 [&:not(:first-child)]:rounded-l-none [&:not(:last-child)]:rounded-r-none #{zindex(index)} #{@class} #{class}"} > <%= text %> <%= if index < Kernel.length(@badges) - 1 do %>
<% end %> <% end %>
""" end defp zindex(index) do "z-#{50 - index * 10}" end end