From 922968f792b6c241fe13fb6919072801832d4617 Mon Sep 17 00:00:00 2001 From: progfay <19568747+progfay@users.noreply.github.com> Date: Fri, 4 Jul 2025 12:08:27 +0900 Subject: [PATCH 1/9] listen pointerleave event in `Stage` --- src/Stage.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Stage.ts b/src/Stage.ts index 71ce4910..7c03a85b 100644 --- a/src/Stage.ts +++ b/src/Stage.ts @@ -58,6 +58,7 @@ const STAGE = 'Stage', [POINTERMOVE, '_pointermove'], [POINTERUP, '_pointerup'], [POINTERCANCEL, '_pointercancel'], + [POINTERLEAVE, '_pointerleave'], [LOSTPOINTERCAPTURE, '_lostpointercapture'], ]; From cb8760771ef760c71287b519bd2c7b0116928a23 Mon Sep 17 00:00:00 2001 From: progfay <19568747+progfay@users.noreply.github.com> Date: Fri, 4 Jul 2025 12:08:46 +0900 Subject: [PATCH 2/9] add test for Stage pointerleave --- test/unit/Stage-test.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/unit/Stage-test.ts b/test/unit/Stage-test.ts index c3d48f73..1a309a48 100644 --- a/test/unit/Stage-test.ts +++ b/test/unit/Stage-test.ts @@ -1223,6 +1223,19 @@ describe('Stage', function () { assert.equal(count, 2); }); + it('stage pointerleave should fire when leaving stage', function () { + var stage = addStage(); + + var stageLeave = 0; + stage.on('pointerleave', function () { + stageLeave += 1; + }); + + stage.fire('pointerleave', undefined, false); + + assert.equal(stageLeave, 1, 'stage pointerleave should fire'); + }); + it('stage pointerleave should not fire when leaving a child', function () { var stage = addStage(); var layer = new Konva.Layer(); From 9670ca4377c7134f797bb8455e8fbd52b6f9fd4c Mon Sep 17 00:00:00 2001 From: Anton Lavrevov Date: Mon, 7 Jul 2025 10:01:04 -0500 Subject: [PATCH 3/9] update CHANGELOG with new version --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c0d05115..00ec2c23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,12 +3,14 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). -## 9.3.21 (not released) +## 9.3.21 (2025-07-07) - Fixed memory leaks on Tween destroy - Fixed incorrect export of stage/layer when internal nodes used buffer canvas for rendering - Fixed incorrect render of cached node when buffer canvas is used - Fixed incorrect path lenth calculations +- Fixed `pointerleave` bubbling +- Added `pointerleave` event in `Stage` ## 9.3.20 (2025-03-20) From 1e253eaa63651b67f7ff3f8ad93ddf9bfb1cea1f Mon Sep 17 00:00:00 2001 From: Anton Lavrevov Date: Mon, 7 Jul 2025 10:01:07 -0500 Subject: [PATCH 4/9] build for 9.3.21 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 77ad4079..e0d10aac 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "konva", - "version": "9.3.20", + "version": "9.3.21", "description": "HTML5 2d canvas library.", "author": "Anton Lavrenov", "files": [ From cad1c0ee0f15068a5a52cd9daae201c7e8bd64e2 Mon Sep 17 00:00:00 2001 From: Anton Lavrevov Date: Mon, 7 Jul 2025 10:01:07 -0500 Subject: [PATCH 5/9] update cdn link From 750484b0ad3e4cf93498c1065a72d1ef778f080e Mon Sep 17 00:00:00 2001 From: Anton Lavrevov Date: Tue, 8 Jul 2025 14:20:25 -0500 Subject: [PATCH 6/9] Fixed possible crash on `node.to()` method. close #1944 --- CHANGELOG.md | 4 ++++ src/Tween.ts | 12 +++++++----- test/unit/Tween-test.ts | 30 ++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00ec2c23..695abcf0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## 9.3.22 (2025-07-08) + +- Fixed possible crash on `node.to()` method + ## 9.3.21 (2025-07-07) - Fixed memory leaks on Tween destroy diff --git a/src/Tween.ts b/src/Tween.ts index c1d61b78..b744e914 100644 --- a/src/Tween.ts +++ b/src/Tween.ts @@ -530,11 +530,13 @@ export class Tween { delete Tween.attrs[nodeId][thisId]; // Clean up parent objects if empty - if (Object.keys(Tween.tweens[nodeId]).length === 0) { - delete Tween.tweens[nodeId]; - } - if (Object.keys(Tween.attrs[nodeId]).length === 0) { - delete Tween.attrs[nodeId]; + if (Tween.tweens[nodeId]) { + if (Object.keys(Tween.tweens[nodeId]).length === 0) { + delete Tween.tweens[nodeId]; + } + if (Object.keys(Tween.attrs[nodeId]).length === 0) { + delete Tween.attrs[nodeId]; + } } } } diff --git a/test/unit/Tween-test.ts b/test/unit/Tween-test.ts index 0b0321fc..dc076029 100644 --- a/test/unit/Tween-test.ts +++ b/test/unit/Tween-test.ts @@ -257,6 +257,34 @@ describe('Tween', function () { }); }); + it('to method double simple usage', function (done) { + var stage = addStage(); + + let finishCount = 0; + const onFinish = () => { + if (finishCount === 2) { + done(); + } + }; + stage.to({ + x: 10, + duration: 0.001, + onFinish: () => { + assert(stage.x() === 10); + finishCount += 1; + onFinish(); + }, + }); + stage.to({ + y: 10, + duration: 0.001, + onFinish: () => { + finishCount += 1; + onFinish(); + }, + }); + }); + it('tween to call update callback', function (done) { var stage = addStage(); var updateCount = 0; @@ -303,6 +331,8 @@ describe('Tween', function () { line.to({ points: [100, 100, 200, 100, 200, 200, 100, 200], + // add another attribute for better test of cleanup + x: 10, duration: 0.1, onFinish: function () { assert.deepEqual( From 871e4746978b185c6f3e8358d2040028fb9ef911 Mon Sep 17 00:00:00 2001 From: Anton Lavrevov Date: Tue, 8 Jul 2025 14:20:40 -0500 Subject: [PATCH 7/9] update CHANGELOG with new version From 082db9cfb8fe65533ebc1dc3951c279e4c5fd031 Mon Sep 17 00:00:00 2001 From: Anton Lavrevov Date: Tue, 8 Jul 2025 14:20:43 -0500 Subject: [PATCH 8/9] build for 9.3.22 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e0d10aac..d34289cf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "konva", - "version": "9.3.21", + "version": "9.3.22", "description": "HTML5 2d canvas library.", "author": "Anton Lavrenov", "files": [ From 464432a2a5e974ba20f2e5cf4f466ca85b3635bf Mon Sep 17 00:00:00 2001 From: Anton Lavrevov Date: Tue, 8 Jul 2025 14:20:43 -0500 Subject: [PATCH 9/9] update cdn link