/** * Task G5 – Browser-Print-Service. * * Bereitet die App für window.print() vor: Der Body erhält die Klasse * `print-layout`, das @media print Stylesheet blendet das UI-Chrome aus * und zeigt nur den Druckbereich (Canvas/Layout). Nach dem Druck wird * die Klasse wieder entfernt (kein DOM-Mutation-Restzustand). */ const PRINT_CLASS = 'print-layout'; /** Setzt den Print-Modus (Body-Klasse; @media print regelt das Rendering). */ export function preparePrintLayout(): void { document.body.classList.add(PRINT_CLASS); } /** Entfernt den Print-Modus (nach Druck oder bei Abbruch). */ export function cleanupPrintLayout(): void { document.body.classList.remove(PRINT_CLASS); } /** * Druck-Flow: Vorbereitung → Rendern der nächsten Frames (Styles müssen * greifen, bevor der Browser den Print-Dialog aufbaut) → window.print * → Aufräumen. await-fähig für Tests (window.print wird gemockt). */ export async function printLayout(): Promise { preparePrintLayout(); // Zwei Frames warten: Style-Anwendung + Layout der Print-Ansicht await new Promise((resolve) => requestAnimationFrame(() => resolve())); await new Promise((resolve) => requestAnimationFrame(() => resolve())); try { window.print(); } finally { cleanupPrintLayout(); } }