diff --git a/packages/editor/src/lib/primitives/Vec.ts b/packages/editor/src/lib/primitives/Vec.ts index bd0f0373f..82bf47395 100644 --- a/packages/editor/src/lib/primitives/Vec.ts +++ b/packages/editor/src/lib/primitives/Vec.ts @@ -531,6 +531,9 @@ export class Vec { static Average(arr: VecLike[]) { const len = arr.length const avg = new Vec(0, 0) + if (len === 0) { + return avg + } for (let i = 0; i < len; i++) { avg.add(arr[i]) } diff --git a/packages/tldraw/src/lib/tools/SelectTool/childStates/Translating.ts b/packages/tldraw/src/lib/tools/SelectTool/childStates/Translating.ts index 62d54b6bc..dc3c7e1d3 100644 --- a/packages/tldraw/src/lib/tools/SelectTool/childStates/Translating.ts +++ b/packages/tldraw/src/lib/tools/SelectTool/childStates/Translating.ts @@ -213,17 +213,19 @@ export class Translating extends StateNode { protected handleEnd() { const { movingShapes } = this.snapshot - if (this.isCloning) { + if (this.isCloning && movingShapes.length > 0) { const currentAveragePagePoint = Vec.Average( movingShapes.map((s) => this.editor.getShapePageTransform(s.id)!.point()) ) const offset = Vec.Sub(currentAveragePagePoint, this.selectionSnapshot.averagePagePoint) - this.editor.updateInstanceState({ - duplicateProps: { - shapeIds: movingShapes.map((s) => s.id), - offset: { x: offset.x, y: offset.y }, - }, - }) + if (!Vec.IsNaN(offset)) { + this.editor.updateInstanceState({ + duplicateProps: { + shapeIds: movingShapes.map((s) => s.id), + offset: { x: offset.x, y: offset.y }, + }, + }) + } } const changes: TLShapePartial[] = []