إطار التطبيق (AppShell)
تنظّم كتلة إطار التطبيق (AppShell) تخطيط التطبيق: شريط جانبي ورأس ومنطقة للمحتوى.
التثبيت
bash
npx @smicolon/fasla-ui@latest add app-shellقبل إضافة أي مكوّن، شغّل الأمر init مرة واحدة في مشروعك. التفاصيل في صفحة التثبيت.
معاينة
مرحبًا بعودتك يا ليلى
لوحة التحكم
لديك 12 طلبًا جديدًا اليوم.
الخصائص (props)
| الخاصية | النوع | الافتراضي | الوصف |
|---|---|---|---|
sidebar | ReactNode | لا يوجد | محتوى الشريط الجانبي، ويُخفى على الجوّال. |
header | ReactNode | لا يوجد | محتوى الرأس. |
children | ReactNode | لا يوجد | المحتوى الرئيسي. |
sidebarWidth | "sm" | "md" | "lg" | "md" | عرض الشريط الجانبي. |
sidebarMobile | boolean | false | يُظهر الشريط الجانبي على الجوّال. |
className | string | لا يوجد | أصناف (class) إضافية للمكوّن. |
الاستخدام
tsx
import type { ReactNode } from "react"
import { AppShell } from "@/components/blocks/app-shell"
const nav = [
{ label: "لوحة التحكم", href: "/dashboard" },
{ label: "الطلبات", href: "/orders" },
{ label: "الإعدادات", href: "/settings" },
]
export function AppLayout({ children }: { children: ReactNode }) {
return (
<AppShell
sidebarWidth="md"
sidebar={
<div className="flex h-full flex-col">
<div className="flex h-14 items-center border-b px-4">
<span className="font-semibold">متجري</span>
</div>
<nav className="flex-1 space-y-1 p-2">
{nav.map((item) => (
<a key={item.href} href={item.href} className="flex rounded-md px-3 py-2 text-sm hover:bg-accent">
{item.label}
</a>
))}
</nav>
</div>
}
header={
<div className="flex h-14 items-center px-4">
<span className="text-sm text-muted-foreground">مرحبًا بعودتك يا ليلى</span>
</div>
}
>
{children}
</AppShell>
)
}