docs/components/Tag.tsx

59 lines
1.7 KiB
TypeScript
Raw Normal View History

2024-07-22 11:49:47 +02:00
import clsx from "clsx";
const variantStyles = {
small: "",
medium: "rounded-lg px-1.5 ring-1 ring-inset",
};
const colorStyles = {
brand: {
small: "text-brand-500 dark:text-brand-400",
medium: "ring-brand-300 dark:ring-brand-400/30 bg-brand-400/10 text-brand-500 dark:text-brand-400",
2024-07-22 11:49:47 +02:00
},
sky: {
small: "text-sky-500",
medium: "ring-sky-300 bg-sky-400/10 text-sky-500 dark:ring-sky-400/30 dark:bg-sky-400/10 dark:text-sky-400",
},
amber: {
small: "text-amber-500",
medium: "ring-amber-300 bg-amber-400/10 text-amber-500 dark:ring-amber-400/30 dark:bg-amber-400/10 dark:text-amber-400",
},
rose: {
small: "text-red-500 dark:text-rose-500",
medium: "ring-rose-200 bg-rose-50 text-red-500 dark:ring-rose-500/20 dark:bg-rose-400/10 dark:text-rose-400",
},
zinc: {
small: "text-zinc-400 dark:text-zinc-500",
medium: "ring-zinc-200 bg-zinc-50 text-zinc-500 dark:ring-zinc-500/20 dark:bg-zinc-400/10 dark:text-zinc-400",
},
};
const valueColorMap = {
GET: "brand",
2024-07-22 11:49:47 +02:00
POST: "sky",
PUT: "amber",
DELETE: "rose",
} as Record<string, keyof typeof colorStyles>;
export function Tag({
children,
variant = "medium",
color = valueColorMap[children] ?? "brand",
2024-07-22 11:49:47 +02:00
}: {
children: keyof typeof valueColorMap;
variant?: keyof typeof variantStyles;
color?: keyof typeof colorStyles;
}) {
return (
<span
className={clsx(
"font-mono text-[0.625rem] font-semibold leading-6",
variantStyles[variant],
colorStyles[color][variant],
)}
>
{children}
</span>
);
}