import { cva, type VariantProps } from 'class-variance-authority'; import * as React from 'react'; import { cn } from '@/lib/utils'; /** * Status pill - a single visual primitive for "this thing is in state X" across * documents, signers, reservations, interests. Replaces ad-hoc Badge variants * sprinkled through detail pages so the colour mapping stays consistent. */ const statusPillVariants = cva( 'inline-flex items-center gap-1.5 rounded-md border px-2 py-0.5 text-xs font-medium transition-colors', { variants: { status: { // Document/signer lifecycle pending: 'border-slate-200 bg-slate-100 text-slate-700', sent: 'border-brand-100 bg-brand-50 text-brand-700', partial: 'border-teal-light bg-teal-light/40 text-teal-dark', signed: 'border-success-border bg-success-bg text-success', completed: 'border-success-border bg-success-bg text-success', expired: 'border-warning-border bg-warning-bg text-warning', rejected: 'border-error-border bg-error-bg text-error', cancelled: 'border-slate-300 bg-slate-200 text-slate-600', declined: 'border-error-border bg-error-bg text-error', // Reservation / interest lifecycle active: 'border-success-border bg-success-bg text-success', archived: 'border-slate-200 bg-slate-100 text-slate-500', // Delivered (non-signature docs in hub) delivered: 'border-purple-light bg-purple-light/40 text-purple-dark', draft: 'border-slate-200 bg-white text-slate-600', }, }, defaultVariants: { status: 'pending', }, }, ); export type StatusPillStatus = NonNullable['status']>; interface StatusPillProps extends React.HTMLAttributes, VariantProps { /** Optional leading dot - useful for "in-progress" style indicators. */ withDot?: boolean; } export function StatusPill({ status, withDot, className, children, ...props }: StatusPillProps) { return ( {withDot ? : null} {children} ); }