Skip to content

Dialog ​

Modal centrado con overlay. Bloquea la interacción con el resto de la página hasta que se cierre.


Import ​

jsx
import {
  Dialog,
  DialogTrigger,
  DialogContent,
  DialogHeader,
  DialogTitle,
  DialogDescription,
  DialogFooter,
  DialogClose,
} from '@imansi/ui';

Uso básico ​

jsx
<Dialog>
  <DialogTrigger asChild>
    <Button>Abrir modal</Button>
  </DialogTrigger>
  <DialogContent>
    <DialogHeader>
      <DialogTitle>Título del modal</DialogTitle>
      <DialogDescription>
        Descripción corta de qué hace este modal.
      </DialogDescription>
    </DialogHeader>
    <DialogFooter>
      <DialogClose asChild>
        <Button variant="outline">Cancelar</Button>
      </DialogClose>
      <Button>Confirmar</Button>
    </DialogFooter>
  </DialogContent>
</Dialog>

Controlado ​

jsx
import { useState } from 'react';
import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@imansi/ui';

export function Ejemplo() {
  const [abierto, setAbierto] = useState(false);

  return (
    <>
      <Button onClick={() => setAbierto(true)}>Abrir</Button>
      <Dialog open={abierto} onOpenChange={setAbierto}>
        <DialogContent>
          <DialogHeader>
            <DialogTitle>Modal controlado</DialogTitle>
          </DialogHeader>
        </DialogContent>
      </Dialog>
    </>
  );
}

Props ​

Dialog ​

PropTipoDefaultDescripción
openboolean—Estado controlado
defaultOpenbooleanfalseEstado inicial
onOpenChange(open: boolean) => void—Callback al abrir/cerrar
modalbooleantrueBloquea interacción con el fondo

DialogContent ​

PropTipoDefaultDescripción
classNamestring—Clases adicionales
onEscapeKeyDown(e) => void—Handler de Escape
onInteractOutside(e) => void—Handler de click afuera

Accesibilidad ​

  • Escape cierra el modal
  • Click en el overlay cierra el modal (configurable)
  • Tab cicla el foco dentro del modal (focus trap)
  • role="dialog" + aria-modal="true" + aria-labelledby + aria-describedby
  • Scroll del body se bloquea automáticamente

Hecho con ❤️ en Argentina