/** * documentService – Prozessweiter Zugriffspunkt auf das aktive CADDocument. * * Warum: CanvasArea besitzt die V2-Dokumentinstanz (Task A4.1), aber App-Level * UI (HistoryPanel, Tastenkürzel Strg+Z/Y) benötigt Zugriff OHNE prop- * threading durch die God-Component. Dieser Service ist die bewusste, * dokumentierte Ausnahme von der Reinheitsregel — nur EINE Instanz aktiv. * * Setzen/Entfernen übernimmt CanvasArea im Mount-/Cleanup-Zyklus. */ import type { CADDocument } from './CADDocument'; type Listener = () => void; let activeDoc: CADDocument | null = null; const listeners = new Set(); /** Registriert das aktive Dokument (CanvasArea-Mount). */ export function setActiveDocument(doc: CADDocument | null): void { activeDoc = doc; listeners.forEach((l) => l()); } /** Aktives Dokument oder null (z.B. wenn Flag aus / Canvas unmounted). */ export function getActiveDocument(): CADDocument | null { return activeDoc; } /** Änderungsabonnement (für React-Hooks). Liefert Unsubscribe. */ export function onActiveDocumentChanged(cb: Listener): () => void { listeners.add(cb); return () => listeners.delete(cb); } /** Bequemlichkeit: globaler Undo am aktiven Dokument. false wenn kein Doc/Stack leer. */ export function undoActive(): boolean { return activeDoc?.undo() ?? false; } /** Bequemlichkeit: globales Redo am aktiven Dokument. */ export function redoActive(): boolean { return activeDoc?.redo() ?? false; }