import { type ShotRecord } from "../types.js"; /** The tallest image the judge reads exactly; see the header for the measurement. */ export declare const MAX_IMAGE_PX = 8000; /** Pieces beyond this are not cut: a page that long is a page nobody scrolls. */ export declare const MAX_PIECES = 8; /** Evidence-relative piece paths by shot id. Absent means the file is read whole. */ export type Pieces = ReadonlyMap; type Axes = Pick; /** * What the batch holds, said before the shots. The form factors and schemes * present in walk order, and the ones of the full set that were not captured, * because a form factor missing from a batch and a form factor found clean * look the same in a list of shots. */ export declare function batchHeader(shots: readonly Axes[]): string; /** One screen's height in PNG pixels: what a piece is a whole number of. */ export declare function screenHeight(shot: Pick): number; /** The tallest piece that is a whole number of screens and still reads exactly. */ export declare function pieceHeight(shot: Pick): number; /** Whether a shot is handed over in pieces at all. */ export declare function needsPieces(shot: Pick): boolean; /** The rows each piece covers, top to bottom, capped at MAX_PIECES. */ export declare function pieceBands(shot: Pick): { top: number; height: number; }[]; /** * Cut the pieces for every shot that needs them, once per shot hash, and say * which files each shot is now read from. A shot whose file cannot be cut is * left out of the map and read whole, which is what happened before pieces * existed; a missing file fails the model's own Read just as it always did. */ export declare function preparePieces(evidenceDir: string, shots: readonly ShotRecord[]): Promise>; /** * The lines telling a model to read a shot in pieces, or none when it is read * whole. `indent` is the caller's, so the block sits under its shot however * the caller lays its list out. */ export declare function pieceLines(shot: ShotRecord, evidenceDir: string, pieces: Pieces | undefined, indent?: string): string[]; /** The files a model has to open to have looked at a shot: its pieces when it has them, else the file. */ export declare function filesOf(shot: Pick, pieces?: Pieces): readonly string[]; /** * Whether a model opened every file a shot is read from. A Read names a * path as the model typed it, absolute or relative to the evidence * directory it was run in, so both spellings are resolved before comparing. */ export declare function wasRead(shot: Pick, evidenceDir: string, pieces: Pieces | undefined, reads: readonly string[]): boolean; /** A shot's entry in a manifest: its id, its file, its axes and, when cut, its pieces. */ export declare function shotEntry(shot: ShotRecord, evidenceDir: string, pieces?: Pieces): string; /** The whole manifest: the header, then every shot. */ export declare function manifestOf(shots: readonly ShotRecord[], evidenceDir: string, pieces?: Pieces, extra?: (s: ShotRecord) => string): string; export {};