summaryrefslogtreecommitdiff
path: root/packages/integrations/svelte/client-v5.js
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/svelte/client-v5.js')
-rw-r--r--packages/integrations/svelte/client-v5.js15
1 files changed, 15 insertions, 0 deletions
diff --git a/packages/integrations/svelte/client-v5.js b/packages/integrations/svelte/client-v5.js
index 7a046b5bf..123e544f6 100644
--- a/packages/integrations/svelte/client-v5.js
+++ b/packages/integrations/svelte/client-v5.js
@@ -8,7 +8,10 @@ export default (element) => {
let children = undefined;
let $$slots = undefined;
+ let renderFns = {};
+
for (const [key, value] of Object.entries(slotted)) {
+ // Legacy slot support
$$slots ??= {};
if (key === 'default') {
$$slots.default = true;
@@ -20,6 +23,16 @@ export default (element) => {
render: () => `<astro-slot name="${key}">${value}</astro-slot>`,
}));
}
+ // @render support for Svelte ^5.0
+ if (key === 'default') {
+ renderFns.children = createRawSnippet(() => ({
+ render: () => `<astro-slot>${value}</astro-slot>`,
+ }));
+ } else {
+ renderFns[key] = createRawSnippet(() => ({
+ render: () => `<astro-slot name="${key}">${value}</astro-slot>`,
+ }));
+ }
}
const bootstrap = client !== 'only' ? hydrate : mount;
@@ -28,6 +41,7 @@ export default (element) => {
...props,
children,
$$slots,
+ ...renderFns,
});
} else {
const component = bootstrap(Component, {
@@ -36,6 +50,7 @@ export default (element) => {
...props,
children,
$$slots,
+ ...renderFns,
},
});
existingApplications.set(element, component);