Alert
Inline-Meldungen für Status und Feedback, mit neutraler Fläche, farbigem Icon und einem Schließen, das sanft zusammenklappt.
pnpm dlx shadcn@latest add https://hextaui.com/r/alert.jsonFügt die Komponente, die HextaUI-Theme-Tokens und alle HextaUI-Komponenten hinzu, von denen sie abhängt.
Füge die Theme-Tokens zu deinem globalen CSS hinzu, falls du das noch nicht getan hast.
Installiere die Abhängigkeiten.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/alert.tsx components/ui/button.tsx lib/motion.ts Passe die Importpfade an dein Projekt-Setup an.
Varianten
variant färbt nur das Icon, sodass die Fläche neutral bleibt und der Status auf einen Blick lesbar ist, ohne zu schreien.
Soft
appearance="soft" entfernt den Rahmen und tönt die ganze Fläche in der Farbe der Variante.
Teilweiser Inhalt
Nur Titel, nur Beschreibung und kein Icon richten sich alle ohne zusätzliche Klassen aus. Das Grid platziert jeden Teil in seiner eigenen Spalte.
Aktionen
Lege Buttons in <AlertAction />. Sie richten sich an der ersten Zeile des Titels aus, auch wenn dieser umbricht.
Schließbar
Füge <AlertClose /> hinzu, damit Nutzer ihn schließen können. Der Alert klappt sanft ein, und der Inhalt darunter rutscht nach oben. Schließt du ihn per Tastatur, springt der Fokus zum nächsten Bedienelement, hier „Reset“.
Kontrolliert
Übergib open und onOpenChange, um ihn aus deinem eigenen State zu steuern. Er animiert sowohl beim Einblenden als auch beim Ausblenden.
Schließen abbrechen
Rufe event.preventDefault() im onClick des Schließen-Buttons auf, um den Alert offen zu halten, zum Beispiel um zuerst eine Bestätigung einzuholen.
Nach dem Laden eingefügt
Alerts, die nach dem Laden der Seite gemountet werden, blenden ein und gleiten herein, und Screenreader sagen sie an. Alerts, die bereits im Server-HTML stehen, erscheinen ohne Bewegung.
Umfangreicher Inhalt
Inline-Icons und Links in der Beschreibung behalten ihren eigenen Stil. Nutze render, um dem Titel eine Überschriftenebene zu geben.
Rechts nach links
Icon, Inhalt und Schließen-Button werden mit der Leserichtung gespiegelt.
| Taste | Aktion |
|---|---|
| Tab | Setzt den Fokus auf Links, Aktionen und den Schließen-Button im Alert. |
| EnterSpace | Aktiviert den fokussierten Schließen-Button. Sobald der Alert eingeklappt ist, wandert der Fokus zum nächsten fokussierbaren Element oder zum vorherigen, wenn keines folgt. |
destructive- undwarning-Alerts erhaltenrole="alert"und werden sofort angesagt. Jede andere Variante erhältrole="status"und wartet auf eine Pause.- Der Schließen-Button trägt das Label „Dismiss“. Übergib
aria-label, um es zu übersetzen. - Der Fokus geht nie verloren, wenn ein fokussierter Alert geschlossen wird.
- Bei reduzierter Bewegung erscheinen und verschwinden Alerts sofort.
Jeder Teil akzeptiert die Attribute des Elements, das er rendert. Die Varianten werden als alertVariants exportiert, um andere Elemente auf die gleiche Weise zu stylen.
| Prop | Typ | Standard |
|---|---|---|
variantFärbt das Icon ein. destructive und warning werden mit assertive-Priorität angesagt. | "default" | "destructive" | "success" | "info" | "warning" | "default" |
appearance | "outline" | "soft" | "outline" |
open | boolean | – |
defaultOpen | boolean | true |
onOpenChangeWird aufgerufen, wenn der Schließen-Button gedrückt wird. | (open: boolean) => void | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="alert" | Den Alert in CSS ansprechen. |
data-variant | Die aktuelle Variante. |
data-appearance | Das aktuelle Erscheinungsbild. |
data-ending-style | Vorhanden, während der Alert nach dem Schließen einklappt. |
| Prop | Typ | Standard |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="alert-title" | Titel in CSS ansprechen. |
| Prop | Typ | Standard |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="alert-description" | Beschreibungen in CSS ansprechen. Einfache Links darin werden automatisch unterstrichen. |
| Prop | Typ | Standard |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="alert-action" | Den Aktionsbereich in CSS ansprechen. |
Eine Ghost-<Button />, die den nächstgelegenen Alert schließt. Sie akzeptiert alle Button-Props und muss innerhalb von <Alert /> verwendet werden.
| Prop | Typ | Standard |
|---|---|---|
aria-label | string | "Dismiss" |
children | ReactNode | <IconX /> |
onClickRufe event.preventDefault() auf, um den Alert offen zu halten. | (event: MouseEvent) => void | – |
| Attribut | Beschreibung |
|---|---|
data-slot="alert-close" | Den Schließen-Button in CSS ansprechen. |
- ButtonButtons in allen Varianten und Größen, mit eingebautem Lade-, Erfolgs- und Fehlerablauf, der den Spinner bei schnellen Anfragen überspringt.
- MotionDie Easing-Kurven, Dauern und der Reduced-Motion-Check, mit denen jede Komponente animiert, plus Hooks für Größen-Morphs und gleitende Hervorhebungen.
- EmptyEin Platzhalter für Ansichten, in denen es noch nichts zu zeigen gibt, mit Icon, Nachricht und der nächsten Aktion.
- ProgressEin Balken oder Ring, der zeigt, wie weit eine Aufgabe fortgeschritten ist, sanft zwischen Aktualisierungen wechselt und gleitet, solange die Gesamtmenge unbekannt ist.
- SkeletonPlatzhalter, die 150 ms warten, bevor sie erscheinen, exakt die Größe des umschlossenen Inhalts annehmen und ihn einblenden, ohne etwas zu verschieben.
- SpinnerEin Ladeindikator mit Ticks im Apple-Stil oder einem atmenden Ring, der vor dem Anzeigen warten und lange genug sichtbar bleiben kann, um nicht zu flackern.
In Blocks verwendet
Blocks, die auf Alert aufbauen.
- BillingPlan & Nutzung für ein KI-Produkt, im Stil von Cursor, Claude und Vercel. Eine nach Modell aufgeteilte Nutzungsanzeige, die das Ende des Zyklus hochrechnet und warnt, bevor die Credits ausgehen, ein tägliches Diagramm zum Scrubben, ein Ausgabenlimit mit Warnungen, die du auf der Anzeige in der Vorschau siehst, Planwechsel mit exakter Anteilsberechnung, ein Kartenformular mit echter Validierung und Rechnungen als PDF-Download.
- MarkdownMarkdown für KI-Antworten. Es streamt flüssig und zeigt nie halb getippte Syntax, mit verlinkbaren Überschriften, Tabellen, die du als Markdown oder CSV kopieren kannst, GitHub-Callouts, Aufgabenlisten, Fußnoten, Bildern, Inline-Zitaten und vollständigen Codeblöcken.