Saltar al contenido principal

Menú desplegable

Contrae un menú de acciones bajo el disparador y lo despliega al pasar el cursor o al hacer clic. El menú tiene semántica de role="menu" y admite navegación completa por teclado (flechas / Home / End / Enter / Esc) con roving tabindex.

Uso básico​

Disparador por hover / clic y uso imperativo
import { LhButton, LhDropdown, LhDropdownItem } from '@lh-ui/react'

export default function Demo() {
return (
<LhDropdown
onCommand={(command) => console.log(command)}
dropdown={
<>
<LhDropdownItem command="new">Nuevo</LhDropdownItem>
<LhDropdownItem command="delete" disabled>
Eliminar
</LhDropdownItem>
</>
}
>
<LhButton>Desplegar</LhButton>
</LhDropdown>
)
}
PropDescripciónTipoValores permitidosPredeterminado
childrenNodo disparadorReactNode——
dropdownContenido del menú (lista de LhDropdownItem; corresponde al slot #dropdown de plus)ReactNode——
triggerModo de disparo'hover' | 'click' | 'contextmenu'—'hover'
placementPosición de visualizaciónLhDropdownPlacementtop / bottom (con -start / -end), etc.'bottom-start'
disabledDesactivadoboolean—false
visibleVisibilidad controladaboolean——
defaultVisibleVisibilidad por defecto no controladaboolean—false
hideOnClickSi el menú se cierra automáticamente tras pulsar un elementoboolean—true
maxHeightAltura máxima del menú (se desplaza al superarse)string | number——
popperClassClase personalizada del menústring——
themeVarsVariables de tema a nivel de componenteRecord<string, string>——
sxProps rápidas de layout (actúan sobre el disparador)SxProps——

Eventos de Dropdown​

EventoDescripciónFirma del callbackEquivalente en Vue
onCommandSe pulsa un elemento del menú y se emite su command(command: string | number) => voidcommand
onVisibleChangeCambio de visibilidad(visible: boolean) => voidupdate:visible
onClickOutsideClic fuera del menú (el menú también se cierra internamente)() => voidclick-outside
PropDescripciónTipoValores permitidosPredeterminado
childrenContenido del elemento de menúReactNode——
commandIdentificador del comando, emitido con onCommandstring | number——
disabledSi está desactivado (no responde al clic ni participa en la navegación por teclado)boolean—false
dividedSi se muestra una línea separadoraboolean—false

Eventos de DropdownItem​

EventoDescripciónFirma del callbackEquivalente en Vue
onClickClic en el elemento del menú (puede coexistir con onCommand)() => void—

ref​

forwardRef<LhDropdownInstance>. LhDropdownInstance expone show() / hide() / toggle() / isVisible.

Navegación por teclado (patrón de menú APG)

Al abrir el menú, el foco cae sobre el primer elemento habilitado; ArrowUp / ArrowDown se mueven en ciclo y saltan los elementos desactivados, Home / End van directo al primero / último, Enter / Space activan el elemento actual y Esc cierra el menú y devuelve el foco al disparador. Solo el elemento ancla tiene tabIndex={0}; los demás -1 (roving tabindex).

Slot -> prop

plus aloja el menú en el slot #dropdown; en React pasa a ser una prop dropdown del mismo nombre; el disparador contextmenu bloquea el menú contextual por defecto del navegador.

Estilos​

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