# Breadcrumb

Shows where the current page sits in the hierarchy and links back to its parents.

```tsx
import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "@zenoxai/ui/components/breadcrumb"

function BreadcrumbDemo() {
  return (
    <Breadcrumb>
      <BreadcrumbList>
        <BreadcrumbItem>
          <BreadcrumbLink href="#">Assets</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbLink href="#">Domains</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbPage>acme.com</BreadcrumbPage>
        </BreadcrumbItem>
      </BreadcrumbList>
    </Breadcrumb>
  )
}
```

## Usage

```tsx
import {
  Breadcrumb,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbList,
  BreadcrumbPage,
  BreadcrumbSeparator,
} from "@zenoxai/ui/components/breadcrumb"
```

```tsx
<Breadcrumb>
  <BreadcrumbList>
    <BreadcrumbItem>
      <BreadcrumbLink href="/assets">Assets</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbPage>acme.com</BreadcrumbPage>
    </BreadcrumbItem>
  </BreadcrumbList>
</Breadcrumb>
```

Use a breadcrumb on detail pages two or more levels deep: an asset, an alert, a report. Every
level except the last is a `BreadcrumbLink`; the last is a `BreadcrumbPage`, which is not a
link. Put a `BreadcrumbSeparator` between items, not inside them.

`BreadcrumbLink` renders an `<a>`. To navigate with your router, render its link component
through `render`; the breadcrumb keeps its styles:

```tsx
<BreadcrumbLink render={<Link to="/alerts" />}>Alerts</BreadcrumbLink>
```

Do not use a breadcrumb for the steps of a flow. A page one level below the shell navigation
needs no breadcrumb: the [Sidebar](/components/sidebar) already shows where the user is.

## Examples

### Collapsed

On deep paths, replace the middle levels with `BreadcrumbEllipsis`. Keep the first level and
the last two.

```tsx
import { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "@zenoxai/ui/components/breadcrumb"

function BreadcrumbCollapsed() {
  return (
    <Breadcrumb>
      <BreadcrumbList>
        <BreadcrumbItem>
          <BreadcrumbLink href="#">Acme Corp</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbEllipsis />
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbLink href="#">Vulnerabilities</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbPage>CVE-2024-3400</BreadcrumbPage>
        </BreadcrumbItem>
      </BreadcrumbList>
    </Breadcrumb>
  )
}
```

### Custom separator

`BreadcrumbSeparator` renders a chevron by default. Pass an icon as children to replace it.

```tsx
import { SlashIcon } from "lucide-react"
import { Breadcrumb, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "@zenoxai/ui/components/breadcrumb"

function BreadcrumbCustomSeparator() {
  return (
    <Breadcrumb>
      <BreadcrumbList>
        <BreadcrumbItem>
          <BreadcrumbLink href="#">Reports</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator>
          <SlashIcon />
        </BreadcrumbSeparator>
        <BreadcrumbItem>
          <BreadcrumbPage>Monthly exposure, October 2026</BreadcrumbPage>
        </BreadcrumbItem>
      </BreadcrumbList>
    </Breadcrumb>
  )
}
```

## Accessibility

- `Breadcrumb` is a `<nav aria-label="breadcrumb">` around an ordered list. Pass a translated
  `aria-label` when the interface is not in English.
- `BreadcrumbPage` carries `aria-current="page"`. Separators and the ellipsis are hidden from
  screen readers.
- The ellipsis is decorative. If the hidden levels must stay reachable, put them in a
  [Dropdown Menu](/components/dropdown-menu) whose trigger is a real button with an
  `aria-label`.

## API reference

`import { ... } from "@zenoxai/ui/components/breadcrumb"`

### Breadcrumb

No props of its own.

### BreadcrumbList

No props of its own.

### BreadcrumbItem

No props of its own.

### BreadcrumbLink

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| render | `ReactElement<unknown, string \| JSXElementConstructor<any>> \| ComponentRenderFn<HTMLProps, {}>` |  | Allows you to replace the component's HTML element with a different tag, or compose it with another component.  Accepts a `ReactElement` or a function that returns the element to render. |

### BreadcrumbPage

No props of its own.

### BreadcrumbSeparator

No props of its own.

### BreadcrumbEllipsis

| Prop | Type | Default | Description |
| --- | --- | --- | --- |
| label | `string` | `More` | Already-translated text read by screen readers in place of the dots. |

