شريط جانبي (Sidebar)

تعرض كتلة شريط جانبي (Sidebar) تنقّلًا جانبيًا قابلًا للطي في تخطيطات التطبيقات.

التثبيت

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

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

معاينة

المكوّنات

  • Sidebar: الحاوية الرئيسية
  • SidebarHeader: قسم الرأس
  • SidebarContent: منطقة المحتوى القابلة للتمرير
  • SidebarFooter: قسم التذييل
  • SidebarGroup: عناصر مجمّعة مع تسمية
  • SidebarItem: عنصر تنقّل مع أيقونة
  • SidebarCollapseButton: زر الطيّ والتوسيع

الخصائص (props)

الخاصيةالنوعالافتراضيالوصف
collapsedbooleanfalseيطوي الشريط فتظهر الأيقونات وحدها.
onCollapsedChange(collapsed) => voidلا يوجدتُستدعى عند الطيّ أو التوسيع.
width"sm" | "default" | "lg""default"العرض عند التوسيع.
childrenReactNodeلا يوجدأجزاء الشريط الجانبي.
classNamestringلا يوجدأصناف (class) إضافية للمكوّن.

الاستخدام

tsx
"use client"

import { useState } from "react"
import { LayoutDashboard, Package, Settings, ShoppingCart } from "lucide-react"
import {
  Sidebar,
  SidebarHeader,
  SidebarContent,
  SidebarFooter,
  SidebarGroup,
  SidebarItem,
  SidebarCollapseButton,
} from "@/components/blocks/sidebar"

const items = [
  { label: "لوحة التحكم", icon: <LayoutDashboard className="size-4" /> },
  { label: "الطلبات", icon: <ShoppingCart className="size-4" /> },
  { label: "المنتجات", icon: <Package className="size-4" /> },
  { label: "الإعدادات", icon: <Settings className="size-4" /> },
]

export function StoreSidebar() {
  const [collapsed, setCollapsed] = useState(false)

  return (
    <Sidebar collapsed={collapsed} onCollapsedChange={setCollapsed}>
      <SidebarHeader>
        {!collapsed && <span className="font-semibold">متجري</span>}
      </SidebarHeader>
      <SidebarContent>
        <SidebarGroup label={collapsed ? undefined : "المتجر"}>
          {items.map((item, index) => (
            <SidebarItem key={item.label} icon={item.icon} active={index === 0} collapsed={collapsed}>
              {item.label}
            </SidebarItem>
          ))}
        </SidebarGroup>
      </SidebarContent>
      <SidebarFooter>
        <SidebarCollapseButton
          collapsed={collapsed}
          onCollapsedChange={setCollapsed}
          aria-label={collapsed ? "توسيع الشريط الجانبي" : "طيّ الشريط الجانبي"}
        />
      </SidebarFooter>
    </Sidebar>
  )
}