SPB Git

spb/autoscholar

Public
2.6 KB · 86 lines tsx
1import Link from "next/link";2import { disciplineLabel, fmtDate, modeLabel } from "@/lib/format";3import { t } from "@/lib/i18n";4import { StatusBadge } from "./StatusBadge";56/** PublicationMetadata — consistent academic header block for a paper. */7export function PublicationMetadata({8  publicId,9  versionNo,10  status,11  synthetic,12  title,13  discipline,14  mode,15  firstPublishedAt,16  revisedAt,17  keywords,18  verified,19}: {20  publicId: string;21  versionNo: number;22  status: string;23  synthetic: boolean;24  title: string;25  discipline: string;26  mode: string;27  firstPublishedAt: string | Date;28  revisedAt: string | Date;29  keywords: string[];30  verified?: string;31}) {32  return (33    <header>34      <div className="flex flex-wrap items-center gap-x-3 gap-y-1.5">35        <span className="mono-id">{publicId}</span>36        <span className="muted text-xs">Version {versionNo}</span>37        <StatusBadge status={status} />38        {verified && <StatusBadge status="verified" label={verified} />}39        {synthetic && <span className="badge">staging sample — not a real paper</span>}40      </div>41      <h1 className="title-1 mt-4 max-w-4xl">{title}</h1>42      <p className="mt-4 text-sm">43        <span className="font-medium">{t("byline")}</span>44        <span className="muted"> · Research computed on MacLustr</span>45      </p>46      <dl className="mt-5 grid grid-cols-2 gap-x-6 gap-y-3 text-sm sm:grid-cols-4">47        <div>48          <dt className="label">Released</dt>49          <dd className="mt-0.5">{fmtDate(firstPublishedAt)}</dd>50        </div>51        <div>52          <dt className="label">Revised</dt>53          <dd className="mt-0.5">{fmtDate(revisedAt)}</dd>54        </div>55        <div>56          <dt className="label">Discipline</dt>57          <dd className="mt-0.5">58            <Link href={`/research?discipline=${discipline}`} className="no-underline hover:underline">59              {disciplineLabel(discipline)}60            </Link>61          </dd>62        </div>63        <div>64          <dt className="label">Methodology</dt>65          <dd className="mt-0.5">{modeLabel(mode)}</dd>66        </div>67      </dl>68      {keywords.length > 0 && (69        <ul className="mt-4 flex flex-wrap gap-1.5" aria-label="Keywords">70          {keywords.map((k) => (71            <li key={k}>72              <Link73                href={`/research?q=${encodeURIComponent(k)}`}74                className="chip no-underline"75                style={{ minHeight: "1.75rem" }}76              >77                {k}78              </Link>79            </li>80          ))}81        </ul>82      )}83    </header>84  );85}86
Files · main
Menu

Theme