Sections
Get Started
Components
- Accordion
- Alert
- Alert Dialog
- Aspect Ratio
- Avatar
- Badge
- Breadcrumb
- Button
- Button Group
- Calendar
- Card
- Carousel
- Chart
- Checkbox
- Collapsible
- Combobox
- Command
- Context Menu
- Data Table
- Date Picker
- Dialog
- Drawer
- Dropdown Menu
- Empty
- Fancy Button
- Field
- Filter
- Form
- Hover Card
- Input
- Input Group
- Input OTP
- Item
- Kbd
- Label
- Menubar
- Native Select
- Navigation Menu
- Number Field
- Pagination
- Pin Input
- Popover
- Progress
- Radio Group
- Radio Stack
- Range Calendar
- Range Slider
- Rating
- Resizable
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Spinner
- Stepper
- Swatch
- Swatch Group
- Switch
- Table
- Tabs
- Tags Input
- Textarea
- Toast
- Toggle
- Toggle Group
- Tooltip
- Typography
Forms
Badge
Secondary
Destructive
Outline
Verified
8
99
20+
<script setup lang="ts">
import { BadgeCheckIcon } from 'lucide-vue-next'
import { Badge } from '@/components/ui/badge'
</script>
<template>
<div class="flex flex-col items-center gap-2">
<div class="flex w-full flex-wrap gap-2">
<Badge>Badge</Badge>
<Badge variant="secondary">
Secondary
</Badge>
<Badge variant="destructive">
Destructive
</Badge>
<Badge variant="outline">
Outline
</Badge>
</div>
<div class="flex w-full flex-wrap gap-2">
<Badge
variant="secondary"
class="bg-blue-500 text-white dark:bg-blue-600"
>
<BadgeCheckIcon />
Verified
</Badge>
<Badge class="h-5 min-w-5 rounded-full px-1 font-mono tabular-nums">
8
</Badge>
<Badge
class="h-5 min-w-5 rounded-full px-1 font-mono tabular-nums"
variant="destructive"
>
99
</Badge>
<Badge
class="h-5 min-w-5 rounded-full px-1 font-mono tabular-nums"
variant="outline"
>
20+
</Badge>
</div>
</div>
</template>Installation
pnpm dlx @frontic/ui add badge
Usage
<script setup lang="ts">
import { Badge } from '@/components/ui/badge'
</script>
<template>
<Badge variant="default | outline | secondary | destructive">
Badge
</Badge>
</template>Link
You can use the as-child prop to make another component look like a badge. Here's an example of a link that looks like a badge.
<script setup lang="ts">
import { Badge } from '@/components/ui/badge'
</script>
<template>
<Badge as-child>
<a href="#">Badge</a>
</Badge>
</template>Frontic UI Extensions
Frontic UI extends this component with 11 semantic colors (primary, secondary, neutral, sale, discount, new, highlight, price, positive, destructive), 3 variant styles (default, subtle, outline), and 3 sizes (sm, default, lg).
Install the extended version:
pnpm dlx @frontic/ui add badge
Colors
All available semantic colors for badges.
Default
Primary
Secondary
Neutral
Positive
Destructive
Sale
Discount
New
Highlight
Price
<script setup lang="ts">
import { Badge } from '@/components/ui/badge'
</script>
<template>
<div class="flex flex-wrap items-center gap-2">
<Badge color="default">Default</Badge>
<Badge color="primary">Primary</Badge>
<Badge color="secondary">Secondary</Badge>
<Badge color="neutral">Neutral</Badge>
<Badge color="positive">Positive</Badge>
<Badge color="destructive">Destructive</Badge>
<Badge color="sale">Sale</Badge>
<Badge color="discount">Discount</Badge>
<Badge color="new">New</Badge>
<Badge color="highlight">Highlight</Badge>
<Badge color="price">Price</Badge>
</div>
</template>Variant Styles
Each color supports three visual styles: default (solid), subtle (light background), and outline (border only).
Default
Primary
Positive
Destructive
Sale
Subtle
Primary
Positive
Destructive
Sale
Outline
Primary
Positive
Destructive
Sale
<script setup lang="ts">
import { Badge } from '@/components/ui/badge'
</script>
<template>
<div class="flex flex-col gap-4">
<div class="flex flex-wrap items-center gap-2">
<span class="w-16 text-sm text-muted-foreground">Default</span>
<Badge variant="default" color="primary">Primary</Badge>
<Badge variant="default" color="positive">Positive</Badge>
<Badge variant="default" color="destructive">Destructive</Badge>
<Badge variant="default" color="sale">Sale</Badge>
</div>
<div class="flex flex-wrap items-center gap-2">
<span class="w-16 text-sm text-muted-foreground">Subtle</span>
<Badge variant="subtle" color="primary">Primary</Badge>
<Badge variant="subtle" color="positive">Positive</Badge>
<Badge variant="subtle" color="destructive">Destructive</Badge>
<Badge variant="subtle" color="sale">Sale</Badge>
</div>
<div class="flex flex-wrap items-center gap-2">
<span class="w-16 text-sm text-muted-foreground">Outline</span>
<Badge variant="outline" color="primary">Primary</Badge>
<Badge variant="outline" color="positive">Positive</Badge>
<Badge variant="outline" color="destructive">Destructive</Badge>
<Badge variant="outline" color="sale">Sale</Badge>
</div>
</div>
</template>Sizes
Badges come in three sizes: small, default, and large.
Small
Default
Large
<script setup lang="ts">
import { Badge } from '@/components/ui/badge'
</script>
<template>
<div class="flex flex-wrap items-center gap-2">
<Badge size="sm" color="primary">Small</Badge>
<Badge size="default" color="primary">Default</Badge>
<Badge size="lg" color="primary">Large</Badge>
</div>
</template>E-commerce Examples
Common badge use cases for e-commerce applications.
-30% OFF
NEW
SAVE $20
BEST SELLER
IN STOCK
OUT OF STOCK
$99.99
<script setup lang="ts">
import { Badge } from '@/components/ui/badge'
</script>
<template>
<div class="flex flex-wrap items-center gap-2">
<Badge color="sale">-30% OFF</Badge>
<Badge color="new">NEW</Badge>
<Badge color="discount">SAVE $20</Badge>
<Badge color="highlight">BEST SELLER</Badge>
<Badge color="positive">IN STOCK</Badge>
<Badge variant="outline" color="destructive">OUT OF STOCK</Badge>
<Badge color="price">$99.99</Badge>
</div>
</template>Examples
Secondary
Secondary
<script setup lang="ts">
import { Badge } from '@/components/ui/badge'
</script>
<template>
<Badge variant="secondary">
Secondary
</Badge>
</template>Outline
Outline
<script setup lang="ts">
import { Badge } from '@/components/ui/badge'
</script>
<template>
<Badge variant="outline">
Outline
</Badge>
</template>Destructive
Destructive
<script setup lang="ts">
import { Badge } from '@/components/ui/badge'
</script>
<template>
<Badge variant="destructive">
Destructive
</Badge>
</template>