Table: HextaUI e shadcn/ui

O Table do HextaUI mantém os nomes e tokens de tema do shadcn/ui e instala com a mesma CLI. Esta página lista o que muda, lido do código de ambos. O lado do shadcn/ui é o registro base-vega em 2026-10-16.

Visão geral

MedidaHextaUIshadcn/ui
Partes exportadas88
Props tratadas pelo wrapper130
Linhas de código298115
Dependências do npmclass-variance-authoritycncn
Construído comtheme–

Mais código não é melhor por si só. A maior parte das linhas extras do HextaUI cuida de estados, animações e casos extremos que você escreveria por conta própria.

Props que o HextaUI adiciona

Props que o próprio wrapper do HextaUI trata e o do shadcn/ui não. Props repassadas direto ao Base UI ou à biblioteca por baixo ficam de fora, porque as duas versões as aceitam.

PropO que faz
wrapTablePermite que o texto das células quebre e alinha as linhas ao topo.
scrollFadeTableEsmaece as bordas que têm mais conteúdo para rolar. Ignorado quando há colunas fixas.
stickyHeaderTableMantém o cabeçalho à vista. Dê ao contêiner uma altura máxima por containerClassName.
containerClassNameTableClasses para o contêiner de rolagem.
containerRefTableRef para o contêiner de rolagem.
alignTableHeadend também muda para números tabulares para os dígitos se alinharem.
pinnedTableHeadMantém a coluna à vista enquanto a tabela rola de lado. Defina o mesmo valor no cabeçalho e em todas as células.
pinnedEdgeTableHeadDesenha uma sombra suave na borda interna da última coluna fixa enquanto há conteúdo escondido atrás dela.
alignTableCellend também muda para números tabulares para os dígitos se alinharem.
pinnedTableCellMantém a coluna à vista enquanto a tabela rola de lado. Defina o mesmo valor no cabeçalho e em todas as células.
pinnedEdgeTableCellDesenha uma sombra suave na borda interna da última coluna fixa enquanto há conteúdo escondido atrás dela.

Variantes

PropEm ambosSó HextaUISó shadcn/ui
variantTable–defaultsurface–
sizeTable–smdefault–

A versão do HextaUI

InvoiceClientStatusAmount
INV-0418NorthwindPaid$2,400.00
INV-0419GlobexPending$860.00
INV-0420InitechPaid$1,320.50
INV-0421UmbrellaOverdue$415.00
Total$4,995.50
import { Badge, BadgeDot } from "@/components/ui/badge"
import {
  Table,
  TableBody,
  TableCell,
  TableFooter,
  TableHead,
  TableHeader,
  TableRow,
} from "@/components/ui/table"

const invoices = [
  { id: "INV-0418", client: "Northwind", status: "Paid", amount: 2400 },
  { id: "INV-0419", client: "Globex", status: "Pending", amount: 860 },
  { id: "INV-0420", client: "Initech", status: "Paid", amount: 1320.5 },
  { id: "INV-0421", client: "Umbrella", status: "Overdue", amount: 415 },
]

const currency = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
})

const tones = {
  Paid: "success",
  Pending: "info",
  Overdue: "destructive",
} as const

export function TableDemo() {
  const total = invoices.reduce((sum, invoice) => sum + invoice.amount, 0)

  return (
    <Table variant="surface" className="min-w-md">
      <TableHeader>
        <TableRow>
          <TableHead>Invoice</TableHead>
          <TableHead>Client</TableHead>
          <TableHead>Status</TableHead>
          <TableHead align="end">Amount</TableHead>
        </TableRow>
      </TableHeader>
      <TableBody>
        {invoices.map((invoice) => (
          <TableRow key={invoice.id}>
            <TableHead scope="row">{invoice.id}</TableHead>
            <TableCell>{invoice.client}</TableCell>
            <TableCell>
              <Badge variant={tones[invoice.status as keyof typeof tones]}>
                <BadgeDot />
                {invoice.status}
              </Badge>
            </TableCell>
            <TableCell align="end">{currency.format(invoice.amount)}</TableCell>
          </TableRow>
        ))}
      </TableBody>
      <TableFooter>
        <TableRow>
          <TableCell colSpan={3}>Total</TableCell>
          <TableCell align="end">{currency.format(total)}</TableCell>
        </TableRow>
      </TableFooter>
    </Table>
  )
}

Todos os estados, o mapa de teclado e a referência da API estão na página do componente.

7 dos seus exemplos também têm uma página própria.

Troque um componente

Rode o comando add com --overwrite para substituir o arquivo do shadcn/ui em @/components/ui e revise o diff no git antes de mantê-lo. Os imports continuam iguais e os componentes que você não trocar seguem funcionando.

pnpm dlx shadcn@latest add https://hextaui.com/r/table.json --overwrite
  • Cada prop da tabela acima é nova, então o código escrito para o shadcn/ui ainda não a passa.
  • Antes de trocar, confira qualquer parte ou variante listada só para o shadcn/ui e associe-a à mais próxima do HextaUI.

Outros componentes comparados

Mais comparações