defmodule Shino.UI.Attrs do
@moduledoc """
Provides attrs related components.
## Examples
```heex
<:item name="Subtotal">$299.00
<:item name="Shipping">$5.00
<:item name="Tax">$25.00
```
Or:
```heex
Subtotal
$299.00
Shipping
$5.00
Tax
$25.00
```
"""
use Shino.UI, :component
@doc """
Rendrs an attr list.
> It's a simplified version of the lits built by `` and its
> associated components.
"""
attr :class, :any, default: nil
attr :rest, :global
slot :item, required: true do
attr :name, :string, required: true
end
def list(assigns) do
~H"""
- <%= item.name %>
- <%= render_slot(item) %>
"""
end
@doc """
The root contains all the parts of an attr list.
"""
attr :class, :any, default: nil
attr :rest, :global
slot :inner_block, required: true
def root(assigns) do
~H"""
<%= render_slot(@inner_block) %>
"""
end
@doc """
Renders an attr item.
"""
attr :class, :any, default: nil
attr :rest, :global
slot :inner_block, required: true
def item(assigns) do
~H"""
<%= render_slot(@inner_block) %>
"""
end
@doc """
Renders an attr name.
"""
attr :class, :any, default: nil
attr :rest, :global
slot :inner_block, required: true
def name(assigns) do
~H"""
<%= render_slot(@inner_block) %>
"""
end
@doc """
Renders an attr value.
"""
attr :class, :any, default: nil
attr :rest, :global
slot :inner_block, required: true
def value(assigns) do
~H"""
<%= render_slot(@inner_block) %>
"""
end
end