@ -25,7 +25,7 @@ export function key(node, get_key, render_fn) {
/** @type {V | typeof UNINITIALIZED} */
/** @type {V | typeof UNINITIALIZED} */
var key = UNINITIALIZED ;
var key = UNINITIALIZED ;
/** @type {Effect } */
/** @type {Effect | null } */
var effect ;
var effect ;
/** @type {Effect} */
/** @type {Effect} */
@ -37,10 +37,6 @@ export function key(node, get_key, render_fn) {
var changed = is _runes ( ) ? not _equal : safe _not _equal ;
var changed = is _runes ( ) ? not _equal : safe _not _equal ;
function commit ( ) {
function commit ( ) {
if ( effect ) {
pause _effect ( effect ) ;
}
if ( offscreen _fragment !== null ) {
if ( offscreen _fragment !== null ) {
// remove the anchor
// remove the anchor
/** @type {Text} */ ( offscreen _fragment . lastChild ) . remove ( ) ;
/** @type {Text} */ ( offscreen _fragment . lastChild ) . remove ( ) ;
@ -54,6 +50,12 @@ export function key(node, get_key, render_fn) {
block ( ( ) => {
block ( ( ) => {
if ( changed ( key , ( key = get _key ( ) ) ) ) {
if ( changed ( key , ( key = get _key ( ) ) ) ) {
// Pause and cleanup the old effect before creating a new one
// This ensures proper component lifecycle ordering (destroy -> create -> mount)
if ( effect ) {
pause _effect ( effect ) ;
effect = null ;
}
var target = anchor ;
var target = anchor ;
var defer = should _defer _append ( ) ;
var defer = should _defer _append ( ) ;
@ -63,6 +65,7 @@ export function key(node, get_key, render_fn) {
offscreen _fragment . append ( ( target = create _text ( ) ) ) ;
offscreen _fragment . append ( ( target = create _text ( ) ) ) ;
}
}
// Create the new effect with the component
pending _effect = branch ( ( ) => render _fn ( target ) ) ;
pending _effect = branch ( ( ) => render _fn ( target ) ) ;
if ( defer ) {
if ( defer ) {