ReleasesPage
is an async component
The releases, newest first: each package's version, when, and its notes (written from its API's changes).
import { shortHash } from "#codebase/tcmts/core/hash"; import { at, Frame, Html, markdownHtml, shareNow } from "#codebase/tcmts/share"; export async function ReleasesPage() { const s = shareNow(); if (!s.signedIn) return <Frame tab="releases" title="Sign in" children={null} />; const all = s.cb.store.releases().sort((a, b) => b.ts - a.ts); return ( <Frame tab="releases" title="Releases"> <div className="narrow"> <h2 className="title" style={{ marginBottom: 14 }}> Releases </h2> {all.length ? ( all.map((r) => ( <div className="box" id={`${r.package}@${r.version}`} key={`${r.package}@${r.version}`}> <div className="boxhead"> <b> {r.package} {r.version} </b> <span className="muted"> {new Date(r.ts).toISOString().slice(0, 10)} · by {r.author} </span> <a className="right hash" href={at(`/history/${r.causal}`)}> {shortHash(r.causal)} </a> </div> <Html className="boxbody md" html={markdownHtml(s.cb, r.notes || "_No notes._")} /> </div> )) ) : ( <div className="empty"> No releases yet: <code>tcm release <package></code> makes one. </div> )} </div> </Frame> ); }
uses
- tcmts.core.hash.shortHash
- tcmts.share.Frame
- tcmts.share.Html
- tcmts.share.at
- tcmts.share.markdownHtml
- tcmts.share.shareNow