@@ -76,6 +76,15 @@ export const addNodeHtml = ( n, val ) =>
7676 : append ( val ) ;
7777}
7878export const setNodeHtml = ( n , val ) => { clear ( n ) ; addNodeHtml ( n , val ) } ;
79+ function assignedNodesLight ( f )
80+ { if ( f ?. flatten )
81+ { const r = [ ] ;
82+ const flatten = n => n . CssChainAssignedNodes ? each ( n . CssChainAssignedNodes , flatten ) : r . push ( n ) ;
83+ each ( this . CssChainAssignedNodes , flatten ) ;
84+ return r ;
85+ }
86+ return this . CssChainAssignedNodes ;
87+ }
7988
8089 class
8190CssChainT extends Array
@@ -131,42 +140,47 @@ CssChainT extends Array
131140 }
132141 template ( n )
133142 { if ( n === undefined )
134- {
135- const $s = this . $ ( '[slot]' )
136- . forEach ( n => this . $ ( n . slot ? `slot[name="${ n . slot } "]` :'slot:not([name])' ) . length
137- || n . parentNode . insertBefore ( nodeProp ( 'slot' , 'name' , n . slot ) , n ) ) ;
138- $s . remove ( ) ;
139- n = createEl ( 'template' ) ;
140- this . childNodes . forEach ( c => n . content . append ( c ) ) ;
141- this . append ( $s ) ;
142- } else if ( isStr ( n ) )
143- { n = this . $ ( n ) ;
144- n . remove ( ) ;
145- }
143+ {
144+ const $s = this . $ ( '[slot]' )
145+ . forEach ( n => this . $ ( n . slot ? `slot[name="${ n . slot } "]` :'slot:not([name])' ) . length
146+ || n . parentNode . insertBefore ( nodeProp ( 'slot' , 'name' , n . slot ) , n ) ) ;
147+ $s . remove ( ) ;
148+ n = createEl ( 'template' ) ;
149+ this . childNodes . forEach ( c => n . content . append ( c ) ) ;
150+ this . append ( $s ) ;
151+ } else if ( isStr ( n ) )
152+ { n = this . $ ( n ) ;
153+ n . remove ( ) ;
154+ }
146155 n = n . cloneNode ( true ) ;
147156 const content = n . content ? n . content . childNodes : n ;
148157 const c = CssChain ( content ) ;
149158 c . slots ( ) . forEach ( s =>
150159 { const v = this . children . filter ( n => n . slot === s . name ) ;
151160 const p = s . parentNode ;
161+ s . CssChainAssignedNodes = [ ] ;
162+ s . assignedNodes = s . assignedElements = assignedNodesLight ;
163+ const insert = ( n , r ) =>
164+ { const k = p . insertBefore ( n , r ) ;
165+ n . CssChainAssignedSlot || s . CssChainAssignedNodes . push ( n ) ;
166+ n . CssChainAssignedSlot = s ;
167+ return k ;
168+ } ;
152169 each ( v , e => e . cssChainSlot = s ) ;
153- if ( s . id === 's3' ) {
154- debugger ;
155- }
156170 const injectInSlot = ( e , s ) =>
157171 {
158172 if ( e . tagName === 'SLOT' )
159173 { const q = e . parentNode ;
160- const r = p . insertBefore ( e , s ) ;
174+ const r = insert ( e , s ) ;
161175 each ( q . querySelectorAll ( `[slot="${ e . name } "]` ) , n => p . insertBefore ( n , r ) ) ;
162176 } else
163- p . insertBefore ( e , s ) ;
177+ insert ( e , s ) ;
164178 }
165179 v . length ? each ( v , e => injectInSlot ( e , s ) )
166180 : s . name === "" &&
167181 each ( [ ...( n . content ? n . content . childNodes : n . childNodes ) ]
168182 . filter ( e => ! e . hasArttribute || e . hasArttribute ( 'slot' ) )
169- , e => p . insertBefore ( e , s ) ) ;
183+ , e => insert ( e , s ) ) ;
170184 if ( v . length ) s . hidden = true ;
171185 } ) ;
172186 this . children . filter ( e => ! e . cssChainSlot ) . remove ( ) ;
0 commit comments