Zum Inhalt springen
UI Kit
Accent

Badge

Kleine Etiketten in vier Stilen, mit Statusfarben, pulsierendem Punkt und kleiner Größe für Zähler.

4 VariantsEine von 9 Components in Data Display

Variants

Stile, Status und ZählerNeu in 1.2

Standard, Kontur, weich und gefüllt, sechs Statusfarben für überall gleiche Zustände und die kleine Größe für Zahlen.

Status in einer ListeNeu in 1.2

Rechnungen mit ihrem Zustand am Ende jeder Zeile, eine Farbe je Bedeutung. Auf dem Telefon rückt das Etikett unter den Betrag.

Zähler in der NavigationNeu in 1.2

Ungelesene Zahlen neben jedem Postfach, mit ihrer Bedeutung vorgelesen. Der aktive Eintrag füllt sein Etikett, auf dem Telefon scrollt die Liste seitlich.

Auf KartenNeu in 1.2

Neu und Rabatt auf einem Produktbild, am beliebtesten an einem Tarif, die Rubrik an einem Artikel. Das Etikett sitzt auf dem Bild oder neben dem Titel, nie über Text.

Details

Was Badge mitbringt, aus Registry und Quellcode gelesen.

Kategorie
Data Display
Bereich
Elements
Variants
4
Version
1.1.0 · seit 1.0.0
Datei
components/ui/badge.tsx
Bringt mit
utils
npm-Pakete
Keine
Sprachen
Texte kommen über Props
Studio
Im Code anpassen

Props

Die Schnittstelle BadgeProps aus components/ui/badge.tsx. Beschreibungen stammen aus den Kommentaren im Code und sind auf Englisch. Nimmt außerdem alle Props von React.HTMLAttributes<HTMLSpanElement> an.

  • variantoptional
    BadgeVariant

    defaultoutlinesoftsolid

  • dotoptional
    boolean

    A pulsing point in front

  • toneoptional
    BadgeTone

    accentneutralsuccesswarningdangerinfo

    Status meaning: success, warning, danger, info or neutral. Default the accent.

  • sizeoptional
    'sm' | 'md'

    sm for counts in tabs and navigation, md the default

  • childrenPflicht
    React.ReactNode

Barrierefreiheit

Aus dem Quellcode der Component abgeleitet.

  • Kommt ohne Client-State aus. Der Server schreibt sie vollständig, sie ist auch ohne JavaScript lesbar.

Bewegung

  • Bringt eigene Animationen mit, ruhig getaktet und ohne Wackeln.
  • Bei reduzierter Bewegung (prefers-reduced-motion) bleibt sie ruhig. 1 Stellen im Code schalten Bewegung dann ab.

Quellcode

Die Datei, die aiw add in dein Projekt legt. Sie gehört danach dir.

Datei anzeigen, 65 Zeilen
components/ui/badge.tsx
'use client';

import { cn } from '@/lib/kit';

export type BadgeVariant = 'default' | 'outline' | 'soft' | 'solid';
/** Meaning of a status badge. Colors soft and outline badges and the dot of a default badge, solid stays on the accent. */
export type BadgeTone = 'accent' | 'neutral' | 'success' | 'warning' | 'danger' | 'info';

const VARIANT: Record<BadgeVariant, string> = {
  default: 'bg-muted text-foreground',
  outline: 'border border-border-strong text-muted-foreground',
  soft: 'bg-[color-mix(in_oklab,var(--primary)_12%,transparent)] text-[color-mix(in_oklab,var(--primary)_80%,var(--foreground))]',
  solid: 'bg-primary text-primary-foreground',
};

const TONE: Record<Exclude<BadgeTone, 'accent'>, { color: string; text: string }> = {
  neutral: { color: 'var(--muted-foreground)', text: 'text-muted-foreground' },
  success: { color: 'var(--success)', text: 'text-success-foreground' },
  warning: { color: 'var(--warning)', text: 'text-warning-foreground' },
  danger: { color: 'var(--destructive)', text: 'text-destructive' },
  info: { color: 'var(--info)', text: 'text-info' },
};

const TONED: Partial<Record<BadgeVariant, string>> = {
  soft: 'bg-[color-mix(in_oklab,var(--badge)_15%,transparent)]',
  outline: 'border border-[color-mix(in_oklab,var(--badge)_45%,var(--border))]',
};

const SIZE = {
  sm: 'h-5 gap-1 px-2 text-[11px] tabular-nums',
  md: 'h-6 gap-1.5 px-2.5 text-xs',
};

export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
  variant?: BadgeVariant;
  /** A pulsing point in front */
  dot?: boolean;
  /** Status meaning: success, warning, danger, info or neutral. Default the accent. */
  tone?: BadgeTone;
  /** sm for counts in tabs and navigation, md the default */
  size?: 'sm' | 'md';
  className?: string;
  children: React.ReactNode;
}

/** Small label for status, category or "New". With dot it gets a pulsing point in front, with tone a status color. */
export function Badge({ variant = 'default', dot, tone, size = 'md', className, style, children, ...rest }: BadgeProps) {
  const t = tone && tone !== 'accent' ? TONE[tone] : undefined;
  const toned = t && TONED[variant];
  return (
    <span
      {...rest}
      style={t ? ({ '--badge': t.color, ...style } as React.CSSProperties) : style}
      className={cn('inline-flex items-center whitespace-nowrap rounded-full font-medium', SIZE[size], toned ? cn(toned, t.text) : VARIANT[variant], className)}
    >
      {dot && (
        <span className={cn('relative flex size-1.5', t && !toned && variant === 'default' && t.text)} aria-hidden>
          <span className="absolute inset-0 animate-kit-pulse rounded-full bg-current motion-reduce:animate-none" />
          <span className="relative size-1.5 rounded-full bg-current" />
        </span>
      )}
      {children}
    </span>
  );
}

Häufige Fragen

Wie installiere ich Badge?

Mit aiw add @ai-website/badge. Der Befehl legt die Datei components/ui/badge.tsx in dein Projekt, der Code gehört danach dir. Weitere npm-Pakete braucht sie nicht.

Welche Varianten hat Badge?

4 Varianten, Stile, Status und Zähler, Status in einer Liste, Zähler in der Navigation und Auf Karten. Du wählst sie mit der Prop variant, zum Beispiel variant="soft".

Kann ein KI-Assistent Badge einbauen?

Ja. Über den MCP-Server der aiw CLI finden Claude, Cursor, GitHub Copilot, Windsurf, Codex und Gemini Badge mit aiw_components und installieren sie mit aiw_add @ai-website/badge. Nenn im Prompt die Variante, etwa variant="soft", dann schreibt der Assistent deine Inhalte direkt in die Props.

Oft gesucht

Direkt zu

In die Zwischenablage kopiert