Przejdź do treści

Badge

Stabilny

Krótka, nieinteraktywna etykieta, która oznacza obiekt statusem, kategorią lub liczbą.

DziałaNowośćv1.0.0Szkic

Anatomia

DziałaDokumentacja
  1. 1KropkaOpcjonalna. Kropka statusu w kolorze odznaki, która może pulsować przy stanach w toku.
  2. 2KontenerMała pigułka. Warianty semantyczne barwią ją kolorami statusów; outline zamiast wypełnienia dodaje obramowanie.
  3. 3EtykietaJedno lub dwa słowa, wielka litera tylko na początku: status, liczba lub kategoria.
  4. 4IkonaOpcjonalna. Jej rozmiar ustala odznaka, która po tej stronie zmniejsza swój wewnętrzny odstęp.

Instalacja

$ pnpm dlx shadcn@latest add https://www.prfct.dev/r/badge.json

Użycie

import { Badge, BadgeDot } from "@/components/ui/badge"
<Badge variant="success">
  <BadgeDot />
  Paid
</Badge>

Przykłady

Warianty

Warianty wyrażają znaczenie, a nie gust. Cztery warianty statusu — success, warning, destructive, info — są zarezerwowane dla stanów, więc zielona odznaka znaczy to samo w każdym miejscu produktu.

DomyślnyDrugorzędnyKonturowyMarkaSukcesOstrzeżenieDestrukcyjnyInformacjaPrzezroczystyLink
WariantZastosowanie
defaultMocno wyróżnione etykiety, które muszą się wybijać na zatłoczonych powierzchniach. Używaj oszczędnie.
secondaryNeutralne metadane: wersje, typy plików, role, liczniki.
outlineNeutralne kategorie i tagi, które powinny pozostać w tle.
brandWyróżnienia, takie jak Nowy czy Beta, oraz jedna polecana opcja w zestawie.
successStany zakończone, prawidłowe lub zatwierdzone: Opłacono, Działa, Scalono.
warningStany, które wkrótce będą wymagać uwagi: Oczekuje, Obniżona wydajność, Wygasa.
destructiveBłędy i stany blokujące: Błąd, Awaria, Po terminie.
infoNeutralne stany informacyjne: Prace serwisowe, Zaplanowano, Do przeglądu.
ghost, linkOdznaki w gęstych wierszach lub w tekście, które do czasu najechania mają wyglądać jak metadane.

Rozmiary

default (20 px) pasuje do tekstu głównego i komórek tabel. Używaj sm do liczników w nawigacji, a lg do odznak obok nagłówków.

MałyDomyślnyDuży

Status

Łącz odznaki statusu z BadgeDot. Kropka pozwala przejrzeć kolumnę stanów jednym spojrzeniem, a słowo sprawia, że stan jest jednoznaczny. Ustaw live, żeby kropka pulsowała przy stanach, które właśnie się zmieniają — pulsowanie wyłącza się automatycznie, gdy włączone jest ograniczenie ruchu.

  • APIDziała
  • PulpitZakłócenia
  • WebhookiAwaria
  • Indeks wyszukiwaniaPrace serwisowe

Z ikonami

Oznacz ikony atrybutem data-icon="inline-start" lub data-icon="inline-end"; odznaka zmniejszy po tej stronie wewnętrzny odstęp i nada ikonie rozmiar 12 px.

ZweryfikowanoWygenerowane przez AIPrywatne+12,4%Dziennik zmian

Odznaka może prowadzić dalej — do wpisu w dzienniku zmian, przefiltrowanej listy, tagu. Użyj propa render, żeby stała się prawdziwym linkiem; odznaki będące linkami automatycznie zyskują stan najechania.

<Badge variant="brand" render={<Link href="/docs/resources/changelog" />}>
  prfct 1.0 is here
</Badge>

Liczniki

