Skip to content

Commit ed6d7ee

Browse files
authored
wrap-transition-events (#13719)
1 parent 0581e33 commit ed6d7ee

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

.changeset/famous-insects-sort.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
chore: ensure transition events are dispatched without current reaction

packages/svelte/src/internal/client/dom/elements/transitions.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
/** @import { AnimateFn, Animation, AnimationConfig, EachItem, Effect, TransitionFn, TransitionManager } from '#client' */
22
import { noop, is_function } from '../../../shared/utils.js';
33
import { effect } from '../../reactivity/effects.js';
4-
import { active_effect, untrack } from '../../runtime.js';
4+
import {
5+
active_effect,
6+
active_reaction,
7+
set_active_effect,
8+
set_active_reaction,
9+
untrack
10+
} from '../../runtime.js';
511
import { loop } from '../../loop.js';
612
import { should_intro } from '../../render.js';
713
import { current_each_item } from '../blocks/each.js';
@@ -15,7 +21,16 @@ import { queue_micro_task } from '../task.js';
1521
* @returns {void}
1622
*/
1723
function dispatch_event(element, type) {
18-
element.dispatchEvent(new CustomEvent(type));
24+
var previous_reaction = active_reaction;
25+
var previous_effect = active_effect;
26+
set_active_reaction(null);
27+
set_active_effect(null);
28+
try {
29+
element.dispatchEvent(new CustomEvent(type));
30+
} finally {
31+
set_active_reaction(previous_reaction);
32+
set_active_effect(previous_effect);
33+
}
1934
}
2035

2136
/**

0 commit comments

Comments
 (0)