تخطّي إلى المحتوى الرئيسي

درج Drawer

لوحة درج تنزلق من حافة الشاشة، تُستخدم غالبًا في عرض التفاصيل وتعبئة النماذج وغيرها من السيناريوهات التي تتطلب مساحة عرض أكبر. الفرق عن Dialog: ملتصقة بالحافة، تنزلق في اتجاه محدد، ويعمل حجم اللوحة على جانب واحد فقط (العرض أو الارتفاع).

الاستخدام الأساسي​

أربعة اتجاهات وأحجام مخصصة
import { useState } from 'react'
import { LhButton, LhDrawer } from '@lh-ui/react'

export default function Demo() {
const [open, setOpen] = useState(false)
return (
<>
<LhButton onClick={() => setOpen(true)}>فتح الدرج</LhButton>
<LhDrawer title="عنوان الدرج" open={open} onClose={() => setOpen(false)}>
محتوى الدرج
</LhDrawer>
</>
)
}

خصائص Drawer​

خاصيةالوصفالنوعالقيم المتاحةالافتراضي
childrenالمحتوى الرئيسيReactNode——
openهل يكون ظاهرًا (مُتحكم به)boolean—false
titleالعنوانReactNode——
directionاتجاه الانزلاق'right' | 'left' | 'top' | 'bottom'—'right'
sizeحجم اللوحة (رقم → px، والنص يدعم النسبة المئوية)string | number—'30%'
showCloseهل يُظهر زر الإغلاقboolean—true
maskClosableهل يُغلق عند النقر على القناعboolean—false
closeOnEscهل يُغلق بالضغط على Escboolean—true
lockScrollهل يُقفل تمرير body (وعند القفل يُحصر التركيز أيضًا)boolean—true
beforeCloseاعتراض ما قبل الإغلاق، لا يتابع إلا بعد استدعاء done(done: () => void) => void——
zIndexz-index (عند عدم تمريره يخضع للنظام العام المتزايد)number——
headerمحتوى الرأس (يتجاوز شريط العنوان الافتراضي)ReactNode——
footerمحتوى التذييل (منطقة الأزرار)ReactNode——
themeVarsمتغيرات السمة على مستوى المكوّنRecord<string, string>——
sxخصائص التخطيط السريع (تنطبق على اللوحة)SxProps——

أحداث Drawer​

حدثالوصفتوقيع الاستدعاءمقابل Vue
onCloseطلب الإغلاق (القناع / Esc / زر الإغلاق)، يُطلق بعد اعتراض beforeClose() => voidupdate:modelValue / close
onOpenيُطلق عند الفتح (بعد تركيب DOM وقبل حركة الدخول)() => voidopen
onOpenedانتهت حركة الفتح() => voidopened
onCloseStartقُبل طلب الإغلاق وبدأت حركة الخروج() => void—
onClosedانتهت حركة الإغلاق، وبعد إلغاء تركيب DOM() => voidclosed

ref​

forwardRef<LhDrawerInstance>. يكشف LhDrawerInstance عن close() (يخضع لاعتراض beforeClose) و isOpen.

القناع غير قابل للنقر افتراضيًا

maskClosable افتراضيًا false (دالة canDrawerClose في core ترفض النقر على القناع افتراضيًا) لتجنب النقر غير المقصود؛ وافتراضيًا closeOnClickModal في plus هو true، لذا يجب التصريح به صراحة عند الترحيل.

حصر التركيز

يُحصر التركيز فقط عند تفعيل lockScroll (shouldDrawerTrapFocus): فالدرج يعمل غالبًا كلوحة خفيفة، وعند عدم قفل التمرير يُحتفظ بتسلسل Tab للنموذج الذي خلفه. وعند الإغلاق يُعاد التركيز.

الحجم والاتجاه

عندما يكون size رقمًا يُطبّع إلى px؛ ويتحكم اتجاها الجانبين (يمين / يسار) في width الخاصة باللوحة بينما يتحكم الاتجاهان (أعلى / أسفل) في height.

الأنماط​

import '@lh-ui/react/style/drawer'