@angular/cdk 13.2.3 → 13.2.6

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.
Files changed (60) hide show
  1. package/drag-drop/drag-ref.d.ts +3 -1
  2. package/drag-drop/parent-position-tracker.d.ts +11 -3
  3. package/esm2020/drag-drop/drag-ref.mjs +27 -17
  4. package/esm2020/drag-drop/drop-list-ref.mjs +2 -2
  5. package/esm2020/drag-drop/parent-position-tracker.mjs +13 -5
  6. package/esm2020/overlay/dispatchers/overlay-keyboard-dispatcher.mjs +24 -6
  7. package/esm2020/overlay/dispatchers/overlay-outside-click-dispatcher.mjs +31 -10
  8. package/esm2020/overlay/overlay-ref.mjs +15 -16
  9. package/esm2020/testing/harness-environment.mjs +4 -1
  10. package/esm2020/testing/protractor/protractor-element.mjs +8 -3
  11. package/esm2020/testing/public-api.mjs +2 -1
  12. package/esm2020/testing/selenium-webdriver/selenium-web-driver-element.mjs +8 -3
  13. package/esm2020/testing/test-element-errors.mjs +15 -0
  14. package/esm2020/testing/test-element.mjs +1 -1
  15. package/esm2020/testing/testbed/fake-events/type-in-element.mjs +12 -3
  16. package/esm2020/testing/testbed/unit-test-element.mjs +21 -5
  17. package/esm2020/version.mjs +1 -1
  18. package/fesm2015/cdk.mjs +1 -1
  19. package/fesm2015/cdk.mjs.map +1 -1
  20. package/fesm2015/drag-drop.mjs +40 -21
  21. package/fesm2015/drag-drop.mjs.map +1 -1
  22. package/fesm2015/overlay.mjs +66 -28
  23. package/fesm2015/overlay.mjs.map +1 -1
  24. package/fesm2015/testing/protractor.mjs +7 -2
  25. package/fesm2015/testing/protractor.mjs.map +1 -1
  26. package/fesm2015/testing/selenium-webdriver.mjs +7 -2
  27. package/fesm2015/testing/selenium-webdriver.mjs.map +1 -1
  28. package/fesm2015/testing/testbed.mjs +31 -7
  29. package/fesm2015/testing/testbed.mjs.map +1 -1
  30. package/fesm2015/testing.mjs +19 -1
  31. package/fesm2015/testing.mjs.map +1 -1
  32. package/fesm2020/cdk.mjs +1 -1
  33. package/fesm2020/cdk.mjs.map +1 -1
  34. package/fesm2020/drag-drop.mjs +39 -21
  35. package/fesm2020/drag-drop.mjs.map +1 -1
  36. package/fesm2020/overlay.mjs +66 -28
  37. package/fesm2020/overlay.mjs.map +1 -1
  38. package/fesm2020/testing/protractor.mjs +7 -2
  39. package/fesm2020/testing/protractor.mjs.map +1 -1
  40. package/fesm2020/testing/selenium-webdriver.mjs +7 -2
  41. package/fesm2020/testing/selenium-webdriver.mjs.map +1 -1
  42. package/fesm2020/testing/testbed.mjs +31 -7
  43. package/fesm2020/testing/testbed.mjs.map +1 -1
  44. package/fesm2020/testing.mjs +19 -1
  45. package/fesm2020/testing.mjs.map +1 -1
  46. package/overlay/_index.scss +7 -1
  47. package/overlay/dispatchers/overlay-keyboard-dispatcher.d.ts +7 -2
  48. package/overlay/dispatchers/overlay-outside-click-dispatcher.d.ts +8 -2
  49. package/overlay/overlay-ref.d.ts +2 -0
  50. package/overlay-prebuilt.css +1 -1
  51. package/package.json +1 -1
  52. package/schematics/ng-add/index.js +1 -1
  53. package/schematics/ng-add/index.mjs +1 -1
  54. package/schematics/ng-update/devkit-migration-rule.js +2 -2
  55. package/schematics/ng-update/devkit-migration-rule.mjs +2 -2
  56. package/testing/public-api.d.ts +1 -0
  57. package/testing/test-element-errors.d.ts +12 -0
  58. package/testing/test-element.d.ts +4 -2
  59. package/testing/testbed/fake-events/type-in-element.d.ts +2 -2
  60. package/testing/testbed/unit-test-element.d.ts +4 -1
