Skip to content

g1t/apps/web/app/components/ui/badge.tsx

31 lines1,060 bytesCodeBlame
1import type { ComponentProps } from "react";
2
3import { cn } from "../../lib/cn";
4
5// shadcn/ui's badge, styled with g1t's tokens: a small outlined label whose
6// tone says how much it matters.
7
8export type BadgeTone = "neutral" | "accent" | "success" | "info" | "merged" | "warn" | "danger";
9
10const TONES: Record<BadgeTone, string> = {
11 neutral: "border-line text-muted",
12 accent: "border-accent/40 bg-accent/10 text-accent",
13 success: "border-success/40 bg-success/10 text-success",
14 info: "border-info/40 bg-info/10 text-info",
15 merged: "border-merged/40 bg-merged/10 text-merged",
16 warn: "border-warn/40 bg-warn/10 text-warn",
17 danger: "border-danger/40 bg-danger/10 text-danger",
18};
19
20export function Badge({ tone = "neutral", className, ...props }: ComponentProps<"span"> & { tone?: BadgeTone }) {
21 return (
22 <span
23 className={cn(
24 "inline-flex shrink-0 items-center gap-1 rounded-full border px-2 py-px text-[0.6875rem] font-medium whitespace-nowrap",
25 TONES[tone],
26 className,
27 )}
28 {...props}
29 />
30 );
31}