// Eigene Fenstersteuerung (Minimieren/Maximieren/Schliessen) für das randlose // ELECTRON-Fenster (frame:false, s. scripts/electron-main.cjs) — dort gibt es // ohne native Titelleiste sonst keine Fenstersteuerung. // // Unter TAURI werden die NATIVEN macOS-Ampeln verwendet (tauri.conf.json: // titleBarStyle "Overlay" + hiddenTitle, native Dekoration mit gerundeten Ecken), // daher rendert diese Komponente dort NICHT (kein `window.dossierWindow`) — sonst // gäbe es doppelte Knöpfe. Im Browser-Dev-Modus ebenfalls unsichtbar (`null`). import { useEffect, useState } from "react"; /** Von electron-preload.cjs via contextBridge injiziert (nur unter Electron). */ interface DossierWindowApi { minimize: () => void; toggleMaximize: () => void; close: () => void; isMaximized: () => Promise; onMaximizedChange: (callback: (isMaximized: boolean) => void) => () => void; } declare global { interface Window { dossierWindow?: DossierWindowApi; } } export function WindowControls() { const api = window.dossierWindow; const [maximized, setMaximized] = useState(false); useEffect(() => { if (!api) return; let cancelled = false; api.isMaximized().then((v) => { if (!cancelled) setMaximized(v); }); const unsubscribe = api.onMaximizedChange((v) => setMaximized(v)); return () => { cancelled = true; unsubscribe(); }; }, [api]); if (!api) return null; // Reihenfolge (macOS-Titelleiste links): Schliessen · Minimieren · Maximieren. return (
); }