@@ -4,7 +4,7 @@ export { CdkScrollable, ScrollDispatcher, ViewportRuler } from '@angular/cdk/scr
4
4
  import * as i6 from '@angular/common';
5
5
  import { DOCUMENT } from '@angular/common';
6
6
  import * as i0 from '@angular/core';
7
- import { Injectable, Inject, ElementRef, ApplicationRef, InjectionToken, Directive, EventEmitter, Optional, Input, Output, NgModule } from '@angular/core';
7
+ import { Injectable, Inject, Optional, ElementRef, ApplicationRef, InjectionToken, Directive, EventEmitter, Input, Output, NgModule } from '@angular/core';
8
8
  import { coerceCssPixelValue, coerceArray, coerceBooleanProperty } from '@angular/cdk/coercion';
9
9
  import * as i1$1 from '@angular/cdk/platform';
10
10
  import { supportsScrollBehavior, _getEventTarget, _isTestEnvironment } from '@angular/cdk/platform';
@@ -531,8 +531,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImpor
531
531
  * on event target and order of overlay opens.
532
532
  */
533
533
  class OverlayKeyboardDispatcher extends BaseOverlayDispatcher {
534
- constructor(document) {
534
+ constructor(document,
535
+ /** @breaking-change 14.0.0 _ngZone will be required. */
536
+ _ngZone) {
535
537
  super(document);
538
+ this._ngZone = _ngZone;
536
539
  /** Keyboard event listener that will be attached to the body. */
537
540
  this._keydownListener = (event) => {
538
541
  const overlays = this._attachedOverlays;
@@ -544,7 +547,14 @@ class OverlayKeyboardDispatcher extends BaseOverlayDispatcher {
544
547
  // because we don't want overlays that don't handle keyboard events to block the ones below
545
548
  // them that do.
546
549
  if (overlays[i]._keydownEvents.observers.length > 0) {
547
- overlays[i]._keydownEvents.next(event);
550
+ const keydownEvents = overlays[i]._keydownEvents;
551
+ /** @breaking-change 14.0.0 _ngZone will be required. */
552
+ if (this._ngZone) {
553
+ this._ngZone.run(() => keydownEvents.next(event));
554
+ }
555
+ else {
556
+ keydownEvents.next(event);
557
+ }
548
558
  break;
549
559
  }
550
560
  }
@@ -555,7 +565,13 @@ class OverlayKeyboardDispatcher extends BaseOverlayDispatcher {
555
565
  super.add(overlayRef);
556
566
  // Lazily start dispatcher once first overlay is added
557
567
  if (!this._isAttached) {
558
- this._document.body.addEventListener('keydown', this._keydownListener);
568
+ /** @breaking-change 14.0.0 _ngZone will be required. */
569
+ if (this._ngZone) {
570
+ this._ngZone.runOutsideAngular(() => this._document.body.addEventListener('keydown', this._keydownListener));
571
+ }
572
+ else {
573
+ this._document.body.addEventListener('keydown', this._keydownListener);
574
+ }
559
575
  this._isAttached = true;
560
576
  }
561
577
  }
@@ -567,7 +583,7 @@ class OverlayKeyboardDispatcher extends BaseOverlayDispatcher {
567
583
  }
568
584
  }
569
585
  }
570
- OverlayKeyboardDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: OverlayKeyboardDispatcher, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
586
+ OverlayKeyboardDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: OverlayKeyboardDispatcher, deps: [{ token: DOCUMENT }, { token: i0.NgZone, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
571
587
  OverlayKeyboardDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: OverlayKeyboardDispatcher, providedIn: 'root' });
572
588
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: OverlayKeyboardDispatcher, decorators: [{
573
589
  type: Injectable,
@@ -575,6 +591,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImpor
575
591
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
576
592
  type: Inject,
577
593
  args: [DOCUMENT]
594
+ }] }, { type: i0.NgZone, decorators: [{
595
+ type: Optional
578
596
  }] }]; } });
