1- import { hydrate , mount , unmount } from 'svelte' ;
2- import { add_snippet_symbol } from 'svelte/internal/client' ;
3-
4- // Allow a slot to be rendered as a snippet (dev validation only)
5- const tagSlotAsSnippet = import . meta. env . DEV ? add_snippet_symbol : ( s ) => s ;
1+ import { createRawSnippet , hydrate , mount , unmount } from 'svelte' ;
62
73export default ( element ) => {
84 return async ( Component , props , slotted , { client } ) => {
@@ -11,11 +7,16 @@ export default (element) => {
117 let children = undefined ;
128 let $$slots = undefined ;
139 for ( const [ key , value ] of Object . entries ( slotted ) ) {
10+ $$slots ??= { } ;
1411 if ( key === 'default' ) {
15- children = createSlotDefinition ( key , value ) ;
12+ $$slots . default = true ;
13+ children = createRawSnippet ( ( ) => ( {
14+ render : ( ) => `<astro-slot>${ value } </astro-slot>` ,
15+ } ) ) ;
1616 } else {
17- $$slots ??= { } ;
18- $$slots [ key ] = createSlotDefinition ( key , value ) ;
17+ $$slots [ key ] = createRawSnippet ( ( ) => ( {
18+ render : ( ) => `<astro-slot name="${ key } ">${ value } </astro-slot>` ,
19+ } ) ) ;
1920 }
2021 }
2122
@@ -33,18 +34,3 @@ export default (element) => {
3334 element . addEventListener ( 'astro:unmount' , ( ) => unmount ( component ) , { once : true } ) ;
3435 } ;
3536} ;
36-
37- function createSlotDefinition ( key , children ) {
38- /**
39- * @param {Comment } $$anchor A comment node for slots in Svelte 5
40- */
41- const fn = ( $$anchor , _$$slotProps ) => {
42- const parent = $$anchor . parentNode ;
43- const el = document . createElement ( 'div' ) ;
44- el . innerHTML = `<astro-slot${
45- key === 'default' ? '' : ` name="${ key } "`
46- } >${ children } </astro-slot>`;
47- parent . insertBefore ( el . children [ 0 ] , $$anchor ) ;
48- } ;
49- return tagSlotAsSnippet ( fn ) ;
50- }
0 commit comments