Repository Public MIT
1import { AlertTriangle, BadgeCheck, CircleDashed, GitBranch, ShieldAlert, ShieldCheck, ShieldQuestion } from "lucide-react";2import { TYPE_LABELS, type ArtifactType } from "@skills/registry-core";3import { t } from "@/lib/i18n";45export function TypeBadge({ type }: { type: ArtifactType }) {6 return <span className="chip chip-accent">{TYPE_LABELS[type].singular}</span>;7}89export function StateBadge({ state, reason }: { state: string; reason?: string | null }) {10 if (state === "active" || state === "published") return null;11 const tone = state === "deprecated" || state === "quarantined" || state === "draft" ? "border-warn/40 text-warn" : "border-danger/40 text-danger";12 return (13 <span className={`chip ${tone}`} title={reason ?? undefined}>14 <AlertTriangle size={11} aria-hidden />15 {state.replace("_", " ")}16 </span>17 );18}1920/** Identity and provenance are separate signals; neither says anything about safety. */21export function TrustBadges({ identityVerified, sourceVerified, compact = false }: { identityVerified: boolean; sourceVerified: boolean; compact?: boolean }) {22 return (23 <>24 {identityVerified ? (25 <span className="chip border-ok/30 text-ok" title={t.trust.identityVerified}>26 <BadgeCheck size={12} aria-hidden />27 {compact ? "Verified publisher" : t.trust.identityVerified}28 </span>29 ) : compact ? null : (30 <span className="chip" title={t.trust.identityUnverified}>31 <CircleDashed size={12} aria-hidden />32 {t.trust.identityUnverified}33 </span>34 )}35 {sourceVerified && (36 <span className="chip border-ok/30 text-ok" title={t.trust.sourceVerified}>37 <GitBranch size={12} aria-hidden />38 {compact ? "Verified source" : t.trust.sourceVerified}39 </span>40 )}41 </>42 );43}4445export function SecurityBadge({ status }: { status: string | null | undefined }) {46 if (status === "passed")47 return (48 <span className="chip" title={t.trust.advisory}>49 <ShieldCheck size={12} aria-hidden />50 {t.trust.scanPassed}51 </span>52 );53 if (status === "flagged")54 return (55 <span className="chip border-warn/40 text-warn" title={t.trust.advisory}>56 <ShieldAlert size={12} aria-hidden />57 {t.trust.scanFlagged}58 </span>59 );60 return (61 <span className="chip">62 <ShieldQuestion size={12} aria-hidden />63 Not scanned64 </span>65 );66}67