Breadcrumb
Un 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.
pnpm dlx shadcn@latest add https://hextaui.com/r/breadcrumb.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 cnCopiez et collez le code suivant dans votre projet.
components/ui/breadcrumb.tsx lib/motion.ts Mettez à jour les chemins d’import selon la configuration de votre projet.
Avec des icônes
Les icônes se placent dans les liens et la page courante. Donnez un aria-label à un lien réduit à une icône.
Séparateur personnalisé
Passez n’importe quel élément comme children de <BreadcrumbSeparator /> pour remplacer le chevron.
Dropdown
Rendez un <BreadcrumbLink /> comme déclencheur d’un <DropdownMenu /> pour proposer des pages sœurs.
Replié
Enveloppez les segments du milieu dans <BreadcrumbCollapse />. Ils se cachent derrière des points de suspension et s’ouvrent en glissant sur place, et le focus passe au premier lien révélé. Passez open et onOpenChange pour le contrôler.
Points de suspension
Un <BreadcrumbEllipsis /> statique marque les niveaux omis. Il est masqué aux technologies d’assistance sauf si vous le rendez interactif.
Composant de lien
Utilisez la prop render pour remplacer l’ancre par le lien de votre routeur, comme <Link /> de Next.js.
Contenu long
Les noms sans coupure passent à la ligne au lieu de déborder, et les segments avec une largeur maximale sont tronqués.
De droite à gauche
Les séparateurs s’inversent et le repli s’anime du bon côté.
Les liens et le bouton de repli sont des arrêts de tabulation ordinaires. Les séparateurs et des points de suspension statiques sont ignorés.
| Touche | Action |
|---|---|
| TabShift + Tab | Passe d’un lien à l’autre et au bouton de repli. |
| Enter | Suit le lien ayant le focus. |
| EnterSpace | Sur le bouton de repli, révèle les segments masqués. Une fois qu’ils ont fini de s’ouvrir en glissant, le focus passe au premier lien révélé. |
Chaque partie accepte les attributs de l’élément qu’elle rend, ainsi qu’une prop render pour remplacer cet élément.
| Prop | Type | Par défaut |
|---|---|---|
renderÉtiqueté « Breadcrumb » pour les technologies d’assistance. | ReactElement | (props, state) => ReactElement | <nav> |
| Attribut | Description |
|---|---|
data-slot="breadcrumb" | Le repère <nav>. |
| Prop | Type | Par défaut |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <ol> |
| Attribut | Description |
|---|---|
data-slot="breadcrumb-list" | La liste ordonnée. Les éléments passent à la ligne lorsque la place manque. |
| Prop | Type | Par défaut |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <li> |
| Attribut | Description |
|---|---|
data-slot="breadcrumb-item" | Ciblez les items en CSS. |
data-collapsed | Présent tant que l’élément est masqué dans un BreadcrumbCollapse fermé. |
data-breadcrumb-group | Présent sur les éléments d’un BreadcrumbCollapse. Partagé par toutes les parties d’un même groupe. |
| Prop | Type | Par défaut |
|---|---|---|
href | string | – |
renderPassez ici le composant de lien de votre routeur. | ReactElement | (props, state) => ReactElement | <a> |
| Attribut | Description |
|---|---|
data-slot="breadcrumb-link" | Ciblez les liens en CSS. |
| Prop | Type | Par défaut |
|---|---|---|
renderMarquée avec aria-current="page". | ReactElement | (props, state) => ReactElement | <span> |
| Attribut | Description |
|---|---|
data-slot="breadcrumb-page" | La page courante, avec aria-current="page". |
| Prop | Type | Par défaut |
|---|---|---|
childrenS’inverse automatiquement dans les mises en page de droite à gauche. | ReactNode | <IconChevronRight /> |
render | ReactElement | (props, state) => ReactElement | <li> |
| Attribut | Description |
|---|---|
data-slot="breadcrumb-separator" | Purement visuel et masqué aux technologies d’assistance. |
data-collapsed | Présent tant que le séparateur est masqué dans un BreadcrumbCollapse fermé. |
data-breadcrumb-group | Présent sur les séparateurs d’un BreadcrumbCollapse. |
| Prop | Type | Par défaut |
|---|---|---|
children | ReactNode | <IconDots /> |
renderMasqué aux technologies d’assistance, sauf si render ou onClick le rend interactif. | ReactElement | (props, state) => ReactElement | <span> |
| Attribut | Description |
|---|---|
data-slot="breadcrumb-ellipsis" | Ciblez les points de suspension en CSS. |
| Prop | Type | Par défaut |
|---|---|---|
childrenLes éléments et séparateurs à masquer derrière les points de suspension. | ReactNode | – |
open | boolean | – |
defaultOpen | boolean | false |
onOpenChange | (open: boolean) => void | – |
labelNom accessible du bouton de points de suspension. | string | "Show full path" |
| Attribut | Description |
|---|---|
data-slot="breadcrumb-collapse" | Le <li> qui contient le bouton de points de suspension. |
data-collapsed | Présent sur l’élément de points de suspension une fois le groupe ouvert, ce qui le masque. |
- 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.
- 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.
- PaginationUne 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.
- 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.
- TabsPassez d’une vue à l’autre avec un indicateur qui glisse vers l’onglet actif, en contrôle segmenté ou souligné, et des listes qui défilent en cas de débordement.