Table
Un tableau responsive avec un style de surface, des cellules à retour à la ligne ou compactes, des en-têtes fixes, des colonnes épinglées et des indications de défilement.
| 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.jsonAjoute le composant, les tokens de thème HextaUI et les composants HextaUI dont il dépend.
Ajoutez les tokens de thème à votre CSS global, si ce n’est pas déjà fait.
Installez les dépendances.
pnpm add class-variance-authority cnCopiez et collez le code suivant dans votre projet.
components/ui/table.tsx Mettez à jour les chemins d’import selon la configuration de votre projet.
Utilisez <TableHead scope="row"> pour la cellule qui nomme chaque ligne. Elle est lue comme l'en-tête de la ligne par les lecteurs d'écran et reçoit une couleur de texte plus marquée. Pour le tri, le filtrage et la sélection, appuyez-vous sur <DataTable />.
Par défaut
La variante par défaut n'a pas de surface, juste des filets entre les lignes, pour les tableaux placés dans une carte ou une section de page. <TableCaption /> décrit le tableau en dessous.
Compact
size="sm" resserre la hauteur des lignes et le padding pour les données denses.
Texte à la ligne
Les cellules restent sur une seule ligne par défaut, ce qui convient aux données. wrap les laisse passer à la ligne et aligne les lignes en haut, pour de la prose comme des glossaires ou des références d'API. Associez-le à table-fixed et à des largeurs de colonnes.
Tableaux larges
Les tableaux plus larges que leur conteneur défilent latéralement. De doux fondus montrent qu'il y a plus de chaque côté, et la zone de défilement devient focalisable pour que les utilisateurs du clavier la fassent défiler avec les flèches. Désactivez les fondus avec scrollFade={false}.
Colonne épinglée
pinned="start" garde la première colonne visible pendant que le reste défile, et pinnedEdge affiche une ombre dès que du contenu glisse dessous.
En-tête fixe
stickyHeader garde l'en-tête visible dans un tableau à hauteur limitée, et ajoute un filet dessous dès que des lignes défilent derrière.
De droite à gauche
L'alignement, les colonnes épinglées et les fondus de défilement suivent le sens de lecture.
| Touche | Action |
|---|---|
| Tab | Donne le focus à la zone de défilement quand le tableau déborde, puis aux liens et boutons à l'intérieur. |
| ←→ | Fait défiler latéralement un tableau focalisé qui déborde. |
| ↑↓ | Fait défiler vers le haut et le bas un tableau focalisé à en-tête sticky. |
- Les parties rendent des éléments de tableau natifs : les lecteurs d'écran annoncent donc lignes, colonnes et en-têtes sans rôles supplémentaires.
- Marquez la cellule qui nomme une ligne avec
<TableHead scope="row">pour que chaque valeur soit lue avec sa ligne et sa colonne. - La zone de défilement n'entre dans l'ordre de tabulation que lorsqu'elle déborde, si bien que les tableaux qui tiennent n'ajoutent pas d'arrêt superflu.
Chaque partie rend son élément natif et accepte ses attributs.
| Prop | Type | Par défaut |
|---|---|---|
variantsurface ajoute un cadre arrondi en filet et une bande d'en-tête atténuée. | "default" | "surface" | "default" |
size | "sm" | "default" | "default" |
wrapLaisse le texte des cellules passer à la ligne et aligne les lignes en haut. | boolean | false |
scrollFadeEstompe les bords qui ont plus de contenu à faire défiler. Ignoré quand des colonnes sont épinglées. | boolean | true |
stickyHeaderGarde l'en-tête visible. Donnez au conteneur une hauteur maximale via containerClassName. | boolean | false |
containerClassNameClasses pour le conteneur de défilement. | string | – |
containerRefRef vers le conteneur de défilement. | Ref<HTMLDivElement> | – |
| Attribut | Description |
|---|---|
data-slot="table-frame" | Le cadre extérieur, avec data-variant, data-size et data-wrap. |
data-slot="table-container" | Le conteneur de défilement. |
data-overflowing | Présent sur le conteneur tant que son contenu déborde. Il est alors focalisable. |
data-scrolled-start / data-scrolled-end | Présent tant que du contenu est caché avant ou après la zone visible. |
data-scrolled-top | Présent une fois qu'un tableau à en-tête sticky a défilé. |
--table-bg | Arrière-plan de la ligne. Suit une carte ou un popover englobant. |
--table-head-bg | Arrière-plan de la bande d'en-tête dans la variante surface. |
--table-cell-px / --table-cell-py | Padding des cellules. Défini par size. |
| Prop | Type | Par défaut |
|---|---|---|
scopeUtilisez row pour la cellule qui nomme une ligne. Dans le corps, elle reçoit le padding des cellules et le texte de premier plan. | "col" | "row" | – |
alignend passe aussi aux chiffres tabulaires pour aligner les chiffres. | "start" | "center" | "end" | "start" |
pinnedGarde la colonne visible pendant le défilement latéral du tableau. Définissez la même valeur sur son en-tête et sur chaque cellule. | "start" | "end" | – |
pinnedEdgeTrace une ombre douce sur le bord intérieur de la dernière colonne épinglée tant que du contenu est caché derrière. | boolean | false |
| Attribut | Description |
|---|---|
data-slot="table-head" | Cible les cellules d'en-tête en CSS. |
data-align | L'alignement. |
data-pinned | Le côté épinglé. |
| Prop | Type | Par défaut |
|---|---|---|
alignend passe aussi aux chiffres tabulaires pour aligner les chiffres. | "start" | "center" | "end" | "start" |
pinnedGarde la colonne visible pendant le défilement latéral du tableau. Définissez la même valeur sur son en-tête et sur chaque cellule. | "start" | "end" | – |
pinnedEdgeTrace une ombre douce sur le bord intérieur de la dernière colonne épinglée tant que du contenu est caché derrière. | boolean | false |
| Attribut | Description |
|---|---|
data-slot="table-cell" | Cible les cellules en CSS. |
data-align | L'alignement. |
data-pinned | Le côté épinglé. |
| Attribut | Description |
|---|---|
data-slot="table-row" | Cible les lignes en CSS. |
data-state="selected" | Définissez-le pour mettre en évidence une ligne sélectionnée. |
| Attribut | Description |
|---|---|
data-slot="table-header" | Le thead. |
data-slot="table-body" | Le tbody. |
data-slot="table-footer" | Le tfoot, sur la couleur de la bande d'en-tête. |
data-slot="table-caption" | Sous le tableau. Dans la variante surface, il se place à l'intérieur du cadre. |
- AvatarDes photos d’utilisateurs avec initiales en repli, badges de statut et groupes empilés qui se réduisent en compteur.
- BadgeDes libellés de statut avec pastilles colorées, des tags amovibles qui se referment en glissant et des compteurs qui défilent vers leur nouvelle valeur.
- CardUne surface pour regrouper du contenu, avec trois variantes, médias bord à bord, rayons concentriques et liens sur toute la carte.
- ChartDes graphiques Recharts aux couleurs du thème, avec une infobulle et une légende qui lisent leurs libellés depuis une seule config, et une navigation au clavier avec anneau de focus visible.
- Data tableUn tableau pour de vraies données, avec tri, recherche, sélection de lignes, colonnes épinglées, en-tête fixe et pagination.
- ItemUne ligne de média, de texte et d’actions pour les listes, réglages et sélecteurs, avec une surface groupée et une surbrillance de survol qui glisse d’une ligne à l’autre.
Utilisé dans les blocks
Des blocks qui s’appuient sur Table.