1 estrella en GitHub = 1 componente nuevo.

Dar una estrella
Notificaciones toastnotification

Toast Message

Mensaje emergente transitorio tipo snackbar con botón de descarte manual.

Vista Previa en Vivo

Success
Settings saved successfully!
Error
Failed to upload file. Please try again.

Uso

Copia y pega este código directamente en tu página de Astro:

astro
---
import { ToastMessage } from 'astro-component-kit';
---

<ToastNotif message="File uploaded" variant="success" />
--- import { ToastMessage } from 'astro-component-kit'; --- <ToastNotif message="File uploaded" variant="success" />

Instalación Manual

Si no estás usando el paquete npm, crea un archivo nuevo y pega el siguiente código: src/components/lib/ToastMessage.astro:

astro
---
/**
 * ToastNotif — A transient snackbar notification that appears at the corner of the screen.
 * 
 * @param {string} message - The notification content.
 * @param {string} icon - Emoji or SVG icon. Default is '✅'.
 * @param {'success'|'info'|'error'} variant - Theme of the toast. Default is 'success'.
 * @param {boolean} show - Initial visibility. Default is true.
 */
interface Props {
  message: string;
  icon?: string;
  variant?: 'success' | 'info' | 'error';
  show?: boolean;
}

const { 
  message, 
  icon = "✅", 
  variant = 'success',
  show = true 
} = Astro.props;
---

<div class:list={['toast', `toast--${variant}`, { 'toast--show': show }]} role="status">
  <div class="toast__icon" aria-hidden="true">{icon}</div>
  <span class="toast__msg">{message}</span>
</div>

<style>
  .toast { 
    position: fixed; 
    bottom: 2rem; 
    right: 2rem; 
    background: var(--c-bg-elev, #0f172a); 
    color: var(--c-text-1, #fff); 
    padding: var(--sp-4, 1rem) var(--sp-6, 1.5rem); 
    border-radius: var(--r-md, 14px); 
    border: 1px solid var(--c-border, rgba(255,255,255,0.1)); 
    display: flex; 
    align-items: center; 
    gap: var(--sp-3, 0.8rem); 
    box-shadow: 0 15px 45px rgba(0,0,0,0.4); 
    transform: translateY(150%) scale(0.9); 
    transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); 
    z-index: 10000; 
  }
  
  .toast--show { transform: translateY(0) scale(1); }
  
  .toast--success { border-left: 4px solid #10b981; }
  .toast--info { border-left: 4px solid var(--c-primary, #6366f1); }
  .toast--error { border-left: 4px solid #ef4444; }
  
  .toast__icon { 
    background: rgba(255,255,255,0.05); 
    width: 28px; height: 28px;
    display: grid; place-items: center;
    border-radius: var(--r-sm, 6px); 
    font-size: 1rem;
    flex-shrink: 0;
  }
  
  .toast__msg { font-size: 0.9rem; font-weight: 500; white-space: nowrap; }
</style>
--- /** * ToastNotif — A transient snackbar notification that appears at the corner of the screen. * * @param {string} message - The notification content. * @param {string} icon - Emoji or SVG icon. Default is '✅'. * @param {'success'|'info'|'error'} variant - Theme of the toast. Default is 'success'. * @param {boolean} show - Initial visibility. Default is true. */ interface Props { message: string; icon?: string; variant?: 'success' | 'info' | 'error'; show?: boolean; } const { message, icon = "✅", variant = 'success', show = true } = Astro.props; --- <div class:list={['toast', `toast--${variant}`, { 'toast--show': show }]} role="status"> <div class="toast__icon" aria-hidden="true">{icon}</div> <span class="toast__msg">{message}</span> </div> <style> .toast { position: fixed; bottom: 2rem; right: 2rem; background: var(--c-bg-elev, #0f172a); color: var(--c-text-1, #fff); padding: var(--sp-4, 1rem) var(--sp-6, 1.5rem); border-radius: var(--r-md, 14px); border: 1px solid var(--c-border, rgba(255,255,255,0.1)); display: flex; align-items: center; gap: var(--sp-3, 0.8rem); box-shadow: 0 15px 45px rgba(0,0,0,0.4); transform: translateY(150%) scale(0.9); transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); z-index: 10000; } .toast--show { transform: translateY(0) scale(1); } .toast--success { border-left: 4px solid #10b981; } .toast--info { border-left: 4px solid var(--c-primary, #6366f1); } .toast--error { border-left: 4px solid #ef4444; } .toast__icon { background: rgba(255,255,255,0.05); width: 28px; height: 28px; display: grid; place-items: center; border-radius: var(--r-sm, 6px); font-size: 1rem; flex-shrink: 0; } .toast__msg { font-size: 0.9rem; font-weight: 500; white-space: nowrap; } </style>

Información Rápida

Categoría
Notificaciones
Nombre de archivo
ToastMessage.astro
Dependencias
Ninguna — Astro nativo + CSS puro
Etiquetas
toastnotification