579
597
 
580
598
  /**
@@ -590,9 +608,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImpor
590
608
  * on event target and order of overlay opens.
591
609
  */
592
610
  class OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {
593
- constructor(document, _platform) {
611
+ constructor(document, _platform,
612
+ /** @breaking-change 14.0.0 _ngZone will be required. */
613
+ _ngZone) {
594
614
  super(document);
595
615
  this._platform = _platform;
616
+ this._ngZone = _ngZone;
596
617
  this._cursorStyleIsSet = false;
597
618
  /** Store pointerdown event target to track origin of click. */
598
619
  this._pointerDownListener = (event) => {
@@ -633,7 +654,14 @@ class OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {
633
654
  overlayRef.overlayElement.contains(origin)) {
634
655
  break;
635
656
  }
636
- overlayRef._outsidePointerEvents.next(event);
657
+ const outsidePointerEvents = overlayRef._outsidePointerEvents;
658
+ /** @breaking-change 14.0.0 _ngZone will be required. */
659
+ if (this._ngZone) {
660
+ this._ngZone.run(() => outsidePointerEvents.next(event));
661
+ }
662
+ else {
663
+ outsidePointerEvents.next(event);
664
+ }
637
665
  }
638
666
  };
639
667
  }
@@ -648,10 +676,13 @@ class OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {
648
676
  // https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html
649
677
  if (!this._isAttached) {
650
678
  const body = this._document.body;
651
- body.addEventListener('pointerdown', this._pointerDownListener, true);
652
- body.addEventListener('click', this._clickListener, true);
653
- body.addEventListener('auxclick', this._clickListener, true);
654
- body.addEventListener('contextmenu', this._clickListener, true);
679
+ /** @breaking-change 14.0.0 _ngZone will be required. */
680
+ if (this._ngZone) {
681
+ this._ngZone.runOutsideAngular(() => this._addEventListeners(body));
682
+ }
683
+ else {
684
+ this._addEventListeners(body);
685
+ }
655
686
  // click event is not fired on iOS. To make element "clickable" we are
656
687
  // setting the cursor to pointer
657
688
  if (this._platform.IOS && !this._cursorStyleIsSet) {
@@ -677,8 +708,14 @@ class OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {
677
708
  this._isAttached = false;
678
709
  }
679
710
  }
711
+ _addEventListeners(body) {
712
+ body.addEventListener('pointerdown', this._pointerDownListener, true);
713
+ body.addEventListener('click', this._clickListener, true);
714
+ body.addEventListener('auxclick', this._clickListener, true);
715
+ body.addEventListener('contextmenu', this._clickListener, true);
716
+ }
680
717
  }
681
- OverlayOutsideClickDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: OverlayOutsideClickDispatcher, deps: [{ token: DOCUMENT }, { token: i1$1.Platform }], target: i0.ɵɵFactoryTarget.Injectable });
718
+ OverlayOutsideClickDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: OverlayOutsideClickDispatcher, deps: [{ token: DOCUMENT }, { token: i1$1.Platform }, { token: i0.NgZone, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
682
719
  OverlayOutsideClickDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: OverlayOutsideClickDispatcher, providedIn: 'root' });
683
720
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: OverlayOutsideClickDispatcher, decorators: [{
684
721
  type: Injectable,
@@ -686,7 +723,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImpor
686
723
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
687
724
  type: Inject,
688
725
  args: [DOCUMENT]
689
- }] }, { type: i1$1.Platform }]; } });
726
+ }] }, { type: i1$1.Platform }, { type: i0.NgZone, decorators: [{
727
+ type: Optional
728
+ }] }]; } });
690
729
 
