Analysepipeline: kompakter Reihenwechsel-Pfeil statt langem Bogen

Der U-Turn-Bogen, der quer ueber die ganze Box-Breite lief, wirkte bei
nur drei Bloecken pro Reihe optisch ueberladen. Jetzt sitzt unter dem
letzten Block der oberen Reihe ein schlichter, kurzer Pfeil nach unten,
der direkt zum ersten Block der naechsten Reihe zeigt.

- pipeline.js: Neue _renderUturn-Variante, die Spacer (Block-Breite)
  vor oder hinter den Pfeil setzt, sodass er passgenau unter dem letzten
  Block sitzt (rechts nach ltr-Reihe, links nach rtl-Reihe).
- style.css: Pfeil-Container nutzt Flex mit Block-Breite-Spacern statt
  100%-breitem SVG. Kurzer ↓ als gerader Pfad mit Pfeilkopf,
  is-flowing-Animation bleibt erhalten.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Dieser Commit ist enthalten in:
2026-05-01 14:35:13 +02:00
Ursprung 7b5adccf2b
Commit 392028a9aa
2 geänderte Dateien mit 29 neuen und 27 gelöschten Zeilen

Datei anzeigen

@@ -5827,25 +5827,29 @@ body.tutorial-active .tutorial-cursor {
to { background-position: 0 0; } to { background-position: 0 0; }
} }
/* U-Turn-Pfeil zwischen Snake-Reihen */ /* Reihenwechsel-Pfeil (kompakter ↓ direkt unter dem letzten Block) */
.pipeline-uturn { .pipeline-uturn {
height: 36px; display: flex;
gap: var(--sp-md);
align-items: stretch;
height: 32px;
width: 100%; width: 100%;
margin: var(--sp-xs) 0; margin: var(--sp-xs) 0;
pointer-events: none; pointer-events: none;
overflow: visible;
} }
.pipeline-uturn svg { .uturn-spacer { flex: 0 0 168px; }
width: 100%; .uturn-arrow {
flex: 0 0 168px;
display: flex;
justify-content: center;
align-items: stretch;
}
.uturn-arrow svg {
width: 24px;
height: 100%; height: 100%;
overflow: visible; overflow: visible;
} }
.pipeline-uturn-path { .pipeline-uturn-path,
fill: none;
stroke: var(--border);
stroke-width: 2;
stroke-linecap: round;
}
.pipeline-uturn-head { .pipeline-uturn-head {
fill: none; fill: none;
stroke: var(--border); stroke: var(--border);
@@ -5855,12 +5859,12 @@ body.tutorial-active .tutorial-cursor {
} }
.pipeline-uturn.is-flowing .pipeline-uturn-path { .pipeline-uturn.is-flowing .pipeline-uturn-path {
stroke: var(--accent); stroke: var(--accent);
stroke-dasharray: 8 6; stroke-dasharray: 6 4;
animation: pipelineUturnDash 0.9s linear infinite; animation: pipelineUturnDash 0.7s linear infinite;
} }
.pipeline-uturn.is-flowing .pipeline-uturn-head { stroke: var(--accent); } .pipeline-uturn.is-flowing .pipeline-uturn-head { stroke: var(--accent); }
@keyframes pipelineUturnDash { @keyframes pipelineUturnDash {
to { stroke-dashoffset: -28; } to { stroke-dashoffset: -20; }
} }
.pipeline-loop { .pipeline-loop {

Datei anzeigen

@@ -246,22 +246,20 @@ const Pipeline = {
`; `;
}, },
/** U-Turn-Pfeil zwischen zwei Reihen (Snake-Übergang). */ /** Kompakter Reihenwechsel-Pfeil: kurzer ↓ direkt unter dem letzten Block der oberen Reihe. */
_renderUturn(side, fromKey) { _renderUturn(side, fromKey) {
// SVG-Bogen + Pfeilkopf, side="right" startet rechts oben, "left" startet links oben. const arrowSvg = `
// viewBox: 100 wide, 44 high <div class="uturn-arrow">
const path = side === 'right' <svg viewBox="0 0 24 32" preserveAspectRatio="xMidYMid meet">
? 'M 92 0 L 92 18 A 14 14 0 0 1 78 32 L 8 32' <path d="M 12 2 L 12 24" class="pipeline-uturn-path"/>
: 'M 8 0 L 8 18 A 14 14 0 0 0 22 32 L 92 32'; <polyline points="6,18 12,24 18,18" class="pipeline-uturn-head"/>
const head = side === 'right' </svg>
? '<polyline points="14,26 8,32 14,38"/>' </div>`;
: '<polyline points="86,26 92,32 86,38"/>'; const spacers = '<span class="uturn-spacer"></span><span class="uturn-spacer"></span>';
const inner = side === 'right' ? (spacers + arrowSvg) : (arrowSvg + spacers);
return ` return `
<div class="pipeline-uturn" data-side="${side}" data-from="${fromKey}" data-arrow-type="uturn" aria-hidden="true"> <div class="pipeline-uturn" data-side="${side}" data-from="${fromKey}" data-arrow-type="uturn" aria-hidden="true">
<svg viewBox="0 0 100 44" preserveAspectRatio="none"> ${inner}
<path d="${path}" class="pipeline-uturn-path"/>
<g class="pipeline-uturn-head">${head}</g>
</svg>
</div> </div>
`; `;
}, },