Saltar al contenido principal

Diálogo

Informa al usuario y acoge las operaciones relacionadas sin perder el estado actual de la página.

Uso básico​

Diálogo controlado
import { useState } from 'react'
import { LhButton, LhDialog } from '@lh-ui/react'

export default function Demo() {
const [open, setOpen] = useState(false)

return (
<>
<LhButton type="primary" onClick={() => setOpen(true)}>
Abrir diálogo
</LhButton>
<LhDialog
open={open}
title="Aviso"
width="420px"
footer={
<>
<LhButton onClick={() => setOpen(false)}>Cancelar</LhButton>
<LhButton type="primary" onClick={() => setOpen(false)}>Aceptar</LhButton>
</>
}
onClose={() => setOpen(false)}
>
<p>Esto es un diálogo controlado.</p>
</LhDialog>
</>
)
}

Dialog Props​

PropDescripciónTipoValores permitidosPredeterminado
openSi está abierto (puramente controlado)boolean—false
titleTítulo (también sirve como respaldo de aria-label cuando no hay header)string——
widthAnchostring | number——
fullscreenPantalla completaboolean—false
showCloseMuestra el botón de cierreboolean—true
closeOnClickModalCierra al hacer clic en la máscaraboolean—true
closeOnPressEscapeCierra al pulsar Escboolean—true
draggableSe puede arrastrar (de la barra de título)boolean—false
centerTítulo y pie centradosboolean—false
positionDesplazamiento de posicionamiento personalizado{ top?: string; left?: string }——
lockScrollBloquea el desplazamiento de body al abrirboolean—true
beforeCloseIntercepta antes de cerrar (si devuelve false / Promise<false>, no se cierra)() => boolean | Promise<boolean>——
topDistancia respecto a la parte superiorstring——
zIndexNivel de apilamiento (por defecto lo asigna de forma creciente useLhZIndex)number——
headerCabecera personalizada (sustituye a title)ReactNode——
footerPie personalizadoReactNode——
themeVarsVariables de tema a nivel de componenteRecord<string, string>——
sxProps rápidas de layoutSxProps——

Eventos de Dialog​

EventoDescripciónFirma del callbackEquivalente en Vue
onClosePetición de cierre (máscara / Esc / botón de cierre; no se llama si beforeClose intercepta)() => voidupdate:modelValue
onOpenSe dispara al instante de abrir (el DOM ya está montado)() => void@open
onOpenedSe dispara al terminar la transición de apertura() => void@opened
onCloseStartSe dispara al empezar la transición de cierre() => void@close
onClosedSe dispara al terminar la transición de cierre (el DOM se desmonta)() => void@closed

ref​

forwardRef<HTMLDivElement>. LhDialogInstance no expone métodos imperativos por ahora.

Semántica puramente controlada

A diferencia de plus, el Dialog de esta biblioteca no tiene un estado intermedio interno isVisible: open lo mantiene por completo el estado externo, y cualquier ruta de cierre solo invoca onClose. Consulta la Guía de migración.

Esc con varias capas superpuestas

useLhOverlayStack mantiene una pila con el orden de apertura: Esc solo cierra la capa superior, evitando que una sola pulsación cierre todas las capas.

Estilos​

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