export interface BookFormat { id: string; name: string; widthMm: number; heightMm: number; description: string; typstFormat: string; // filename in typst/formats/ without extension minPages: number; maxPages: number; } export const FORMATS: Record = { a7: { id: "a7", name: "A7 Pocket", widthMm: 74, heightMm: 105, description: "Smallest pocket format — fits in a shirt pocket", typstFormat: "a7", minPages: 16, maxPages: 48, }, a6: { id: "a6", name: "A6 Booklet", widthMm: 105, heightMm: 148, description: "Standard postcard-sized pocket book", typstFormat: "a6", minPages: 16, maxPages: 64, }, "quarter-letter": { id: "quarter-letter", name: "Quarter Letter", widthMm: 108, heightMm: 140, description: "Quarter US Letter — easy to print at home", typstFormat: "quarter-letter", minPages: 16, maxPages: 64, }, digest: { id: "digest", name: 'Digest (5.5" × 8.5")', widthMm: 140, heightMm: 216, description: "Half US Letter — most POD-friendly format", typstFormat: "digest", minPages: 16, maxPages: 96, }, }; export function getFormat(id: string): BookFormat | undefined { return FORMATS[id]; } export function listFormats(): BookFormat[] { return Object.values(FORMATS); }