From 044c1a1975e9ed337f3762a7e210d671cfb38b17 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 21 Feb 2024 11:29:18 -0500 Subject: [PATCH] various --- packages/svelte/src/internal/client/render.js | 6 ++++++ packages/svelte/src/internal/client/transitions.js | 13 +++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/svelte/src/internal/client/render.js b/packages/svelte/src/internal/client/render.js index 3ad0d836a5..da46e3e318 100644 --- a/packages/svelte/src/internal/client/render.js +++ b/packages/svelte/src/internal/client/render.js @@ -88,6 +88,8 @@ const all_registerd_events = new Set(); /** @type {Set<(events: Array) => void>} */ const root_event_handles = new Set(); +export let run_transitions = true; + /** * @param {string} html * @param {boolean} return_fragment @@ -2547,6 +2549,8 @@ function _mount(Component, options) { const container = options.target; const block = create_root_block(options.intro || false); + run_transitions = options.intro ?? false; + /** @type {Exports} */ // @ts-expect-error will be defined because the render effect runs synchronously let component = undefined; @@ -2579,6 +2583,8 @@ function _mount(Component, options) { const bound_event_listener = handle_event_propagation.bind(null, container); const bound_document_event_listener = handle_event_propagation.bind(null, document); + run_transitions = true; + /** @param {Array} events */ const event_handle = (events) => { for (let i = 0; i < events.length; i++) { diff --git a/packages/svelte/src/internal/client/transitions.js b/packages/svelte/src/internal/client/transitions.js index 50654e3e9d..1bdb3b28fe 100644 --- a/packages/svelte/src/internal/client/transitions.js +++ b/packages/svelte/src/internal/client/transitions.js @@ -18,6 +18,7 @@ import { managed_pre_effect, user_effect } from './reactivity/computations.js'; +import { run_transitions } from './render.js'; import { current_block, current_effect, @@ -530,7 +531,8 @@ export function bind_transition(element, get_fn, get_params, direction, global) current_options ??= get_fn()(element, get_params?.(), { direction }); - if (!current_options) { + if (!current_options?.duration) { + current_options = null; callback?.(); return; } @@ -563,6 +565,7 @@ export function bind_transition(element, get_fn, get_params, direction, global) .catch(noop); } else { // TODO timer + current_options = null; } } }; @@ -571,9 +574,11 @@ export function bind_transition(element, get_fn, get_params, direction, global) if (direction === 'in' || direction === 'both') { (effect.in ??= []).push(transition); - user_effect(() => { - transition.to(1); - }); + if (run_transitions) { + user_effect(() => { + untrack(() => transition.to(1)); + }); + } } if (direction === 'out' || direction === 'both') {