Interaktives Abhängigkeiten-Panel (Vorgänger/Nachfolger, andockbar)

Rechtsklick auf eine Zelle → "🕸 Abhängigkeiten anzeigen" öffnet ein an der
rechten Seite angedocktes Panel (wie das Einstellungen-Panel links) mit den
direkten Vorgängern (was die Zelle liest) und Nachfolgern (was sie liest),
auch über Tabellen-/Blattgrenzen hinweg. Ein Klick auf einen Eintrag
navigiert wirklich dorthin: wählt die echte Zelle im Dokument aus, wechselt
bei Bedarf das Blatt-Tab, und das Panel zentriert sich neu — Blatt-Tabs,
Canvas, Formel- und Statusleiste bleiben dabei die ganze Zeit sichtbar und
bedienbar (kein Vollbild-Dialog). Jeder Eintrag zeigt immer den Blattnamen,
nie nur implizit. Zirkelbezüge werden rot markiert.

Neu in der Engine: Workbook.graphPrecedents/graphDependents, dünne
öffentliche Wrapper um den bereits vorhandenen DependencyGraph. Im Store:
cellGraphSelf/cellGraphNeighbors (Anreicherung für die Anzeige) sowie
openDependencyGraph/closeDependencyGraph (dokumentweiter UI-State, ruft
intern das bestehende selectCell auf).

424 Tests (Engine-/Store-Ebene vollständig abgedeckt), vue-tsc/eslint/build
sauber. Das Panel selbst nur live per Playwright verifiziert (kein
Komponenten-Test-Setup vorhanden, in README dokumentiert).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
wkh
2026-09-08 23:19:42 +02:00
co-authored by Claude Sonnet 5
parent 6a62dccedd
commit f45fbab945
12 changed files with 712 additions and 3 deletions
+52
View File
@@ -411,6 +411,40 @@ mitgezogen:
Tabelle liegt.
- **Undo/Redo-fähig** wie jede andere Änderung.
### Abhängigkeiten erkunden (🕸)
Rechtsklick auf eine Zelle → **„🕸 Abhängigkeiten anzeigen"** öffnet ein
andockbares Panel rechts (wie das Einstellungen-Panel links) — **kein**
Vollbild-Dialog, damit Blatt-Tabs, Statusleiste und Canvas die ganze Zeit
sichtbar und bedienbar bleiben: der Blattbezug geht beim Erkunden nie
verloren. Zeigt für die Zelle:
- **Vorgänger** — jede Zelle, die ihre Formel direkt liest (bei einem
Bereich wie `SUM(B2:E2)` jede einzelne Zelle darin).
- **Nachfolger** — jede Zelle, die *diese* Zelle direkt liest, auch über
Tabellen-/Blattgrenzen hinweg.
- Jeder Eintrag zeigt **Blatt · Tabelle!Zelle** (Blattname **immer**, nicht
nur bei Mehrdeutigkeit) sowie den aktuellen Wert.
**Ein Klick auf einen Eintrag navigiert wirklich dorthin** — nicht nur
innerhalb des Panels: Er wählt die echte Zelle im Dokument aus, wechselt bei
Bedarf das Blatt-Tab, und das Panel zentriert sich neu auf sie. Formelleiste,
Statusleiste und die Tabellen selbst zeigen danach exakt dieselbe Zelle, die
im Panel zentriert ist — das Erkunden des Formel-Netzwerks *ist* Navigieren,
keine isolierte Nebenansicht. **„← Zurück"** geht die so besuchten Zellen
rückwärts durch (auch das mit echter Navigation, nicht nur Panel-intern).
Ein Zirkelbezug (`#CIRC`) wird rot markiert (⚠), sowohl als Zentrum als auch
als Vorgänger/Nachfolger-Eintrag — die Kante existiert im Abhängigkeitsgraphen
unabhängig davon, dass sie bei der Neuberechnung übersprungen wird (s.
„Fehlermodell" unten).
**Bewusst ohne**: kein automatisches Scrollen der Zieltabelle zur
navigierten Zelle, falls sie außerhalb des sichtbaren Ausschnitts liegt
(bei einer „Feste Größe"-Tabelle mit vielen Zeilen); keine Gruppierung
vieler Vorgänger/Nachfolger zu einem Bereichs-Eintrag (`Umsatz!B2:B100`
erscheint als 99 einzelne Zeilen, nicht als ein zusammengefasster Eintrag).
### Zell-Formatierung
Auswahl (Zelle, Bereich, Mehrfachauswahl, ganze Zeile/Spalte über den Kopf) → im
@@ -972,6 +1006,16 @@ Grundrechenarten: `Übersicht!B2 = =SUM(Umsatz!B2:E2)`, `D2 = =B2-C2`,
Bereich, `$`-Sperren bleiben wirkungslos (anders als beim Kopieren),
unveränderte Referenzen bleiben byte-identisch, Undo/Redo, Schutz gegen
Löschen der letzten verbleibenden Zeile/Spalte.
- **Abhängigkeiten erkunden** (`graphPrecedents`/`graphDependents` in
`workbook.spec.ts`, `cellGraphSelf`/`cellGraphNeighbors`/
`openDependencyGraph`/`closeDependencyGraph` in `document.spec.ts`) —
exakte Vorgänger/Nachfolger-Kanten, Auflösung über Tabellen-/Blattgrenzen,
bleibt korrekt für eine Zelle auf einem Zirkelbezug, aktualisiert sich
nach einer Neuzuordnung der Formel, `openDependencyGraph` löst wirklich
`selectCell` aus (inkl. Blatt-Tab-Wechsel), `closeDependencyGraph` rührt
die Auswahl nicht an. Das Panel selbst (`DependencyGraphView.vue`) ist
nur live per Playwright verifiziert, kein Komponenten-Test-Setup
vorhanden (s. „Bekannte Grenzen").
- **„Mit Schleife"-Code** — Parser-Ebene (`parseFunctionBlock`): ein
`FOR...DO...END` mit mehreren Anweisungen, mehrere unabhängige Schleifen
nacheinander, `IF...THEN...END` und `IF...THEN...ELSE...END`, `IF`
@@ -1043,6 +1087,14 @@ Grundrechenarten: `Übersicht!B2 = =SUM(Umsatz!B2:E2)`, `D2 = =B2-C2`,
Komponenten-Test-Setup (z. B. Vue Test Utils), nur Engine-/Store-Tests.
Nur live per Playwright verifiziert (Wachsen, Schrumpfen mit
Inhaltsschutz, deutliches Überschreiten der bestehenden Größe).
- **Abhängigkeiten-Panel** (`DependencyGraphView.vue`) bewusst ohne: Gruppierung
vieler Vorgänger/Nachfolger zu einem Bereichs-Eintrag (jede Zelle einzeln,
ungeachtet der Anzahl), automatisches Scrollen der Zieltabelle zur
navigierten Zelle. Wie bei der Tabellen-Größenänderung oben: rein
UI-seitig, nur live per Playwright verifiziert, kein Komponenten-Test-Setup
vorhanden — die zugrundeliegenden Store-/Engine-Funktionen
(`graphPrecedents`/`graphDependents`/`cellGraphNeighbors`/
`openDependencyGraph`) sind es aber (s. „Tests" oben).
- **Objekt-Bezüge beim Anhängen.** Beim JSON-*Anhängen* zweier Dokumente werden
nur Blatt-/Objekt-IDs neu vergeben, nicht Tabellennamen. Kollidiert ein
angehängter Tabellenname mit einem bestehenden, gewinnt bei der Auflösung der