Table
Organize and display data in structured layouts.
Lead | Stage | Contact |
---|---|---|
Alice Smith | New | alice.smith@example.com |
Bob Johnson | In Progress | bob.johnson@example.com |
Carol Williams | Completed | carol.williams@example.com |
David Brown | Urgent | david.brown@example.com |
<.table>
<.table_head>
<:col>Lead</:col>
<:col>Stage</:col>
<:col>Contact</:col>
</.table_head>
<.table_body>
<.table_row :for={lead <- @leads}>
<:cell><%= lead.name %></:cell>
<:cell><%= lead.stage %></:cell>
<:cell><%= lead.contact %></:cell>
</.table_row>
</.table_body>
</.table>
Customization
Style table cells and content to match your design requirements.
Lead | Stage | Contact |
---|---|---|
Alice Smith | New | alice.smith@example.com |
Bob Johnson | In Progress | bob.johnson@example.com |
Carol Williams | Completed | carol.williams@example.com |
David Brown | Urgent | david.brown@example.com |
<.table>
<.table_head class="border-zinc-300 border-b-2">
<:col class="py-2">Lead</:col>
<:col class="py-2">Stage</:col>
<:col class="py-2">Contact</:col>
</.table_head>
<.table_body>
<.table_row :for={lead <- @leads}>
<:cell class="py-2.5 font-semibold w-full"><%= lead.name %></:cell>
<:cell class="py-2.5 "><%= lead.stage %></:cell>
<:cell class="py-2.5 "><%= lead.contact %></:cell>
</.table_row>
</.table_body>
</.table>
Complex content
Include rich content within cells like buttons, badges, or icons.
Lead | Stage | Contact | |
---|---|---|---|
Alice Smith
Sales Rep
| New | alice.smith@example.com |
|
Bob Johnson
Sales Rep
| In Progress | bob.johnson@example.com |
|
David Brown
Sales Rep
| Urgent | david.brown@example.com |
|
<.table>
<.table_head>
<:col>Lead</:col>
<:col>Stage</:col>
<:col>Contact</:col>
<:col></:col>
</.table_head>
<.table_body>
<.table_row :for={%{stage: {stage, stage_color}} = lead <- @leads}>
<:cell class="w-full flex items-center gap-2">
<img src={lead.avatar} class="size-9 rounded-full" />
<div class="flex flex-col gap-0.5">
<span class="font-semibold"><%= lead.name %></span>
<span class="text-zinc-400 text-sm/3"><%= lead.role %></span>
</div>
</:cell>
<:cell>
<.badge color={stage_color}><%= stage %></.badge>
</:cell>
<:cell><%= lead.contact %></:cell>
<:cell>
<.dropdown>
<:toggle class="size-6 cursor-pointer rounded-md flex items-center justify-center hover:bg-zinc-100 dark:hover:bg-zinc-800">
<.icon name="hero-ellipsis-horizontal" class="size-5" />
</:toggle>
<.dropdown_link>View</.dropdown_link>
<.dropdown_link>Edit</.dropdown_link>
<.dropdown_link>Delete</.dropdown_link>
</.dropdown>
</:cell>
</.table_row>
</.table_body>
</.table>
Striped
Apply alternating row colors for improved readability.
| Lead | Stage | Contact |
---|---|---|---|
| Alice Smith | New | alice.smith@example.com |
| Bob Johnson | In Progress | bob.johnson@example.com |
| Carol Williams | Completed | carol.williams@example.com |
| David Brown | Urgent | david.brown@example.com |
<.table>
<.table_head>
<:col><.checkbox name="select-all" /></:col>
<:col>Lead</:col>
<:col>Stage</:col>
<:col>Contact</:col>
</.table_head>
<.table_body>
<.table_row :for={lead <- @leads} striped>
<:cell><.checkbox name="selected_leads[]" /></:cell>
<:cell><%= lead.name %></:cell>
<:cell><%= lead.stage %></:cell>
<:cell><%= lead.contact %></:cell>
</.table_row>
</.table_body>
</.table>
Clickable rows
Enable row interactions with hover effects and click actions.
Lead | Stage | Contact |
---|---|---|
Alice Smith | New | alice.smith@example.com |
Bob Johnson | In Progress | bob.johnson@example.com |
Carol Williams | Completed | carol.williams@example.com |
David Brown | Urgent | david.brown@example.com |
<.table>
<.table_head>
<:col>Lead</:col>
<:col>Stage</:col>
<:col>Contact</:col>
</.table_head>
<.table_body>
<.table_row
:for={lead <- @leads}
id={"lead-#{lead.id}"}
phx-click="remove-lead"
phx-value-id={lead.id}
>
<:cell><%= lead.name %></:cell>
<:cell><%= lead.stage %></:cell>
<:cell><%= lead.contact %></:cell>
</.table_row>
</.table_body>
</.table>
Clickable headers
Add sorting functionality to column headers.
Lead
|
Priority
|
Contact
|
---|---|---|
Alice Smith | 2 | alice.smith@example.com |
Bob Johnson | 3 | bob.johnson@example.com |
Carol Williams | 1 | carol.williams@example.com |
David Brown | 4 | david.brown@example.com |
<.table>
<.table_head>
<:col phx-click="sort" phx-value-column="name">
<div class="flex items-center gap-1">
Lead
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="size-4 text-zinc-400 dark:text-zinc-600">
<path fill="currentColor" d="M11 7H5l3-4z" />
<path fill="currentColor" d="M5 9h6l-3 4z" />
</svg>
</div>
</:col>
<:col phx-click="sort" phx-value-column="stage">
<div class="flex items-center gap-1">
Stage
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="size-4 text-zinc-400 dark:text-zinc-600">
<path fill="currentColor" d="M11 7H5l3-4z" />
<path fill="currentColor" d="M5 9h6l-3 4z" />
</svg>
</div>
</:col>
<:col phx-click="sort" phx-value-column="contact">
<div class="flex items-center gap-1">
Contact
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" class="size-4 text-zinc-400 dark:text-zinc-600">
<path fill="currentColor" d="M11 7H5l3-4z" />
<path fill="currentColor" d="M5 9h6l-3 4z" />
</svg>
</div>
</:col>
</.table_head>
<.table_body>
<.table_row :for={lead <- @leads}>
<:cell><%= lead.name %></:cell>
<:cell><%= lead.stage %></:cell>
<:cell><%= lead.contact %></:cell>
</.table_row>
</.table_body>
</.table>