Search for a command to run...
Displays a badge or a component that looks like a badge.
npx shadcn@latest add @zaidan/badgepnpx shadcn add @zaidan/badgeyarn dlx shadcn@latest add @zaidan/badgebunx shadcn@latest add @zaidan/badgeCopy and paste the following code into your project.
1import { type BadgeRootProps, Root } from "@kobalte/core/badge";2import type { PolymorphicProps } from "@kobalte/core/polymorphic";3import { cva, type VariantProps } from "class-variance-authority";4import { splitProps, type ValidComponent } from "solid-js";5import { cn } from "~/lib/utils";6
7const badgeVariants = cva(8 "group/badge z-badge inline-flex w-fit shrink-0 items-center justify-center overflow-hidden whitespace-nowrap transition-colors focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none",9 {10 variants: {11 variant: {12 default: "z-badge-variant-default",13 secondary: "z-badge-variant-secondary",14 destructive: "z-badge-variant-destructive",15 outline: "z-badge-variant-outline",16 ghost: "z-badge-variant-ghost",17 link: "z-badge-variant-link",18 },19 },20 defaultVariants: {21 variant: "default",22 },23 },24);25
26type BadgeProps<T extends ValidComponent = "span"> = PolymorphicProps<T, BadgeRootProps<T>> &27 VariantProps<typeof badgeVariants>;28
29const Badge = <T extends ValidComponent = "span">(props: BadgeProps<T>) => {30 const [local, others] = splitProps(props as BadgeProps, ["class", "variant"]);31 return (32 <Root33 class={cn(badgeVariants({ variant: local.variant }), local.class)}34 data-slot="badge"35 data-variant={local.variant}36 {...others}37 />38 );39};40
41export { Badge, badgeVariants };Here are the source code of all the examples from the preview page:
import { Badge } from "~/components/ui/badge";function BadgeVariants() { return ( <Example title="Variants"> <div class="flex flex-wrap gap-2"> <Badge>Default</Badge> <Badge variant="secondary">Secondary</Badge> <Badge variant="destructive">Destructive</Badge> <Badge variant="outline">Outline</Badge> <Badge variant="ghost">Ghost</Badge> <Badge variant="link">Link</Badge> </div> </Example> );}import { BadgeCheck } from "lucide-solid";import { Badge } from "~/components/ui/badge";function BadgeWithIconLeft() { return ( <Example title="Icon Left" class="max-w-fit"> <div class="flex flex-wrap gap-2"> <Badge> <BadgeCheck data-icon="inline-start" /> Default </Badge> <Badge variant="secondary"> <BadgeCheck data-icon="inline-start" /> Secondary </Badge> <Badge variant="destructive"> <BadgeCheck data-icon="inline-start" /> Destructive </Badge> <Badge variant="outline"> <BadgeCheck data-icon="inline-start" /> Outline </Badge> <Badge variant="ghost"> <BadgeCheck data-icon="inline-start" /> Ghost </Badge> <Badge variant="link"> <BadgeCheck data-icon="inline-start" /> Link </Badge> </div> </Example> );}import { ArrowRight } from "lucide-solid";import { Badge } from "~/components/ui/badge";function BadgeWithIconRight() { return ( <Example title="Icon Right" class="max-w-fit"> <div class="flex flex-wrap gap-2"> <Badge> Default <ArrowRight data-icon="inline-end" /> </Badge> <Badge variant="secondary"> Secondary <ArrowRight data-icon="inline-end" /> </Badge> <Badge variant="destructive"> Destructive <ArrowRight data-icon="inline-end" /> </Badge> <Badge variant="outline"> Outline <ArrowRight data-icon="inline-end" /> </Badge> <Badge variant="ghost"> Ghost <ArrowRight data-icon="inline-end" /> </Badge> <Badge variant="link"> Link <ArrowRight data-icon="inline-end" /> </Badge> </div> </Example> );}import { Badge } from "~/components/ui/badge";import { Spinner } from "~/components/ui/spinner";function BadgeWithSpinner() { return ( <Example title="With Spinner" class="max-w-fit"> <div class="flex flex-wrap gap-2"> <Badge> <Spinner data-icon="inline-start" /> Default </Badge> <Badge variant="secondary"> <Spinner data-icon="inline-start" /> Secondary </Badge> <Badge variant="destructive"> <Spinner data-icon="inline-start" /> Destructive </Badge> <Badge variant="outline"> <Spinner data-icon="inline-start" /> Outline </Badge> <Badge variant="ghost"> <Spinner data-icon="inline-start" /> Ghost </Badge> <Badge variant="link"> <Spinner data-icon="inline-start" /> Link </Badge> </div> </Example> );}import { ArrowUpRight } from "lucide-solid";import { Badge } from "~/components/ui/badge";function BadgeAsLink() { return ( <Example title="As Link"> <div class="flex flex-wrap gap-2"> <Badge as="a" href="#"> Link <ArrowUpRight data-icon="inline-end" /> </Badge> <Badge variant="secondary" as="a" href="#"> Link <ArrowUpRight data-icon="inline-end" /> </Badge> <Badge variant="destructive" as="a" href="#"> Link <ArrowUpRight data-icon="inline-end" /> </Badge> <Badge variant="ghost" as="a" href="#"> Link <ArrowUpRight data-icon="inline-end" /> </Badge> </div> </Example> );}import { Badge } from "~/components/ui/badge";function BadgeLongText() { return ( <Example title="Long Text"> <div class="flex flex-wrap gap-2"> <Badge variant="secondary">A badge with a lot of text to see how it wraps</Badge> </div> </Example> );}import { Badge } from "~/components/ui/badge";function BadgeCustomColors() { return ( <Example title="Custom Colors" class="max-w-fit"> <div class="flex flex-wrap gap-2"> <Badge class="bg-blue-600 text-blue-50 dark:bg-blue-600 dark:text-blue-50">Blue</Badge> <Badge class="bg-green-600 text-green-50 dark:bg-green-600 dark:text-green-50">Green</Badge> <Badge class="bg-sky-600 text-sky-50 dark:bg-sky-600 dark:text-sky-50">Sky</Badge> <Badge class="bg-purple-600 text-purple-50 dark:bg-purple-600 dark:text-purple-50"> Purple </Badge> <Badge class="bg-blue-50 text-blue-700 dark:bg-blue-950 dark:text-blue-300">Blue</Badge> <Badge class="bg-green-50 text-green-700 dark:bg-green-950 dark:text-green-300"> Green </Badge> <Badge class="bg-sky-50 text-sky-700 dark:bg-sky-950 dark:text-sky-300">Sky</Badge> <Badge class="bg-purple-50 text-purple-700 dark:bg-purple-950 dark:text-purple-300"> Purple </Badge> <Badge class="bg-red-50 text-red-700 dark:bg-red-950 dark:text-red-300">Red</Badge> </div> </Example> );}