fix: apply designer agent improvements to src/components/ui/Badge.tsx
This commit is contained in:
parent
0f5dc9a392
commit
f91673c70a
|
|
@ -0,0 +1,65 @@
|
||||||
|
import React from 'react'
|
||||||
|
import clsx from 'clsx'
|
||||||
|
|
||||||
|
type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'outline'
|
||||||
|
type BadgeSize = 'sm' | 'md'
|
||||||
|
|
||||||
|
interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
|
||||||
|
variant?: BadgeVariant
|
||||||
|
size?: BadgeSize
|
||||||
|
dot?: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
const variantClasses: Record<BadgeVariant, string> = {
|
||||||
|
default: 'bg-surface-100 text-ink-muted border-surface-200',
|
||||||
|
primary: 'bg-brand-50 text-brand-700 border-brand-200',
|
||||||
|
success: 'bg-success-50 text-success-700 border-success-200',
|
||||||
|
warning: 'bg-warning-50 text-warning-600 border-warning-200',
|
||||||
|
danger: 'bg-danger-50 text-danger-700 border-danger-200',
|
||||||
|
outline: 'bg-transparent text-ink-muted border-surface-300',
|
||||||
|
}
|
||||||
|
|
||||||
|
const dotColors: Record<BadgeVariant, string> = {
|
||||||
|
default: 'bg-ink-subtle',
|
||||||
|
primary: 'bg-brand-500',
|
||||||
|
success: 'bg-success-500',
|
||||||
|
warning: 'bg-warning-500',
|
||||||
|
danger: 'bg-danger-500',
|
||||||
|
outline: 'bg-ink-subtle',
|
||||||
|
}
|
||||||
|
|
||||||
|
const sizeClasses: Record<BadgeSize, string> = {
|
||||||
|
sm: 'px-1.5 py-0 text-2xs gap-1',
|
||||||
|
md: 'px-2 py-0.5 text-xs gap-1.5',
|
||||||
|
}
|
||||||
|
|
||||||
|
export function Badge({
|
||||||
|
variant = 'default',
|
||||||
|
size = 'md',
|
||||||
|
dot = false,
|
||||||
|
className,
|
||||||
|
children,
|
||||||
|
...props
|
||||||
|
}: BadgeProps) {
|
||||||
|
return (
|
||||||
|
<span
|
||||||
|
className={clsx(
|
||||||
|
'inline-flex items-center font-medium rounded-full border',
|
||||||
|
variantClasses[variant],
|
||||||
|
sizeClasses[size],
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
{dot && (
|
||||||
|
<span
|
||||||
|
className={clsx('w-1.5 h-1.5 rounded-full shrink-0', dotColors[variant])}
|
||||||
|
aria-hidden="true"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
{children}
|
||||||
|
</span>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Badge
|
||||||
Loading…
Reference in New Issue