anchor.diff:    selector: '[autoDismissable]:not(material-expansionpanel)',
   )
   class AutoDismissDirective {
  -  final Stream _click;
  +  final Stream _dismissEvents;
     final NgZone _zone;
   
     AutoDismissDirective(HtmlElement element, this._zone)
  -      : _click = triggersOutside(element);
  +      : _dismissEvents = triggersOutside(element);
   
  -  bool _ignoreClicks = false;
  +  bool _ignoreEvents = false;
     bool _autoDismissable = false;
     bool get autoDismissable => _autoDismissable;
   
  
positive.code:   set autoDismissable(bool b) {
      _autoDismissable = b;
  
      // If a click set autoDismissable to `true`, then we don't want the same
      // click to dismiss right away. Stop listening for clicks until we see a
      // click event, or until the next event loop.
      _ignoreClicks = _autoDismissable;
      _click.first.then(_listenForClicks);
      // Run the timer outside of Angular so that it doesn't trigger a new digest
      // cycle.
      _zone.runOutsideAngular(() => Timer.run(_listenForClicks));
    }
  
    /// Event which is published when the user clicks outside of the element.
    @Output()
    Stream get dismiss => _click.where((_) => _autoDismissable && !_ignoreClicks);
  
    _listenForClicks([_]) => _ignoreClicks = false;
  }
  
negative.code: import 'package:angular/angular.dart';
  import 'package:angular_components/utils/browser/events/events.dart';
  
  /// A directive that publishes a (dismiss) event when a focus, click or mouseup
  /// event occurs outside of it.
  ///
  /// Note: For [MaterialExpansionPanel] please consider using the dedicated
  ///       directive [MaterialExpansionPanelAutoDismiss].
  ///
  /// Note: When popups close they automatically re-focus the trigger element
  ///       which will call dismiss. In this case please follow best practice and
  ///       set [autoDismissable] to be the visibility of the popup itself.
  ///
  /// __Example Usage:__
  ///
  