meBlip

Componente de notificaciones tipo Dynamic Island con animaciones spring, colas inteligentes, temas, formularios y verificacion. Sin dependencias.

v2.0 MIT Zero deps

Inicialización

const blip= new meBlip({
  position: 'top-center',
  theme: 'dark',
  closeAnimation: true,
  typeColors: {
    premium: '#8b5cf6',
    light: '#facc15'
  },
  icons: {
    premium: '<svg ...>...</svg>',
    heart: '<svg ...>...</svg>'
  },
  overlayStyle: { blur: 4, contrast: 0.85, grayscale: 0.3 }
});

Config Helpers

// Cambiar posición
blip.setPosition('top-center');
// Opciones: 'top-left', 'top-center', 'top-right',
//           'center', 'bottom-left', 'bottom-center', 'bottom-right'

// Cambiar tema
blip.setTheme('dark');
// Opciones: 'dark', 'light', 'system'

// Cambiar estilo de apilamiento
blip.setStackStyle('3d');
// Opciones: '3d', 'fan', 'counter'

// Cambiar ancho de la isla
blip.setIslandWidth('normal');
// Opciones: 'compact', 'normal', 'wide'

// Cambiar backdrop-filter del overlay bloqueante
blip.setOverlayStyle({ blur: 4, contrast: 0.85, grayscale: 0.3 });

Básico

5 demos
Mínima
Solo título, sin icono ni subtítulo
Éxito
Notificación de éxito simple que se cierra en 3 segundos
Error
Notificación de error básica, 3 segundos
Información
Aviso informativo con duración de 4 segundos
Aviso
Alerta de seguridad con sonido, no se cierra en automático

Animaciones

12 demos
Éxito con Pulso
Animación de escala suave al aparecer la notificación
Error con Shake
Vibración lateral al mostrar un error
Bounce
Rebote vertical suave, ahora default para warnings
Glow
Resplandor pulsante del borde, ahora default para info
Breathe
Respiración lenta infinita, ahora default para thinking
Heartbeat
Doble pulso rápido como latido de corazón
Wobble
Deformación elástica tipo gelatina
Ripple
Onda expansiva desde el borde de la isla
Swing
Oscilación tipo péndulo, ideal para recordatorios
Typing Dots
Tres puntos secuenciales estilo “escribiendo”
Progress Orbit
Puntos orbitando como alternativa al spinner clásico
Icon Color
Icono con color personalizado independiente del tipo
Slide Spring
Entrada deslizante con rebote elástico

IA & Estado

4 demos
Cargando
Spinner animado durante 4 segundos
Pensando (IA)
Animación de IA procesando durante 5 segundos
Hablando
Icono de altavoz con onda durante 3 segundos
Escuchando
Micrófono activo esperando entrada de voz

Progreso

2 demos
Descarga
Barra de progreso al 75%, cierre automático en 4s
Subida en Vivo
Progreso interactivo de 0% a 100% en tiempo real

Acciones

3 demos
Con Avatar
Imagen circular de perfil con botones de acción
Éxito + Acciones
Botones para actuar tras una operación exitosa
Error + Reintentar
Overlay bloqueante con opciones de reintentar o cancelar

Cola & Grupos

4 demos
Cola Normal
3 notificaciones secuenciales en orden FIFO
Alta Prioridad
Salta la cola automáticamente con sonido
Smart Group
4 items agrupados inteligentemente con progreso promedio
Wait to Display
La duración cuenta desde que se muestra, no desde que se añade a la cola

Avanzado

26 demos
Custom Type
Tipo personalizado con color y fondo propios via typeColors
Custom Icon
Icono SVG personalizado pasado via icons en el constructor
Glow Color
Animación glow con color de shadow personalizado
Auto Contraste
Fondo claro con texto oscuro automático (luminancia WCAG)
HTML Subtitle
Subtítulo con negrita, enlaces y código
Morphing
Transición suave de loading a success con cambio de color e icono
Exit Fade
Animación de salida con desvanecimiento
Exit Shrink
Salida con rebote elástico invertido
Countdown
Barra inferior que muestra el tiempo restante (hover para pausar)
Undo
Patrón deshacer tipo Gmail con countdown
Chain
Secuencia de 3 pasos: conectar → descargar → listo
Confetti
Explosión de partículas al mostrar un éxito
Posición Override
Notificación que aparece en otra posición y luego restaura
Ancho Compacto
Override islandWidth: 'compact' solo para esta notificación
Ancho Ampliado
Override islandWidth: 'wide' solo para esta notificación
Contenido HTML
Estadísticas con content HTML personalizado
Content + Actions
HTML personalizado con botones de acción
Persistent
No se puede cerrar con Escape ni click, solo programáticamente
has()
Comprueba si una notificación existe en la cola por su ID
.remove()
Cierra una notificación directamente desde el objeto devuelto por add()
removeGroup()
Cierra todas las notificaciones de un grupo por su groupId
className
Aplica clase CSS personalizada a la isla y al overlay
Overlay Style
Backdrop-filter con blur, contraste y escala de grises en el overlay bloqueante
onShow
Callback al mostrarse la notificación, muestra un console.log
onHide
Callback al cerrarse, lanza notificación secundaria de confirmación
Promise
Patrón promise: loading automático mientras espera, transición a success o error

Verificación

8 demos
Básico
Código alfanumérico de 4 caracteres generado automáticamente
Numérico
Código de 6 dígitos numéricos con teclado tel
Código Custom
Código fijo definido por el desarrollador: ABC123
Case Sensitive
Distingue mayúsculas y minúsculas al validar
Callbacks
Callbacks onVerify, onFail y onCancel con feedback
Styled
Verificación con tipo error, icono y close button
Input SMS
Modo input: código ciego de 6 dígitos con botón Confirmar
Input Token
Modo input: token alfanumérico de 4 caracteres con botón custom

Formularios

4 demos
Básico
Formulario de contacto con nombre y email
Con Select
Encuesta con select y textarea
Completo
Registro con text, email, tel y select
Feedback
Reporte con textarea, campos required y labels custom

Prompt

2 demos
Básico
Pedir un nombre al usuario, como window.prompt()
Con opciones
Código de acceso con tipo warning y labels custom

Scanner basado en onscan.js

4 demos
Básico
Prompt con detección de escáner de códigos de barras
Con opciones
Opciones de escáner personalizadas y listener de eventos
Document mode
Sin input visible, escucha eventos en el document
Error handling
Captura errores de escaneo con onScanError

Subida de ficheros

5 demos
Básico
Subida de un único archivo sin restricciones
Múltiple
Varios archivos con multiple: true
Solo imágenes
Filtrado por accept: 'image/*' y límite de tamaño
PDFs múltiples
Extensión .pdf + multiple + límite 10 MB
Enviar al servidor
Patrón FormData + fetch para subir ficheros

Geolocalización

2 demos
Básica
Obtener ubicación con configuración mínima
Alta precisión
Con highAccuracy: true y timeout

Mapa

4 demos
Básico
Mapa centrado en Madrid con marcador
Con etiqueta
Mapa con markerLabel descriptivo
Sin marcador
Solo vista del mapa con showMarker: false
Geolocalización
Obtiene tu ubicación real y muestra el mapa