// THE SLIDE RULES — the numbers and names report.json's slide fields // (./schema.ts) are held to, and the report page's own anchors. Pure, no // imports: the schema (server-only, zod), the validator, the slide builder // (./slides.ts) and the browser all read the one copy. // How a section's or a claim's slide is laid out (`slide.layout`). export const SLIDE_LAYOUTS = ["points", "evidence", "quote", "statement"] as const; export type SlideLayoutName = (typeof SLIDE_LAYOUTS)[number]; // A slide shows at most this many points, each at most this long (its visible // text: an inline citation counts as its label). export const SLIDE_POINTS_MAX = 5; export const SLIDE_POINT_MAX = 140; // A slide's own title, and the deck's title and closing lines: one line, at // most this long. export const SLIDE_LINE_MAX = 160; // A section slide with no `points` shows the first sentences of its body; past // this many characters they no longer read as a slide (umtool's lint says so). export const SLIDE_DERIVED_TEXT_MAX = 240; // THE REPORT PAGE'S OWN ANCHORS — the ids the page gives its parts, beside a // section's and a claim's own id. A slide's anchor (./slides.ts) is one of // these or a section or claim id, so a section or claim may not take one // (./validate.ts): the page would carry two elements with one id. export const REPORT_PAGE_ANCHOR_IDS = { // The header: the report's name, dates, the document under review. head: "report-head", // The quick take: the tally and the summary. summary: "in-brief", // What the check found. found: "found", // Every claim, with its evidence. claims: "claims", // The reference list. references: "references", // The downloads line. downloads: "downloads", // Everything after the claims: the documents quoted, the references, the downloads. end: "report-end", } as const; export const RESERVED_ANCHOR_IDS: readonly string[] = Object.values(REPORT_PAGE_ANCHOR_IDS);