Graph ux edge drag and drop #4

Closed
opened 2026-09-12 15:03:49 +02:00 by admin · 0 comments
  1. wenn ich gerade einen edge dragge und er würde nicht ins leere gehen (sprich ein passender input/ouput gehovered) wird, dann soll der input/ouput gehightlighted werden
  2. wenn ich auf das node selbst droppe, soll er das erste freie passende bzw. wenn keines mehr frei ist einfach das letzt passende input/out verbinunden - auch hier gilt die prediction vom highlight (sodass man wärend dem draggen schon sieht welches input/output angeschlossen wird falls man droppt)

EDIT:
3. Wenn ich ins leere droppe, soll sich das create node feld aufgehen und nach passenden nodes filtern die kompatibell sind (wenn von output weg, dann passende nodes vorschlagen die einen passenden input haben und umgekehrt)


Umgesetzt (2026-09-09), alle drei Punkte.

  1. Der Port, auf dem die Kante landen wuerde, bekommt waehrend des Drags einen weissen Ring
    (Theme-Token portTarget), und die gezogene Linie schnappt darauf — die Vorhersage ist damit
    nicht nur farbig, sondern auch geometrisch eindeutig.
  2. Drop auf den Node-Koerper nimmt den ersten freien passenden Port; ist keiner mehr frei, den
    letzten passenden, dessen Kante dann ersetzt wird (genau wie ein Drop auf den Port selbst).
    Der Ring zeigt waehrend des Drags schon genau diesen Port.
  3. Drop ins Leere oeffnet die Palette, gefiltert auf die Node-Typen, die diese Kante ueberhaupt
    erreichen kann (vom Output aus: passender Input, vom Input aus: passender Output; exec passt
    nur zu exec, any zu jedem Datentyp). Der gewaehlte Node kommt fertig verdrahtet an.

Die Entscheidung "was passt hier zusammen" sitzt komplett in src/core/graph/dropTarget.ts (rein,
getestet); der Canvas zeichnet sie nur. Zwei Dinge, die beim Bauen dazukamen:

  • Node und Kante gehen als ein CompoundCommand rein. Zwei getrennte Kommandos haetten fuer
    eine Geste zwei Undos gebraucht.
  • firstPortFor statt dropTargetPort beim Palette-Weg: der neue Node ist noch gar nicht im
    Graph, dropTargetPort koennte ihn also nicht finden. Er hat noch keine Kanten, also ist der
    erste passende Port genau der, den dropTargetPort spaeter waehlen wuerde.

Übernommen aus todo-notes/done/graph-ux-edge-drag-and-drop.md beim Umzug auf das Issue-System (2026-09-12).

  • Angelegt: 2026-09-09 · 633f01c — Add five notes raised while the override work was running
  • Abgeschlossen: 2026-09-09 · ebad3fd — Make an edge drag say where it will land, and offer nodes when it lands nowhere
  • Gemeldet von: admin
1. wenn ich gerade einen edge dragge und er würde nicht ins leere gehen (sprich ein passender input/ouput gehovered) wird, dann soll der input/ouput gehightlighted werden 2. wenn ich auf das node selbst droppe, soll er das erste freie passende bzw. wenn keines mehr frei ist einfach das letzt passende input/out verbinunden - auch hier gilt die prediction vom highlight (sodass man wärend dem draggen schon sieht welches input/output angeschlossen wird falls man droppt) EDIT: 3. Wenn ich ins leere droppe, soll sich das create node feld aufgehen und nach passenden nodes filtern die kompatibell sind (wenn von output weg, dann passende nodes vorschlagen die einen passenden input haben und umgekehrt) --- **Umgesetzt (2026-09-09), alle drei Punkte.** 1. Der Port, auf dem die Kante landen wuerde, bekommt waehrend des Drags einen weissen Ring (Theme-Token `portTarget`), und die gezogene Linie schnappt darauf — die Vorhersage ist damit nicht nur farbig, sondern auch geometrisch eindeutig. 2. Drop auf den Node-Koerper nimmt den ersten **freien** passenden Port; ist keiner mehr frei, den letzten passenden, dessen Kante dann ersetzt wird (genau wie ein Drop auf den Port selbst). Der Ring zeigt waehrend des Drags schon genau diesen Port. 3. Drop ins Leere oeffnet die Palette, gefiltert auf die Node-Typen, die diese Kante ueberhaupt erreichen kann (vom Output aus: passender Input, vom Input aus: passender Output; `exec` passt nur zu `exec`, `any` zu jedem Datentyp). Der gewaehlte Node kommt fertig verdrahtet an. Die Entscheidung "was passt hier zusammen" sitzt komplett in `src/core/graph/dropTarget.ts` (rein, getestet); der Canvas zeichnet sie nur. Zwei Dinge, die beim Bauen dazukamen: - **Node und Kante gehen als ein `CompoundCommand` rein.** Zwei getrennte Kommandos haetten fuer eine Geste zwei Undos gebraucht. - **`firstPortFor` statt `dropTargetPort` beim Palette-Weg**: der neue Node ist noch gar nicht im Graph, `dropTargetPort` koennte ihn also nicht finden. Er hat noch keine Kanten, also ist der erste passende Port genau der, den `dropTargetPort` spaeter waehlen wuerde. --- *Übernommen aus `todo-notes/done/graph-ux-edge-drag-and-drop.md` beim Umzug auf das Issue-System (2026-09-12).* - **Angelegt:** 2026-09-09 · `633f01c` — Add five notes raised while the override work was running - **Abgeschlossen:** 2026-09-09 · `ebad3fd` — Make an edge drag say where it will land, and offer nodes when it lands nowhere - **Gemeldet von:** admin
admin added the todo-note label 2026-09-12 15:03:49 +02:00
admin closed this issue 2026-09-12 15:03:49 +02:00
admin added this to the Development project 2026-09-13 13:43:29 +02:00
admin moved this to Done in Development on 2026-09-13 13:45:04 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#4