|
1 | 1 | import * as React from "react"; |
2 | | -import { cva, type VariantProps } from "class-variance-authority"; |
| 2 | + |
3 | 3 | import { cn } from "@/lib/utils"; |
4 | 4 |
|
5 | | -const badgeVariants = cva( |
6 | | - "inline-flex items-center rounded-md border px-2 py-0.5 text-xs font-medium transition-colors", |
7 | | - { |
8 | | - variants: { |
9 | | - variant: { |
10 | | - default: "border-transparent bg-white/10 text-[var(--color-text-primary)]", |
11 | | - secondary: "border-transparent bg-[var(--color-surface-elevated)] text-[var(--color-text-secondary)]", |
12 | | - outline: "border-[var(--color-border)] text-[var(--color-text-secondary)]", |
13 | | - glass: "glass text-[var(--color-text-primary)]", |
14 | | - success: "border-transparent bg-[var(--status-success-bg)] text-[var(--status-success-fg)]", |
15 | | - warning: "border-transparent bg-[var(--status-warn-bg)] text-[var(--status-warn-fg)]", |
16 | | - error: "border-transparent bg-[var(--status-error-bg)] text-[var(--status-error-fg)]", |
17 | | - info: "border-transparent bg-[var(--status-info-bg)] text-[var(--status-info-fg)]", |
18 | | - }, |
19 | | - }, |
20 | | - defaultVariants: { |
21 | | - variant: "default", |
22 | | - }, |
23 | | - } |
24 | | -); |
25 | | - |
26 | | -export interface BadgeProps |
27 | | - extends React.HTMLAttributes<HTMLDivElement>, |
28 | | - VariantProps<typeof badgeVariants> {} |
| 5 | +const badgeBaseClasses = |
| 6 | + "inline-flex items-center rounded-md border px-2 py-0.5 text-xs font-medium transition-colors"; |
| 7 | + |
| 8 | +const badgeVariantClasses = { |
| 9 | + default: "border-transparent bg-white/10 text-[var(--color-text-primary)]", |
| 10 | + secondary: |
| 11 | + "border-transparent bg-[var(--color-surface-elevated)] text-[var(--color-text-secondary)]", |
| 12 | + outline: "border-[var(--color-border)] text-[var(--color-text-secondary)]", |
| 13 | + glass: "glass text-[var(--color-text-primary)]", |
| 14 | + success: |
| 15 | + "border-transparent bg-[var(--status-success-bg)] text-[var(--status-success-fg)]", |
| 16 | + warning: |
| 17 | + "border-transparent bg-[var(--status-warn-bg)] text-[var(--status-warn-fg)]", |
| 18 | + error: "border-transparent bg-[var(--status-error-bg)] text-[var(--status-error-fg)]", |
| 19 | + info: "border-transparent bg-[var(--status-info-bg)] text-[var(--status-info-fg)]", |
| 20 | +} as const; |
| 21 | + |
| 22 | +type BadgeVariant = keyof typeof badgeVariantClasses; |
| 23 | + |
| 24 | +const badgeVariants = ({ variant }: { variant?: BadgeVariant } = {}) => |
| 25 | + cn(badgeBaseClasses, badgeVariantClasses[variant ?? "default"]); |
| 26 | + |
| 27 | +export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement> { |
| 28 | + variant?: BadgeVariant; |
| 29 | +} |
29 | 30 |
|
30 | 31 | function Badge({ className, variant, ...props }: BadgeProps) { |
31 | 32 | return ( |
|
0 commit comments