|
|
|
@ -28,15 +28,17 @@ let outros;
|
|
|
|
|
|
|
|
|
|
export function group_outros() {
|
|
|
|
|
outros = {
|
|
|
|
|
remaining: 0,
|
|
|
|
|
callbacks: []
|
|
|
|
|
r: 0, // remaining outros
|
|
|
|
|
c: [], // callbacks
|
|
|
|
|
p: outros // parent group
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function check_outros() {
|
|
|
|
|
if (!outros.remaining) {
|
|
|
|
|
run_all(outros.callbacks);
|
|
|
|
|
if (!outros.r) {
|
|
|
|
|
run_all(outros.c);
|
|
|
|
|
}
|
|
|
|
|
outros = outros.p;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function transition_in(block, local?: 0 | 1) {
|
|
|
|
@ -51,7 +53,7 @@ export function transition_out(block, local: 0 | 1, detach: 0 | 1, callback) {
|
|
|
|
|
if (outroing.has(block)) return;
|
|
|
|
|
outroing.add(block);
|
|
|
|
|
|
|
|
|
|
outros.callbacks.push(() => {
|
|
|
|
|
outros.c.push(() => {
|
|
|
|
|
outroing.delete(block);
|
|
|
|
|
if (callback) {
|
|
|
|
|
if (detach) block.d(1);
|
|
|
|
@ -153,7 +155,7 @@ export function create_out_transition(node: Element & ElementCSSInlineStyle, fn:
|
|
|
|
|
|
|
|
|
|
const group = outros;
|
|
|
|
|
|
|
|
|
|
group.remaining += 1;
|
|
|
|
|
group.r += 1;
|
|
|
|
|
|
|
|
|
|
function go() {
|
|
|
|
|
const {
|
|
|
|
@ -178,10 +180,10 @@ export function create_out_transition(node: Element & ElementCSSInlineStyle, fn:
|
|
|
|
|
|
|
|
|
|
dispatch(node, false, 'end');
|
|
|
|
|
|
|
|
|
|
if (!--group.remaining) {
|
|
|
|
|
if (!--group.r) {
|
|
|
|
|
// this will result in `end()` being called,
|
|
|
|
|
// so we don't need to clean up here
|
|
|
|
|
run_all(group.callbacks);
|
|
|
|
|
run_all(group.c);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
@ -266,7 +268,7 @@ export function create_bidirectional_transition(node: Element & ElementCSSInline
|
|
|
|
|
if (!b) {
|
|
|
|
|
// @ts-ignore todo: improve typings
|
|
|
|
|
program.group = outros;
|
|
|
|
|
outros.remaining += 1;
|
|
|
|
|
outros.r += 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (running_program) {
|
|
|
|
@ -309,7 +311,7 @@ export function create_bidirectional_transition(node: Element & ElementCSSInline
|
|
|
|
|
clear_animation();
|
|
|
|
|
} else {
|
|
|
|
|
// outro — needs to be coordinated
|
|
|
|
|
if (!--running_program.group.remaining) run_all(running_program.group.callbacks);
|
|
|
|
|
if (!--running_program.group.r) run_all(running_program.group.c);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|