Badge
A small count and labeling component.
registry/brook/ui/badge/badge.tsx
import { mergeProps } from "@base-ui/react/merge-props";
import { useRender } from "@base-ui/react/use-render";
import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "../../../lib/utils";
import styles from "./badge.module.css";
const badgeVariants = cva(styles.badge, {
variants: {
variant: {
default: styles.default,
secondary: styles.secondary,
destructive: styles.destructive,
outline: styles.outline,
success: styles.success,
info: styles.info,
},
size: {
sm: styles.sm,
md: styles.md,
lg: styles.lg,
},
},
defaultVariants: {
variant: "default",
size: "md",
},
});
function Badge({
className,
variant = "default",
size = "md",
render,
...props
}: useRender.ComponentProps<"span"> & VariantProps<typeof badgeVariants>) {
return useRender({
defaultTagName: "span",
props: mergeProps<"span">(
{
className: cn(badgeVariants({ variant, size, className })),
},
props
),
render,
state: {
slot: "badge",
variant,
size,
},
});
}
function BadgeIcon({ className, render, ...props }: useRender.ComponentProps<"span">) {
return useRender({
defaultTagName: "span",
props: mergeProps<"span">(
{
className: cn(styles.iconContainer, className),
},
props
),
render,
state: {
slot: "badge-icon",
},
});
}
export { Badge, BadgeIcon };
No selection tags yet — empty means no evidence, not lack of support.
DependenciesBundle weight · light
- ui-primitives
- @base-ui/react@1.5.0