--- /** * `/changelog`: every topic and review release on one page, newest first — a * vertical timeline, the date on the left and one card per release on the * right, with no per-release subpages. Replaces Blume's generated changelog * (a custom page wins its route); the header links here from * `navigation.actions` in blume.config.ts. Data: lib/releases.ts. */ import PageLayout from "blume/components/layout/PageLayout.astro"; import data from "blume:data"; import { withBase } from "blume/components/islands/base-path.ts"; import redirects from "../redirects"; import { readReleases } from "../lib/releases.ts"; const { config } = data; const releases = await readReleases(); const DATE = new Intl.DateTimeFormat("en-US", { timeZone: "America/New_York", month: "short", day: "numeric", year: "numeric", }); const issueUrl = (n: number) => `https://github.com/prdlk/leetcode/issues/${n}`; // LC number -> its docs page route, off sync's `/` short links — the // page itself, not the redirect, so a click is one hop. A problem with no page // (none yet) links to its issue instead. const pages = new Map(redirects.map((r) => [Number(r.from.slice(1)), r.to])); const problemHref = (lc: number, issue: number) => { const route = pages.get(lc); return route ? withBase(route) : issueUrl(issue); }; // The /progress cards' difficulty palette (--chart-1..3 in theme.css), so a // Hard reads the same colour here as in the SolvedRing gauge. const DIFFICULTY: Record = { easy: { label: "Easy", class: "border-chart-1/40 bg-chart-1/10 text-chart-1" }, medium: { label: "Med.", class: "border-chart-2/40 bg-chart-2/10 text-chart-2" }, hard: { label: "Hard", class: "border-chart-3/40 bg-chart-3/10 text-chart-3" }, }; const description = "Every topic and review the campaign finished, newest first."; ---

Changelog

{description}

    { releases.map((r, i) => (
  1. {/* The rail: a line down the left edge, a ring at each release. */} {i < releases.length - 1 && (
  2. )) }