@@ -162,8 +162,8 @@ export default class ElementWrapper extends Wrapper {
162
162
this . bindings = this . node . bindings . map ( binding => new Binding ( block , binding , this ) ) ;
163
163
164
164
if ( node . intro || node . outro ) {
165
- if ( node . intro ) block . addIntro ( ) ;
166
- if ( node . outro ) block . addOutro ( ) ;
165
+ if ( node . intro ) block . addIntro ( node . intro . is_local ) ;
166
+ if ( node . outro ) block . addOutro ( node . outro . is_local ) ;
167
167
}
168
168
169
169
if ( node . animation ) {
@@ -622,17 +622,34 @@ export default class ElementWrapper extends Wrapper {
622
622
623
623
const fn = component . qualify ( intro . name ) ;
624
624
625
- block . builders . intro . addBlock ( deindent `
625
+ const intro_block = deindent `
626
626
@add_render_callback(() => {
627
627
if (!${ name } ) ${ name } = @create_bidirectional_transition(${ this . var } , ${ fn } , ${ snippet } , true);
628
628
${ name } .run(1);
629
629
});
630
- ` ) ;
630
+ ` ;
631
631
632
- block . builders . outro . addBlock ( deindent `
632
+ const outro_block = deindent `
633
633
if (!${ name } ) ${ name } = @create_bidirectional_transition(${ this . var } , ${ fn } , ${ snippet } , false);
634
634
${ name } .run(0);
635
- ` ) ;
635
+ ` ;
636
+
637
+ if ( intro . is_local ) {
638
+ block . builders . intro . addBlock ( deindent `
639
+ if (#local) {
640
+ ${ intro_block }
641
+ }
642
+ ` ) ;
643
+
644
+ block . builders . outro . addBlock ( deindent `
645
+ if (#local) {
646
+ ${ outro_block }
647
+ }
648
+ ` ) ;
649
+ } else {
650
+ block . builders . intro . addBlock ( intro_block ) ;
651
+ block . builders . outro . addBlock ( outro_block ) ;
652
+ }
636
653
637
654
block . builders . destroy . addConditional ( 'detach' , `if (${ name } ) ${ name } .end();` ) ;
638
655
}
@@ -649,25 +666,37 @@ export default class ElementWrapper extends Wrapper {
649
666
650
667
const fn = component . qualify ( intro . name ) ;
651
668
669
+ let intro_block ;
670
+
652
671
if ( outro ) {
653
- block . builders . intro . addBlock ( deindent `
672
+ intro_block = deindent `
654
673
@add_render_callback(() => {
655
674
if (!${ introName } ) ${ introName } = @create_in_transition(${ this . var } , ${ fn } , ${ snippet } );
656
675
${ introName } .start();
657
676
});
658
- ` ) ;
677
+ ` ;
659
678
660
679
block . builders . outro . addLine ( `if (${ introName } ) ${ introName } .invalidate()` ) ;
661
680
} else {
662
- block . builders . intro . addBlock ( deindent `
681
+ intro_block = deindent `
663
682
if (!${ introName } ) {
664
683
@add_render_callback(() => {
665
684
${ introName } = @create_in_transition(${ this . var } , ${ fn } , ${ snippet } );
666
685
${ introName } .start();
667
686
});
668
687
}
669
- ` ) ;
688
+ ` ;
689
+ }
690
+
691
+ if ( intro . is_local ) {
692
+ intro_block = deindent `
693
+ if (#local) {
694
+ ${ intro_block }
695
+ }
696
+ ` ;
670
697
}
698
+
699
+ block . builders . intro . addBlock ( intro_block ) ;
671
700
}
672
701
673
702
if ( outro ) {
@@ -684,9 +713,19 @@ export default class ElementWrapper extends Wrapper {
684
713
685
714
// TODO hide elements that have outro'd (unless they belong to a still-outroing
686
715
// group) prior to their removal from the DOM
687
- block . builders . outro . addBlock ( deindent `
716
+ let outro_block = deindent `
688
717
${ outroName } = @create_out_transition(${ this . var } , ${ fn } , ${ snippet } );
689
- ` ) ;
718
+ ` ;
719
+
720
+ if ( outro_block ) {
721
+ outro_block = deindent `
722
+ if (#local) {
723
+ ${ outro_block }
724
+ }
725
+ ` ;
726
+ }
727
+
728
+ block . builders . outro . addBlock ( outro_block ) ;
690
729
691
730
block . builders . destroy . addConditional ( 'detach' , `if (${ outroName } ) ${ outroName } .end();` ) ;
692
731
}
0 commit comments