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: `
`,
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);
}
}