پرتوپرتو

نوار کناری (Sidebar)

یک نوار کناری قابل تنظیم برای ناوبری برنامه

معرفی

کامپوننت Sidebar یک نوار کناری پیشرفته برای ناوبری و سازماندهی محتوای برنامه است. این کامپوننت حالت‌های مختلف expanded و collapsed دارد.

استفاده

import {
  Sidebar,
  SidebarContent,
  SidebarFooter,
  SidebarGroup,
  SidebarGroupContent,
  SidebarGroupLabel,
  SidebarHeader,
  SidebarMenu,
  SidebarMenuButton,
  SidebarMenuItem,
  SidebarProvider,
  SidebarTrigger,
} from '@parto/ui';

export default function MyComponent() {
  return (
    <SidebarProvider>
      <Sidebar>
        <SidebarHeader>
          <h2>برنامه من</h2>
        </SidebarHeader>
        <SidebarContent>
          <SidebarGroup>
            <SidebarGroupLabel>منوی اصلی</SidebarGroupLabel>
            <SidebarGroupContent>
              <SidebarMenu>
                <SidebarMenuItem>
                  <SidebarMenuButton>داشبورد</SidebarMenuButton>
                </SidebarMenuItem>
                <SidebarMenuItem>
                  <SidebarMenuButton>پروژه‌ها</SidebarMenuButton>
                </SidebarMenuItem>
              </SidebarMenu>
            </SidebarGroupContent>
          </SidebarGroup>
        </SidebarContent>
        <SidebarFooter>
          <p>نسخه 1.0.0</p>
        </SidebarFooter>
      </Sidebar>
      <main>
        <SidebarTrigger />
        {/* محتوای اصلی */}
      </main>
    </SidebarProvider>
  );
}

Collapsible

<SidebarProvider>
  <Sidebar collapsible="icon">
    {/* محتوا */}
  </Sidebar>
</SidebarProvider>

موقعیت راست

<Sidebar side="right">
  {/* محتوا */}
</Sidebar>

انواع Variant

{/* پیش‌فرض */}
<Sidebar variant="sidebar" />

{/* شناور */}
<Sidebar variant="floating" />

{/* داخلی */}
<Sidebar variant="inset" />

با آیکون و Tooltip

<SidebarMenuItem>
  <SidebarMenuButton tooltip="داشبورد">
    <Icons.home />
    <span>داشبورد</span>
  </SidebarMenuButton>
</SidebarMenuItem>

زیرمنو

<SidebarMenuItem>
  <SidebarMenuButton>پروژه‌ها</SidebarMenuButton>
  <SidebarMenuSub>
    <SidebarMenuSubItem>
      <SidebarMenuSubButton>پروژه ۱</SidebarMenuSubButton>
    </SidebarMenuSubItem>
    <SidebarMenuSubItem>
      <SidebarMenuSubButton>پروژه ۲</SidebarMenuSubButton>
    </SidebarMenuSubItem>
  </SidebarMenuSub>
</SidebarMenuItem>

با Badge

<SidebarMenuItem>
  <SidebarMenuButton>پیام‌ها</SidebarMenuButton>
  <SidebarMenuBadge>3</SidebarMenuBadge>
</SidebarMenuItem>

کنترل شده

const [open, setOpen] = useState(true);

<SidebarProvider open={open} onOpenChange={setOpen}>
  <Sidebar />
</SidebarProvider>

Props

PropTypeDefaultتوضیحات
side'left' | 'right''left'موقعیت سایدبار
variant'sidebar' | 'floating' | 'inset''sidebar'نوع نمایش
collapsible'offcanvas' | 'icon' | 'none''offcanvas'حالت جمع شدن

SidebarProvider

PropTypeDefaultتوضیحات
defaultOpenbooleantrueوضعیت پیش‌فرض
openboolean-کنترل وضعیت
onOpenChange(open: boolean) => void-callback تغییر

کامپوننت‌ها

  • Sidebar - wrapper اصلی
  • SidebarProvider - provider برای context
  • SidebarHeader - هدر سایدبار
  • SidebarContent - محتوای اصلی
  • SidebarFooter - فوتر سایدبار
  • SidebarGroup - گروه آیتم‌ها
  • SidebarGroupLabel - عنوان گروه
  • SidebarGroupContent - محتوای گروه
  • SidebarMenu - منوی سایدبار
  • SidebarMenuItem - آیتم منو
  • SidebarMenuButton - دکمه منو
  • SidebarMenuSub - زیرمنو
  • SidebarMenuSubItem - آیتم زیرمنو
  • SidebarMenuSubButton - دکمه زیرمنو
  • SidebarMenuBadge - نشان
  • SidebarTrigger - دکمه toggle
  • SidebarInset - محتوای اصلی صفحه

Hook

const { 
  open, 
  setOpen, 
  state,
  isMobile,
  toggleSidebar 
} = useSidebar();

کلید میانبر

به صورت پیش‌فرض با Cmd+B یا Ctrl+B سایدبار toggle می‌شود.

ویژگی‌ها

  • Responsive design
  • حالت موبایل جداگانه
  • ذخیره وضعیت در cookie
  • انیمیشن‌های نرم
  • Tooltip در حالت collapsed
  • کاملا دسترسی‌پذیر
  • سازگار با RTL