import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, signal, computed, } from '@angular/core'; import { NgIf } from '@angular/common'; @Component({ selector: 'mv-alert', standalone: true, imports: [NgIf], template: `
{{ title }}
`, changeDetection: ChangeDetectionStrategy.OnPush, }) export class AlertComponent { @Input() variant: 'success' | 'error' | 'warning' | 'info' = 'info'; @Input() title = ''; @Input() dismissible = false; @Output() dismissed = new EventEmitter(); readonly visible = signal(true); readonly dismissing = signal(false); readonly hostClass = computed(() => { const classes = ['mv-alert', `mv-alert--${this.variant}`]; if (this.dismissing()) classes.push('mv-alert--dismissing'); return classes.join(' '); }); readonly icon = computed(() => { const icons: Record = { success: '✓', error: '✕', warning: '⚠', info: 'ℹ', }; return icons[this.variant] ?? 'ℹ'; }); dismiss(): void { this.dismissing.set(true); setTimeout(() => { this.visible.set(false); this.dismissed.emit(); }, 250); } }