@angular/cdk 21.1.3 → 21.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -289,6 +289,7 @@ class OverlayConfig {
289
289
  direction;
290
290
  disposeOnNavigation = false;
291
291
  usePopover;
292
+ eventPredicate;
292
293
  constructor(config) {
293
294
  if (config) {
294
295
  const configKeys = Object.keys(config);
@@ -365,6 +366,15 @@ class BaseOverlayDispatcher {
365
366
  this.detach();
366
367
  }
367
368
  }
369
+ canReceiveEvent(overlayRef, event, stream) {
370
+ if (stream.observers.length < 1) {
371
+ return false;
372
+ }
373
+ if (overlayRef.eventPredicate) {
374
+ return overlayRef.eventPredicate(event);
375
+ }
376
+ return true;
377
+ }
368
378
  static ɵfac = i0.ɵɵngDeclareFactory({
369
379
  minVersion: "12.0.0",
370
380
  version: "21.0.3",
@@ -417,8 +427,9 @@ class OverlayKeyboardDispatcher extends BaseOverlayDispatcher {
417
427
  _keydownListener = event => {
418
428
  const overlays = this._attachedOverlays;
419
429
  for (let i = overlays.length - 1; i > -1; i--) {
420
- if (overlays[i]._keydownEvents.observers.length > 0) {
421
- this._ngZone.run(() => overlays[i]._keydownEvents.next(event));
430
+ const overlayRef = overlays[i];
431
+ if (this.canReceiveEvent(overlayRef, event, overlayRef._keydownEvents)) {
432
+ this._ngZone.run(() => overlayRef._keydownEvents.next(event));
422
433
  break;
423
434
  }
424
435
  }
@@ -498,13 +509,13 @@ class OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {
498
509
  const overlays = this._attachedOverlays.slice();
499
510
  for (let i = overlays.length - 1; i > -1; i--) {
500
511
  const overlayRef = overlays[i];
501
- if (overlayRef._outsidePointerEvents.observers.length < 1 || !overlayRef.hasAttached()) {
512
+ const outsidePointerEvents = overlayRef._outsidePointerEvents;
513
+ if (!overlayRef.hasAttached() || !this.canReceiveEvent(overlayRef, event, outsidePointerEvents)) {
502
514
  continue;
503
515
  }
504
516
  if (containsPierceShadowDom(overlayRef.overlayElement, target) || containsPierceShadowDom(overlayRef.overlayElement, origin)) {
505
517
  break;
506
518
  }
507
- const outsidePointerEvents = overlayRef._outsidePointerEvents;
508
519
  if (this._ngZone) {
509
520
  this._ngZone.run(() => outsidePointerEvents.next(event));
510
521
  } else {
@@ -757,6 +768,9 @@ class OverlayRef {
757
768
  get hostElement() {
758
769
  return this._host;
759
770
  }
771
+ get eventPredicate() {
772
+ return this._config?.eventPredicate || null;
773
+ }
760
774
  attach(portal) {
761
775
  if (this._disposed) {
762
776
  return null;