پرتوپرتو

قابل تغییر اندازه (Resizable)

پنل‌های قابل تغییر اندازه با دسته‌های کشیدنی

معرفی

کامپوننت Resizable برای ایجاد layout های قابل تغییر اندازه با پنل‌هایی که کاربر می‌تواند سایز آن‌ها را تغییر دهد، استفاده می‌شود.

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

  • وقتی کاربر نیاز دارد اندازه پنل‌ها را بر اساس نیاز خود تنظیم کند
  • برای ساختارهای چندپنلی مانند IDE یا داشبوردهای تحلیلی
  • وقتی نسبت فضای اختصاص‌یافته به هر بخش باید توسط کاربر تعیین شود

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

  • برای layout های responsive — از CSS grid/flex استفاده کنید
  • وقتی نسبت پنل‌ها باید ثابت باشد — از grid استفاده کنید

استفاده

پنل اول
پنل دوم
import { ResizablePanelGroup, ResizablePanel, ResizableHandle } from '@parto-system-design/ui'

export default function MyComponent() {
  return (
    <ResizablePanelGroup direction="horizontal" className="min-h-[200px]">
      <ResizablePanel defaultSize={50}>
        <div className="p-6">پنل اول</div>
      </ResizablePanel>
      <ResizableHandle />
      <ResizablePanel defaultSize={50}>
        <div className="p-6">پنل دوم</div>
      </ResizablePanel>
    </ResizablePanelGroup>
  )
}

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

عمودی

<ResizablePanelGroup direction="vertical" className="min-h-[400px]">
  <ResizablePanel defaultSize={25}>پنل بالا</ResizablePanel>
  <ResizableHandle />
  <ResizablePanel defaultSize={75}>پنل پایین</ResizablePanel>
</ResizablePanelGroup>

با دسته

<ResizablePanelGroup direction="horizontal">
  <ResizablePanel>پنل ۱</ResizablePanel>
  <ResizableHandle withHandle />
  <ResizablePanel>پنل ۲</ResizablePanel>
</ResizablePanelGroup>

سه پنل

<ResizablePanelGroup direction="horizontal">
  <ResizablePanel defaultSize={25} minSize={20}>
    <div>سایدبار</div>
  </ResizablePanel>
  <ResizableHandle />
  <ResizablePanel defaultSize={50}>
    <div>محتوای اصلی</div>
  </ResizablePanel>
  <ResizableHandle />
  <ResizablePanel defaultSize={25} minSize={20}>
    <div>پنل کناری</div>
  </ResizablePanel>
</ResizablePanelGroup>

Props

ResizablePanel

Prop

Type

ResizablePanelGroup

Prop

Type

ResizableHandle

Prop

Type

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

بکنید

  • همیشه minSize تعیین کنید تا پنل‌ها بیش از حد کوچک نشوند - از withHandle روی ResizableHandle استفاده کنید تا کاربر دسته را به راحتی ببیند - برای layout های سه‌پنلی، defaultSize هر پنل را طوری تنظیم کنید که مجموع ۱۰۰ شود

نکنید

  • از Resizable برای layout های responsive ساده استفاده نکنید — CSS grid/flex کافی است - تعداد پنل‌ها را بیش از ۳-۴ عدد نکنید — تجربه کاربری پیچیده می‌شود

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

  • دسته‌ها با کیبورد قابل پیمایش هستند
  • با کلیدهای جهت‌نما می‌توان اندازه پنل‌ها را تغییر داد
  • از role="separator" برای دسته‌ها استفاده می‌شود
  • سازگار با RTL

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

  • Sidebar — وقتی به یک پنل کناری ثابت با قابلیت collapse نیاز دارید، نه تغییر اندازه آزاد