defmodule Paleta.Components.Button do use Phoenix.Component attr(:label, :string, default: "Save") attr(:in_progress_label, :string, default: "Saving...") attr(:class, :string, default: "") attr(:disabled, :boolean, default: false) attr(:type, :atom, default: :submit, values: [:button, :submit, :reset]) attr(:left_icon, :string, default: nil) attr(:right_icon, :string, default: nil) attr(:rest, :global) attr(:color, :atom, default: :default, values: [:default, :primary, :secondary, :info, :success, :warning, :error] ) def button(%{color: color, class: custom_class, disabled: disabled} = assigns) do full_class = "#{custom_class} #{class(color, disabled)}" assigns = assigns |> assign(:class, full_class) ~H""" """ end # Enable classes defp class(:default, false = _disabled), do: "btn bg-slate-150 font-medium text-slate-800 hover:bg-slate-200 focus:bg-slate-200 active:bg-slate-200/80 dark:bg-navy-500 dark:text-navy-50 dark:hover:bg-navy-450 dark:focus:bg-navy-450 dark:active:bg-navy-450/90" defp class(:primary, false = _disabled), do: "btn bg-primary font-medium text-white hover:bg-primary-focus focus:bg-primary-focus active:bg-primary-focus/90 dark:bg-accent dark:hover:bg-accent-focus dark:focus:bg-accent-focus dark:active:bg-accent/90" defp class(:secondary, false = _disabled), do: "btn bg-secondary font-medium text-white hover:bg-secondary-focus focus:bg-secondary-focus active:bg-secondary-focus/90 disabled:pointer-events-none disabled:select-none disabled:opacity-60" defp class(:info, false = _disabled), do: "btn bg-info font-medium text-white hover:bg-info-focus focus:bg-info-focus active:bg-info-focus/90" defp class(:success, false = _disabled), do: "btn bg-success font-medium text-white hover:bg-success-focus focus:bg-success-focus active:bg-success-focus/90" defp class(:warning, false = _disabled), do: "btn bg-warning font-medium text-white hover:bg-warning-focus focus:bg-warning-focus active:bg-warning-focus/90" defp class(:error, false = _disabled), do: "btn bg-error font-medium text-white hover:bg-error-focus focus:bg-error-focus active:bg-error-focus/90" # Disabled classes defp class(:default, true = _disabled), do: "btn bg-slate-150 font-medium text-slate-800 hover:bg-slate-200 focus:bg-slate-200 active:bg-slate-200/80 disabled:pointer-events-none disabled:select-none disabled:opacity-60 dark:bg-navy-500 dark:text-navy-50 dark:hover:bg-navy-450 dark:focus:bg-navy-450 dark:active:bg-navy-450/90" defp class(:primary, true = _disabled), do: "btn bg-primary font-medium text-white hover:bg-primary-focus focus:bg-primary-focus active:bg-primary-focus/90 disabled:pointer-events-none disabled:select-none disabled:opacity-60 dark:bg-accent dark:hover:bg-accent-focus dark:focus:bg-accent-focus dark:active:bg-accent/90" defp class(:secondary, true = _disabled), do: "btn bg-secondary font-medium text-white hover:bg-secondary-focus focus:bg-secondary-focus active:bg-secondary-focus/90 disabled:pointer-events-none disabled:select-none disabled:opacity-60" defp class(:info, true = _disabled), do: "btn bg-info font-medium text-white hover:bg-info-focus focus:bg-info-focus active:bg-info-focus/90 disabled:pointer-events-none disabled:select-none disabled:opacity-60" defp class(:success, true = _disabled), do: "btn bg-success font-medium text-white hover:bg-success-focus focus:bg-success-focus active:bg-success-focus/90 disabled:pointer-events-none disabled:select-none disabled:opacity-60" defp class(:warning, true = _disabled), do: "btn bg-warning font-medium text-white hover:bg-warning-focus focus:bg-warning-focus active:bg-warning-focus/90 disabled:pointer-events-none disabled:select-none disabled:opacity-60" defp class(:error, true = _disabled), do: "btn bg-error font-medium text-white hover:bg-error-focus focus:bg-error-focus active:bg-error-focus/90 disabled:pointer-events-none disabled:select-none disabled:opacity-60" end