spb/autoscholar
Public
1const COLORS: Record<string, string> = {2 published: "var(--color-ok-500)",3 corrected: "var(--color-info-500)",4 retracted: "var(--color-danger-500)",5 running: "var(--color-info-500)",6 provisioning: "var(--color-info-500)",7 queued: "var(--color-stone-500)",8 validated: "var(--color-stone-500)",9 draft: "var(--color-stone-400)",10 quality_check: "var(--color-warn-500)",11 quality_failed: "var(--color-danger-500)",12 revising: "var(--color-warn-500)",13 ready_to_publish: "var(--color-ok-500)",14 awaiting_approval: "var(--color-warn-500)",15 publishing: "var(--color-ok-500)",16 cancelling: "var(--color-warn-500)",17 cancelled: "var(--color-stone-500)",18 failed: "var(--color-danger-500)",19 retrying: "var(--color-warn-500)",20 online: "var(--color-ok-500)",21 offline: "var(--color-stone-500)",22 draining: "var(--color-warn-500)",23 quarantined: "var(--color-danger-500)",24 disabled: "var(--color-stone-400)",25 pass: "var(--color-ok-500)",26 fail: "var(--color-danger-500)",27 warn: "var(--color-warn-500)",28 skip: "var(--color-stone-400)",29 completed: "var(--color-ok-500)",30 pending: "var(--color-stone-400)",31 blocker: "var(--color-danger-500)",32 major: "var(--color-warn-500)",33 minor: "var(--color-stone-500)",34 verified: "var(--color-ok-500)",35};36const LIVE = new Set(["running", "provisioning", "publishing", "quality_check", "cancelling", "online"]);3738/** Research/verification/publication status pill (ResearchStatusBadge). */39export function StatusBadge({ status, label }: { status: string; label?: string }) {40 const c = COLORS[status] ?? "var(--color-stone-500)";41 return (42 <span className="badge" style={{ color: c, borderColor: `color-mix(in oklab, ${c} 45%, transparent)` }}>43 <span44 aria-hidden="true"45 className={`mr-1.5 inline-block h-1.5 w-1.5 rounded-full ${LIVE.has(status) ? "animate-pulse" : ""}`}46 style={{ background: c }}47 />48 {label ?? status.replace(/_/g, " ")}49 </span>50 );51}52export { StatusBadge as ResearchStatusBadge };53