İçeriğe atla

Rozet

Kartlar, tablolar ve gezinme öğelerindeki durumlar, sayı ve etiketler için küçük bir etiket — neobrütalist tarzda kenarlık ve gölge efektleriyle.

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

export function BadgeDemo() {

Rozet, kompakt bir satır içi etikettir — altında primitif olmayan düz bir <span> — ve neobrütalist reçeteye göre biçimlendirilmiştir: kalın kenarlıklar, sert gölgeler ve koyu tipografi. render prop'u (Base UI'ın useRender aracılığıyla) herhangi bir öğenin — bir bağlantının, bir düğmenin — rozet stillerini giymesine izin verir.

Şu durumlarda tercih edin:

  • Durumlar — tablo satırlarında ve kartlarda “Aktif”, “Taslak”, “Başarısız”; hatalar için destructive.
  • Sayaçlar — gezinme etiketlerinin yanında okunmamış mesajlar, sepet öğeleri, bildirim toplamları.
  • Etiketler ve meta veriler — blog kartlarında kategoriler, plan katmanları, dokümantasyonda sürüm etiketleri.

Kurulum

pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/badge.json
npx shadcn@latest add https://neobrutalism.com/r/base/badge.json
yarn dlx shadcn@latest add https://neobrutalism.com/r/base/badge.json
bunx --bun shadcn@latest add https://neobrutalism.com/r/base/badge.json

Aşağıdaki kodu kopyalayıp projenize yapıştırın.

components/ui/badge.tsx
import * as React from "react"
import { cva, type VariantProps } from "class-variance-authority"
import { Slot } from "radix-ui"

import { cn } from "@/lib/utils"

const badgeVariants = cva(
  "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded border-2 px-2 py-0.5 text-xs font-head font-medium whitespace-nowrap shadow-sm transition-all focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive [&>svg]:pointer-events-none [&>svg]:size-3!",
  {
    variants: {
      variant: {
        default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
        secondary:
          "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
        destructive:
          "bg-destructive text-destructive-foreground [a]:hover:bg-destructive/90",
        outline:
          "bg-transparent text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
        ghost:
          "border-transparent bg-transparent shadow-none hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
        link: "border-transparent bg-transparent shadow-none text-primary underline-offset-4 hover:underline",
      },
    },
    defaultVariants: {
      variant: "default",
    },
  }
)

function Badge({
  className,
  variant = "default",
  asChild = false,
  ...props
}: React.ComponentProps<"span"> &
  VariantProps<typeof badgeVariants> & { asChild?: boolean }) {
  const Comp = asChild ? Slot.Root : "span"

  return (
    <Comp
      data-slot="badge"
      data-variant={variant}
      className={cn(badgeVariants({ variant }), className)}
      {...props}
    />
  )
}

export { Badge, badgeVariants }

Import yollarını projenizin yapısına uyacak şekilde güncelleyin.

Kullanım

import { Badge } from "@/components/ui/badge"
<Badge variant="default | outline | secondary | destructive">Badge</Badge>

Örnekler

Varyantlar

Badge'in varyantını değiştirmek için variant prop'unu kullanın.

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

export function BadgeVariants() {

Simgeli

Badge içinde bir simge render edebilirsiniz. Simgeyi solda render etmek için data-icon="inline-start", sağda render etmek için data-icon="inline-end" kullanın.

import { BadgeCheck, BookmarkIcon } from "lucide-react"

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

Spinner'lı

Badge içinde bir spinner render edebilirsiniz. Spinner'a data-icon="inline-start" veya data-icon="inline-end" prop'unu eklemeyi unutmayın.

import { Badge } from "@/components/ui/badge"
import { Spinner } from "@/components/ui/spinner"

Bir link'i badge olarak render etmek için render prop'unu kullanın.

import { ArrowUpRightIcon } from "lucide-react"

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

Özel Renkler

Badge bileşenine bg-chart-2 text-primary-foreground gibi özel sınıflar ekleyerek bir badge'in renklerini özelleştirebilirsiniz.

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

export function BadgeCustomColors() {

RTL

Neobrutalism'de RTL desteğini etkinleştirmek için RTL yapılandırma kılavuzuna bakın.

"use client"

import * as React from "react"

Erişilebilirlik

Rozet düz bir <span> işler — ekran okuyucular yalnızca metnini alır, başka hiçbir şey almaz; bu yüzden anlamı tek başına renge yüklemeyin: variant="destructive" da default ile aynı şekilde duyurulur, “Başarısız” bilgisini metnin kendisi söylemelidir. Çıplak sayılar bağlam ister — “3”ün “3 okunmamış bildirim” olarak okunması için bir aria-label veya görsel olarak gizlenmiş metin ekleyin. render prop'u ile bağlantı olarak işlendiğinde sıradan bir bağlantıdır ve bilinen bağlantı semantiği aynen geçerlidir.

API Referansı

Badge

Badge bileşeni, bir badge ya da badge gibi görünen bir bileşen gösterir.

PropTypeDefault
variant"default" | "secondary" | "destructive" | "outline" | "ghost" | "link""default"
classNamestring-