defmodule Paleta.Components.Card do use Phoenix.Component alias Paleta.Utils.StringHelper alias Paleta.Utils.DateHelper attr(:color, :atom, default: :default, values: [:default, :success, :warning, :error]) attr(:title, :string, default: nil) attr(:description, :string, default: nil) attr(:class, :string, default: "") attr(:id, :string, default: nil) attr(:title_class, :string, default: "text-lg font-medium tracking-wide line-clamp-1") slot(:inner_block, required: false) def card(%{color: color, class: class, title_class: title_class} = assigns) do assigns = assigns |> assign(:class, "#{class(color)} #{class}") |> assign(:title_class, "#{title_class} #{title_class(color)}") ~H"""

<%= @title %>

<%= @description %>

<%= render_slot(@inner_block) %>
""" end defp title_class(:default), do: "text-slate-700 dark:text-navy-100" defp title_class(_), do: "text-white" attr(:title, :string, required: true) attr(:description, :string, default: "") slot(:inner_block, required: true) def card_fields_group(assigns) do ~H"""

<%= @title %>

<%= @description %>

<%= render_slot(@inner_block) %>
""" end attr(:label, :string, required: true) attr(:value, :string, default: nil) slot(:inner_block, required: false) def card_field(assigns) do ~H"""

<%= @label %>

<%= @value || render_slot(@inner_block) %>

""" end attr(:value, :string, default: nil) slot(:inner_block, required: false) def card_paragraph(assigns) do ~H"""
<%= @value || render_slot(@inner_block) %>
""" end attr(:label, :string, required: true) attr(:icon_class, :string, required: true) attr(:tooltip, :string, default: "") def card_icon_field(assigns) do ~H"""

<%= @label %>

""" end def card_line(assigns) do ~H"""
""" end attr(:label, :string, required: true) attr(:value, :string, required: true) attr(:format, :string, required: true, values: ["date_from_now", "short_id"]) def card_formatted_field(%{format: "date_from_now", value: value} = assigns) do assigns |> assign(:value, DateHelper.from_now(value)) |> _card_formatted_field() end def card_formatted_field(%{format: "short_id", value: value} = assigns) do assigns |> assign(:value, StringHelper.short_id(value)) |> _card_formatted_field() end defp _card_formatted_field(assigns) do ~H"""

<%= @label %>

<%= @value %>

""" end defp class(:default), do: "card px-4 py-4 sm:px-5" defp class(:warning), do: "rounded-lg bg-warning px-4 py-4 text-white sm:px-5" defp class(:success), do: "rounded-lg bg-success px-4 py-4 text-white sm:px-5" defp class(:error), do: "rounded-lg bg-error px-4 py-4 text-white sm:px-5" end