diff --git a/.changeset/chilled-ladybugs-invite.md b/.changeset/chilled-ladybugs-invite.md
new file mode 100644
index 0000000000..3074d919a0
--- /dev/null
+++ b/.changeset/chilled-ladybugs-invite.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: dynamic event delegation for stateful call expressions
diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js
index 84c0ad0ed5..a1ae1fba9a 100644
--- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js
+++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/template.js
@@ -1169,7 +1169,11 @@ function serialize_event_handler(node, { state, visit }) {
} else {
handler = /** @type {Expression} */ (visit(handler));
}
- } else if (handler.type === 'ConditionalExpression' || handler.type === 'LogicalExpression') {
+ } else if (
+ handler.type === 'CallExpression' ||
+ handler.type === 'ConditionalExpression' ||
+ handler.type === 'LogicalExpression'
+ ) {
handler = dynamic_handler();
} else {
handler = /** @type {Expression} */ (visit(handler));
diff --git a/packages/svelte/tests/runtime-runes/samples/dynamic-hof-delegated-event/_config.js b/packages/svelte/tests/runtime-runes/samples/dynamic-hof-delegated-event/_config.js
new file mode 100644
index 0000000000..cb37111379
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/dynamic-hof-delegated-event/_config.js
@@ -0,0 +1,24 @@
+import { flushSync } from 'svelte';
+import { test, ok } from '../../test';
+
+export default test({
+ mode: ['client'],
+ async test({ assert, target, logs }) {
+ const [btn1, btn2, btn3] = target.querySelectorAll('button');
+
+ flushSync(() => {
+ btn1.click();
+ btn2.click();
+ });
+
+ assert.deepEqual(logs, ['AA', 'AB']);
+
+ flushSync(() => {
+ btn3.click();
+ btn1.click();
+ btn2.click();
+ });
+
+ assert.deepEqual(logs, ['AA', 'AB', 'BA', 'BB']);
+ }
+});
diff --git a/packages/svelte/tests/runtime-runes/samples/dynamic-hof-delegated-event/main.svelte b/packages/svelte/tests/runtime-runes/samples/dynamic-hof-delegated-event/main.svelte
new file mode 100644
index 0000000000..9f6f1c1fef
--- /dev/null
+++ b/packages/svelte/tests/runtime-runes/samples/dynamic-hof-delegated-event/main.svelte
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+