diff --git a/packages/svelte/src/internal/client/runtime.js b/packages/svelte/src/internal/client/runtime.js index e200c6ec32..21abccf38e 100644 --- a/packages/svelte/src/internal/client/runtime.js +++ b/packages/svelte/src/internal/client/runtime.js @@ -1091,7 +1091,7 @@ export function mark_subtree_inert(signal, inert, visited_blocks = new Set()) { if (type === IF_BLOCK) { const condition_effect = block.e; if (condition_effect !== null && block !== current_block) { - mark_subtree_inert(condition_effect, inert); + mark_subtree_inert(condition_effect, inert, visited_blocks); } const consequent_effect = block.ce; if (consequent_effect !== null && block.v) { diff --git a/packages/svelte/src/internal/client/transitions.js b/packages/svelte/src/internal/client/transitions.js index 08d09192d0..7097ffff63 100644 --- a/packages/svelte/src/internal/client/transitions.js +++ b/packages/svelte/src/internal/client/transitions.js @@ -649,12 +649,16 @@ export function trigger_transitions(transitions, target_direction, from) { mark_subtree_inert(effect, false); } else if (target_direction === 'key') { if (direction === 'key') { - transition.p = transition.i(/** @type {DOMRect} */ (from)); + if (!transition.p) { + transition.p = transition.i(/** @type {DOMRect} */ (from)); + } transition.in(); } } else { if (direction === 'out' || direction === 'both') { - transition.p = transition.i(); + if (!transition.p) { + transition.p = transition.i(); + } outros.push(transition.o); } transition.d.inert = true; diff --git a/packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-bidi/_config.js b/packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-bidi/_config.js index 301211dc73..c44f9f974e 100644 --- a/packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-bidi/_config.js +++ b/packages/svelte/tests/runtime-legacy/samples/transition-js-if-block-bidi/_config.js @@ -17,7 +17,7 @@ export default test({ component.visible = false; // @ts-expect-error - assert.equal(global.count, 2); + assert.equal(global.count, 1); raf.tick(500); assert.equal(div.foo, 0.25);