@@ -85,7 +85,6 @@ function pause_effects(items, controlled_anchor, items_map) {
85
85
var item = items [ i ] ;
86
86
if ( ! is_controlled ) {
87
87
items_map . delete ( item . k ) ;
88
- item . o . remove ( ) ;
89
88
link ( item . prev , item . next ) ;
90
89
}
91
90
destroy_effect ( item . e , ! is_controlled ) ;
@@ -182,11 +181,10 @@ export function each(anchor, flags, get_collection, get_key, render_fn, fallback
182
181
break ;
183
182
}
184
183
185
- var child_open = /** @type {Comment } */ ( child_anchor ) ;
186
184
child_anchor = hydrate_anchor ( child_anchor ) ;
187
185
var value = array [ i ] ;
188
186
var key = get_key ( value , i ) ;
189
- item = create_item ( child_open , child_anchor , prev , null , value , key , i , render_fn , flags ) ;
187
+ item = create_item ( child_anchor , prev , null , value , key , i , render_fn , flags ) ;
190
188
state . items . set ( key , item ) ;
191
189
child_anchor = /** @type {Comment } */ ( child_anchor . nextSibling ) ;
192
190
@@ -293,22 +291,9 @@ function reconcile(array, state, anchor, render_fn, flags, get_key) {
293
291
item = items . get ( key ) ;
294
292
295
293
if ( item === undefined ) {
296
- var child_open = empty ( ) ;
297
- var child_anchor = current ? current . o : anchor ;
298
-
299
- child_anchor . before ( child_open ) ;
300
-
301
- prev = create_item (
302
- child_open ,
303
- child_anchor ,
304
- prev ,
305
- prev . next ,
306
- value ,
307
- key ,
308
- i ,
309
- render_fn ,
310
- flags
311
- ) ;
294
+ var child_anchor = current ? get_first_node ( current . e ) : anchor ;
295
+
296
+ prev = create_item ( child_anchor , prev , prev . next , value , key , i , render_fn , flags ) ;
312
297
313
298
items . set ( key , prev ) ;
314
299
@@ -451,7 +436,6 @@ function update_item(item, value, index, type) {
451
436
452
437
/**
453
438
* @template V
454
- * @param {Comment | Text } open
455
439
* @param {Node } anchor
456
440
* @param {import('#client').EachItem | import('#client').EachState } prev
457
441
* @param {import('#client').EachItem | null } next
@@ -462,7 +446,7 @@ function update_item(item, value, index, type) {
462
446
* @param {number } flags
463
447
* @returns {import('#client').EachItem }
464
448
*/
465
- function create_item ( open , anchor , prev , next , value , key , index , render_fn , flags ) {
449
+ function create_item ( anchor , prev , next , value , key , index , render_fn , flags ) {
466
450
var previous_each_item = current_each_item ;
467
451
468
452
try {
@@ -480,7 +464,6 @@ function create_item(open, anchor, prev, next, value, key, index, render_fn, fla
480
464
a : null ,
481
465
// @ts -expect-error
482
466
e : null ,
483
- o : open ,
484
467
prev,
485
468
next
486
469
} ;
@@ -497,16 +480,52 @@ function create_item(open, anchor, prev, next, value, key, index, render_fn, fla
497
480
}
498
481
}
499
482
483
+ /**
484
+ * @param {import('#client').TemplateNode } dom
485
+ * @param {import("#client").Effect } effect
486
+ * @returns {import('#client').TemplateNode }
487
+ */
488
+ function get_adjusted_first_node ( dom , effect ) {
489
+ if ( ( dom . nodeType === 3 && /** @type {Text } */ ( dom ) . data === '' ) || dom . nodeType === 8 ) {
490
+ var adjusted = effect . first ;
491
+ var next ;
492
+ while ( adjusted !== null ) {
493
+ next = adjusted . first ;
494
+ if ( adjusted . dom !== null ) {
495
+ break ;
496
+ } else if ( next === null ) {
497
+ return /** @type {import('#client').TemplateNode } */ ( dom . previousSibling ) ;
498
+ }
499
+ adjusted = next ;
500
+ }
501
+ return get_first_node ( /** @type {import("#client").Effect } */ ( adjusted ) ) ;
502
+ }
503
+ return dom ;
504
+ }
505
+
506
+ /**
507
+ *
508
+ * @param {import('#client').Effect } effect
509
+ * @returns {import('#client').TemplateNode }
510
+ */
511
+ function get_first_node ( effect ) {
512
+ var dom = effect . dom ;
513
+ if ( is_array ( dom ) ) {
514
+ return get_adjusted_first_node ( dom [ 0 ] , effect ) ;
515
+ }
516
+ return get_adjusted_first_node ( /** @type {import('#client').TemplateNode } **/ ( dom ) , effect ) ;
517
+ }
518
+
500
519
/**
501
520
* @param {import('#client').EachItem } item
502
521
* @param {import('#client').EachItem | null } next
503
522
* @param {Text | Element | Comment } anchor
504
523
*/
505
524
function move ( item , next , anchor ) {
506
- var end = item . next ? item . next . o : anchor ;
507
- var dest = next ? next . o : anchor ;
525
+ var end = item . next ? get_first_node ( item . next . e ) : anchor ;
526
+ var dest = next ? get_first_node ( next . e ) : anchor ;
508
527
509
- var node = /** @type { import('#client').TemplateNode } */ ( item . o ) ;
528
+ var node = get_first_node ( item . e ) ;
510
529
511
530
while ( node !== end ) {
512
531
var next_node = /** @type {import('#client').TemplateNode } */ ( node . nextSibling ) ;
0 commit comments