Breadcrumbs

Hierarchy trail leading to the current page, built on React Aria.

import { Breadcrumbs } from "@pockets-ui/components"

Anatomy

PartRole
Breadcrumbs.RootThe <ol>. Takes aria-label, isDisabled, onAction.
Breadcrumbs.ItemOne crumb (<li>) — a link plus its trailing separator.
Breadcrumbs.LinkThe link itself. Omit href for the current page.
Breadcrumbs.SeparatorThe divider. Defaults to a chevron; pass children to swap.

When breadcrumbs act as a page's main navigation, wrap the root in <nav aria-label="Breadcrumbs"> to create a navigation landmark — the root renders a list, not a landmark, on its own.

Basic

The final crumb represents the current page, so it takes no href and no trailing separator. React Aria marks it aria-current="page" for you.

  1. Home
  2. Components
  3. Breadcrumbs
Code
import { Breadcrumbs } from "@pockets-ui/components"

export default function BreadcrumbsBasic() {
  return (
    <Breadcrumbs.Root aria-label="Breadcrumbs">
      <Breadcrumbs.Item>
        <Breadcrumbs.Link href="/">Home</Breadcrumbs.Link>
        <Breadcrumbs.Separator />
      </Breadcrumbs.Item>
      <Breadcrumbs.Item>
        <Breadcrumbs.Link href="/components">Components</Breadcrumbs.Link>
        <Breadcrumbs.Separator />
      </Breadcrumbs.Item>
      {/* The last item has no href and no separator — it's the current page. */}
      <Breadcrumbs.Item>
        <Breadcrumbs.Link>Breadcrumbs</Breadcrumbs.Link>
      </Breadcrumbs.Item>
    </Breadcrumbs.Root>
  )
}

Custom separator

  1. pockets
  2. packages
  3. components
Code
import { Breadcrumbs } from "@pockets-ui/components"

export default function BreadcrumbsCustomSeparator() {
  return (
    <Breadcrumbs.Root aria-label="Path">
      <Breadcrumbs.Item>
        <Breadcrumbs.Link href="/">pockets</Breadcrumbs.Link>
        <Breadcrumbs.Separator>/</Breadcrumbs.Separator>
      </Breadcrumbs.Item>
      <Breadcrumbs.Item>
        <Breadcrumbs.Link href="/components">packages</Breadcrumbs.Link>
        <Breadcrumbs.Separator>/</Breadcrumbs.Separator>
      </Breadcrumbs.Item>
      <Breadcrumbs.Item>
        <Breadcrumbs.Link>components</Breadcrumbs.Link>
      </Breadcrumbs.Item>
    </Breadcrumbs.Root>
  )
}

Disabled

isDisabled on the root disables the whole trail at once.

  1. Home
  2. Components
  3. Breadcrumbs
Code
import { Breadcrumbs } from "@pockets-ui/components"

export default function BreadcrumbsDisabled() {
  return (
    <Breadcrumbs.Root aria-label="Disabled trail" isDisabled>
      <Breadcrumbs.Item>
        <Breadcrumbs.Link href="/">Home</Breadcrumbs.Link>
        <Breadcrumbs.Separator />
      </Breadcrumbs.Item>
      <Breadcrumbs.Item>
        <Breadcrumbs.Link href="/components">Components</Breadcrumbs.Link>
        <Breadcrumbs.Separator />
      </Breadcrumbs.Item>
      <Breadcrumbs.Item>
        <Breadcrumbs.Link>Breadcrumbs</Breadcrumbs.Link>
      </Breadcrumbs.Item>
    </Breadcrumbs.Root>
  )
}