Licznik mówi, ile czeka w miejscu, do którego prowadzi. Pokazuj najwyżej 99+, pełnego wariantu default używaj tylko dla nieprzeczytanych elementów wymagających działania i dodaj do liczby kontekst dla czytników ekranu.

Wytyczne

Kiedy używać

  • Aby pokazać stan obiektu: płatności, wdrożenia, usługi.
  • Aby dodać krótkie metadane: rolę, wersję, plan, tag.
  • Aby pokazać liczbę elementów czekających za pozycją nawigacji.

Kiedy nie używać

  • Do wywoływania akcji — użyj komponentu Button.
  • Do filtrowania widoku — użyj komponentu Toggle Group lub pól wyboru, żeby zaznaczenie było ogłaszane.
  • Do wyjaśniania — jeśli potrzeba więcej niż dwóch słów, potrzebne jest zdanie, Alert lub Tooltip.

Nigdy sam kolor

OpłaconoPo terminie
Dobrze.Kropka do szybkiego przeglądania, słowo dla znaczenia. Czytelne w skali szarości, dla osób z zaburzeniami widzenia barw i dla czytników ekranu.
Źle.Kolorowa kropka lub plakietka bez etykiety zmusza do zapamiętywania kodu kolorów.

Krótko

Wkrótce wygasa
Dobrze.Jedno lub dwa słowa, wielka litera tylko na początku, bez interpunkcji.
Twoja karta wygasa za 3 dni, zaktualizuj ją
Źle.Zdania w odznakach są ucinane, niezgrabnie się zawijają i nie da się ich szybko przejrzeć.

Umiar

Odznaki działają, bo są rzadkie. Jeśli każdy wiersz tabeli ma trzy odznaki, żadna nie zostanie zauważona — zostaw jedną odznakę statusu na obiekt, a resztę metadanych przenieś do zwykłego tekstu.

Dostępność

  • Domyślnie statyczna. Odznaka renderuje <span> i nie przyjmuje fokusu. Gdy prowadzi do innej strony, renderuj ją jako link — wtedy zyska rolę, fokus i widoczny pierścień fokusu.
  • Status to tekst. Każdy wariant statusu łączy kolor ze słowem. BadgeDot ma aria-hidden; znaczenie niesie etykieta.
  • Liczniki wymagają kontekstu. Samo „12” odczytane na głos jest niejednoznaczne. Dodaj wizualnie ukryty dopisek — <span className="sr-only"> unread</span> — albo umieść liczbę w dostępnej nazwie linku.
  • Kontrast. Warianty delikatne używają tekstu w stopniu 11 na wypełnieniach w stopniu 3, dla których paleta gwarantuje co najmniej 4,5:1 w obu trybach. Warianty pełne również osiągają 4,5:1.
  • Ruch. Pulsowanie live jest dekoracyjne i wyłącza się przy prefers-reduced-motion.

Dokumentacja API

Badge

Renderuje <span>. Zbudowany na useRender z Base UI, więc przyjmuje prop render.

PropTypDomyślnie
variant

Znaczenie i stopień wyróżnienia odznaki.

"default" | "secondary" | "outline" | "brand" | "success" | "warning" | "destructive" | "info" | "ghost" | "link""default"
size

Wysokość 18, 20 lub 24 piksele.

"sm" | "default" | "lg""default"
render

Renderuje inny element, np. link, z zachowaniem stylów odznaki.

ReactElement | (props, state) => ReactElementBrak wartości domyślnej

BadgeDot

Kropka statusu o średnicy 6 px w kolorze tekstu odznaki.

PropTypDomyślnie
live

Dodaje pulsujący pierścień przy stanach, które właśnie się zmieniają. Wyłączony przy ograniczonym ruchu.

booleanfalse

badgeVariants

Generator klas jest eksportowany, żeby inne elementy — komórka tabeli, własny link — mogły korzystać ze stylów odznaki.

import { badgeVariants } from "@/components/ui/badge"

<span className={badgeVariants({ variant: "info", size: "sm" })}>Beta</span>