Host-Context für Panels aus App.tsx in eigenen Hook extrahiert (state/usePanelHostBase.ts).
Der ~990-zeilige Panel-Host-Vertrag (baseHost-useMemo: Projekt/Selektion/ Snap-/View-State + sämtliche Attribut-Setter/Ausschnitte/Layouts-CRUD, den PanelHostContext für Docks/Floating-Panels konsumiert) war ein einzelner riesiger useMemo-Objektliteral direkt in App.tsx. Wortgetreu verschoben (keine Logik neu geschrieben), damit kein Verhalten unterwegs verändert wird — nur die Objekt-Konstruktion selbst wandert in eine eigene Funktion. Der Hook-Aufruf sitzt jetzt spät im Funktionskörper (nach useProjectActions/ useSelectionState/useDialogState/useContextMenuState, kurz vor den frühen Boot-Returns), weil einige referenzierte Handler (openResources, activeLayout, patchOpenLayout, openSettings, openLayerSettings, onOpenStampEditor) erst dort definiert sind — dieselbe Art Vorwärtsreferenz-Falle wie beim vorigen useGripEditing-Schritt, diesmal mit deutlich mehr betroffenen Namen. Parameter-Vertrag bündelt wo möglich ganze Hook-Rückgabewerte (projectActions/ selectionState/toolState/topBarState/dialogState/contextMenuState als Pick<> der jeweiligen Hook-Signatur) statt ~150 Einzelfelder aufzulisten — erhält volle Typsicherheit ohne manuelles Retippen jedes Handler-Signatur. App.tsx: 4594 → 3690 Zeilen. tsc -b sauber, vitest 891/891 grün, vite build ok.
This commit is contained in: