diff --git a/.changeset/grumpy-students-drop.md b/.changeset/grumpy-students-drop.md
new file mode 100644
index 000000000000..09e4baf2dd9e
--- /dev/null
+++ b/.changeset/grumpy-students-drop.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: correctly handle action member expression keys
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 a8ac31593498..f43e44e47255 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
@@ -2413,12 +2413,20 @@ export const template_visitors = {
if (node.expression) {
params.push(b.id('$$props'));
}
+ let callee;
+ if (node.name.includes('.')) {
+ const parts = node.name.split('.');
+ callee = serialize_get_binding(b.id(parts[0]), state);
+ for (let i = 1; i < parts.length; i++) {
+ const key = b.key(parts[i]);
+ callee = b.member(callee, key, key.type === 'Literal');
+ }
+ } else {
+ callee = serialize_get_binding(b.id(node.name), state);
+ }
/** @type {import('estree').Expression[]} */
- const args = [
- state.node,
- b.arrow(params, b.call(serialize_get_binding(b.id(node.name), state), ...params))
- ];
+ const args = [state.node, b.arrow(params, b.call(callee, ...params))];
if (node.expression) {
args.push(b.thunk(/** @type {import('estree').Expression} */ (visit(node.expression))));
diff --git a/packages/svelte/tests/runtime-legacy/samples/action-object-key/_config.js b/packages/svelte/tests/runtime-legacy/samples/action-object-key/_config.js
new file mode 100644
index 000000000000..59153c4162b1
--- /dev/null
+++ b/packages/svelte/tests/runtime-legacy/samples/action-object-key/_config.js
@@ -0,0 +1,10 @@
+import { test } from '../../test';
+
+export default test({
+ html: `
+ Text
+ `,
+ ssrHtml: `
+ Text
+ `
+});
diff --git a/packages/svelte/tests/runtime-legacy/samples/action-object-key/main.svelte b/packages/svelte/tests/runtime-legacy/samples/action-object-key/main.svelte
new file mode 100644
index 000000000000..67f5e28ac401
--- /dev/null
+++ b/packages/svelte/tests/runtime-legacy/samples/action-object-key/main.svelte
@@ -0,0 +1,4 @@
+
+Text