defmodule Phoenix.UI.Components.Divider do @moduledoc """ Provides divider component. """ use Phoenix.UI, :component @default_color "slate" @default_variant "full_width" @doc """ Renders divider component. ## Examples ``` <.divider /> ``` """ @spec divider(Socket.assigns()) :: Rendered.t() def divider(raw) do assigns = raw |> assign_new(:color, fn -> @default_color end) |> assign_new(:variant, fn -> @default_variant end) |> build_divider_attrs() ~H"""
""" end ### Divider Attrs ########################## defp build_divider_attrs(assigns) do class = build_class(~w( divider #{classes(:color, assigns)} #{classes(:variant, assigns)} #{Map.get(assigns, :extend_class)} )) attrs = assigns |> assigns_to_attributes([:color, :variant]) |> Keyword.put_new(:class, class) assign(assigns, :divider_attrs, attrs) end ### CSS Classes ########################## # Color defp classes(:color, %{color: color}), do: "border-#{color}-200 dark:border-#{color}-500" # Variant defp classes(:variant, %{variant: "inset"}), do: "ml-4" defp classes(:variant, %{variant: "middle"}), do: "mx-4" defp classes(_rule_group, _assigns), do: nil end