defmodule PetalComponents.Loading do use Phoenix.Component # prop size, :string, values: ["button", "sm", "md", "lg"] # prop size_class, :css_class # prop class, :css_class, default: "" # prop show, :boolean, default: true def spinner(assigns) do assigns = assign_new(assigns, :classes, fn -> get_spinner_classes(assigns) end) ~H""" """ end defp get_spinner_classes(assigns) do base_classes = "animate-spin -ml-1" custom_classes = assigns[:class] || "" show_class = if assigns[:show] == false, do: "hidden", else: "" size_classes = assigns[:size_class] || get_size_classes(assigns[:size]) Enum.join( [ base_classes, custom_classes, show_class, size_classes ], " " ) end def get_size_classes("sm"), do: "h-5 w-5" def get_size_classes("md"), do: "h-8 w-8" def get_size_classes("lg"), do: "h-16 w-16" def get_size_classes(_), do: "h-8 w-8" end