From 4980631cb1d7add601e658079f2f13f00992d9e7 Mon Sep 17 00:00:00 2001 From: Mark Tolmacs Date: Tue, 24 Jun 2025 18:26:17 +0200 Subject: [PATCH] Fix linear editor bug when both midpoint and endpoint is moved --- packages/element/src/linearElementEditor.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/element/src/linearElementEditor.ts b/packages/element/src/linearElementEditor.ts index b4d62a165..16ec7e72a 100644 --- a/packages/element/src/linearElementEditor.ts +++ b/packages/element/src/linearElementEditor.ts @@ -1475,7 +1475,8 @@ export class LinearElementEditor { if ( otherUpdates?.moveMidPointsWithElement && idx !== 0 && - idx !== points.length - 1 + idx !== points.length - 1 && + !pointUpdates.has(idx) ) { return pointFrom(current[0], current[1]); } @@ -2023,6 +2024,11 @@ const pointDraggingUpdates = ( elements: readonly Ordered[], zoom: AppState["zoom"], ): PointsPositionUpdates => { + const hasMidPoints = + selectedPointsIndices.filter( + (_, idx) => idx > 0 && idx < element.points.length - 1, + ).length > 0; + return new Map( selectedPointsIndices.map((pointIndex) => { let newPointPosition: LocalPoint = @@ -2039,7 +2045,10 @@ const pointDraggingUpdates = ( element.points[pointIndex][1] + deltaY, ); - if (pointIndex === 0 || pointIndex === element.points.length - 1) { + if ( + !hasMidPoints && + (pointIndex === 0 || pointIndex === element.points.length - 1) + ) { const [, , , , cx, cy] = getElementAbsoluteCoords( element, elementsMap,