Перейти к основному содержимому

Выпадающее меню

Сворачивает меню действий под триггер и разворачивается при наведении или нажатии. Меню имеет семантику 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>
)
}

Props компонента Dropdown​

ПропОписаниеТипДопустимые значенияПо умолчанию
childrenУзел-триггерReactNode——
dropdownСодержимое меню (список LhDropdownItem; соответствует слоту plus #dropdown)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

Props компонента 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).

Слот → prop

В plus меню передаётся через слот #dropdown, а в React для этого используется одноимённый prop dropdown; триггер contextmenu подавляет стандартное контекстное меню браузера.

Стили​

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