Sistema de Notificaciones modernas

Biblioteca ligera para mostrar modales y notificaciones con animaciones fluidas. Soporta contenido HTML, formularios, accesibilidad, múltiples botones de acción y personalización de animación.

Documentación — Sistema de Notificaciones

Toasts →
🌓

Dark Mode Automático

Las notificaciones detectan automáticamente el tema activo en tu web y ajustan sus colores. Prueba cambiar el tema usando el botón de arriba y luego abre cualquier notificación.

🌞 Modo Claro

  • • Fondo blanco (#ffffff)
  • • Texto oscuro (#111827)
  • • Overlay suave

🌙 Modo Oscuro

  • • Fondo oscuro (#0f1724)
  • • Texto claro (#e6eef8)
  • • Overlay intenso
💡 Integración: Solo necesitas agregar/quitar la clase .dark al elemento <html>. Compatible con Tailwind CSS (darkMode: 'class') y frameworks personalizados.

⚡ Importar mediante CDN

📦 Script Clásico (UMD)

Compatible con cualquier proyecto HTML tradicional. ¡Solo necesitas un tag script! Todas las dependencias se cargan automáticamente.

<!-- FerNotify (todo se carga automáticamente) -->
<script src="https://cdn.jsdelivr.net/gh/Fernandocabal/fernotify@latest/dist/notification-system.js"></script>

<script>
  notify.success('¡Todo funcionando!');
</script>

📦 ES Module

Para proyectos modernos con import/export. Las dependencias se cargan automáticamente. También puedes definir
"buttons" (array JSON) para diálogos con varios botones desde el playground.

<script type="module">
  import NotificationSystem from 'https://cdn.jsdelivr.net/gh/Fernandocabal/fernotify@latest/dist/notification-system.esm.js';
  
  window.notify = new NotificationSystem();
  notify.success('¡Funciona con ES Modules!');
</script>

📦 NPM

Para proyectos Node.js con bundler (Webpack, Vite, etc.)

npm install fernotify

import NotificationSystem from 'fernotify';
const notify = new NotificationSystem();
notify.success('¡Instalado vía npm!');

✅ Dependencias Automáticas:

  • anime.js 3.2.1 - Se carga automáticamente desde CDN
  • Boxicons 2.1.4 - Se carga automáticamente desde CDN

💡 Versionado: Puedes usar @latest para la última versión o especificar una versión exacta como @1.2.1

⚛️ Uso con React / Frameworks

FerNotify opera completamente fuera del árbol de React — manipula document.body directamente. No hay conflicto con el Virtual DOM. Sin embargo, hay patrones recomendados según el entorno. Desde v1.2.11 incluye tipos TypeScript (types/index.d.ts).

✅ Caso más simple y recomendado. En React + Vite (solo cliente) no hay restricciones: importa, instancia y usa donde quieras.

1. Instalar

npm install fernotify

2. Crear instancia singleton en un módulo separado — src/lib/notify.ts

import NotificationSystem from 'fernotify';

// Una sola instancia para toda la app
const notify = new NotificationSystem();
export default notify;

3. Usar en cualquier componente

import notify from '@/lib/notify';

export function SaveButton() {
  const handleSave = async () => {
    notify.toastLoading('Guardando...', 'Espera');
    try {
      await fetch('/api/save', { method: 'POST', body: JSON.stringify(data) });
      await notify.closeToastLoading();
      notify.toastSuccess('Guardado correctamente');
    } catch {
      await notify.closeToastLoading();
      notify.toastError('Error al guardar');
    }
  };

  return <button onClick={handleSave}>Guardar</button>;
}

🍞 Toast — Notificaciones no bloqueantes

🔔

Los toasts son notificaciones ligeras que aparecen en la esquina de la pantalla sin bloquear la interfaz. Se cierran automáticamente (duración configurable), se pueden cerrar con el botón ×, y se acumulan apilándose uno bajo otro.

Métodos abreviados

notify.toastSuccess('Guardado');
notify.toastError('Ocurrió un error');
notify.toastWarning('Revisa los datos');
notify.toastInfo('Nueva actualización');
notify.toastQuestion('¿Continuar?');

// Carga con spinner (no se puede cerrar manualmente)
notify.toastLoading('Enviando...', 'Espera');
notify.closeToastLoading(); // cierra el spinner

Opciones avanzadas

notify.toast('Mensaje', {
  type: 'success',
  title: 'Título opcional',
  duration: 6000,   // 0 = sin auto-cierre
  position: 'bottom-right',
  id: 'mi-toast',  // deduplicación
  closeable: false  // oculta el botón ×
});
🔄 Toast de carga: toastLoading(msg, title?) muestra un spinner no cerrable. Solo puede existir uno a la vez. Ciérralo con closeToastLoading() para mostrar el resultado de la operación.
🏷️ Deduplicación: asigna un id para que, si el toast ya está visible (ej. botón clicado repetidamente), se resetee su cuenta regresiva en lugar de crear un duplicado.
Posiciones disponibles: top-right top-left top-center bottom-right bottom-left

Ejemplos — Notificaciones

Demostraciones de modales de notificación con uno o varios botones.

Playground — Notificaciones

Ejemplos — Toast

Notificaciones no bloqueantes, apilables y con pausa al pasar el mouse.

Playground — Toast