From 68b87936215be219a5237b98fe1bda4917c4d375 Mon Sep 17 00:00:00 2001 From: hackape Date: Tue, 25 Jul 2023 09:32:09 +0800 Subject: [PATCH] fix: allow child element with slot attribute within svelte:element --- .changeset/nine-houses-flow.md | 5 +++++ packages/svelte/src/compiler/compile/nodes/Element.js | 4 +++- .../runtime/samples/slot-in-dynamic-element/_config.js | 7 +++++++ .../runtime/samples/slot-in-dynamic-element/main.svelte | 7 +++++++ 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 .changeset/nine-houses-flow.md create mode 100644 packages/svelte/test/runtime/samples/slot-in-dynamic-element/_config.js create mode 100644 packages/svelte/test/runtime/samples/slot-in-dynamic-element/main.svelte diff --git a/.changeset/nine-houses-flow.md b/.changeset/nine-houses-flow.md new file mode 100644 index 000000000000..d3783c6c1cc4 --- /dev/null +++ b/.changeset/nine-houses-flow.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: allow child element with slot attribute within svelte:element diff --git a/packages/svelte/src/compiler/compile/nodes/Element.js b/packages/svelte/src/compiler/compile/nodes/Element.js index 6715eb1e5dd3..44cfbc65a7bc 100644 --- a/packages/svelte/src/compiler/compile/nodes/Element.js +++ b/packages/svelte/src/compiler/compile/nodes/Element.js @@ -1414,7 +1414,9 @@ const regex_minus_sign = /-/; function within_custom_element(parent) { while (parent) { if (parent.type === 'InlineComponent') return false; - if (parent.type === 'Element' && regex_minus_sign.test(parent.name)) return true; + if (parent.type === 'Element') { + if (regex_minus_sign.test(parent.name) || parent.is_dynamic_element) return true; + } parent = parent.parent; } return false; diff --git a/packages/svelte/test/runtime/samples/slot-in-dynamic-element/_config.js b/packages/svelte/test/runtime/samples/slot-in-dynamic-element/_config.js new file mode 100644 index 000000000000..589e57d78e04 --- /dev/null +++ b/packages/svelte/test/runtime/samples/slot-in-dynamic-element/_config.js @@ -0,0 +1,7 @@ +export default { + html: ` + +
header header header
+
+ ` +}; diff --git a/packages/svelte/test/runtime/samples/slot-in-dynamic-element/main.svelte b/packages/svelte/test/runtime/samples/slot-in-dynamic-element/main.svelte new file mode 100644 index 000000000000..38d7cd233e80 --- /dev/null +++ b/packages/svelte/test/runtime/samples/slot-in-dynamic-element/main.svelte @@ -0,0 +1,7 @@ + + + +
header header header
+
\ No newline at end of file