1- /** @import { EachItem, EachState, Effect, MaybeSource, Source, TemplateNode, TransitionManager, Value } from '#client' */
1+ /** @import { EachItem, EachState, Effect, EffectNodes, MaybeSource, Source, TemplateNode, TransitionManager, Value } from '#client' */
22/** @import { Batch } from '../../reactivity/batch.js'; */
33import {
44 EACH_INDEX_REACTIVE ,
@@ -43,18 +43,6 @@ import { DEV } from 'esm-env';
4343import { derived_safe_equal } from '../../reactivity/deriveds.js' ;
4444import { current_batch } from '../../reactivity/batch.js' ;
4545
46- /**
47- * The row of a keyed each block that is currently updating. We track this
48- * so that `animate:` directives have something to attach themselves to
49- * @type {EachItem | null }
50- */
51- export let current_each_item = null ;
52-
53- /** @param {EachItem | null } item */
54- export function set_current_each_item ( item ) {
55- current_each_item = item ;
56- }
57-
5846/**
5947 * @param {any } _
6048 * @param {number } i
@@ -395,7 +383,7 @@ function reconcile(state, array, anchor, flags, get_key) {
395383 // offscreen == coming in now, no animation in that case,
396384 // else this would happen https://github.com/sveltejs/svelte/issues/17181
397385 if ( item . o ) {
398- item . a ?. measure ( ) ;
386+ item . e . nodes ?. a ?. measure ( ) ;
399387 ( to_animate ??= new Set ( ) ) . add ( item ) ;
400388 }
401389 }
@@ -430,7 +418,7 @@ function reconcile(state, array, anchor, flags, get_key) {
430418 if ( ( item . e . f & INERT ) !== 0 ) {
431419 resume_effect ( item . e ) ;
432420 if ( is_animated ) {
433- item . a ?. unfix ( ) ;
421+ item . e . nodes ?. a ?. unfix ( ) ;
434422 ( to_animate ??= new Set ( ) ) . delete ( item ) ;
435423 }
436424 }
@@ -527,11 +515,11 @@ function reconcile(state, array, anchor, flags, get_key) {
527515
528516 if ( is_animated ) {
529517 for ( i = 0 ; i < destroy_length ; i += 1 ) {
530- to_destroy [ i ] . a ?. measure ( ) ;
518+ to_destroy [ i ] . e . nodes ?. a ?. measure ( ) ;
531519 }
532520
533521 for ( i = 0 ; i < destroy_length ; i += 1 ) {
534- to_destroy [ i ] . a ?. fix ( ) ;
522+ to_destroy [ i ] . e . nodes ?. a ?. fix ( ) ;
535523 }
536524 }
537525
@@ -555,7 +543,7 @@ function reconcile(state, array, anchor, flags, get_key) {
555543 queue_micro_task ( ( ) => {
556544 if ( to_animate === undefined ) return ;
557545 for ( item of to_animate ) {
558- item . a ?. apply ( ) ;
546+ item . e . nodes ?. a ?. apply ( ) ;
559547 }
560548 } ) ;
561549 }
@@ -574,7 +562,6 @@ function reconcile(state, array, anchor, flags, get_key) {
574562 * @returns {EachItem }
575563 */
576564function create_item ( anchor , prev , value , key , index , render_fn , flags , get_collection ) {
577- var previous_each_item = current_each_item ;
578565 var reactive = ( flags & EACH_ITEM_REACTIVE ) !== 0 ;
579566 var mutable = ( flags & EACH_ITEM_IMMUTABLE ) === 0 ;
580567
@@ -596,35 +583,28 @@ function create_item(anchor, prev, value, key, index, render_fn, flags, get_coll
596583 i,
597584 v,
598585 k : key ,
599- a : null ,
600586 // @ts -expect-error
601587 e : null ,
602588 o : false ,
603589 prev,
604590 next : null
605591 } ;
606592
607- current_each_item = item ;
608-
609- try {
610- if ( anchor === null ) {
611- var fragment = document . createDocumentFragment ( ) ;
612- fragment . append ( ( anchor = create_text ( ) ) ) ;
613- }
614-
615- item . e = branch ( ( ) => render_fn ( /** @type {Node } */ ( anchor ) , v , i , get_collection ) ) ;
593+ if ( anchor === null ) {
594+ var fragment = document . createDocumentFragment ( ) ;
595+ fragment . append ( ( anchor = create_text ( ) ) ) ;
596+ }
616597
617- if ( prev !== null ) {
618- // we only need to set `prev.next = item`, because
619- // `item.prev = prev` was set on initialization.
620- // the effects themselves are already linked
621- prev . next = item ;
622- }
598+ item . e = branch ( ( ) => render_fn ( /** @type {Node } */ ( anchor ) , v , i , get_collection ) ) ;
623599
624- return item ;
625- } finally {
626- current_each_item = previous_each_item ;
600+ if ( prev !== null ) {
601+ // we only need to set `prev.next = item`, because
602+ // `item.prev = prev` was set on initialization.
603+ // the effects themselves are already linked
604+ prev . next = item ;
627605 }
606+
607+ return item ;
628608}
629609
630610/**
@@ -633,10 +613,12 @@ function create_item(anchor, prev, value, key, index, render_fn, flags, get_coll
633613 * @param {Text | Element | Comment } anchor
634614 */
635615function move ( item , next , anchor ) {
636- var end = item . next ? /** @type {TemplateNode } */ ( item . next . e . nodes_start ) : anchor ;
616+ if ( ! item . e . nodes ) return ;
617+
618+ var end = item . next ? /** @type {EffectNodes } */ ( item . next . e . nodes ) . start : anchor ;
637619
638- var dest = next ? /** @type {TemplateNode } */ ( next . e . nodes_start ) : anchor ;
639- var node = /** @type {TemplateNode } */ ( item . e . nodes_start ) ;
620+ var dest = next ? /** @type {EffectNodes } */ ( next . e . nodes ) . start : anchor ;
621+ var node = /** @type {TemplateNode } */ ( item . e . nodes . start ) ;
640622
641623 while ( node !== null && node !== end ) {
642624 var next_node = /** @type {TemplateNode } */ ( get_next_sibling ( node ) ) ;
0 commit comments