Feedback alertglass

Glass Alert

Translucent feedback bar.

Preview

Information
This is a helpful informational alert for the user.
Success
Your changes have been saved successfully.
Warning
Please review your settings before continuing.

Usage

Copy the full block below to use this component with its imports.

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

<div class="stack-v gap-4">
  <GlassAlert type="info" title="System Update">
    A new version of the dashboard is available. Please refresh to see changes.
  </GlassAlert>

  <GlassAlert type="success" title="Payment Successful">
    Your subscription has been renewed for another month.
  </GlassAlert>
  
  <GlassAlert type="error" title="Connection Lost">
    We couldn't reach the server. Checking your internet connection...
  </GlassAlert>
</div>
--- import { GlassAlert } from 'astro-component-kit'; --- <div class="stack-v gap-4"> <GlassAlert type="info" title="System Update"> A new version of the dashboard is available. Please refresh to see changes. </GlassAlert> <GlassAlert type="success" title="Payment Successful"> Your subscription has been renewed for another month. </GlassAlert> <GlassAlert type="error" title="Connection Lost"> We couldn't reach the server. Checking your internet connection... </GlassAlert> </div>

Manual Installation

If you are not using the npm package, create a new file src/components/lib/GlassAlert.astro and paste the following code:

astro
---
/**
 * GlassAlert — A translucent feedback bar for displaying situational messages.
 * 
 * @param {'info'|'success'|'warning'|'error'} type - The severity or nature of the alert. Default is 'info'.
 * @param {string} title - Bold header text for the alert.
 */
interface Props { 
  type?: 'info' | 'success' | 'warning' | 'error'; 
  title: string; 
}

const { type = 'info', title } = Astro.props;

const icons = {
  info: "i",
  success: "✓",
  warning: "!",
  error: "✕"
};
---

<div class:list={['glass-alert', `glass-alert--${type}` ]} role="alert">
  <div class="glass-alert__icon" aria-hidden="true">{icons[type]}</div>
  <div class="glass-alert__content">
    <div class="glass-alert__title">{title}</div>
    <div class="glass-alert__body"><slot /></div>
  </div>
</div>

<style>
  .glass-alert { 
    display: flex; 
    gap: var(--sp-4, 1rem); 
    padding: var(--sp-5, 1.25rem); 
    border-radius: var(--r-md, 16px); 
    border: 1px solid var(--c-border, rgba(255,255,255,0.1)); 
    backdrop-filter: blur(12px); 
    background: var(--c-bg-elev, rgba(255,255,255,0.03)); 
    width: 100%;
    box-sizing: border-box;
  }
  
  .glass-alert--success { border-color: rgba(52, 211, 153, 0.3); background: rgba(52, 211, 153, 0.05); }
  .glass-alert--warning { border-color: rgba(245, 158, 11, 0.3); background: rgba(245, 158, 11, 0.05); }
  .glass-alert--error { border-color: rgba(239, 68, 68, 0.3); background: rgba(239, 68, 68, 0.05); }
  
  .glass-alert__icon { 
    font-weight: 900; 
    background: rgba(255, 255, 255, 0.1); 
    width: 24px; height: 24px; 
    display: grid; place-items: center; 
    border-radius: var(--r-full, 50%); 
    font-size: 0.8rem; 
    flex-shrink: 0;
    font-family: monospace;
    color: var(--c-text-1, #fff);
  }
  
  .glass-alert--success .glass-alert__icon { background: #10b981; color: #fff; }
  .glass-alert--warning .glass-alert__icon { background: #f59e0b; color: #fff; }
  .glass-alert--error .glass-alert__icon { background: #ef4444; color: #fff; }
  
  .glass-alert__title { font-weight: 700; color: var(--c-text-1, #fff); margin-bottom: 2px; font-size: 0.95rem; }
  .glass-alert__body { font-size: 0.85rem; color: var(--c-text-2, #94a3b8); line-height: 1.5; }
</style>
--- /** * GlassAlert — A translucent feedback bar for displaying situational messages. * * @param {'info'|'success'|'warning'|'error'} type - The severity or nature of the alert. Default is 'info'. * @param {string} title - Bold header text for the alert. */ interface Props { type?: 'info' | 'success' | 'warning' | 'error'; title: string; } const { type = 'info', title } = Astro.props; const icons = { info: "i", success: "✓", warning: "!", error: "✕" }; --- <div class:list={['glass-alert', `glass-alert--${type}` ]} role="alert"> <div class="glass-alert__icon" aria-hidden="true">{icons[type]}</div> <div class="glass-alert__content"> <div class="glass-alert__title">{title}</div> <div class="glass-alert__body"><slot /></div> </div> </div> <style> .glass-alert { display: flex; gap: var(--sp-4, 1rem); padding: var(--sp-5, 1.25rem); border-radius: var(--r-md, 16px); border: 1px solid var(--c-border, rgba(255,255,255,0.1)); backdrop-filter: blur(12px); background: var(--c-bg-elev, rgba(255,255,255,0.03)); width: 100%; box-sizing: border-box; } .glass-alert--success { border-color: rgba(52, 211, 153, 0.3); background: rgba(52, 211, 153, 0.05); } .glass-alert--warning { border-color: rgba(245, 158, 11, 0.3); background: rgba(245, 158, 11, 0.05); } .glass-alert--error { border-color: rgba(239, 68, 68, 0.3); background: rgba(239, 68, 68, 0.05); } .glass-alert__icon { font-weight: 900; background: rgba(255, 255, 255, 0.1); width: 24px; height: 24px; display: grid; place-items: center; border-radius: var(--r-full, 50%); font-size: 0.8rem; flex-shrink: 0; font-family: monospace; color: var(--c-text-1, #fff); } .glass-alert--success .glass-alert__icon { background: #10b981; color: #fff; } .glass-alert--warning .glass-alert__icon { background: #f59e0b; color: #fff; } .glass-alert--error .glass-alert__icon { background: #ef4444; color: #fff; } .glass-alert__title { font-weight: 700; color: var(--c-text-1, #fff); margin-bottom: 2px; font-size: 0.95rem; } .glass-alert__body { font-size: 0.85rem; color: var(--c-text-2, #94a3b8); line-height: 1.5; } </style>

Quick Info

Category
Feedback
Filename
GlassAlert.astro
Dependencies
None — pure Astro + CSS
Tags
alertglass