Empty
Ein Platzhalter für Ansichten, in denen es noch nichts zu zeigen gibt, mit Icon, Nachricht und der nächsten Aktion.
pnpm dlx shadcn@latest add https://hextaui.com/r/empty.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 class-variance-authority cnKopiere den folgenden Code und füge ihn in dein Projekt ein.
components/ui/empty.tsx Passe die Importpfade an dein Projekt-Setup an.
Auftritt
Wenn ein leerer Zustand Inhalt ersetzt, blenden seine Teile nacheinander nach oben ein: Media, Titel, Beschreibung, dann Aktionen. Schließe die Benachrichtigungen, um es zu sehen. Bei reduzierter Bewegung erscheint er einfach. Setze animated={false} für leere Zustände, die schon beim ersten Paint da sind.
Outline
variant="outline" zeichnet einen gestrichelten Haarlinienrahmen, die übliche Art, eine Drop-Zone oder einen auf Inhalt wartenden Bereich zu markieren.
Gedämpft
variant="muted" sitzt auf einer weichen Füllung. Die Icon-Kachel wechselt zu einer erhabenen weißen Fläche, damit sie weiterhin hervorsticht.
Klein
size="sm" strafft Padding, Abstände, Icon-Kachel und Titel für Seitenleisten, Popovers und schmale Panels.
Avatar
Die Standardvariante von EmptyMedia zentriert nur ihren Inhalt, sodass jeder Avatar, jedes Badge und jede Illustration hineinpasst.
Avatar-Gruppe
Zeige, wer hier sein könnte, für Einladungen und geteilte Bereiche.
Bild
Gib Bildern explizite Abmessungen, damit sich das Layout beim Laden nicht verschiebt.
Keine Suchergebnisse
Ersetze die Ergebnisse durch einen leeren Zustand, wenn Filter nichts treffen, und biete einen Ausweg an. Ein visuell verborgenes role="status" sagt die Anzahl an, sodass Screenreader-Nutzer die Änderung hören, ohne dass die ganze Liste vorgelesen wird.
In einer Karte
Verwende size="sm" mit der Variante muted, um eine Karte ohne Daten zu füllen.
In einer Tabelle
Setze es in eine einzelne Zelle, die mit colSpan alle Spalten überspannt, damit die Kopfzeile ausgerichtet bleibt.
In einem Popover
Ein kompakter leerer Zustand für Menüs und Benachrichtigungspanels.
In einer Command-Liste
<CommandEmpty /> übergibt die aktuelle Suche an ein Funktions-Kind, sodass die Meldung sie zitieren kann.
Überschriftenebene
Der Titel ist ein <div>, damit er nie die Gliederung deiner Seite durcheinanderbringt. Rendere ihn als die passende Überschriftenebene und beschrifte die Region damit.
Langer Inhalt
Namen ohne Umbruchstelle und lange Adressen werden im Container umgebrochen, und lange Button-Labels werden gekürzt.
Rechts nach links
Alles ist zentriert und verwendet logische Properties, sodass es sich in Rechts-nach-links-Layouts natürlich liest.
<EmptyTitle />rendert ein<div>. Übergibrender={<h2 />}(oder die passende Ebene), wenn der leere Zustand ein Abschnitt der Seite ist.<EmptyMedia variant="icon" />ist für assistive Technologien verborgen, da der Titel bereits sagt, was gemeint ist. Bilder in der Standardvariante bleiben zugänglich, gib ihnen also einaltoderalt="".- Wenn Ergebnisse nach einer Suche oder einem Filter verschwinden, sage die Änderung mit einer kurzen
role="status"-Meldung neben der Liste an. Mache nicht den ganzen leeren Zustand zu einer Live-Region, da seine Buttons und Links sonst jedes Mal vorgelesen würden.
Jeder Teil rendert ein einfaches Element, akzeptiert dessen Attribute und unterstützt die render-Prop zum Austauschen.
| Prop | Typ | Standard |
|---|---|---|
variant | "default" | "outline" | "muted" | "default" |
sizesm strafft Padding, Abstände, Icon-Kachel und Titel. | "default" | "sm" | "default" |
animatedBlendet die Teile der Reihe nach nach oben ein, wenn der leere Zustand gemountet wird. Bei reduzierter Bewegung übersprungen. | boolean | true |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="empty" | Das Root in CSS ansprechen. |
data-variant | Die aktuelle Variante. |
data-size | Die aktuelle Größe. |
data-animated | Vorhanden, wenn die Einblendanimation aktiv ist. |
--empty-padding | Padding auf jeder Seite. Wird durch size gesetzt. |
--empty-gap | Abstand zwischen Header und Inhalt. Wird durch size gesetzt. |
| Prop | Typ | Standard |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="empty-header" | Den Header in CSS ansprechen. |
| Prop | Typ | Standard |
|---|---|---|
varianticon setzt ein Icon in eine gedämpfte Kachel. stack hebt die Kachel über zwei gefächerte Karten, die sich beim Hovern des leeren Zustands auffächern. Beide verbergen das Media vor assistiven Technologien. | "default" | "icon" | "stack" | "default" |
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="empty-icon" | Das Media in CSS ansprechen. Entspricht shadcn. |
data-variant | Die aktuelle Variante. |
| Prop | Typ | Standard |
|---|---|---|
renderRendere eine Überschrift, etwa render={<h2 />}. | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="empty-title" | Den Titel in CSS ansprechen. |
| Prop | Typ | Standard |
|---|---|---|
renderEinfache Links darin werden unterstrichen. Als Links gerenderte Komponenten behalten ihren eigenen Stil. | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="empty-description" | Die Beschreibung in CSS ansprechen. |
| Prop | Typ | Standard |
|---|---|---|
render | ReactElement | (props, state) => ReactElement | <div> |
| Attribut | Beschreibung |
|---|---|
data-slot="empty-content" | Den Aktionsbereich in CSS ansprechen. |
- AlertInline-Meldungen für Status und Feedback, mit neutraler Fläche, farbigem Icon und einem Schließen, das sanft zusammenklappt.
- 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.
- ToastKurze Nachrichten, die sich sauber stapeln, bei Hover aufklappen, weggewischt werden können und einen Ladezustand an Ort und Stelle in Erfolg oder Fehler verwandeln.
In Blocks verwendet
Blocks, die auf Empty aufbauen.
- API keysDie API-Schlüssel-Seite eines KI-Produkts, wie in den Konsolen von OpenAI und Anthropic. Schlüssel mit eingeschränkten Berechtigungen und Ablaufdatum erstellen, das Secret einmal sehen mit einem Kopieren, das sich bestätigt, mit Rückgängig widerrufen, direkt umbenennen, mit Übergangsfrist rotieren und die Nutzung pro Schlüssel sehen.
- Diff ReviewPrüfe die Änderungen eines Agenten über mehrere Dateien, bevor sie übernommen werden. Ein Dateibaum mit Zählern, jede Änderung, jede Datei oder alles annehmen oder ablehnen, Kommentare zu jeder Zeile oder jedem Bereich, die an den Agenten zurückgehen, Unified- und Split-Ansicht, Hervorhebung auf Wortebene, Rückgängig, streamende Änderungen und eine Zusammenfassung „4 Dateien bearbeitet“ für den Chat.
- SecuritySitzungen und Sicherheit für ein KI-Produkt. Aktive Geräte mit Abmelden, bei dem Zeilen animiert verschwinden, eine Passwortänderung mit Live-Stärkeanzeige, Zwei-Faktor-Einrichtung mit echtem QR-Code, einer 6-stelligen Prüfung und herunterladbaren Wiederherstellungscodes, Passkeys über WebAuthn und Kontolöschung hinter einer getippten Bestätigung.
- SettingsEinstellungen für ein KI-Produkt, gestaltet wie bei Cursor und Claude. Eine gefüllte Seitenleiste mit Suche, Gruppen und externen Links, Karten mit Zeilen, dezenten Pickern und verschachtelten Optionen, eine dunkle Speicher-Insel, die nur erscheint, wenn sich etwas geändert hat, ⌘S zum Speichern, Feldfehler aus deinen Prüfungen oder deinem Server und Ladezustände in der Form des Inhalts.