1 звезда на GitHub = 1 новый компонент.

Поставить звезду
Уведомления toastnotification

Toast Message

Всплывающее кратковременное снэкбар-уведомление с кнопкой закрытия.

Живое превью

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

Использование

Скопируйте и вставьте этот код на вашу страницу 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" />

Ручная установка

Если вы не используете пакет npm, создайте файл и вставьте следующий код: 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>

Краткая информация

Категория
Уведомления
Имя файла
ToastMessage.astro
Зависимости
Нет — чистый Astro + CSS
Теги
toastnotification