lib/moon/lego/radio.ex

defmodule Moon.Lego.Radio do
  @moduledoc "Radio round mark to be shown"

  use Moon.StatelessComponent

  @doc "Additional CSS classes for the "
  prop(class, :css_class)
  @doc "Id attribute to be given to the HTML tag"
  prop(id, :string)
  @doc "Data-testid attribute value"
  prop(testid, :string)
  @doc "If the mark should be checked "
  prop(is_selected, :boolean, from_context: :is_selected)

  def render(assigns) do
    ~F"""
    <span
      aria-checked={(@is_selected && "true") || "false"}
      class={merge([
        "relative flex items-center justify-center w-4 h-4 aspect-square m-1 rounded-full border border-trunks transition-colors",
        "after:content-[\"\"] after:absolute after:w-0 after:h-0 after:rounded-full after:top-1/2 after:left-1/2",
        "after:-translate-y-1/2 after:transition-all after:-translate-x-1/2 after:bg-piccolo",
        "moon-checked:after:w-2 moon-checked:after:h-2 moon-checked:border-piccolo",
        @class
      ])}
      {=@id}
      data-testid={@testid}
    />
    """
  end
end