Skip to content

Badge

Source: packages/shared/components/ui/badge.tsx Primitives: @radix-ui/react-slot, class-variance-authority

import { Badge } from "@prosper/shared/components/ui/badge";

Preview

DefaultSecondaryDestructivePublishedOutline

Variants

VariantAppearanceUsage
defaultBlue bg, white textPrimary status
secondaryGray bg, dark textNeutral tags (e.g. requirements in JobForm)
destructiveRed bg, white textError or removal states
successGreen surface bg, green text, green borderActive/published status
outlineTransparent bg, border, dark textSubtle labeling
<Badge>Default</Badge>
<Badge variant="secondary">Secondary</Badge>
<Badge variant="destructive">Error</Badge>
<Badge variant="success">Published</Badge>
<Badge variant="outline">Outline</Badge>

Props

PropTypeDefaultDescription
variant"default" | "secondary" | "destructive" | "success" | "outline""default"Visual style
asChildbooleanfalseRender as child element via Radix Slot
classNamestringAdditional classes

Plus all standard <span> HTML attributes.


Usage in the Codebase

Admin — JobList

Used to show job status:

<Badge
variant={job.is_active ? "success" : "secondary"}
className="uppercase text-[12px] font-medium px-2 py-0.5 w-fit"
>
{job.is_active ? "Published" : "Draft"}
</Badge>

Admin — JobForm

Used as removable tags for responsibilities and requirements:

<Badge variant="secondary" className="gap-1 py-1 px-2.5 text-sm">
{item}
<button onClick={() => removeRequirement(index)}>
<X className="w-3 h-3" />
</button>
</Badge>

Notes

  • Override in Admin JobList: className="uppercase text-[12px] font-medium px-2 py-0.5 w-fit" customizes font size and padding for status pills. Border radius is inherited from the base component.
  • Override in Admin JobForm: className="gap-1 py-1 px-2.5 text-sm" adjusts spacing for removable tag badges.
  • Override in Admin JobDetailPage: className="ml-1 text-xs px-1.5 py-0" creates compact inline counters next to tab labels.