// Small labels. Color only means something: green is online, blue is age verified or adult, red is banned. import type { Link } from "@/lib/api"; import { cn } from "@/lib/utils"; const tones = { neutral: "border-border bg-muted/60 text-muted-foreground", strong: "border-foreground/15 bg-foreground/5 text-foreground", online: "border-emerald-600/20 bg-emerald-500/10 text-emerald-700 dark:text-emerald-400", adult: "border-sky-600/20 bg-sky-500/10 text-sky-700 dark:text-sky-400", danger: "border-red-600/20 bg-red-500/10 text-red-700 dark:text-red-400", }; export function Tag({ tone = "neutral", dot = false, className, children, }: { tone?: keyof typeof tones; dot?: boolean; className?: string; children: React.ReactNode; }) { return ( {dot && } {children} ); } /** A round initial standing in for an avatar picture. */ export function Initial({ name }: { name: string }) { return ( {name.slice(0, 1)} ); } /** The community products an account wears. */ export function Outfit({ items }: { items: { id: string; name: string }[] }) { if (items.length === 0) return null; return (
Wearing
); } /** A page's title and the line under it. */ export function PageHeader({ title, children }: { title: React.ReactNode; children?: React.ReactNode }) { return (

{title}

{children &&
{children}
}
); } /** An IMVU account's age status: blue when it can see adult community products. */ export function AgeTag({ link }: { link: Pick }) { if (link.ageVerified || (link.adult && !link.accessPass)) return Age verified; if (link.accessPass) return Access Pass; return Not age verified; }