Badge
Statuslabels mit farbigen Punkten, entfernbare Tags, die zugleiten, und Zähler, die zu ihrem neuen Wert rollen.
pnpm dlx shadcn@latest add https://hextaui.com/r/badge.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/badge.tsx components/ui/number-flow.tsx lib/motion.ts Passe die Importpfade an dein Projekt-Setup an.
Varianten und Erscheinungsbilder
Das standardmäßige Erscheinungsbild outline behält eine neutrale Fläche und legt die Statusfarbe auf Punkt oder Icon. Verwende appearance="solid", wenn das Badge hervorstechen soll, oder appearance="muted" für einen ruhigen gefüllten Chip. shape="pill" rundet es vollständig ab.
Größen
sm, default und lg. Icons, Punkte, der Schließen-Button und Zähler skalieren mit dem Badge.
Entfernbar
Füge ein <BadgeClose /> hinzu, um ein Badge entfernbar zu machen. Es schrumpft zusammen, die Nachbarn rutschen in die Lücke, dann wandert der Fokus zum nächsten Schließen-Button. Entferne das Element in onOpenChangeComplete aus deinen Daten, damit die Ausblendanimation zuerst zu Ende laufen kann.
Kontrolliert
Übergib open und onOpenChange, um die Sichtbarkeit selbst zu steuern. Setzt du open zurück auf true, kehrt das Badge mit einer Einblendanimation zurück.
Zähler
<BadgeCount /> rollt nur die Ziffern, die sich ändern, und begrenzt bei max (standardmäßig 99) mit einem Pluszeichen. Screenreader hören immer die echte Zahl.
Interaktiv
Nutze render, um ein Badge zu einem Link oder Button zu machen. Es erhält einen Hover-Farbton, eine Skalierung beim Drücken und einen Fokusring. aria-invalid zeigt den Fehlerzustand.
Langer Inhalt
Ein Badge wird nie breiter als sein Container. Lange Labels werden mit Auslassungspunkten gekürzt, während Icons und der Schließen-Button sichtbar bleiben.
Rechts nach links
Icons, der Schließen-Button und die Einklappanimation folgen der Leserichtung. Zahlen werden immer von links nach rechts gelesen.
Diese Tasten gelten für <BadgeClose />.
| Taste | Aktion |
|---|---|
| EnterSpace | Entfernt das Badge. |
| BackspaceDelete | Entfernt das Badge. |
| Tab | Wechselt zum nächsten Schließen-Button. Nach dem Entfernen landet der Fokus auf dem nächsten Schließen-Button oder auf dem vorherigen, wenn es der letzte war. |
- Der Schließen-Button wird nach dem Badge benannt, sodass ein Screenreader „Remove design“ statt eines bloßen „Remove“ ansagt. Übergib
aria-label, um das zu überschreiben. <BadgeDot />ist dekorativ und für assistive Technologien verborgen. Halte den Status im Textlabel fest.<BadgeCount />stellt den exakten Wert bereit, auch wenn der sichtbare Text begrenzt ist, etwa 99+.- Die Entfernen- und Zähleranimationen werden bei reduzierter Bewegung übersprungen.
<Badge /> rendert ein <span> und akzeptiert alle seine Attribute.
| Prop | Typ | Standard |
|---|---|---|
variantFärbt bei outline den Punkt und die Icons, bei solid die Fläche. | "default" | "success" | "info" | "warning" | "destructive" | "default" |
appearance | "outline" | "solid" | "muted" | "outline" |
shape | "default" | "pill" | "default" |
size | "sm" | "default" | "lg" | "default" |
openGesteuerte Sichtbarkeit. | boolean | – |
defaultOpen | boolean | true |
onOpenChangeWird aufgerufen, wenn BadgeClose aktiviert wird. | (open: boolean) => void | – |
onOpenChangeCompleteWird aufgerufen, nachdem die Ausblendanimation beendet ist. Entferne das Element hier aus deinen Daten. | (open: boolean) => void | – |
render | ReactElement | (props, state) => ReactElement | <span> |
| Attribut | Beschreibung |
|---|---|
data-slot="badge" | Badges in CSS ansprechen. |
data-variant | Die aktuelle Variante. |
data-appearance | Das aktuelle Erscheinungsbild. |
data-shape | Die aktuelle Form. |
data-size | Die aktuelle Größe. |
data-ending-style | Vorhanden, während das Badge ausblendet. |
--badge-accent | Die Statusfarbe für Punkte und Icons. Überschreibe sie für einen eigenen Akzent. |
--badge-height | Die Höhe des Badges. |
--badge-radius | Der Eckenradius. Der Schließen-Button leitet daraus seinen eigenen Radius ab. |
| Prop | Typ | Standard |
|---|---|---|
pulseFügt eine Ping-Animation für Live-Zustände hinzu. Bei reduzierter Bewegung aus. | boolean | false |
| Attribut | Beschreibung |
|---|---|
data-slot="badge-dot" | Punkte in CSS ansprechen. |
data-pulse | Vorhanden, wenn pulse aktiv ist. |
| Prop | Typ | Standard |
|---|---|---|
children | ReactNode | <IconX /> |
aria-labelÜberschreibt den automatischen Namen „Remove {label}“. | string | – |
onClickRufe event.preventDefault() auf, um das Badge offen zu halten. | (event) => void | – |
| Attribut | Beschreibung |
|---|---|
data-slot="badge-close" | Den Schließen-Button in CSS ansprechen. |
| Prop | Typ | Standard |
|---|---|---|
valueNegative und nicht endliche Werte zeigen 0. | number | – |
maxWerte darüber werden als max+ angezeigt. Übergib Infinity für keine Begrenzung. | number | 99 |
duration | number | 600 |
animated | boolean | true |
trendDie Richtung, in der sich die Ziffern drehen. | "auto" | "up" | "down" | "shortest" | "auto" |
locales | Intl.LocalesArgument | – |
format | Intl.NumberFormatOptions | – |
| Attribut | Beschreibung |
|---|---|
data-slot="badge-count" | Zähler in CSS ansprechen. |
- MotionDie Easing-Kurven, Dauern und der Reduced-Motion-Check, mit denen jede Komponente animiert, plus Hooks für Größen-Morphs und gleitende Hervorhebungen.
- Number flowAnimierte Zahlen, bei denen sich nur die geänderten Ziffern drehen, mit beliebigem Intl-Format und Locale.
- AvatarNutzerfotos mit Initialen als Fallback, Statusbadges und gestapelte Gruppen, die zu einer Zahl einklappen.
- CardEine Fläche zum Gruppieren von Inhalten, mit drei Varianten, randlosen Medien, konzentrischen Radien und Links über die ganze Karte.
- ChartRecharts-Diagramme mit Theme-Farben, einem Tooltip und einer Legende, die Labels aus einer Konfiguration lesen, und Tastaturnavigation mit sichtbarem Fokusring.
- Data tableEine Tabelle für echte Daten, mit Sortierung, Suche, Zeilenauswahl, fixierten Spalten, Sticky Header und Paginierung.
In Blocks verwendet
Blocks, die auf Badge 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.
- 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.
- Code BlockCodeblöcke für KI-Antworten. Syntaxhervorhebung, die mit dem Streaming Schritt hält, Kopieren, Herunterladen und Umbrechen, Zeilennummern und hervorgehobene Zeilen, Diffs mit Annehmen und Ablehnen sowie ein Terminal für Befehle.
- ModelsDie Modelle-Seite in den Einstellungen eines KI-Produkts. Ein Standardmodell mit Kontext, Geschwindigkeit und Kosten auf einen Blick, ein Standard-Effort, der weiß, was jedes Modell unterstützt, eine durchsuchbare Modellliste nach Anbieter gruppiert mit Filtern, Pins und Sammelschaltern, OpenAI-kompatible Server mit echtem Verbindungstest und ein Refresh, der dir sagt, was neu ist.