diff --git a/.changeset/polite-zoos-melt.md b/.changeset/polite-zoos-melt.md
new file mode 100644
index 0000000000..cfff0e82e4
--- /dev/null
+++ b/.changeset/polite-zoos-melt.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: properly apply static textarea value attribute during CSR
diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js
index adc9ec72dd..0a32e0dd53 100644
--- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js
+++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/RegularElement.js
@@ -240,6 +240,7 @@ export function RegularElement(node, context) {
if (
!is_custom_element &&
!cannot_be_set_statically(attribute.name) &&
+ (name !== 'value' || node.name !== 'textarea') &&
(attribute.value === true || is_text_attribute(attribute)) &&
(name !== 'class' || class_directives.length === 0) &&
(name !== 'style' || style_directives.length === 0)
diff --git a/packages/svelte/tests/runtime-legacy/samples/textarea-value/_config.js b/packages/svelte/tests/runtime-legacy/samples/textarea-value/_config.js
index 06264b653b..30e2633154 100644
--- a/packages/svelte/tests/runtime-legacy/samples/textarea-value/_config.js
+++ b/packages/svelte/tests/runtime-legacy/samples/textarea-value/_config.js
@@ -5,14 +5,19 @@ export default test({
return { foo: 42 };
},
- html: '',
- ssrHtml: '',
+ ssrHtml: ' ',
- test({ assert, component, target }) {
- const textarea = /** @type {HTMLTextAreaElement} */ (target.querySelector('textarea'));
- assert.strictEqual(textarea.value, '42');
+ test({ assert, component, target, variant }) {
+ assert.htmlEqual(
+ target.innerHTML,
+ ` `
+ );
+
+ const [textarea1, textarea2] = target.querySelectorAll('textarea');
+ assert.strictEqual(textarea1.value, '42');
+ assert.strictEqual(textarea2.value, 'static');
component.foo = 43;
- assert.strictEqual(textarea.value, '43');
+ assert.strictEqual(textarea1.value, '43');
}
});
diff --git a/packages/svelte/tests/runtime-legacy/samples/textarea-value/main.svelte b/packages/svelte/tests/runtime-legacy/samples/textarea-value/main.svelte
index 7eaf783f7f..203a3ed039 100644
--- a/packages/svelte/tests/runtime-legacy/samples/textarea-value/main.svelte
+++ b/packages/svelte/tests/runtime-legacy/samples/textarea-value/main.svelte
@@ -2,4 +2,5 @@
export let foo;
-
\ No newline at end of file
+
+