mirror of
https://github.com/hanzoai/o11y-components.git
synced 2026-10-30 14:54:15 +00:00
226 lines
4.9 KiB
Plaintext
226 lines
4.9 KiB
Plaintext
import { Meta, Controls, Primary } from '@storybook/addon-docs/blocks';
|
|
import * as BreadcrumbStories from './breadcrumb.stories';
|
|
import * as BreadcrumbSimpleStories from './breadcrumb-simple.stories';
|
|
import * as BreadcrumbPrimitiveStories from './breadcrumb-primitive.stories';
|
|
import * as BreadcrumbListStories from './breadcrumb-list.stories';
|
|
import * as BreadcrumbItemStories from './breadcrumb-item.stories';
|
|
import * as BreadcrumbLinkStories from './breadcrumb-link.stories';
|
|
import * as BreadcrumbPageStories from './breadcrumb-page.stories';
|
|
import * as BreadcrumbSeparatorStories from './breadcrumb-separator.stories';
|
|
import * as BreadcrumbEllipsisStories from './breadcrumb-ellipsis.stories';
|
|
import * as BreadcrumbDropdownStories from './breadcrumb-dropdown.stories';
|
|
|
|
<Meta of={BreadcrumbStories} />
|
|
|
|
# Breadcrumb
|
|
|
|
A navigation component that displays the current location within a hierarchy and allows users to navigate back to previous levels.
|
|
|
|
## How to use
|
|
|
|
### BreadcrumbSimple (preset)
|
|
|
|
Minimal preset that accepts a list of items and handles rendering, separators, and navigation. Supports icons, dropdowns, and custom separators.
|
|
|
|
**Basic usage:**
|
|
|
|
```tsx
|
|
import { BreadcrumbSimple } from '@signozhq/ui';
|
|
|
|
export default function MyComponent() {
|
|
return (
|
|
<BreadcrumbSimple
|
|
items={[
|
|
{ title: 'Home', href: '/' },
|
|
{ title: 'Products', href: '/products' },
|
|
{ title: 'Electronics', href: '/products/electronics' },
|
|
{ title: 'Phones' },
|
|
]}
|
|
/>
|
|
);
|
|
}
|
|
```
|
|
|
|
<Primary />
|
|
|
|
## BreadcrumbSimple Props
|
|
|
|
<Controls of={BreadcrumbSimpleStories.Default} />
|
|
|
|
## With Icons
|
|
|
|
Add icons to breadcrumb items using the `icon` prop:
|
|
|
|
```tsx
|
|
import { BreadcrumbSimple } from '@signozhq/ui';
|
|
import { Home, Folder } from '@signozhq/icons';
|
|
|
|
<BreadcrumbSimple
|
|
items={[
|
|
{ title: 'Home', href: '/', icon: <Home size={16} /> },
|
|
{ title: 'Documents', href: '/docs', icon: <Folder size={16} /> },
|
|
{ title: 'Report.pdf' },
|
|
]}
|
|
/>
|
|
```
|
|
|
|
## Custom Separator
|
|
|
|
Change the separator style using the `separator` prop:
|
|
|
|
```tsx
|
|
// Chevron separator
|
|
<BreadcrumbSimple
|
|
separator="chevron"
|
|
items={[
|
|
{ title: 'Home', href: '/' },
|
|
{ title: 'Settings', href: '/settings' },
|
|
{ title: 'Profile' },
|
|
]}
|
|
/>
|
|
|
|
// Custom text separator
|
|
<BreadcrumbSimple
|
|
separator=">"
|
|
items={[
|
|
{ title: 'Home', href: '/' },
|
|
{ title: 'About' },
|
|
]}
|
|
/>
|
|
```
|
|
|
|
## With Dropdown Menu
|
|
|
|
Add dropdown menus to breadcrumb items using the `menu` prop:
|
|
|
|
```tsx
|
|
<BreadcrumbSimple
|
|
items={[
|
|
{ title: 'Home', href: '/' },
|
|
{
|
|
title: 'Category',
|
|
menu: [
|
|
{ title: 'Electronics', href: '/electronics' },
|
|
{ title: 'Clothing', href: '/clothing' },
|
|
{ title: 'Books', href: '/books' },
|
|
],
|
|
},
|
|
{ title: 'Product' },
|
|
]}
|
|
/>
|
|
```
|
|
|
|
## With React Router
|
|
|
|
Use `itemRender` for integration with react-router or other routing libraries:
|
|
|
|
```tsx
|
|
import { BreadcrumbSimple } from '@signozhq/ui';
|
|
import { Link } from 'react-router-dom';
|
|
|
|
const items = [
|
|
{ title: 'Home', path: '/' },
|
|
{ title: 'Products', path: '/products' },
|
|
{ title: 'Details', path: '/details' },
|
|
];
|
|
|
|
<BreadcrumbSimple
|
|
items={items}
|
|
itemRender={(route, params, routes, paths) => {
|
|
const isLast = route === routes[routes.length - 1];
|
|
return isLast ? (
|
|
<span>{route.title}</span>
|
|
) : (
|
|
<Link to={`/${paths.join('/')}`}>{route.title}</Link>
|
|
);
|
|
}}
|
|
/>
|
|
```
|
|
|
|
## Test IDs
|
|
|
|
When `testId` is provided, it propagates to all child components:
|
|
|
|
```tsx
|
|
<BreadcrumbSimple testId="nav" items={items} />
|
|
// Generates:
|
|
// - nav (root)
|
|
// - nav-list
|
|
// - nav-item-0, nav-item-1, ...
|
|
// - nav-link-0, nav-link-1, ...
|
|
// - nav-separator-1, nav-separator-2, ...
|
|
// - nav-page-N (last item)
|
|
// - nav-dropdown-N (if item has menu)
|
|
```
|
|
|
|
## Primitive Composition
|
|
|
|
For full control, compose the subcomponents manually:
|
|
|
|
```tsx
|
|
import {
|
|
Breadcrumb,
|
|
BreadcrumbList,
|
|
BreadcrumbItem,
|
|
BreadcrumbLink,
|
|
BreadcrumbPage,
|
|
BreadcrumbSeparator,
|
|
BreadcrumbEllipsis,
|
|
BreadcrumbDropdown,
|
|
} from '@signozhq/ui';
|
|
|
|
<Breadcrumb>
|
|
<BreadcrumbList>
|
|
<BreadcrumbItem>
|
|
<BreadcrumbLink href="/">Home</BreadcrumbLink>
|
|
</BreadcrumbItem>
|
|
<BreadcrumbSeparator />
|
|
<BreadcrumbItem>
|
|
<BreadcrumbEllipsis />
|
|
</BreadcrumbItem>
|
|
<BreadcrumbSeparator />
|
|
<BreadcrumbItem>
|
|
<BreadcrumbLink href="/components">Components</BreadcrumbLink>
|
|
</BreadcrumbItem>
|
|
<BreadcrumbSeparator />
|
|
<BreadcrumbItem>
|
|
<BreadcrumbPage>Breadcrumb</BreadcrumbPage>
|
|
</BreadcrumbItem>
|
|
</BreadcrumbList>
|
|
</Breadcrumb>
|
|
```
|
|
|
|
## Breadcrumb Props
|
|
|
|
<Controls of={BreadcrumbPrimitiveStories.Default} />
|
|
|
|
## Subcomponents
|
|
|
|
### BreadcrumbList
|
|
|
|
<Controls of={BreadcrumbListStories.Default} />
|
|
|
|
### BreadcrumbItem
|
|
|
|
<Controls of={BreadcrumbItemStories.Default} />
|
|
|
|
### BreadcrumbLink
|
|
|
|
<Controls of={BreadcrumbLinkStories.Default} />
|
|
|
|
### BreadcrumbPage
|
|
|
|
<Controls of={BreadcrumbPageStories.Default} />
|
|
|
|
### BreadcrumbSeparator
|
|
|
|
<Controls of={BreadcrumbSeparatorStories.Default} />
|
|
|
|
### BreadcrumbEllipsis
|
|
|
|
<Controls of={BreadcrumbEllipsisStories.Default} />
|
|
|
|
### BreadcrumbDropdown
|
|
|
|
<Controls of={BreadcrumbDropdownStories.Default} />
|