> ## Documentation Index
> Fetch the complete documentation index at: https://araf.badr.co.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Breadcrumb

> A navigation aid that shows the user's current location within a hierarchical structure — supporting icons, custom separators, and collapsed states.

## Overview

<div style={{padding:"28px 24px",background:"#f9fafb",borderRadius:"12px",border:"1px solid #e5e7eb"}}>
  <nav style={{display:"flex",alignItems:"center",gap:"6px",fontFamily:"Inter,sans-serif",fontSize:"14px"}}>
    <a href="#" style={{color:"#667085",textDecoration:"none"}}>Home</a>

    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#D0D5DD" strokeWidth="2">
      <polyline points="9 18 15 12 9 6" />
    </svg>

    <a href="#" style={{color:"#667085",textDecoration:"none"}}>Components</a>

    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#D0D5DD" strokeWidth="2">
      <polyline points="9 18 15 12 9 6" />
    </svg>

    <span style={{color:"#101828",fontWeight:500}}>Breadcrumb</span>
  </nav>
</div>

**Breadcrumb** shows the user's current page location within a hierarchy, allowing navigation back to any parent level. It is purely navigational — each item except the last should be a link.

***

## Installation

<CodeGroup>
  ```bash npm theme={null}
  npm install @araf-ds/core
  ```

  ```bash yarn theme={null}
  yarn add @araf-ds/core
  ```

  ```bash pnpm theme={null}
  pnpm add @araf-ds/core
  ```
</CodeGroup>

***

## Usage

```tsx theme={null}
import {
  Breadcrumb,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbPage,
  BreadcrumbSeparator,
  BreadcrumbList,
} from "@araf-ds/core"

export default function Example() {
  return (
    <Breadcrumb>
      <BreadcrumbList>
        <BreadcrumbItem>
          <BreadcrumbLink href="/">Home</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbLink href="/components">Components</BreadcrumbLink>
        </BreadcrumbItem>
        <BreadcrumbSeparator />
        <BreadcrumbItem>
          <BreadcrumbPage>Breadcrumb</BreadcrumbPage>
        </BreadcrumbItem>
      </BreadcrumbList>
    </Breadcrumb>
  )
}
```

***

## Variants

### Default

<div style={{padding:"24px",background:"#f9fafb",borderRadius:"12px",border:"1px solid #e5e7eb"}}>
  <nav style={{display:"flex",alignItems:"center",gap:"6px",fontFamily:"Inter,sans-serif",fontSize:"14px"}}>
    <a href="#" style={{color:"#667085",textDecoration:"none"}}>Home</a>

    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#D0D5DD" strokeWidth="2">
      <polyline points="9 18 15 12 9 6" />
    </svg>

    <a href="#" style={{color:"#667085",textDecoration:"none"}}>Settings</a>

    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#D0D5DD" strokeWidth="2">
      <polyline points="9 18 15 12 9 6" />
    </svg>

    <span style={{color:"#101828",fontWeight:500}}>Profile</span>
  </nav>
</div>

```tsx theme={null}
<Breadcrumb>
  <BreadcrumbList>
    <BreadcrumbItem>
      <BreadcrumbLink href="/">Home</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbLink href="/settings">Settings</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbPage>Profile</BreadcrumbPage>
    </BreadcrumbItem>
  </BreadcrumbList>
</Breadcrumb>
```

### With Icons

<div style={{padding:"24px",background:"#f9fafb",borderRadius:"12px",border:"1px solid #e5e7eb"}}>
  <nav style={{display:"flex",alignItems:"center",gap:"6px",fontFamily:"Inter,sans-serif",fontSize:"14px"}}>
    <a href="#" style={{color:"#667085",textDecoration:"none",display:"flex",alignItems:"center",gap:"4px"}}>
      <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
        <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" />

        <polyline points="9 22 9 12 15 12 15 22" />
      </svg>

      Home
    </a>

    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#D0D5DD" strokeWidth="2">
      <polyline points="9 18 15 12 9 6" />
    </svg>

    <a href="#" style={{color:"#667085",textDecoration:"none",display:"flex",alignItems:"center",gap:"4px"}}>
      <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
        <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" />

        <circle cx="12" cy="7" r="4" />
      </svg>

      Users
    </a>

    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#D0D5DD" strokeWidth="2">
      <polyline points="9 18 15 12 9 6" />
    </svg>

    <span style={{color:"#101828",fontWeight:500,display:"flex",alignItems:"center",gap:"4px"}}>
      <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
        <path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" />

        <path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" />
      </svg>

      Edit Profile
    </span>
  </nav>
</div>

```tsx theme={null}
<Breadcrumb>
  <BreadcrumbList>
    <BreadcrumbItem>
      <BreadcrumbLink href="/">
        <HomeIcon size={14} /> Home
      </BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbLink href="/users">
        <UsersIcon size={14} /> Users
      </BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbPage>
        <EditIcon size={14} /> Edit Profile
      </BreadcrumbPage>
    </BreadcrumbItem>
  </BreadcrumbList>
</Breadcrumb>
```

