پنل کناری (Sheet)
پنل کشویی از کنار صفحه
معرفی
کامپوننت Sheet یک پنل کشویی است که از کنار صفحه ظاهر میشود.
چه زمانی استفاده کنیم:
- برای فرمهای بلند (بیش از ۵ فیلد) که در Dialog جا نمیشوند
- برای پنلهای جزئیات (detail panel) در کنار لیست اصلی
- برای تنظیمات، فیلترهای پیشرفته، یا پنلهای ویرایش در desktop
چه زمانی استفاده نکنیم:
- برای محتوای کوچک مثل تأیید — از
Dialogاستفاده کنید - برای تأیید اعمال مخرب — از
AlertDialogاستفاده کنید - برای filter panel در موبایل — از
Drawerاستفاده کنید
استفاده
import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetTrigger } from '@parto-system-design/ui'
import { Button } from '@parto-system-design/ui'
export default function MyComponent() {
return (
<Sheet>
<SheetTrigger asChild>
<Button>باز کردن</Button>
</SheetTrigger>
<SheetContent>
<SheetHeader>
<SheetTitle>عنوان</SheetTitle>
<SheetDescription>توضیحات در اینجا قرار میگیرد</SheetDescription>
</SheetHeader>
</SheetContent>
</Sheet>
)
}حالتها و انواع
پیشفرض
جهتهای مختلف
Sheet از چهار جهت باز شدن پشتیبانی میکند: top، right (پیشفرض در RTL)، bottom و left.
<Sheet>
<SheetTrigger asChild>
<Button variant="outline">از بالا</Button>
</SheetTrigger>
<SheetContent side="top">
<SheetHeader>
<SheetTitle>عنوان</SheetTitle>
</SheetHeader>
</SheetContent>
</Sheet>سمتهای مختلف
<SheetContent side="right"> {/* پیشفرض */}
<SheetContent side="left">
<SheetContent side="top">
<SheetContent side="bottom">راهنمای استفاده
بکنید
- از
sideمناسب استفاده کنید —right(end) برای پنلهای جزئیات،left(start) برای ناوبری - همیشهSheetTitleوSheetDescriptionرا ارائه دهید - برای فرمهای داخل Sheet، دکمه ذخیره را در پایین Sheet قرار دهید
نکنید
- از Sheet در موبایل استفاده نکنید — از
Drawerاستفاده کنید - Sheet های تودرتو ایجاد نکنید - محتوای بسیار کوتاه (مثل یک پیام تأیید) را در Sheet قرار ندهید — ازDialogاستفاده کنید
جدول ویژگیها
Sheet
SheetContent
رفتار در RTL
پراپ side در این کامپوننت به صورت منطقی (logical) عمل میکند، نه فیزیکی:
-
side="right"به معنای سمت «انتها» (end) است:- در چیدمان LTR: سمت راست صفحه
- در چیدمان RTL: سمت چپ صفحه
-
side="left"به معنای سمت «ابتدا» (start) است:- در چیدمان LTR: سمت چپ صفحه
- در چیدمان RTL: سمت راست صفحه
-
side="top"وside="bottom"فیزیکی هستند و با تغییر جهت صفحه تغییر نمیکنند.
توجه: هنگام استفاده از Sheet در کنار Sidebar در نمای موبایل، کامپوننت Sidebar مقدار فیزیکی پراپ side خود را به Sheet ارسال میکند. بنابراین موقعیت نمایش Sidebar ممکن است در چیدمان RTL تغییر کند.
دسترسیپذیری
- با Escape بسته میشود
- focus trap برای پیمایش کیبورد
- از
role="dialog"وaria-modalاستفاده میشود - اسکرول صفحه در هنگام باز بودن قفل میشود
تعامل با کیبورد
Escape: بستن شیت -Tab: حرکت بین عناصر داخل شیت (فوکوس محبوس) -Shift + Tab: حرکت معکوس فوکوس
کامپوننتهای مرتبط
- Drawer — وقتی در موبایل نیاز به پنل دارید (از پایین صفحه باز میشود)
- Dialog — وقتی محتوا کوتاه است و نیاز به پنل کناری کامل ندارید
- AlertDialog — برای هشدارهای اجباری که کاربر باید حتماً تأیید کند