پرتوپرتو

کشو (Drawer)

یک پنل کشویی که از کنار صفحه نمایش داده می‌شود

معرفی

کامپوننت Drawer یک پنل کشویی است که معمولاً برای نمایش منوها، فرم‌ها یا محتوای اضافی استفاده می‌شود.

چه زمانی استفاده کنیم:

  • برای پنل‌های موبایل که از پایین صفحه باز می‌شوند (bottom sheet)
  • برای منوهای ناوبری در موبایل
  • وقتی کاربر باید بتواند با swipe پنل را ببندد

چه زمانی استفاده نکنیم:

  • برای dialog های کوچک روی desktop — از Dialog استفاده کنید
  • برای فرم‌های با تعامل کمپلکس — از Dialog استفاده کنید
  • برای محتوایی که باید در overlay کامل باشد — از Dialog استفاده کنید

استفاده

import {
  Drawer,
  DrawerClose,
  DrawerContent,
  DrawerDescription,
  DrawerFooter,
  DrawerHeader,
  DrawerTitle,
  DrawerTrigger,
} from '@parto-system-design/ui'

export default function MyComponent() {
  return (
    <Drawer>
      <DrawerTrigger>باز کردن</DrawerTrigger>
      <DrawerContent>
        <DrawerHeader>
          <DrawerTitle>عنوان</DrawerTitle>
          <DrawerDescription>توضیحات در اینجا</DrawerDescription>
        </DrawerHeader>
        <div className="p-4">محتوای اصلی</div>
        <DrawerFooter>
          <DrawerClose>بستن</DrawerClose>
        </DrawerFooter>
      </DrawerContent>
    </Drawer>
  )
}

حالت‌ها و انواع

پیش‌فرض

ساختار کامپوننت‌ها

<Drawer>
  <DrawerTrigger asChild>
    <Button>باز کردن</Button>
  </DrawerTrigger>
  <DrawerContent>
    <DrawerHeader>
      <DrawerTitle>عنوان</DrawerTitle>
      <DrawerDescription>توضیحات</DrawerDescription>
    </DrawerHeader>
    {/* محتوا */}
    <DrawerFooter>
      <Button>تأیید</Button>
      <DrawerClose asChild>
        <Button variant="outline">لغو</Button>
      </DrawerClose>
    </DrawerFooter>
  </DrawerContent>
</Drawer>

جهت‌های مختلف

از پایین (پیش‌فرض)

<Drawer direction="bottom">{/* محتوا */}</Drawer>

از چپ

<Drawer direction="left">{/* محتوا */}</Drawer>

از راست

<Drawer direction="right">{/* محتوا */}</Drawer>

از بالا

<Drawer direction="top">{/* محتوا */}</Drawer>

کنترل شده

const [open, setOpen] = useState(false)

;<Drawer open={open} onOpenChange={setOpen}>
  {/* محتوا */}
</Drawer>

راهنمای استفاده

بکنید

  • از Drawer برای تجربه موبایل استفاده کنید و در desktop از Sheet یا Dialog استفاده کنید - همیشه DrawerTitle و DrawerDescription را برای دسترسی‌پذیری ارائه دهید - از direction مناسب بر اساس نوع محتوا استفاده کنید (bottom برای منو، right/left برای پنل)

نکنید

  • Drawer را در desktop به‌عنوان جایگزین Dialog استفاده نکنید - محتوای بسیار بلند را بدون اسکرول داخلی در Drawer قرار ندهید - از Drawer برای تأیید اعمال مخرب استفاده نکنید — از AlertDialog استفاده کنید

جدول ویژگی‌ها

Drawer

Prop

Type

دسترسی‌پذیری

  • قابل کشیدن (swipe/drag) برای بستن
  • اسکرول صفحه در هنگام باز بودن قفل می‌شود
  • از role="dialog" و aria-modal استفاده می‌شود
  • با Escape بسته می‌شود
  • focus trap برای پیمایش کیبورد

کامپوننت‌های مرتبط

  • Sheet — وقتی در desktop نیاز به پنل کناری دارید (Drawer برای موبایل، Sheet برای desktop)
  • Dialog — وقتی محتوا کوتاه است و نیاز به overlay کامل ندارید