Skip to content

AlertDialog

Modal de confirmación para acciones críticas. No se cierra al hacer click fuera ni con Escape — requiere una acción explícita.


Import

jsx
import {
  AlertDialog,
  AlertDialogTrigger,
  AlertDialogContent,
  AlertDialogHeader,
  AlertDialogTitle,
  AlertDialogDescription,
  AlertDialogFooter,
  AlertDialogCancel,
  AlertDialogAction,
} from '@imansi/ui';

Uso básico

jsx
<AlertDialog>
  <AlertDialogTrigger asChild>
    <Button variant="destructive">Eliminar cuenta</Button>
  </AlertDialogTrigger>
  <AlertDialogContent>
    <AlertDialogHeader>
      <AlertDialogTitle>¿Estás seguro?</AlertDialogTitle>
      <AlertDialogDescription>
        Esta acción no se puede deshacer. Se eliminarán todos tus datos.
      </AlertDialogDescription>
    </AlertDialogHeader>
    <AlertDialogFooter>
      <AlertDialogCancel>Cancelar</AlertDialogCancel>
      <AlertDialogAction>Confirmar</AlertDialogAction>
    </AlertDialogFooter>
  </AlertDialogContent>
</AlertDialog>

Con acción asíncrona

jsx
const [eliminando, setEliminando] = useState(false);

<AlertDialog>
  <AlertDialogTrigger asChild>
    <Button variant="destructive">Eliminar</Button>
  </AlertDialogTrigger>
  <AlertDialogContent>
    <AlertDialogHeader>
      <AlertDialogTitle>Confirmar eliminación</AlertDialogTitle>
      <AlertDialogDescription>
        Se eliminarán 5 elementos seleccionados.
      </AlertDialogDescription>
    </AlertDialogHeader>
    <AlertDialogFooter>
      <AlertDialogCancel disabled={eliminando}>Cancelar</AlertDialogCancel>
      <AlertDialogAction
        disabled={eliminando}
        onClick={async (e) => {
          e.preventDefault();
          setEliminando(true);
          await eliminarItems();
          setEliminando(false);
        }}
      >
        {eliminando ? 'Eliminando...' : 'Eliminar'}
      </AlertDialogAction>
    </AlertDialogFooter>
  </AlertDialogContent>
</AlertDialog>

Props

Mismas que Dialog, más:

AlertDialogAction

PropTipoDefaultDescripción
onClick(e) => voidHandler del botón de acción
variantstring'destructive'Variante visual

AlertDialogCancel

PropTipoDefaultDescripción
onClick(e) => voidHandler del botón de cancelar (cierra el modal)

Accesibilidad

  • Escape NO cierra el modal (requiere acción explícita)
  • Click afuera NO cierra el modal
  • Focus trap dentro del modal
  • role="alertdialog" + aria-modal="true"
  • Foco inicial en el botón de cancelar

Hecho con ❤️ en Argentina