شريط التنقّل (Navbar)
تعرض كتلة شريط التنقّل (Navbar) شريط تنقّل متجاوبًا، مع قائمة للجوّال.
التثبيت
bash
npx @smicolon/fasla-ui@latest add navbarقبل إضافة أي مكوّن، شغّل الأمر init مرة واحدة في مشروعك. التفاصيل في صفحة التثبيت.
معاينة
المكوّنات
Navbar: الحاوية الرئيسيةNavbarBrand: منطقة الشعارNavbarContent: أقسام المحتوىNavbarMenu: قائمة التنقّلNavbarLink: روابط التنقّلNavbarItem: عناصر عامة في الشريطNavbarToggle: زر قائمة الجوّال
الخصائص (props)
| الخاصية | النوع | الافتراضي | الوصف |
|---|---|---|---|
sticky | boolean | true | يثبّت الشريط في الأعلى عند التمرير. |
bordered | boolean | true | يُظهر الحد السفلي. |
children | ReactNode | لا يوجد | أجزاء شريط التنقّل. |
NavbarContent | { align: "start" | "center" | "end" } | لا يوجد | قسم محاذى إلى البداية أو الوسط أو النهاية. |
className | string | لا يوجد | أصناف (class) إضافية للمكوّن. |
الاستخدام
tsx
"use client"
import { useState } from "react"
import { Navbar, NavbarBrand, NavbarContent, NavbarMenu, NavbarLink, NavbarToggle } from "@/components/blocks/navbar"
const links = [
{ label: "الرئيسية", href: "/" },
{ label: "المنتجات", href: "/products" },
{ label: "الطلبات", href: "/orders" },
]
export function SiteNavbar() {
const [open, setOpen] = useState(false)
return (
<header>
<Navbar>
<NavbarBrand>
<span className="font-semibold">متجري</span>
</NavbarBrand>
<NavbarContent align="end">
<NavbarMenu mobileMenu>
{links.map((link, index) => (
<NavbarLink key={link.href} href={link.href} active={index === 0}>
{link.label}
</NavbarLink>
))}
</NavbarMenu>
<NavbarToggle
open={open}
onClick={() => setOpen(!open)}
aria-label={open ? "إغلاق القائمة" : "فتح القائمة"}
aria-controls="mobile-menu"
/>
</NavbarContent>
</Navbar>
{open && (
<nav id="mobile-menu" className="flex flex-col gap-3 border-b bg-background p-4 md:hidden">
{links.map((link, index) => (
<NavbarLink key={link.href} href={link.href} active={index === 0}>
{link.label}
</NavbarLink>
))}
</nav>
)}
</header>
)
}