Breadcrumb
Foydalanuvchi sayt tuzilishining qayerida turganini ko'rsatadigan sahifa yo'li: yig'ish, menyu va Next.js Link.
'use client';
import { Breadcrumb } from '@akhatmirzo/ui';
import { House } from 'lucide-react';
export default function BreadcrumbBasic() {
return (
<Breadcrumb
items={[
{ label: 'Bosh sahifa', href: '#', icon: <House /> },
{ label: 'Mahsulotlar', href: '#mahsulotlar' },
{ label: 'Telefonlar', href: '#telefonlar' },
{ label: 'iPhone 17' },
]}
/>
);
}
Import
import { Breadcrumb } from '@akhatmirzo/ui';Qachon ishlatish
- Chuqur ierarxiya — katalog → kategoriya → mahsulot, sozlamalar → hisob → xavfsizlik. Foydalanuvchi bir bosishda yuqori darajaga qaytadi.
- Sahifa sarlavhasi ustida, kontentdan oldin qo'ying.
- Bir darajali saytda kerak emas — faqat "Bosh sahifa → Joriy" bo'lsa, foyda kam.
- Qadamlar uchun emas. Ketma-ket jarayonni ko'rsatish uchun
Stepperdan foydalaning.
Elementlar
items — { label, href?, icon?, onClick? } ro'yxati. Oxirgi element — joriy sahifa: havola
bo'lmaydi va aria-current="page" oladi. href siz, lekin onClick li element — tugma bo'ladi.
Yig'ish
maxItems dan ko'p bo'lsa: birinchi + … + oxirgi maxItems - 2 ta (kamida 1). … bosilganda
yashiringan sahifalar DropdownMenu da ochiladi.
'use client';
import { Breadcrumb } from '@akhatmirzo/ui';
import { House } from 'lucide-react';
export default function BreadcrumbCollapse() {
return (
<Breadcrumb
maxItems={4}
items={[
{ label: 'Bosh sahifa', href: '#', icon: <House /> },
{ label: 'Katalog', href: '#katalog' },
{ label: 'Elektronika', href: '#elektronika' },
{ label: 'Telefonlar', href: '#telefonlar' },
{ label: 'Apple', href: '#apple' },
{ label: 'iPhone 17 Pro Max 256 GB' },
]}
/>
);
}
Telefonda (< 640px) yo'l avtomatik … + ota + joriy ko'rinishiga tushadi. Bu CSS breakpoint bilan
qilinadi — SSR'da hydration farqi bo'lmaydi. Uzun nomlar qisqartiriladi (havolalar 20ch,
joriy sahifa 32ch).
Separator va o'lcham
separator — istalgan ReactNode (standart — chevron ›). size="sm" — text-xs.
'use client';
import { Breadcrumb } from '@akhatmirzo/ui';
const items = [
{ label: 'Sozlamalar', href: '#' },
{ label: 'Hisob', href: '#hisob' },
{ label: 'Xavfsizlik' },
];
export default function BreadcrumbSeparator() {
return (
<div className="flex flex-col items-start gap-4">
<Breadcrumb items={items} separator="/" />
<Breadcrumb items={items} size="sm" />
</div>
);
}
Next.js Link
renderLink — <a> o'rniga o'z havola komponentingiz. U yig'ilgan menyu ichida ham ishlatiladi.
import Link from 'next/link';
import { Breadcrumb } from '@akhatmirzo/ui';
<Breadcrumb
items={[
{ label: 'Bosh sahifa', href: '/' },
{ label: 'Mahsulotlar', href: '/products' },
{ label: 'iPhone 17' },
]}
renderLink={(props) => <Link {...props} />}
/>;Props
Qolgan <nav> atributlari ham qabul qilinadi.
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
itemsmajburiy | { label: ReactNode; href?: string; icon?: ReactNode; onClick?: (event) => void }[] | — | Yo'l elementlari; oxirgisi — joriy sahifa |
separator | ReactNode | — | Ajratuvchi (standart — chevron `›`) |
maxItems | number | — | Oshsa: birinchi + `…` + oxirgilari; yashiringanlar menyuda |
renderLink | (props: { href, className, children, onClick }) => ReactNode | — | Next `Link` kabi havola komponenti |
size | 'sm' | 'md' | 'md' | `text-xs` / `text-sm` |
labels | { nav?: string; more?: string } | — | Standart: "Sahifa yo'li", "Yashirilgan sahifalar" |
Data atributlari
| Atribut | Qayerda | Qiymat |
|---|---|---|
data-size | nav | sm · md |
data-slot | qismlar | breadcrumb-item · breadcrumb-ellipsis · breadcrumb-separator |
data-viewport | … elementi | desktop · mobile |
Accessibility
- Tuzilish.
<nav aria-label="Sahifa yo'li">ichida tartiblangan<ol>ro'yxat. - Joriy sahifa havola emas,
aria-current="page"bilan belgilanadi. - Separator bezak —
aria-hidden, ekran o'quvchi uni o'qimaydi. …tugmasi —aria-label="Yashirilgan sahifalar",aria-haspopup="menu".Enter/Spacebilan ochiladi,↑ ↓bilan yuriladi,Escyopadi va fokusni tugmaga qaytaradi.- Telefon ko'rinishi CSS bilan yashiriladi (
display: none), shuning uchun ekran o'quvchi faqat ko'rinib turgan elementlarni o'qiydi.