شريط التنقّل (Navbar)

تعرض كتلة شريط التنقّل (Navbar) شريط تنقّل متجاوبًا، مع قائمة للجوّال.

التثبيت

bash
npx @smicolon/fasla-ui@latest add navbar

قبل إضافة أي مكوّن، شغّل الأمر init مرة واحدة في مشروعك. التفاصيل في صفحة التثبيت.

معاينة

المكوّنات

  • Navbar: الحاوية الرئيسية
  • NavbarBrand: منطقة الشعار
  • NavbarContent: أقسام المحتوى
  • NavbarMenu: قائمة التنقّل
  • NavbarLink: روابط التنقّل
  • NavbarItem: عناصر عامة في الشريط
  • NavbarToggle: زر قائمة الجوّال

الخصائص (props)

الخاصيةالنوعالافتراضيالوصف
stickybooleantrueيثبّت الشريط في الأعلى عند التمرير.
borderedbooleantrueيُظهر الحد السفلي.
childrenReactNodeلا يوجدأجزاء شريط التنقّل.
NavbarContent{ align: "start" | "center" | "end" }لا يوجدقسم محاذى إلى البداية أو الوسط أو النهاية.
classNamestringلا يوجدأصناف (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>
  )
}