Merge pull request #5361 from xyflow/fix/edge-elevation

Fix/edge elevation
This commit is contained in:
Moritz Klack
2025-06-26 14:36:44 +02:00
committed by GitHub
7 changed files with 109 additions and 8 deletions

View File

@@ -30,21 +30,30 @@ export type GetEdgeZIndexParams = {
elevateOnSelect?: boolean;
};
/**
* Returns the z-index for an edge based on the node it connects and whether it is selected.
* By default, edges are rendered below nodes. This behaviour is different for edges that are
* connected to nodes with a parent, as they are rendered above the parent node.
*/
export function getElevatedEdgeZIndex({
sourceNode,
targetNode,
selected = false,
zIndex = 0,
zIndex,
elevateOnSelect = false,
}: GetEdgeZIndexParams): number {
if (!elevateOnSelect) {
if (zIndex !== undefined) {
return zIndex;
}
const edgeOrConnectedNodeSelected = selected || targetNode.selected || sourceNode.selected;
const selectedZIndex = Math.max(sourceNode.internals.z || 0, targetNode.internals.z || 0, 1000);
const edgeZ = elevateOnSelect && selected ? 1000 : 0;
return zIndex + (edgeOrConnectedNodeSelected ? selectedZIndex : 0);
const nodeZ = Math.max(
sourceNode.parentId ? sourceNode.internals.z : 0,
targetNode.parentId ? targetNode.internals.z : 0
);
return edgeZ + nodeZ;
}
type IsEdgeVisibleParams = {

View File

@@ -232,7 +232,7 @@ function calculateChildXYZ<NodeType extends NodeBase>(
return {
x: absolutePosition.x,
y: absolutePosition.y,
z: parentZ > childZ ? parentZ : childZ,
z: parentZ >= childZ ? parentZ + 1 : childZ,
};
}