691
730
  /**
692
731
  * @license
@@ -792,6 +831,9 @@ class OverlayRef {
792
831
  this._detachments = new Subject();
793
832
  this._locationChanges = Subscription.EMPTY;
794
833
  this._backdropClickHandler = (event) => this._backdropClick.next(event);
834
+ this._backdropTransitionendHandler = (event) => {
835
+ this._disposeBackdrop(event.target);
836
+ };
795
837
  /** Stream of keydown events dispatched to this overlay. */
796
838
  this._keydownEvents = new Subject();
797
839
  /** Stream of mouse outside events dispatched to this overlay. */
@@ -1080,22 +1122,9 @@ class OverlayRef {
1080
1122
  if (!backdropToDetach) {
1081
1123
  return;
1082
1124
  }
1083
- let timeoutId;
1084
- const finishDetach = () => {
1085
- // It may not be attached to anything in certain cases (e.g. unit tests).
1086
- if (backdropToDetach) {
1087
- backdropToDetach.removeEventListener('click', this._backdropClickHandler);
1088
- backdropToDetach.removeEventListener('transitionend', finishDetach);
1089
- this._disposeBackdrop(backdropToDetach);
1090
- }
1091
- if (this._config.backdropClass) {
1092
- this._toggleClasses(backdropToDetach, this._config.backdropClass, false);
1093
- }
1094
- clearTimeout(timeoutId);
1095
- };
1096
1125
  backdropToDetach.classList.remove('cdk-overlay-backdrop-showing');
1097
1126
  this._ngZone.runOutsideAngular(() => {
1098
- backdropToDetach.addEventListener('transitionend', finishDetach);
1127
+ backdropToDetach.addEventListener('transitionend', this._backdropTransitionendHandler);
1099
1128
  });
1100
1129
  // If the backdrop doesn't have a transition, the `transitionend` event won't fire.
1101
1130
  // In this case we make it unclickable and we try to remove it after a delay.
@@ -1103,7 +1132,10 @@ class OverlayRef {
1103
1132
  // Run this outside the Angular zone because there's nothing that Angular cares about.
1104
1133
  // If it were to run inside the Angular zone, every test that used Overlay would have to be
1105
1134
  // either async or fakeAsync.
1106
- timeoutId = this._ngZone.runOutsideAngular(() => setTimeout(finishDetach, 500));
1135
+ this._backdropTimeout = this._ngZone.runOutsideAngular(() => setTimeout(() => {
1136
+ console.log('fallback');
1137
+ this._disposeBackdrop(backdropToDetach);
1138
+ }, 500));
1107
1139
  }
1108
1140
  /** Toggles a single CSS class or an array of classes on an element. */
1109
1141
  _toggleClasses(element, cssClasses, isAdd) {
@@ -1152,6 +1184,8 @@ class OverlayRef {
1152
1184
  /** Removes a backdrop element from the DOM. */
1153
1185
  _disposeBackdrop(backdrop) {
1154
1186
  if (backdrop) {
1187
+ backdrop.removeEventListener('click', this._backdropClickHandler);
1188
+ backdrop.removeEventListener('transitionend', this._backdropTransitionendHandler);
1155
1189
  backdrop.remove();
1156
1190
  // It is possible that a new portal has been attached to this overlay since we started
1157
1191
  // removing the backdrop. If that is the case, only clear the backdrop reference if it
@@ -1160,6 +1194,10 @@ class OverlayRef {
1160
1194
  this._backdropElement = null;
1161
1195
  }
1162
1196
  }
1197
+ if (this._backdropTimeout) {
1198
+ clearTimeout(this._backdropTimeout);
1199
+ this._backdropTimeout = undefined;
1200
+ }
1163
1201
  }
1164
1202
  }
1165
1203