التخطيط القياسي للتطبيق: شريط التنقل العلوي في الأعلى، والتنقل الجانبي عند بداية السطر، ومحتوى الصفحة على خلفية اللوحة.
جارٍ تحميل العرض التوضيحي: app-shell-default
npx sdaia-ui@latest add app-shell
import { AppShell } from '@/components/ui/AppShell';
import { NavHeaderMenuItem } from '@/components/ui/NavHeaderMenuItem';
import { NavLogoPlaceholder } from '@/components/ui/NavLogoPlaceholder';1<AppShell2header={(layout) => ({3logo: <NavLogoPlaceholder size="medium" text="SDAIA" />,4items: [<NavHeaderMenuItem key="home" label="Home" mobile={layout === "compact"} />],5})}6sideNavigation={{ groups, footerProps: { mainText: "User name" } }}7navigation="expanded"8>9{/* page content */}10</AppShell>
تعرض `navigation="collapsed"` شريط الأيقونات بعرض 64 بكسل. يبدّل زر رأس التنقل الجانبي بين الوضع الموسّع (255 بكسل) والمطوي؛ استخدم `navigation` مع `onNavigationChange`، أو `defaultNavigation`.
جارٍ تحميل العرض التوضيحي: app-shell-collapsed
احذف `sideNavigation` في الصفحات التي لا تحتاجه، مثل صفحات الأخطاء. تحتفظ منطقة المحتوى بخلفية اللوحة والمسافات الداخلية.
جارٍ تحميل العرض التوضيحي: app-shell-header-only
مع `dir="rtl"` ينتقل التنقل الجانبي إلى اليمين، وينعكس الشريط العلوي، وتنقلب كل أيقونة لها اتجاه.
جارٍ تحميل العرض التوضيحي: app-shell-rtl
<header> على عنصر <nav> الخاص بالشريط العلوي، والتنقل الجانبي عنصر <nav> مستقل له اسم، ومحتوى الصفحة هو معلم <main>.labels.skipToContent).aria-expanded. ويحمل العنصر الحالي aria-current="page" في التنقل الجانبي وفي نسخته داخل قائمة الشريط العلوي.aria-expanded، ويغلق Escape القائمة ويعيد التركيز إلى الزر، كما يغلقها اختيار عنصر من التنقل الجانبي.labels.navigation في الشريط العلوي وفي التنقل الجانبي) ليميّز مستخدمو قارئات الشاشة بينهما.الخاصية | النوع | القيمة الافتراضية | مطلوبة |
|---|---|---|---|
header | AppShellHeaderProps | (layout: "desktop" | "compact") => AppShellHeaderProps | — | اختيارية |
sideNavigation | AppShellSideNavigationProps | — | اختيارية |
navigation | "expanded" | "collapsed" | — | اختيارية |
defaultNavigation | "expanded" | "collapsed" | "expanded" | اختيارية |
onNavigationChange | (navigation) => void | — | اختيارية |
menuOpen | boolean | — | اختيارية |
onMenuOpenChange | (open: boolean) => void | — | اختيارية |
contentClassName | string | — | اختيارية |
labels | Partial<AppShellLabels> | { skipToContent: "Skip to main content" } | اختيارية |
dir | "ltr" | "rtl" | — | اختيارية |
children | ReactNode | — | اختيارية |