defmodule Moon.Components.Button do @moduledoc false use Moon.StatelessComponent alias Moon.Icon alias Moon.Components.Loader prop(id, :string) prop(href, :string) # TODO, none variant was added so as not to break PreviewCodeButton component # Deprecate Link and None (they are not in Figma) prop(variant, :string, values: ["primary", "secondary", "tertiary", "ghost", "none"], default: "primary" ) prop(size, :string, values: ["xs", "sm", "md", "lg", "xl"], default: "md") prop(full_width, :boolean) prop(progress, :boolean) prop(oops, :boolean) prop(success, :boolean) prop(pulse, :boolean) prop(disabled, :boolean) prop(no_hover_bg, :boolean, default: false) prop(type, :string, default: "button") prop(to, :string) prop(active_class_name, :string) prop(active_style, :string) prop(exact, :boolean) prop(string, :boolean) prop(is_active, :boolean) prop(location, :string) prop(style, :string) prop(class, :css_class) prop(form, :string) prop(on_click, :event) prop(value_name, :string) prop(value, :any) prop(values, :keyword, default: []) prop(left_icon, :string) prop(right_icon, :string) prop(icon_only, :string) prop(testid, :string) prop(animation, :string, values: ~w(progress success error pulse)) slot(default) slot(right_icon_slot) slot(left_icon_slot) slot(icon_only_slot) prop(button_gap, :css_class, default: "gap-2") def render(assigns) do ~F""" """ end defp phx_val_tag(nil, _), do: [] defp phx_val_tag(name, value) do # credo:disable-for-next-line Credo.Check.Warning.UnsafeToAtom key = String.to_atom("phx-value-#{name}") [{key, value}] end defp icon_class("xs"), do: "h-4 w-4" defp icon_class("sm"), do: "h-4 w-4" defp icon_class("md"), do: "h-6 w-6" defp icon_class("lg"), do: "h-6 w-6" defp icon_class("xl"), do: "h-6 w-6" end