defmodule Phoenix.UI.Components.DescriptionList do @moduledoc """ Provides description list component. """ use Phoenix.UI, :component @default_variant :simple @default_striped false @doc """ Renders description list component. ## Examples ``` <.dl> <:dt>Term <:dd>Description ``` """ @spec dl(Socket.assigns()) :: Rendered.t() def dl(raw_assigns) do assigns = raw_assigns |> assign_new(:striped, fn -> @default_striped end) |> assign_new(:variant, fn -> @default_variant end) |> assign_new(:dt, fn -> [] end) |> assign_new(:dd, fn -> [] end) |> build_rows() ~H"""
<%= for {dt, dd} <- @rows do %>
<%= render_slot(dt) %>
<%= render_slot(dd) %>
<% end %>
""" end defp build_rows(%{dt: dt, dd: dd} = assigns), do: assign(assigns, :rows, Enum.zip(dt, dd)) end