frontend: Günstigster-Pfad-Linie mit Stationspunkten + Nesting-Fix
- gestrichelte, geschwungene Petrol-Linie (Katmull-Rom) durch die Endknoten des Pfads; kräftig hinter den Knoten, abgetönte Kopie davor - blasse, große Stationspunkte nur an echten Blättern (U-Bahn-Plan) — macht durchquerte Fremd-/Zwischenknoten eindeutig als "nicht Endknoten" erkennbar - Linie + Punkte auch im SVG/PNG-Export (hinten/vorne-Schichtung) - Overlays liegen in #out, erben dessen CSS-zoom (Punkte /zoom umgerechnet); Neuzeichnung nach render() und applyLayout() - Beispiel erweitert: Frontend (M) -> PWA | Web+Nativ (Web[/]+Android+iOS) - Layout-Fix: all-of unter einer any-of-Alternative wird nur horizontal schmal transponiert gestapelt (ul.or>li.has-and>ul.and), sonst schob der breite Fächer Alternativknoten und Elternbaum weit nach rechts - Geist-Knoten-Label "Untergliederung fehlt" -> "…" (alle 9 Sprachen), die Erklärung bleibt im Tooltip; der lange Text verbreiterte gestapelte Zellen - SPEC §5/§9 und DECISIONS D18 nachgeführt, Notiz in frontend/CLAUDE.md Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
c8f8160eca
commit
8e8c44bf9d
@@ -173,3 +173,23 @@ Größen-Badge (weiß mit Petrol-Rand statt gefüllt) samt Tooltip, damit die
|
||||
Annahme sichtbar und von einer echten `(M)`-Angabe unterscheidbar bleibt. Die
|
||||
Größen-Semantik in SPEC §5 bleibt unberührt (die Wertung gilt nur der
|
||||
Pfad-Kostenrechnung).
|
||||
|
||||
**Pfad-Linie + Stationspunkte (U-Bahn-Plan):** Zusätzlich zur Inversion fädelt
|
||||
eine gestrichelte, geschwungene Petrol-Linie durch die **Endknoten** des Pfads.
|
||||
Sie liegt **hinter** den Knoten (kräftig in den Lücken), mit einer **abgetönten
|
||||
Kopie davor** (deutet den Verlauf beim Durchschreiten eines Knotens nur an —
|
||||
Alternative zum harten „über allem"). Problem dabei: läuft die Linie durch
|
||||
Fremd-/Zwischenknoten, ist nicht unterscheidbar, ob diese dazugehören
|
||||
(besonders im kompakten Modus). Lösung: ein **blasser, großer Stationspunkt**
|
||||
nur an den echten Blättern — durchquerte Knoten bleiben punktlos. Blass+groß
|
||||
statt klein+satt, damit der Knotentext lesbar bleibt. Alles auch im
|
||||
Grafikexport (hinten/vorne-Schichtung nachgezeichnet).
|
||||
|
||||
**Layout: all-of unter any-of (horizontal).** Zerlegt eine any-of-Alternative
|
||||
selbst wieder all-of (z. B. „Web+Nativ" → Web + Android + iOS), würde der
|
||||
breite horizontale Fächer den Alternativknoten zentrieren und samt Elternbaum
|
||||
weit nach rechts schieben. Deshalb wird dieser Teilbaum **nur horizontal**
|
||||
schmal **transponiert** gestapelt (Kinder untereinander, linker solider
|
||||
Verteiler — wie im kompakten Modus), passend zur gestapelten any-of-Spalte
|
||||
darüber. Vertikal/kompakt haben ihre eigene `ul.and`-Behandlung und bleiben
|
||||
unberührt.
|
||||
|
||||
+19
-5
@@ -69,10 +69,13 @@ Codiert als Checkbox nach dem Zeichen (Erweiterung der Markdown-Task-Syntax):
|
||||
|
||||
- Werte: `XS < S < M < L < XL < XXL`, notiert in Klammern, z. B. `(L)`.
|
||||
- **Untergliederungsregel:** Ab `(M)` muss ein Element weiter zerlegt sein.
|
||||
Ein Element ≥ M **ohne Kinder** erhält einen Geister-Knoten
|
||||
„Untergliederung fehlt“ an gestrichelter Linie darunter (in `--warn`,
|
||||
`#B45309`). Der angedeutete Unterpunkt genügt als Hinweis; eine zusätzliche
|
||||
Umrandung des Knotens gibt es nicht.
|
||||
Ein Element ≥ M **ohne Kinder** erhält einen Geister-Knoten an gestrichelter
|
||||
Linie darunter (in `--warn`, `#B45309`). Sein Label ist knapp „…“; die
|
||||
Erklärung („Ab Größe M sollte ein Element weiter untergliedert werden.“)
|
||||
steht im Tooltip — der ausgeschriebene Text machte die Zelle sonst breiter
|
||||
als der Knoten und verschob gestapelte Geschwister. Der angedeutete
|
||||
Unterpunkt genügt als Hinweis; eine zusätzliche Umrandung des Knotens gibt es
|
||||
nicht.
|
||||
- Ausnahme: verworfene Elemente lösen die Regel nie aus.
|
||||
- Anzeige: petrolfarbenes Badge (`--or`, `#0F766E`) mit weißer Schrift oben
|
||||
rechts an der Knoten-Ecke.
|
||||
@@ -174,7 +177,18 @@ any-of-Alternativen samt Teilbaum) treten zurück (blass, entsättigt); der
|
||||
günstige Pfad hebt sich dadurch von selbst ab — kein zusätzlicher Rahmen an den
|
||||
ohnehin dichten Knoten-Ecken. Wo die Größe **implizit** als `M` angenommen wird,
|
||||
zeigt der Knoten ein **invertiertes** Größen-Badge (weiß mit petrolfarbenem
|
||||
Rand/Text statt gefüllt) mit erläuterndem Tooltip. Siehe D18.
|
||||
Rand/Text statt gefüllt) mit erläuterndem Tooltip.
|
||||
|
||||
Zusätzlich fädelt eine **gestrichelte, geschwungene Petrol-Linie** durch die
|
||||
**Endknoten (Blätter)** des Pfads (Katmull-Rom-Spline in Dokument-Reihenfolge,
|
||||
in allen Modi). Die kräftige Linie liegt **hinter** den Knoten (nur in den
|
||||
Lücken voll sichtbar), eine **abgetönte Kopie** davor deutet den Verlauf beim
|
||||
Durchschreiten eines Knotens nur schwach an. An jedem echten Endknoten sitzt ein
|
||||
großer, **blasser Petrol-Stationspunkt** (U-Bahn-Plan-Prinzip: der Knotentext
|
||||
bleibt lesbar) — nur **durchquerte** Fremd- oder Zwischenknoten tragen keinen
|
||||
Punkt, sodass eindeutig bleibt, welche Knoten auf dem Pfad **enden**. Linie,
|
||||
abgetönte Kopie und Punkte erscheinen bei aktivem Umschalter auch im
|
||||
Grafikexport. Siehe D18.
|
||||
|
||||
### Grafikexport des Diagramms
|
||||
Das Diagramm wird aus der Live-Geometrie in ein eigenständiges SVG (nur Formen
|
||||
|
||||
Reference in New Issue
Block a user