@angular/cdk 21.2.0-next.3 → 21.2.0-next.4
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
|
-
|
|
421
|
-
|
|
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
|
-
|
|
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;
|