ShadCN-Inspired Tailwind Badge Component

DSy lets you build badges in real time — adjust background colors, padding, and add icons per variant. Copy ShadCN-inspired React/Next.js code instantly

Badge
import * as React from 'react';
import { cva, type VariantProps } from 'class-variance-authority';
import { cn } from '@/lib/utils';
import { Slot } from '@radix-ui/react-slot';

const badgeVariants = cva(
  "inline-flex items-center justify-center gap-1 whitespace-nowrap font-medium transition-colors px-2.5 py-0.5 text-xs rounded-full [&_svg]:size-3.5",
  {
    variants: {
      variant: {
  "default": "bg-gray-500 text-white border-transparent",
  "primary": "bg-blue-500 text-white border-transparent",
  "info": "bg-sky-200 text-sky-900 border-transparent",
  "destructive": "bg-red-500 text-white border-transparent",
  "success": "bg-green-500 text-white border-transparent",
  "warning": "bg-yellow-500 text-white border-transparent"
},
    },
    defaultVariants: {
      variant: 'default',
    }
  }
);

interface BadgeProps 
  extends React.HTMLAttributes<HTMLDivElement>,
  VariantProps<typeof badgeVariants> {
  asChild?: boolean;
}

const Badge = React.forwardRef<HTMLDivElement, BadgeProps>(
  ({ className, variant, asChild = false, ...props }, ref) => {
    const Comp = asChild ? Slot : "div";
    return (
      <Comp
        className={cn(badgeVariants({ variant }), className)}
        ref={ref}
        {...props}
      />
    );
  }
);

Badge.displayName = 'Badge';

export { Badge, badgeVariants };

Badge Variant

Each variant can have unique styles, while base styles are shared globally.

Padding

Adjust spacing
px
py

Border Radius

Adjust corner roundness

Typography

Adjust text size

Icons

Add icons