Pagination
Une navigation par pages qui garde chaque bouton en place, glisse vers la page courante et permet d’accéder à n’importe quelle page depuis les points de suspension.
Showing 1–10 of 248 results
pnpm dlx shadcn@latest add https://hextaui.com/r/pagination.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 @base-ui/react @tabler/icons-react class-variance-authority cnCopiez et collez le code suivant dans votre projet.
components/ui/pagination.tsx components/ui/button.tsx lib/motion.ts Mettez à jour les chemins d’import selon la configuration de votre projet.
Donnez un count à Pagination et elle construit toute la barre. Elle affiche toujours le même nombre d'emplacements, si bien que Précédent, Suivant et les numéros ne bougent jamais sous votre curseur quand vous parcourez les pages. Omettez count pour composer vous-même les parties.
Aller à une page
Cliquez sur des points de suspension pour saisir un numéro de page. Enter saute à la page, un nombre hors plage fait trembler le champ, et Esc remet les points de suspension. Désactivez-le avec jump={false}.
Compact
Quand la barre ne tient pas dans son conteneur, elle passe à Précédent, « Page 4 sur 24 » et Suivant, et revient quand la place le permet. Le label est aussi un champ de saut. Forcez l'une ou l'autre disposition avec compact.
Liens
Avec getPageHref, chaque page est un vrai lien, qui peut donc s'ouvrir dans un nouvel onglet. Un simple clic appelle toujours onPageChange.
Composable
Sans count, construisez la barre à partir des parties, comme dans shadcn/ui. Passez render pour utiliser le lien de votre routeur.
De droite à gauche
usePagination renvoie les éléments de page et de points de suspension pour des mises en page personnalisées. Les chevrons s'inversent dans le texte de droite à gauche.
| Touche | Action |
|---|---|
| Tab | Entre dans la barre et en sort. Précédent et Suivant restent focalisables aux extrémités. |
| ←→ | Se déplace entre Précédent, les pages et Suivant. S'inverse dans les mises en page de droite à gauche. |
| HomeEnd | Va au premier ou au dernier élément. |
| Enter | Ouvre la page ou le champ de page qui a le focus. Dans le champ, saute à cette page et lui donne le focus. |
| Esc | Ferme le champ de page et rend le focus aux points de suspension. |
- La racine est un
<nav>avec le label « Pagination », et la page courante portearia-current="page". - À la première et à la dernière page, Précédent et Suivant utilisent
aria-disabledplutôt quedisabled, pour ne pas perdre le focus en arrivant au bout. - L'indicateur glissant devient un fondu quand la réduction des animations est activée.
| Prop | Type | Par défaut |
|---|---|---|
countNombre total de pages. Lorsqu'il est défini, la barre est construite pour vous ; omettez-le pour composer les parties. | number | – |
page | number | – |
defaultPage | number | 1 |
onPageChange | (page: number) => void | – |
getPageHrefRend les pages comme des liens plutôt que des boutons. | (page: number) => string | – |
siblingsPages affichées de chaque côté de la page courante. | number | 1 |
boundariesPages toujours affichées au début et à la fin. | number | 1 |
compactauto passe à Précédent, « Page x sur y » et Suivant quand la barre ne tient pas. | boolean | "auto" | "auto" |
jumpPermet aux points de suspension d'ouvrir un champ de page. | boolean | true |
| Attribut | Description |
|---|---|
data-slot="pagination" | La nav. |
data-slot="pagination-indicator" | L'arrière-plan qui glisse jusqu'à la page courante. |
| Prop | Type | Par défaut |
|---|---|---|
isActiveMarque la page courante avec aria-current="page". | boolean | false |
disabledDéfinit aria-disabled et ignore les clics. | boolean | false |
render | ReactElement | (props, state) => ReactElement | <a> |
| Attribut | Description |
|---|---|
data-slot="pagination-link" | Cible les liens de page en CSS. |
data-active | Présent sur la page courante. |
| Prop | Type | Par défaut |
|---|---|---|
textPassez null pour un bouton réduit à une icône. | ReactNode | "Previous" / "Next" |
disabled | boolean | false |
| Prop | Type | Par défaut |
|---|---|---|
onJumpFait des points de suspension un champ de page. Sans cela, ils sont décoratifs. | (page: number) => void | – |
countLa page la plus haute que le champ accepte. | number | – |
| Prop | Type | Par défaut |
|---|---|---|
page | number | – |
count | number | – |
siblings | number | 1 |
boundaries | number | 1 |
Renvoie items, la page et le count bornés, ainsi que hasPrevious et hasNext. Consultez le guide de usePagination pour construire votre propre pagination.
- ButtonDes boutons dans toutes les variantes et tailles, avec un flux de chargement, de succès et d’erreur intégré qui évite le spinner pour les requêtes rapides.
- MotionLes courbes d’easing, les durées et la vérification de réduction des animations utilisées par chaque composant, ainsi que des hooks pour les morphs de taille et les surlignages glissants.
- usePaginationTransforme une page et un nombre de pages en liste de pages et de points de suspension à afficher, en gardant une longueur stable quand la page change.
- BreadcrumbUn fil d’Ariane vers la page courante qui passe à la ligne sans risque, s’inverse dans les mises en page de droite à gauche et déploie les segments réduits sur place.
- Navigation menuUne navigation de site avec menus déroulants, ou un seul panneau pleine largeur qui reste ouvert pendant que son contenu glisse d’un menu à l’autre.
- SidebarUne barre latérale d’application qui se réduit en icônes ou hors canevas, reste épinglée sous votre en-tête et devient une sheet balayable sur mobile.