SPB Git

Repository Public MIT

badges.tsx 2.4 KB 67 lines tsx

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
Files main
Menu

Theme