diff --git a/packages/svelte/src/internal/client/dom/blocks/each.js b/packages/svelte/src/internal/client/dom/blocks/each.js index 52f477327c..5637f61bf2 100644 --- a/packages/svelte/src/internal/client/dom/blocks/each.js +++ b/packages/svelte/src/internal/client/dom/blocks/each.js @@ -67,34 +67,34 @@ export function index(_, i) { * Pause multiple effects simultaneously, and coordinate their * subsequent destruction. Used in each blocks * @param {EachState} state - * @param {EachItem[]} items + * @param {EachItem[]} to_destroy * @param {null | Node} controlled_anchor */ -function pause_effects(state, items, controlled_anchor) { +function pause_effects(state, to_destroy, controlled_anchor) { /** @type {TransitionManager[]} */ var transitions = []; - var length = items.length; + var length = to_destroy.length; for (var i = 0; i < length; i++) { - pause_children(items[i].e, transitions, true); - } - - var is_controlled = length > 0 && transitions.length === 0 && controlled_anchor !== null; - - // If we have a controlled anchor, it means that the each block is inside a single - // DOM element, so we can apply a fast-path for clearing the contents of the element. - if (is_controlled) { - var parent_node = /** @type {Element} */ ( - /** @type {Element} */ (controlled_anchor).parentNode - ); - clear_text_content(parent_node); - parent_node.append(/** @type {Element} */ (controlled_anchor)); - state.onscreen.clear(); + pause_children(to_destroy[i].e, transitions, true); } run_out_transitions(transitions, () => { + var is_controlled = length > 0 && transitions.length === 0 && controlled_anchor !== null; + + // If we have a controlled anchor, it means that the each block is inside a single + // DOM element, so we can apply a fast-path for clearing the contents of the element. + if (is_controlled) { + var parent_node = /** @type {Element} */ ( + /** @type {Element} */ (controlled_anchor).parentNode + ); + clear_text_content(parent_node); + parent_node.append(/** @type {Element} */ (controlled_anchor)); + state.onscreen.clear(); + } + for (var i = 0; i < length; i++) { - var item = items[i]; + var item = to_destroy[i]; if (!is_controlled) { state.onscreen.delete(item.k); } @@ -103,7 +103,7 @@ function pause_effects(state, items, controlled_anchor) { } }); - link(state, items[0].prev, items[length - 1].next); + link(state, to_destroy[0].prev, to_destroy[length - 1].next); } /**