From 36fc203eec600691c375e32a15b44a8f6d7b4fdd Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 31 Jan 2024 16:58:06 -0500 Subject: [PATCH] fix: correctly update tweened store initialized with nullish value (#10356) Co-authored-by: Rich Harris --- .changeset/quiet-timers-speak.md | 5 +++++ packages/svelte/src/motion/tweened.js | 3 ++- packages/svelte/tests/motion/test.ts | 10 ++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 .changeset/quiet-timers-speak.md diff --git a/.changeset/quiet-timers-speak.md b/.changeset/quiet-timers-speak.md new file mode 100644 index 0000000000..3de152a4f2 --- /dev/null +++ b/.changeset/quiet-timers-speak.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: correctly update tweened store initialized with nullish value diff --git a/packages/svelte/src/motion/tweened.js b/packages/svelte/src/motion/tweened.js index 35ae4cbfa6..90b6aaa007 100644 --- a/packages/svelte/src/motion/tweened.js +++ b/packages/svelte/src/motion/tweened.js @@ -89,11 +89,12 @@ export function tweened(value, defaults = {}) { * @param {import('./private').TweenedOptions} [opts] */ function set(new_value, opts) { + target_value = new_value; + if (value == null) { store.set((value = new_value)); return Promise.resolve(); } - target_value = new_value; /** @type {import('../internal/client/types').Task | null} */ let previous_task = task; diff --git a/packages/svelte/tests/motion/test.ts b/packages/svelte/tests/motion/test.ts index ea2e5c059e..05971b5cab 100644 --- a/packages/svelte/tests/motion/test.ts +++ b/packages/svelte/tests/motion/test.ts @@ -26,5 +26,15 @@ describe('motion', () => { size.set(100, { duration: 0 }); assert.equal(get(size), 100); }); + + it('updates correctly when initialized with a `null`-ish value', () => { + const size = tweened(undefined as unknown as number, { duration: 0 }); + + size.set(10); + assert.equal(get(size), 10); + + size.update((v) => v + 10); + assert.equal(get(size), 20); + }); }); });