diff --git a/packages/svelte/src/internal/client/reactivity/props.js b/packages/svelte/src/internal/client/reactivity/props.js index b61a9bf430..14c91017c1 100644 --- a/packages/svelte/src/internal/client/reactivity/props.js +++ b/packages/svelte/src/internal/client/reactivity/props.js @@ -10,14 +10,14 @@ import { import { get_descriptor, is_function } from '../../shared/utils.js'; import { mutable_source, set, source, update } from './sources.js'; import { derived, derived_safe_equal } from './deriveds.js'; -import { get, captured_signals, untrack } from '../runtime.js'; +import { get, captured_signals, untrack, active_effect } from '../runtime.js'; import { safe_equals } from './equality.js'; import * as e from '../errors.js'; import { LEGACY_DERIVED_PROP, LEGACY_PROPS, STATE_SYMBOL } from '#client/constants'; import { proxy } from '../proxy.js'; import { capture_store_binding } from './store.js'; import { legacy_mode_flag } from '../../flags/index.js'; -import { teardown } from './effects.js'; +import { component_context } from '../context.js'; /** * @param {((value?: number) => number)} fn @@ -240,8 +240,23 @@ const spread_props_handler = { * @returns {any} */ export function props(...props) { - let destroyed = false; - teardown(() => (destroyed = true)); + let paused = false; + const context = component_context; + if (active_effect) { + (active_effect.transitions ??= []).push({ + is_global: true, + in() { + paused = false; + }, + out(callback) { + paused = true; + callback?.(); + }, + stop() { + paused = true; + } + }); + } return new Proxy( { props, @@ -254,7 +269,7 @@ export function props(...props) { return oldProps; }), get destroyed() { - return destroyed; + return (context?.d ?? false) || paused; } }, spread_props_handler