diff --git a/.changeset/thirty-impalas-repair.md b/.changeset/thirty-impalas-repair.md new file mode 100644 index 0000000000..9e909e9ed2 --- /dev/null +++ b/.changeset/thirty-impalas-repair.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: adjust event delegation heuristics diff --git a/packages/svelte/src/compiler/phases/2-analyze/index.js b/packages/svelte/src/compiler/phases/2-analyze/index.js index 9878561349..5e8ba056ba 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/index.js +++ b/packages/svelte/src/compiler/phases/2-analyze/index.js @@ -175,7 +175,7 @@ function get_delegated_event(node, context) { // Bail-out if we reference anything from the EachBlock (for now) that mutates in non-runes mode, ((!context.state.analysis.runes && binding.kind === 'each') || // or any normal not reactive bindings that are mutated. - (binding.kind === 'normal' && context.state.analysis.runes) || + binding.kind === 'normal' || // or any reactive imports (those are rewritten) (can only happen in legacy mode) (binding.kind === 'state' && binding.declaration_kind === 'import')) && binding.mutated diff --git a/packages/svelte/tests/runtime-legacy/samples/event-handler-mutation-scope/_config.js b/packages/svelte/tests/runtime-legacy/samples/event-handler-mutation-scope/_config.js new file mode 100644 index 0000000000..96e5edba1f --- /dev/null +++ b/packages/svelte/tests/runtime-legacy/samples/event-handler-mutation-scope/_config.js @@ -0,0 +1,21 @@ +import { flushSync } from 'svelte'; +import { ok, test } from '../../test'; + +export default test({ + test({ assert, component, target, window }) { + const button = target.querySelector('button'); + ok(button); + + flushSync(() => { + button.click(); + }); + + assert.deepEqual(component.log, ['1 - 1']); + + flushSync(() => { + button.click(); + }); + + assert.deepEqual(component.log, ['1 - 1', '2 - 2']); + } +}); diff --git a/packages/svelte/tests/runtime-legacy/samples/event-handler-mutation-scope/main.svelte b/packages/svelte/tests/runtime-legacy/samples/event-handler-mutation-scope/main.svelte new file mode 100644 index 0000000000..b7b9f3da0c --- /dev/null +++ b/packages/svelte/tests/runtime-legacy/samples/event-handler-mutation-scope/main.svelte @@ -0,0 +1,16 @@ + + + +{referenced_directly}