Table
Uma tabela responsiva com estilo de superfície, células com quebra de linha ou compactas, cabeçalhos fixos, colunas fixadas e indicações de rolagem.
| Invoice | Client | Status | Amount |
|---|---|---|---|
| INV-0418 | Northwind | $2,400.00 | |
| INV-0419 | Globex | $860.00 | |
| INV-0420 | Initech | $1,320.50 | |
| INV-0421 | Umbrella | $415.00 | |
| Total | $4,995.50 | ||
pnpm dlx shadcn@latest add https://hextaui.com/r/table.jsonAdiciona o componente, os tokens de tema do HextaUI e quaisquer componentes do HextaUI dos quais ele depende.
Adicione os tokens de tema ao seu CSS global, se ainda não o fez.
Instale as dependências.
pnpm add class-variance-authority cnCopie e cole o código a seguir no seu projeto.
components/ui/table.tsx Atualize os caminhos de importação para corresponder à configuração do seu projeto.
Use <TableHead scope="row"> para a célula que nomeia cada linha. Ela é lida como o cabeçalho da linha pelos leitores de tela e recebe uma cor de texto mais forte. Para ordenação, filtragem e seleção, construa sobre <DataTable />.
Padrão
A variante padrão não tem superfície, apenas linhas finas entre as linhas, para tabelas dentro de um card ou de uma seção da página. <TableCaption /> descreve a tabela abaixo dele.
Compacto
size="sm" reduz a altura da linha e o padding para dados densos.
Texto com quebra de linha
As células ficam em uma linha por padrão, o que serve para dados. wrap permite que quebrem e alinha as linhas ao topo, para prosa como glossários ou referências de API. Combine com table-fixed e larguras de coluna.
Tabelas largas
Tabelas mais largas que o contêiner rolam para o lado. Esmaecimentos suaves mostram que há mais de cada lado, e a área de rolagem fica focável para que usuários de teclado possam rolá-la com as setas. Desative os esmaecimentos com scrollFade={false}.
Coluna fixa
pinned="start" mantém a primeira coluna à vista enquanto o resto rola, e pinnedEdge mostra uma sombra quando o conteúdo desliza por baixo dela.
Cabeçalho fixo
stickyHeader mantém o cabeçalho à vista em uma tabela de altura limitada e adiciona uma linha fina sob ele quando as linhas rolam por baixo.
Da direita para a esquerda
Alinhamento, colunas fixas e esmaecimentos de rolagem seguem a direção de leitura.
| Tecla | Ação |
|---|---|
| Tab | Foca a área de rolagem quando a tabela transborda, depois os links e botões dentro dela. |
| ←→ | Rola para o lado uma tabela com foco que transborda. |
| ↑↓ | Rola para cima e para baixo uma tabela com foco e cabeçalho sticky. |
- As partes renderizam elementos nativos de tabela, então os leitores de tela anunciam linhas, colunas e cabeçalhos sem roles extras.
- Marque a célula que nomeia uma linha com
<TableHead scope="row">para que cada valor seja lido junto com sua linha e coluna. - A área de rolagem só entra na ordem de tabulação enquanto transborda, então tabelas que cabem não adicionam uma parada extra.
Cada parte renderiza seu elemento nativo e aceita seus atributos.
| Prop | Tipo | Padrão |
|---|---|---|
variantsurface adiciona uma moldura de linha fina arredondada e uma faixa de cabeçalho atenuada. | "default" | "surface" | "default" |
size | "sm" | "default" | "default" |
wrapPermite que o texto das células quebre e alinha as linhas ao topo. | boolean | false |
scrollFadeEsmaece as bordas que têm mais conteúdo para rolar. Ignorado quando há colunas fixas. | boolean | true |
stickyHeaderMantém o cabeçalho à vista. Dê ao contêiner uma altura máxima por containerClassName. | boolean | false |
containerClassNameClasses para o contêiner de rolagem. | string | – |
containerRefRef para o contêiner de rolagem. | Ref<HTMLDivElement> | – |
| Atributo | Descrição |
|---|---|
data-slot="table-frame" | A moldura externa, com data-variant, data-size e data-wrap. |
data-slot="table-container" | O contêiner de rolagem. |
data-overflowing | Presente no contêiner enquanto seu conteúdo transborda. Ele fica focável então. |
data-scrolled-start / data-scrolled-end | Presente enquanto há conteúdo oculto antes ou depois da área visível. |
data-scrolled-top | Presente depois que uma tabela com cabeçalho sticky rolou. |
--table-bg | Fundo da linha. Acompanha um card ou popover ao redor. |
--table-head-bg | Fundo da faixa do cabeçalho na variante surface. |
--table-cell-px / --table-cell-py | Padding das células. Definido por size. |
| Prop | Tipo | Padrão |
|---|---|---|
scopeUse row para a célula que nomeia uma linha. No corpo, recebe padding de célula e texto em primeiro plano. | "col" | "row" | – |
alignend também muda para números tabulares para os dígitos se alinharem. | "start" | "center" | "end" | "start" |
pinnedMantém a coluna à vista enquanto a tabela rola de lado. Defina o mesmo valor no cabeçalho e em todas as células. | "start" | "end" | – |
pinnedEdgeDesenha uma sombra suave na borda interna da última coluna fixa enquanto há conteúdo escondido atrás dela. | boolean | false |
| Atributo | Descrição |
|---|---|
data-slot="table-head" | Seleciona as células de cabeçalho no CSS. |
data-align | O alinhamento. |
data-pinned | O lado fixado. |
| Prop | Tipo | Padrão |
|---|---|---|
alignend também muda para números tabulares para os dígitos se alinharem. | "start" | "center" | "end" | "start" |
pinnedMantém a coluna à vista enquanto a tabela rola de lado. Defina o mesmo valor no cabeçalho e em todas as células. | "start" | "end" | – |
pinnedEdgeDesenha uma sombra suave na borda interna da última coluna fixa enquanto há conteúdo escondido atrás dela. | boolean | false |
| Atributo | Descrição |
|---|---|
data-slot="table-cell" | Seleciona as células no CSS. |
data-align | O alinhamento. |
data-pinned | O lado fixado. |
| Atributo | Descrição |
|---|---|
data-slot="table-row" | Seleciona as linhas no CSS. |
data-state="selected" | Defina para destacar uma linha selecionada. |
| Atributo | Descrição |
|---|---|
data-slot="table-header" | O thead. |
data-slot="table-body" | O tbody. |
data-slot="table-footer" | O tfoot, na cor da faixa do cabeçalho. |
data-slot="table-caption" | Abaixo da tabela. Na variante surface, fica dentro da moldura. |
- AvatarFotos de usuário com fallback de iniciais, badges de status e grupos empilhados que se recolhem em uma contagem.
- BadgeRótulos de status com pontos coloridos, tags removíveis que deslizam até fechar e contagens que rolam até o novo valor.
- CardUma superfície para agrupar conteúdo, com três variantes, mídia de ponta a ponta, raios concêntricos e links no card inteiro.
- ChartGráficos do Recharts com cores do tema, um tooltip e uma legenda que leem os rótulos de uma única configuração, e navegação por teclado com um anel de foco visível.
- Data tableUma tabela para dados reais, com ordenação, busca, seleção de linhas, colunas fixadas, cabeçalho fixo e paginação.
- ItemUma linha de mídia, texto e ações para listas, configurações e seletores, com uma superfície agrupada e um destaque de hover que desliza entre as linhas.
Usado em blocos
Blocos que se baseiam em Table.