preskok
uibadgesource: ok · hit
Badge
A versatile badge component with multiple intents and styles
npx shadcn add "https://ui-three-mu.vercel.app/r/badge.json"free
No selection tags yet — empty means no evidence, not lack of support.
Dependencies
Bundle weight · lighttailwind-variants
Files1 · source cached 10/8/2026, 3:33:17 PM
registry/preskok/ui/preskok-ui/badge.tsx
"use client"
import type { ComponentProps } from "react"
import React from "react"
import { tv, type VariantProps } from "tailwind-variants"
const badgeIntents = {
primary: [
"[--badge-primary:color-mix(in_oklab,var(--color-primary)_10%,white_90%)] [--badge-primary-foreground:color-mix(in_oklab,var(--color-primary)_60%,white_40%)] bg-(--badge-primary)",
"dark:bg-primary/15 text-primary dark:text-(--badge-primary-foreground) dark:group-hover:bg-primary/25",
"group-hover:bg-[color-mix(in_oklab,var(--color-primary)_15%,white_85%)] dark:group-hover:bg-primary/20",
],
secondary: ["bg-secondary group-hover:bg-border text-secondary-foreground"],
success: [
"bg-emerald-500/15 text-emerald-700 group-hover:bg-emerald-500/25 dark:bg-emerald-500/10 dark:text-emerald-400 dark:group-hover:bg-emerald-500/20",
],
info: "bg-sky-500/15 text-sky-700 group-hover:bg-sky-500/25 dark:bg-sky-500/10 dark:text-sky-300 dark:group-hover:bg-sky-500/20",
warning:
"bg-amber-400/20 text-amber-700 group-hover:bg-amber-400/30 dark:bg-amber-400/10 dark:text-amber-400 dark:group-hover:bg-amber-400/15",
danger:
"bg-red-500/15 text-red-700 group-hover:bg-red-500/25 dark:bg-red-500/10 dark:text-red-400 dark:group-hover:bg-red-500/20",
outline:
"inset-ring-border bg-transparent text-foreground group-hover:bg-secondary",
}
const badgeStyles = tv({
base: "inline-flex items-center gap-x-1.5 py-0.5 text-xs/5 font-medium inset-ring inset-ring-transparent **:data-[slot=icon]:size-3 forced-colors:outline",
variants: {
intent: { ...badgeIntents },
isCircle: {
true: "rounded-full px-2",
false: "rounded-sm px-1.5",
},
},
defaultVariants: {
intent: "primary",
isCircle: true,
},
})
interface BadgeProps
extends ComponentProps<"span">, VariantProps<typeof badgeStyles> {
className?: string
children: React.ReactNode
}
const Badge = ({
children,
intent,
isCircle = true,
className,
...props
}: BadgeProps) => {
return (
<span {...props} className={badgeStyles({ intent, isCircle, className })}>
{children}
</span>
)
}
export { Badge, badgeIntents, badgeStyles }
export type { BadgeProps }