Uso Básico

Modales (notify)

Los modales son notificaciones bloqueantes que requieren interacción del usuario.

Métodos rápidos

notify.success('Operación completada', '¡Éxito!');
notify.error('No se pudo conectar', 'Error');
notify.warning('Esta acción no se puede deshacer', '¿Continuar?');
notify.info('Tu sesión expira en 5 minutos');
notify.question('¿Deseas eliminar este elemento?', 'Confirmar');

Método completo notify.show()

const result = await notify.show({
  type: 'question',
  title: 'Confirmar eliminación',
  message: '¿Estás seguro de que deseas eliminar este registro?',
  buttonText: 'Eliminar',
  showCloseButton: true,
  allowOutsideClick: false,
  timer: 0,
  buttons: [
    { text: 'Cancelar', color: '#6b7280', action: 'close' },
    { text: 'Eliminar', color: '#ef4444', action: 'confirm' }
  ],
  onClose: () => console.log('Modal cerrado')
});

Timer automático

// El modal se cierra automáticamente tras 5 segundos
notify.info('Este mensaje desaparecerá en 5 segundos', 'Info', { timer: 5000 });

Modal de carga

// Modal bloqueante sin botón — ideal para operaciones en progreso
notify.show({
  type: 'info',
  title: 'Procesando',
  message: 'Por favor espera...',
  hideButton: true,
  allowOutsideClick: false,
  allowEscapeKey: false
});

await doLongOperation();

notify.close(); // Cerrar programáticamente

Toasts

Los toasts son notificaciones no bloqueantes que aparecen en la esquina de la pantalla.

Métodos rápidos

notify.toastSuccess('Guardado correctamente');
notify.toastError('Error al procesar');
notify.toastWarning('Conexión inestable');
notify.toastInfo('Hay actualizaciones disponibles');
notify.toastQuestion('¿Quieres guardar los cambios?');

Toast genérico

notify.toast('Mensaje personalizado', {
  type: 'success',
  title: 'Título opcional',
  duration: 4000,        // ms (0 = no cierra automáticamente)
  closeable: true,       // muestra botón ×
  position: 'top-right'
});

Toast de carga (toastLoading)

Solo puede existir uno a la vez. No se puede cerrar manualmente.

notify.toastLoading('Subiendo archivo...', 'Espera');

try {
  await uploadFile(file);
  await notify.closeToastLoading(); // espera la animación de salida
  notify.toastSuccess('Archivo subido correctamente');
} catch (err) {
  await notify.closeToastLoading();
  notify.toastError('Error al subir el archivo');
}

Reemplazar toast de carga

notify.toastLoading('Procesando pago...');
await processPayment();
// Reemplaza el loading por el resultado sin animación de salida
notify.replaceToastLoading('¡Pago confirmado!', { type: 'success' });

Deduplicación por ID

Si muestras el mismo toast varias veces rápidamente, puedes evitar duplicados:

notify.toastInfo('El archivo ya existe', { id: 'file-exists', duration: 3000 });
// Si se llama otra vez con el mismo id, resetea el contador en lugar de crear otro

Posición de los toasts

notify.toastSuccess('Mensaje', { position: 'top-right' });    // por defecto
notify.toastSuccess('Mensaje', { position: 'top-left' });
notify.toastSuccess('Mensaje', { position: 'bottom-right' });
notify.toastSuccess('Mensaje', { position: 'bottom-left' });
notify.toastSuccess('Mensaje', { position: 'top-center' });
notify.toastSuccess('Mensaje', { position: 'bottom-center' });