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

قائمة منسدلة Dropdown

تطوي قائمة الإجراءات أسفل المُشغّل، وتُفتح عند تمرير المؤشر أو النقر. تحمل القائمة دلالة role="menu"، وتدعم تنقلًا كاملًا بلوحة المفاتيح (مفاتيح الأسهم / Home / End / Enter / Esc) وتقنية roving tabindex.

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

التشغيل بتمرير المؤشر / النقر والاستخدام الحتمي
import { LhButton, LhDropdown, LhDropdownItem } from '@lh-ui/react'

export default function Demo() {
return (
<LhDropdown
onCommand={(command) => console.log(command)}
dropdown={
<>
<LhDropdownItem command="new">جديد</LhDropdownItem>
<LhDropdownItem command="delete" disabled>
حذف
</LhDropdownItem>
</>
}
>
<LhButton>توسيع</LhButton>
</LhDropdown>
)
}

خصائص Dropdown​

خاصيةالوصفالنوعالقيم المتاحةالافتراضي
childrenعقدة المُشغّلReactNode——
dropdownمحتوى القائمة (قائمة LhDropdownItem، تقابل فتحة #dropdown في plus)ReactNode——
triggerطريقة التشغيل'hover' | 'click' | 'contextmenu'—'hover'
placementموضع العرضLhDropdownPlacementtop / bottom (مشتملة على -start / -end) وغيرها'bottom-start'
disabledمعطّلboolean—false
visibleإظهار / إخفاء مُتحكم بهboolean——
defaultVisibleالإظهار والإخفاء الافتراضي غير المُتحكم بهboolean—false
hideOnClickهل تُغلق القائمة تلقائيًا بعد النقر على أحد عناصرهاboolean—true
maxHeightأقصى ارتفاع للقائمة (تتحرك عند تجاوزه)string | number——
popperClassفئة مخصصة للقائمةstring——
themeVarsمتغيرات السمة على مستوى المكوّنRecord<string, string>——
sxخصائص التخطيط السريع (تنطبق على المُشغّل)SxProps——

أحداث Dropdown​

حدثالوصفتوقيع الاستدعاءمقابل Vue
onCommandنُقر عنصر في القائمة ويُمرَّر command الخاص به(command: string | number) => voidcommand
onVisibleChangeتغيّر الإظهار والإخفاء(visible: boolean) => voidupdate:visible
onClickOutsideالنقر خارج القائمة (وتُغلق داخليًا في الوقت ذاته)() => voidclick-outside

خصائص DropdownItem​

خاصيةالوصفالنوعالقيم المتاحةالافتراضي
childrenمحتوى عنصر القائمةReactNode——
commandمُعرّف الأمر، يُمرَّر مع onCommandstring | number——
disabledهل يكون معطّلًا (لا يستجيب للنقر ولا يشارك في التنقل بلوحة المفاتيح)boolean—false
dividedهل يُظهر خطًا فاصلًاboolean—false

أحداث DropdownItem​

حدثالوصفتوقيع الاستدعاءمقابل Vue
onClickالنقر على عنصر القائمة (يتعايش مع onCommand)() => void—

ref​

forwardRef<LhDropdownInstance>. يكشف LhDropdownInstance عن show() / hide() / toggle() / isVisible.

التنقل بلوحة المفاتيح (نمط قائمة APG)

عند فتح القائمة يقع التركيز على أول عنصر مُفعّل؛ وتنتقل مفاتيح ArrowUp / ArrowDown بشكل دائري متجاوزة العناصر المعطّلة، ويصل Home / End إلى العنصرين الأول والأخير مباشرة، ويفعّل Enter / Space العنصر الحالي، بينما يُغلق Esc القائمة ويعيد التركيز إلى المُشغّل. فقط عنصر الإرساء يحمل tabIndex={0}، بينما تكون بقية العناصر -1 (roving tabindex).

فتحة → خاصية

يستخدم plus الفتحة #dropdown لحمل القائمة، وقد استُبدلت في React بالخاصية dropdown التي تحمل الاسم نفسه؛ ويمنع تشغيل contextmenu قائمة النقر بزر الماوس الأيمن الافتراضية للمتصفح.

الأنماط​

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