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"""
"""
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