UNPKG

@casoon/dragonfly

Version:

Modular, lightweight CSS framework and design system for modern web projects. Optimized for Astro JS, LightningCSS and Container Queries with @layer-based architecture and comprehensive accessibility.

160 lines (143 loc) 4.03 kB
/* * Alert Component * * Visual cues for success, warning, error, or information messages. */ /** * Alert Component * * Information and warning messages for important notifications to users. * Alerts can be used to display success, error, warning, or informative messages. * * @layer: components * * Compatibility: * - Full support in modern browsers * - Fallbacks for CSS variables * - Uses CSS animation with standard keyframes * * Usage: * <div class="alert">Standard alert</div> * * Variants: * <div class="alert-info">Info alert</div> * <div class="alert-success">Success alert</div> * <div class="alert-warning">Warning alert</div> * <div class="alert-error">Error alert</div> * * Sizes: * <div class="alert-info alert--sm">Small alert</div> * <div class="alert-info">Default size alert</div> * <div class="alert-info alert--lg">Large alert</div> * * With Icon: * <div class="alert-info alert--with-icon"> * <span class="icon"><!-- Icon here --></span> * <div class="alert-content">Alert with icon</div> * </div> * * Dismissible: * <div class="alert-info alert--dismissible"> * <div class="alert-content">Dismissible alert</div> * <button class="alert-close">×</button> * </div> */ /** * Alert Component Structure: * * <div class="alert alert--info" role="alert"> * <div class="alert-icon"><!-- Icon --></div> * <div class="alert-content"> * <div class="alert-title">Alert Title</div> * <div class="alert-message">Alert message content</div> * </div> * <button class="alert-close" aria-label="Close">&times;</button> * </div> * * Types: .alert--info, .alert--success, .alert--warning, .alert--error * Modifiers: .alert--dismissible, .alert--compact */ /* Animations - defined outside of @layer */ /* Component styles */ @layer components { /* Base component style */ .alert { align-items: start; background-color: var(--color-neutral-100, #f3f4f6); border-radius: var(--alert-border-radius, var(--radius-md, 0.5rem)); display: flex; font-size: var(--text-sm, var(--font-size-sm, 0.875rem)); gap: var(--alert-gap, var(--space-3, 0.75rem)); padding: var(--alert-padding, var(--space-4, 1rem)); } /* Variants */ .alert-info { background-color: var(--color-info-100, #e0f2fe); color: var(--color-info-800, #1e40af); composes: alert; } .alert-success { background-color: var(--color-success-100, #dcfce7); color: var(--color-success-800, #166534); composes: alert; } .alert-warning { background-color: var(--color-warning-100, #fef3c7); color: var(--color-warning-800, #854d0e); composes: alert; } .alert-error { background-color: var(--color-error-100, #fee2e2); color: var(--color-error-800, #991b1b); composes: alert; } /* Sizes */ .alert--sm { font-size: var(--text-xs, var(--font-size-xs, 0.75rem)); padding: var(--alert-padding-sm, var(--space-2, 0.5rem)); } .alert--lg { font-size: var(--text-base, var(--font-size-base, 1rem)); padding: var(--alert-padding-lg, var(--space-5, 1.25rem)); } /* Icon integration */ .alert--with-icon { padding-left: var(--space-3, 0.75rem); } .alert--with-icon .icon { flex-shrink: 0; font-size: 1.25rem; line-height: 1%; } /* Dismissible state */ .alert--dismissible { padding-right: var(--space-3, 0.75rem); } /* Internal elements */ .alert-content { flex: 1; } .alert-close { background: none; border: none; color: currentcolor; cursor: pointer; flex-shrink: 0; font-size: 1.25rem; line-height: 1%; margin-left: auto; opacity: 5000%; transition: opacity var(--transition-duration-fast, 150ms) var(--transition-timing-ease, ease); } .alert-close:hover { opacity: 75%; } } /* Animation styles */ @layer animations { .alert--animate { animation-duration: 0.3s; animation-name: fadeIn; animation-timing-function: ease-out; } }