### Collapsed (with Ellipsis)

Use `BreadcrumbEllipsis` when the path is too long to display in full.

<div style={{padding:"24px",background:"#f9fafb",borderRadius:"12px",border:"1px solid #e5e7eb"}}>
  <nav style={{display:"flex",alignItems:"center",gap:"6px",fontFamily:"Inter,sans-serif",fontSize:"14px"}}>
    <a href="#" style={{color:"#667085",textDecoration:"none"}}>Home</a>

    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#D0D5DD" strokeWidth="2">
      <polyline points="9 18 15 12 9 6" />
    </svg>

    <span style={{color:"#667085",cursor:"pointer",padding:"2px 4px",borderRadius:"4px",border:"1px solid #E5E7EB",fontSize:"12px",lineHeight:1}}>···</span>

    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#D0D5DD" strokeWidth="2">
      <polyline points="9 18 15 12 9 6" />
    </svg>

    <a href="#" style={{color:"#667085",textDecoration:"none"}}>Projects</a>

    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="#D0D5DD" strokeWidth="2">
      <polyline points="9 18 15 12 9 6" />
    </svg>

    <span style={{color:"#101828",fontWeight:500}}>Alpha</span>
  </nav>
</div>

```tsx theme={null}
<Breadcrumb>
  <BreadcrumbList>
    <BreadcrumbItem>
      <BreadcrumbLink href="/">Home</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbEllipsis />
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbLink href="/projects">Projects</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator />
    <BreadcrumbItem>
      <BreadcrumbPage>Alpha</BreadcrumbPage>
    </BreadcrumbItem>
  </BreadcrumbList>
</Breadcrumb>
```

### Custom Separator

<div style={{padding:"24px",background:"#f9fafb",borderRadius:"12px",border:"1px solid #e5e7eb"}}>
  <nav style={{display:"flex",alignItems:"center",gap:"8px",fontFamily:"Inter,sans-serif",fontSize:"14px"}}>
    <a href="#" style={{color:"#667085",textDecoration:"none"}}>Home</a>
    <span style={{color:"#D0D5DD"}}>/</span>
    <a href="#" style={{color:"#667085",textDecoration:"none"}}>Docs</a>
    <span style={{color:"#D0D5DD"}}>/</span>
    <span style={{color:"#101828",fontWeight:500}}>Components</span>
  </nav>
</div>

```tsx theme={null}
<Breadcrumb>
  <BreadcrumbList>
    <BreadcrumbItem>
      <BreadcrumbLink href="/">Home</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator>/</BreadcrumbSeparator>
    <BreadcrumbItem>
      <BreadcrumbLink href="/docs">Docs</BreadcrumbLink>
    </BreadcrumbItem>
    <BreadcrumbSeparator>/</BreadcrumbSeparator>
    <BreadcrumbItem>
      <BreadcrumbPage>Components</BreadcrumbPage>
    </BreadcrumbItem>
  </BreadcrumbList>
</Breadcrumb>
```

***

## API Reference

### Breadcrumb

<ParamField path="separator" type="ReactNode">
  Custom separator element. Defaults to `ChevronRight` icon.
</ParamField>

<ParamField path="className" type="string">
  Additional class names for the `<nav>` element.
</ParamField>

### BreadcrumbLink

<ParamField path="href" type="string" required>
  Navigation URL for the breadcrumb link.
</ParamField>

<ParamField path="asChild" type="boolean" default="false">
  Render as a child element (e.g. Next.js `<Link>`).
</ParamField>

### BreadcrumbPage

Marks the current page — renders as non-link text with `aria-current="page"`.

### BreadcrumbSeparator

<ParamField path="children" type="ReactNode">
  Custom separator content. Defaults to a `ChevronRight` icon.
</ParamField>

### BreadcrumbEllipsis

Renders a `···` button indicating hidden middle items. Typically wrapped in a `DropdownMenu` for expanded navigation.

***

## Accessibility

* The wrapping `<nav>` has `aria-label="breadcrumb"` by default
* The last item uses `aria-current="page"` via `BreadcrumbPage`
* Separator elements use `aria-hidden="true"` — they are purely decorative
* All link items are keyboard focusable and support Enter navigation
* `BreadcrumbEllipsis` should open a dropdown showing the hidden items for full keyboard access

***

## Do's & Don'ts

<CardGroup cols={2}>
  <Card title="Do" icon="check" iconType="solid" color="#16A34A">
    * Always make every item except the last a clickable link
    * Use `BreadcrumbEllipsis` when there are more than 4 levels deep
    * Reflect the actual URL hierarchy in breadcrumb items
    * Keep breadcrumb labels short — match the page title
  </Card>

  <Card title="Don't" icon="xmark" iconType="solid" color="#DC2626">
    * Don't use breadcrumb for flat navigation — it's for hierarchical paths only
    * Don't include the site root ("Home") if the path is already obvious
    * Don't make the current page (last item) a link — it's already active
    * Don't truncate labels mid-word — use ellipsis only at the item level
  </Card>
</CardGroup>
