Table
Una tabla responsive con estilo de superficie, celdas que se ajustan o compactas, encabezados fijos, columnas ancladas e indicadores de desplazamiento.
| 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.jsonAñade el componente, los tokens del tema de HextaUI y los componentes de HextaUI de los que depende.
Añade los tokens del tema a tu CSS global, si aún no lo has hecho.
Instala las dependencias.
pnpm add class-variance-authority cnCopia y pega el siguiente código en tu proyecto.
components/ui/table.tsx Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
Usa <TableHead scope="row"> para la celda que da nombre a cada fila. Los lectores de pantalla la leen como el encabezado de la fila y recibe un color de texto más marcado. Para ordenar, filtrar y seleccionar, construye sobre <DataTable />.
Predeterminado
La variante por defecto no tiene superficie, solo líneas finas entre filas, para tablas que van dentro de una tarjeta o una sección de página. <TableCaption /> describe la tabla que tiene debajo.
Compacto
size="sm" reduce la altura de las filas y el relleno para datos densos.
Texto con ajuste
Las celdas permanecen en una sola línea por defecto, lo que encaja con los datos. wrap permite que se ajusten y alinea las filas arriba, para prosa como glosarios o referencias de API. Combínalo con table-fixed y anchos de columna.
Tablas anchas
Las tablas más anchas que su contenedor se desplazan lateralmente. Unos degradados suaves indican que hay más a cada lado, y el área de scroll se vuelve enfocable para que los usuarios de teclado puedan desplazarla con las flechas. Desactiva los degradados con scrollFade={false}.
Columna fijada
pinned="start" mantiene la primera columna a la vista mientras el resto se desplaza, y pinnedEdge muestra una sombra cuando el contenido se desliza por debajo.
Encabezado fijo
stickyHeader mantiene el encabezado a la vista en una tabla de altura limitada, y añade una línea fina debajo cuando las filas se desplazan por debajo.
De derecha a izquierda
La alineación, las columnas fijadas y los degradados de scroll siguen la dirección de lectura.
| Key | Acción |
|---|---|
| Tab | Enfoca el área de scroll cuando la tabla se desborda, y luego los enlaces y botones de su interior. |
| ←→ | Desplaza lateralmente una tabla enfocada que se desborda. |
| ↑↓ | Desplaza hacia arriba y abajo una tabla enfocada con encabezado sticky. |
- Las partes renderizan elementos de tabla nativos, así que los lectores de pantalla anuncian filas, columnas y encabezados sin roles adicionales.
- Marca la celda que da nombre a una fila con
<TableHead scope="row">para que cada valor se lea junto con su fila y su columna. - El área de scroll solo entra en el orden de tabulación mientras se desborda, así que las tablas que caben no añaden una parada extra.
Cada parte renderiza su elemento nativo y acepta sus atributos.
| Prop | Tipo | Predeterminado |
|---|---|---|
variantsurface añade un marco redondeado de línea fina y una banda de encabezado atenuada. | "default" | "surface" | "default" |
size | "sm" | "default" | "default" |
wrapPermite que el texto de las celdas se ajuste y alinea las filas arriba. | boolean | false |
scrollFadeDesvanece los bordes que tienen más contenido por desplazar. Se omite cuando hay columnas fijadas. | boolean | true |
stickyHeaderMantiene el encabezado a la vista. Dale al contenedor una altura máxima mediante containerClassName. | boolean | false |
containerClassNameClases para el contenedor de scroll. | string | – |
containerRefRef al contenedor de scroll. | Ref<HTMLDivElement> | – |
| Atributo | Descripción |
|---|---|
data-slot="table-frame" | El marco exterior, con data-variant, data-size y data-wrap. |
data-slot="table-container" | El contenedor de desplazamiento. |
data-overflowing | Presente en el contenedor mientras su contenido se desborda. Entonces es enfocable. |
data-scrolled-start / data-scrolled-end | Presente mientras hay contenido oculto antes o después del área visible. |
data-scrolled-top | Presente una vez que una tabla con encabezado sticky ha hecho scroll. |
--table-bg | Fondo de la fila. Sigue al card o popover que la rodea. |
--table-head-bg | Fondo de la banda del encabezado en la variante surface. |
--table-cell-px / --table-cell-py | Relleno de las celdas. Definido por size. |
| Prop | Tipo | Predeterminado |
|---|---|---|
scopeUsa row para la celda que da nombre a una fila. Dentro del cuerpo recibe el relleno de celda y el texto de primer plano. | "col" | "row" | – |
alignend también cambia a números tabulares para que los dígitos se alineen. | "start" | "center" | "end" | "start" |
pinnedMantiene la columna a la vista mientras la tabla se desplaza lateralmente. Define el mismo valor en su encabezado y en todas sus celdas. | "start" | "end" | – |
pinnedEdgeDibuja una sombra suave en el borde interior de la última columna fijada mientras hay contenido oculto detrás. | boolean | false |
| Atributo | Descripción |
|---|---|
data-slot="table-head" | Apunta a las celdas de encabezado en CSS. |
data-align | La alineación. |
data-pinned | El lado fijado. |
| Prop | Tipo | Predeterminado |
|---|---|---|
alignend también cambia a números tabulares para que los dígitos se alineen. | "start" | "center" | "end" | "start" |
pinnedMantiene la columna a la vista mientras la tabla se desplaza lateralmente. Define el mismo valor en su encabezado y en todas sus celdas. | "start" | "end" | – |
pinnedEdgeDibuja una sombra suave en el borde interior de la última columna fijada mientras hay contenido oculto detrás. | boolean | false |
| Atributo | Descripción |
|---|---|
data-slot="table-cell" | Apunta a las celdas en CSS. |
data-align | La alineación. |
data-pinned | El lado fijado. |
| Atributo | Descripción |
|---|---|
data-slot="table-row" | Apunta a las filas en CSS. |
data-state="selected" | Defínelo para resaltar una fila seleccionada. |
| Atributo | Descripción |
|---|---|
data-slot="table-header" | El thead. |
data-slot="table-body" | El tbody. |
data-slot="table-footer" | El tfoot, con el color de la banda del encabezado. |
data-slot="table-caption" | Debajo de la tabla. En la variante surface queda dentro del marco. |
- AvatarFotos de usuario con iniciales como alternativa, insignias de estado y grupos apilados que se colapsan en un contador.
- BadgeEtiquetas de estado con puntos de color, tags eliminables que se deslizan al cerrarse y contadores que ruedan hasta su nuevo valor.
- CardUna superficie para agrupar contenido, con tres variantes, contenido multimedia de borde a borde, radios concéntricos y enlaces en toda la tarjeta.
- ChartGráficos de Recharts con colores del tema, un tooltip y una leyenda que leen las etiquetas de una sola configuración, y navegación con teclado con un anillo de foco visible.
- Data tableUna tabla para datos reales, con ordenación, búsqueda, selección de filas, columnas fijadas, un encabezado fijo y paginación.
- ItemUna fila de contenido multimedia, texto y acciones para listas, ajustes y selectores, con una superficie agrupada y un resaltado al pasar el cursor que se desliza entre filas.
Usado en bloques
Bloques que se construyen sobre Table.