/** * cockpitNav — kleine Brücke zwischen WorkspaceCanvas (Fokus-Zustand) und dem * Navigations-Header, damit der „⤢ Übersicht"-Button im Header sitzen kann * (kollidiert dort mit nichts im Chat) statt im überfüllten Chat-Inhalt. * * Der Canvas meldet, ob gerade eine Kachel fokussiert ist, und registriert eine * Aktion zum Zurück-zur-Übersicht. Der Header abonniert den Zustand und ruft die * Aktion. Muster wie services/rvs.ts (Singleton). */ type Sub = (focused: boolean) => void; class CockpitNav { private focused = false; private overviewHandler: (() => void) | null = null; private subs: Sub[] = []; isFocused(): boolean { return this.focused; } setFocused(f: boolean): void { if (this.focused === f) return; this.focused = f; this.subs.forEach((cb) => cb(f)); } /** Canvas registriert seine „zur Übersicht"-Aktion (null beim Unmount). */ registerOverview(fn: (() => void) | null): void { this.overviewHandler = fn; } requestOverview(): void { this.overviewHandler?.(); } subscribe(cb: Sub): () => void { this.subs.push(cb); cb(this.focused); return () => { this.subs = this.subs.filter((s) => s !== cb); }; } } const cockpitNav = new CockpitNav(); export default cockpitNav;