diff --git a/packages/system/src/utils/store.ts b/packages/system/src/utils/store.ts index fc1e14c1..73b6afc9 100644 --- a/packages/system/src/utils/store.ts +++ b/packages/system/src/utils/store.ts @@ -151,7 +151,7 @@ function updateChildNode( parentLookup: ParentLookup>, options?: UpdateNodesOptions ) { - const { elevateNodesOnSelect, nodeOrigin } = mergeObjects(defaultOptions, options); + const { elevateNodesOnSelect, nodeOrigin, nodeExtent } = mergeObjects(defaultOptions, options); const parentId = node.parentId!; const parentNode = nodeLookup.get(parentId); @@ -165,7 +165,7 @@ function updateChildNode( updateParentLookup(node, parentLookup); const selectedNodeZ = elevateNodesOnSelect ? 1000 : 0; - const { x, y, z } = calculateChildXYZ(node, parentNode, nodeOrigin, selectedNodeZ); + const { x, y, z } = calculateChildXYZ(node, parentNode, nodeOrigin, nodeExtent, selectedNodeZ); const { positionAbsolute } = node.internals; const positionChanged = x !== positionAbsolute.x || y !== positionAbsolute.y; @@ -186,6 +186,7 @@ function calculateChildXYZ( childNode: InternalNodeBase, parentNode: InternalNodeBase, nodeOrigin: NodeOrigin, + nodeExtent: CoordinateExtent, selectedNodeZ: number ) { const { x: parentX, y: parentY } = parentNode.internals.positionAbsolute; @@ -195,7 +196,11 @@ function calculateChildXYZ( ? clampPosition(positionWithOrigin, childNode.extent, childDimensions) : positionWithOrigin; - let absolutePosition = { x: parentX + clampedPosition.x, y: parentY + clampedPosition.y }; + let absolutePosition = clampPosition( + { x: parentX + clampedPosition.x, y: parentY + clampedPosition.y }, + nodeExtent, + childDimensions + ); if (childNode.extent === 'parent') { absolutePosition = clampPositionToParent(absolutePosition, childDimensions, parentNode);