Negocios

Data Table

Tabela de dados estruturada e estilizada com Table shadcn. Para tabelas avançadas com ordenação e filtros, use TanStack Table.

Visão geral

Data Table é construído sobre os componentes Table do shadcn. Para funcionalidades avançadas (sort, filter, pagination), integrate com @tanstack/react-table.

Tabela de faturas

Lista de faturas recentes.
IDClienteStatusVencimentoValor
INV-001Lucas Zerlotiniativo2025-06-01R$ 1.250,00
INV-002Ana Carolinapendente2025-05-28R$ 3.800,00
INV-003Roberto Fariainativo2025-04-15R$ 720,00
INV-004Mariana Souzaativo2025-06-10R$ 5.100,00
INV-005Paulo Henriquependente2025-05-30R$ 980,00
TotalR$ 11.850,00

Import

import { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "@/components/ui/table"

Com ações por linha

Padrão comum para tabelas que precisam de ações por item.

NomeStatusValorAções
Lucas ZerlotiniativoR$ 1.250,00
Ana CarolinapendenteR$ 3.800,00
Roberto FariainativoR$ 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