Alert
This is a component that represents an alert.
- Alerts communicate important status and feedback to users.
- Supports info, success, warning, and danger variants.
- Each variant includes a matching Material icon for faster visual scanning.
Preview
Informational alert
Saved successfully
Check your settings
Something went wrong
Usage
import { Component } from "@angular/core";
import { AlertComponent } from "./alert.component";
@Component({
selector: "rui-alert-demo",
template: `
<div class="space-y-2">
<rui-alert>Informational alert</rui-alert>
<rui-alert variant="success">Saved successfully</rui-alert>
<rui-alert variant="warning">Check your settings</rui-alert>
<rui-alert variant="danger">Something went wrong</rui-alert>
</div>
`,
imports: [AlertComponent],
})
export class AlertDemoComponent {}
Source Code
import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
import { NgClass } from "@angular/common";
import {
matCheckCircle,
matError,
matInfo,
matWarningAmber,
} from "@ng-icons/material-icons/baseline";
import { IconComponent } from "@/components/icon/icon.component";
@Component({
selector: "rui-alert",
imports: [NgClass, IconComponent],
template: `
<div role="alert" [ngClass]="classes">
<rui-icon class="shrink-0 text-current" [icon]="icon"></rui-icon>
<div class="min-w-0 flex-1">
<ng-content></ng-content>
</div>
</div>
`,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AlertComponent {
@Input() variant: "info" | "success" | "warning" | "danger" = "info";
protected get classes() {
const base = "flex items-start gap-2 rounded-xl border px-3 py-2 text-sm font-semibold";
const map = {
info: "border-primary-300 bg-primary-100 text-primary-900 dark:border-primary-700 dark:bg-primary-900 dark:text-primary-100",
success:
"border-emerald-300 bg-emerald-50 text-emerald-700 dark:border-emerald-800 dark:bg-emerald-950/40 dark:text-emerald-300",
warning:
"border-amber-300 bg-amber-50 text-amber-700 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-300",
danger:
"border-red-300 bg-red-50 text-red-700 dark:border-red-800 dark:bg-red-950/40 dark:text-red-300",
} as const;
return [base, map[this.variant]];
}
protected get icon() {
const map = {
info: matInfo,
success: matCheckCircle,
warning: matWarningAmber,
danger: matError,
} as const;
return map[this.variant];
}
}
Copyright © 2026 Jarrett Huang | MIT License | Github