Data Table
Tabela de dados estruturada e estilizada com Table shadcn. Para tabelas avançadas com ordenação e filtros, use TanStack Table.
Com ações por linha
Padrão comum para tabelas que precisam de ações por item.
| Nome | Status | Valor | Ações |
|---|---|---|---|
| Lucas Zerlotini | ativo | R$ 1.250,00 | |
| Ana Carolina | pendente | R$ 3.800,00 | |
| Roberto Faria | inativo | R$ 720,00 |
Linha com ações
<TableRow key={item.id}>
<TableCell>{item.nome}</TableCell>
<TableCell>
<Badge variant="default">{item.status}</Badge>
</TableCell>
<TableCell className="text-right">
<Button size="xs" variant="ghost">Editar</Button>
<Button size="xs" variant="ghost" className="text-destructive">
Excluir
</Button>
</TableCell>
</TableRow>Com TanStack Table (avançado)
Para ordenação, filtros, paginação e seleção, use @tanstack/react-table com o Table shadcn.
Estrutura com TanStack Table
"use client"
import {
useReactTable, getCoreRowModel, flexRender,
type ColumnDef,
} from "@tanstack/react-table"
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
interface DataTableProps<TData, TValue> {
columns: ColumnDef<TData, TValue>[]
data: TData[]
}
export function DataTable<TData, TValue>({
columns, data
}: DataTableProps<TData, TValue>) {
const table = useReactTable({
data,
columns,
getCoreRowModel: getCoreRowModel(),
})
return (
<Table>
<TableHeader>
{table.getHeaderGroups().map((headerGroup) => (
<TableRow key={headerGroup.id}>
{headerGroup.headers.map((header) => (
<TableHead key={header.id}>
{flexRender(header.column.columnDef.header, header.getContext())}
</TableHead>
))}
</TableRow>
))}
</TableHeader>
<TableBody>
{table.getRowModel().rows.map((row) => (
<TableRow key={row.id}>
{row.getVisibleCells().map((cell) => (
<TableCell key={cell.id}>
{flexRender(cell.column.columnDef.cell, cell.getContext())}
</TableCell>
))}
</TableRow>
))}
</TableBody>
</Table>
)
}Sub-componentes do Table
API dos componentes disponíveis no projeto.
Sub-componentes
Table
Container com overflow e scroll responsivo.
TableHeader
Bloco thead.
TableBody
Bloco tbody.
TableFooter
Bloco tfoot com estilo diferenciado.
TableRow
Linha da tabela com hover.
TableHead
Célula de cabeçalho (th).
TableCell
Célula de dados (td).
TableCaption
Legenda da tabela.
Acessibilidade
Use sempre TableHead para colunas de dados, pois ele renderiza th scope="col" automaticamente.
Para tabelas com muitas colunas, adicione TableCaption descritivo para identificação por leitores de tela.
Para ordenação por coluna, use aria-sort no TableHead ativo.
MN Design System · Primary #5FC318 · Brand Green #AFF000 · Font: Inter