Saltar al contenido principal

Cajón

Panel de cajón que se desliza desde el borde de la pantalla; se usa a menudo para vista de detalles, rellenado de formularios y otros escenarios que necesitan un espacio de visualización mayor. La diferencia respecto a Dialog: se muestra pegado al borde, se desliza en una dirección y el tamaño del panel afecta a un solo lado (ancho o alto).

Uso básico​

Cuatro direcciones y tamaño personalizado
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)}>Abrir cajón</LhButton>
<LhDrawer title="Título del cajón" open={open} onClose={() => setOpen(false)}>
Contenido del cajón
</LhDrawer>
</>
)
}

Drawer Props​

PropDescripciónTipoValores permitidosPredeterminado
childrenContenido principalReactNode——
openSi se muestra (controlado)boolean—false
titleTítuloReactNode——
directionDirección de salida'right' | 'left' | 'top' | 'bottom'—'right'
sizeTamaño del panel (número -> px; la cadena admite porcentajes)string | number—'30%'
showCloseSi se muestra el botón de cierreboolean—true
maskClosableSi se cierra al hacer clic en la máscaraboolean—false
closeOnEscSi se cierra al pulsar Escboolean—true
lockScrollSi se bloquea el desplazamiento de body (al bloquear, también se atrapa el foco)boolean—true
beforeCloseIntercepta antes de cerrar; continúa solo al invocar done(done: () => void) => void——
zIndexz-index (si no se pasa, sigue el sistema global de incremento)number——
headerContenido de la cabecera (sustituye a la barra de título por defecto)ReactNode——
footerContenido del pie (zona de botones)ReactNode——
themeVarsVariables de tema a nivel de componenteRecord<string, string>——
sxProps rápidas de layout (actúan sobre el panel)SxProps——

Eventos de Drawer​

EventoDescripciónFirma del callbackEquivalente en Vue
onClosePetición de cierre (máscara / Esc / botón de cierre; se dispara tras el filtro de beforeClose)() => voidupdate:modelValue / close
onOpenSe dispara al abrir (tras montar el DOM, antes de la animación de entrada)() => voidopen
onOpenedFin de la animación de apertura() => voidopened
onCloseStartLa petición de cierre se acepta y empieza la animación de salida() => void—
onClosedFin de la animación de cierre, tras desmontar el DOM() => voidclosed

ref​

forwardRef<LhDrawerInstance>. LhDrawerInstance expone close() (pasa por el filtro de beforeClose) e isOpen.

La máscara no es cliclable por defecto

maskClosable es false por defecto (canDrawerClose del núcleo rechaza por defecto el clic en la máscara), para evitar toques accidentales; en plus closeOnClickModal es true por defecto, por lo que al migrar hay que declararlo explícitamente.

Captura de foco

El foco solo se atrapa cuando lockScroll está activado (shouldDrawerTrapFocus): el cajón suele ser un panel ligero y, si no se bloquea el desplazamiento, se conserva la secuencia de Tab del formulario que queda detrás. Al cerrar, el foco se devuelve.

Tamaño y dirección

size, cuando es un número, se normaliza a px; para las direcciones izquierda/derecha afecta al width del panel y para arriba/abajo al height.

Estilos​

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