fix: apply transition_in/out to svelte:element with local transition (#8865)

fixes #8233
pull/8872/head
hackape 2 years ago committed by GitHub
parent 1c7ed55385
commit 876f894c64
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,5 @@
---
'svelte': patch
---
fix: apply transition to `<svelte:element>` with local transition

@ -233,6 +233,14 @@ export default class ElementWrapper extends Wrapper {
strip_whitespace,
next_sibling
);
// in the case of `parent_block -> child_dynamic_element_block -> child_dynamic_element`
// `child_dynamic_element_block.add_intro/outro` is called inside `new ElementWrapper()`
// but when `is_local === true` it does not bubble to parent_block
// we manually add transitions back to the parent_block (#8233)
if (node.intro) block.add_intro(node.intro.is_local);
if (node.outro) block.add_outro(node.outro.is_local);
// the original svelte:element is never used for rendering, because
// it gets assigned a child_dynamic_element which is used in all rendering logic.
// so doing all of this on the original svelte:element will just cause double
@ -266,10 +274,10 @@ export default class ElementWrapper extends Wrapper {
this.event_handlers = this.node.handlers.map(
(event_handler) => new EventHandler(event_handler, this)
);
if (node.intro || node.outro) {
if (node.intro) block.add_intro(node.intro.is_local);
if (node.outro) block.add_outro(node.outro.is_local);
}
if (node.intro) block.add_intro(node.intro.is_local);
if (node.outro) block.add_outro(node.outro.is_local);
if (node.animation) {
block.add_animation();
}

Loading…
Cancel
Save