diff --git a/frontend/src/components/CanvasArea.tsx b/frontend/src/components/CanvasArea.tsx index 2d41177..67fc2d9 100644 --- a/frontend/src/components/CanvasArea.tsx +++ b/frontend/src/components/CanvasArea.tsx @@ -326,6 +326,18 @@ const CanvasArea: React.FC = ({ renderEngine.setOverlayElements(elements); renderEngine.render(); + // CAD-14 Audit-Fix: App-Löschungen in das V2-Dokument zurueckspiegeln — + // sonst bleiben in App geloeschte Elemente als Geister in v2Doc/Pixi + // haengen und kamen beim naechsten onChanged zurueck. + const activeDoc = getActiveDocument(); + if (activeDoc) { + const appIds = new Set(elements.map((e) => e.id)); + const ghostIds = activeDoc.getAllElements().filter((e) => !appIds.has(e.id)).map((e) => e.id); + if (ghostIds.length > 0) { + activeDoc.deleteElements(ghostIds); + } + } + // CAD-13-fix: Bestands-Elemente (aus DB geladen) müssen in Pixi gespiegelt // werden — nur NEUE V2-Elemente laufen über v2Doc.onChanged in syncPixi. // Ohne diesen Mirror blieben Alt-Projekte leer (Legacy skippt ja jetzt). diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx index 8f0d42c..f47dd3b 100644 --- a/frontend/src/main.tsx +++ b/frontend/src/main.tsx @@ -2,6 +2,14 @@ import React from 'react'; import { createRoot } from 'react-dom/client'; import App from './App'; import { AuthProvider } from './contexts/AuthContext'; +import { registerBuiltinPlugins, pluginRegistry } from './plugins'; + +// CAD-14 Audit-Fix: Registry VOR dem React-Render initialisieren, damit +// der erste CanvasArea-Mount (Child-Effekte laufen vor Parent-Effekten) +// gefuellte Tools vorfindet — sonst '[InteractionDispatcher] kein +// aktives V2-Tool select' beim App-Start. +registerBuiltinPlugins(); +pluginRegistry.initDefaults(); const container = document.getElementById('root'); if (!container) { diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index d9c37d5..e9bdf2a 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -230,7 +230,9 @@ export async function deleteElement(token: string, elementId: string): Promise