@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, ElementRef, Optional, 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, _isTestEnvironment, _getEventTarget } from '@angular/cdk/platform';
@@ -492,6 +492,9 @@ class OverlayRef {
492
492
  this._detachments = new Subject();
493
493
  this._locationChanges = Subscription.EMPTY;
494
494
  this._backdropClickHandler = (event) => this._backdropClick.next(event);
495
+ this._backdropTransitionendHandler = (event) => {
496
+ this._disposeBackdrop(event.target);
497
+ };
495
498
  /** Stream of keydown events dispatched to this overlay. */
496
499
  this._keydownEvents = new Subject();
497
500
  /** Stream of mouse outside events dispatched to this overlay. */
@@ -781,22 +784,9 @@ class OverlayRef {
781
784
  if (!backdropToDetach) {
782
785
  return;
783
786
  }
784
- let timeoutId;
785
- const finishDetach = () => {
786
- // It may not be attached to anything in certain cases (e.g. unit tests).
787
- if (backdropToDetach) {
788
- backdropToDetach.removeEventListener('click', this._backdropClickHandler);
789
- backdropToDetach.removeEventListener('transitionend', finishDetach);
790
- this._disposeBackdrop(backdropToDetach);
791
- }
792
- if (this._config.backdropClass) {
793
- this._toggleClasses(backdropToDetach, this._config.backdropClass, false);
794
- }
795
- clearTimeout(timeoutId);
796
- };
797
787
  backdropToDetach.classList.remove('cdk-overlay-backdrop-showing');
798
788
  this._ngZone.runOutsideAngular(() => {
799
- backdropToDetach.addEventListener('transitionend', finishDetach);
789
+ backdropToDetach.addEventListener('transitionend', this._backdropTransitionendHandler);
800
790
  });
801
791
  // If the backdrop doesn't have a transition, the `transitionend` event won't fire.
802
792
  // In this case we make it unclickable and we try to remove it after a delay.
@@ -804,7 +794,10 @@ class OverlayRef {
804
794
  // Run this outside the Angular zone because there's nothing that Angular cares about.
805
795
  // If it were to run inside the Angular zone, every test that used Overlay would have to be
806
796
  // either async or fakeAsync.
807
- timeoutId = this._ngZone.runOutsideAngular(() => setTimeout(finishDetach, 500));
797
+ this._backdropTimeout = this._ngZone.runOutsideAngular(() => setTimeout(() => {
798
+ console.log('fallback');
799
+ this._disposeBackdrop(backdropToDetach);
800
+ }, 500));
808
801
  }
809
802
  /** Toggles a single CSS class or an array of classes on an element. */
810
803
  _toggleClasses(element, cssClasses, isAdd) {
@@ -853,6 +846,8 @@ class OverlayRef {
853
846
  /** Removes a backdrop element from the DOM. */
854
847
  _disposeBackdrop(backdrop) {
855
848
  if (backdrop) {
849
+ backdrop.removeEventListener('click', this._backdropClickHandler);
850
+ backdrop.removeEventListener('transitionend', this._backdropTransitionendHandler);
856
851
  backdrop.remove();
857
852
  // It is possible that a new portal has been attached to this overlay since we started
858
853
  // removing the backdrop. If that is the case, only clear the backdrop reference if it
@@ -861,6 +856,10 @@ class OverlayRef {
861
856
  this._backdropElement = null;
862
857
  }
863
858
  }
859
+ if (this._backdropTimeout) {
860
+ clearTimeout(this._backdropTimeout);
861
+ this._backdropTimeout = undefined;
862
+ }
864
863
  }
865
864
  }
866
865
 
@@ -2212,8 +2211,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImpor
2212
2211
  * on event target and order of overlay opens.
2213
2212
  */
2214
2213
  class OverlayKeyboardDispatcher extends BaseOverlayDispatcher {
2215
- constructor(document) {
2214
+ constructor(document,
2215
+ /** @breaking-change 14.0.0 _ngZone will be required. */
2216
+ _ngZone) {
2216
2217
  super(document);
2218
+ this._ngZone = _ngZone;
2217
2219
  /** Keyboard event listener that will be attached to the body. */
2218
2220
  this._keydownListener = (event) => {
2219
2221
  const overlays = this._attachedOverlays;
@@ -2225,7 +2227,14 @@ class OverlayKeyboardDispatcher extends BaseOverlayDispatcher {
2225
2227
  // because we don't want overlays that don't handle keyboard events to block the ones below
2226
2228
  // them that do.
2227
2229
  if (overlays[i]._keydownEvents.observers.length > 0) {
2228
- overlays[i]._keydownEvents.next(event);
2230
+ const keydownEvents = overlays[i]._keydownEvents;
2231
+ /** @breaking-change 14.0.0 _ngZone will be required. */
2232
+ if (this._ngZone) {
2233
+ this._ngZone.run(() => keydownEvents.next(event));
2234
+ }
2235
+ else {
2236
+ keydownEvents.next(event);
2237
+ }
2229
2238
  break;
2230
2239
  }
2231
2240
  }
@@ -2236,7 +2245,13 @@ class OverlayKeyboardDispatcher extends BaseOverlayDispatcher {
2236
2245
  super.add(overlayRef);
2237
2246
  // Lazily start dispatcher once first overlay is added
2238
2247
  if (!this._isAttached) {
2239
- this._document.body.addEventListener('keydown', this._keydownListener);
2248
+ /** @breaking-change 14.0.0 _ngZone will be required. */
2249
+ if (this._ngZone) {
2250
+ this._ngZone.runOutsideAngular(() => this._document.body.addEventListener('keydown', this._keydownListener));
2251
+ }
2252
+ else {
2253
+ this._document.body.addEventListener('keydown', this._keydownListener);
2254
+ }
2240
2255
  this._isAttached = true;
2241
2256
  }
2242
2257
  }
@@ -2248,7 +2263,7 @@ class OverlayKeyboardDispatcher extends BaseOverlayDispatcher {
2248
2263
  }
2249
2264
  }
2250
2265
  }
2251
- OverlayKeyboardDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: OverlayKeyboardDispatcher, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
2266
+ 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 });
2252
2267
  OverlayKeyboardDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: OverlayKeyboardDispatcher, providedIn: 'root' });
2253
2268
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: OverlayKeyboardDispatcher, decorators: [{
2254
2269
  type: Injectable,
@@ -2257,6 +2272,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImpor
2257
2272
  return [{ type: undefined, decorators: [{
2258
2273
  type: Inject,
2259
2274
  args: [DOCUMENT]
2275
+ }] }, { type: i0.NgZone, decorators: [{
2276
+ type: Optional
2260
2277
  }] }];
2261
2278
  } });
2262
2279
 
@@ -2273,9 +2290,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImpor
2273
2290
  * on event target and order of overlay opens.
2274
2291
  */
2275
2292
  class OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {
2276
- constructor(document, _platform) {
2293
+ constructor(document, _platform,
2294
+ /** @breaking-change 14.0.0 _ngZone will be required. */
2295
+ _ngZone) {
2277
2296
  super(document);
2278
2297
  this._platform = _platform;
2298
+ this._ngZone = _ngZone;
2279
2299
  this._cursorStyleIsSet = false;
2280
2300
  /** Store pointerdown event target to track origin of click. */
2281
2301
  this._pointerDownListener = (event) => {
@@ -2316,7 +2336,14 @@ class OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {
2316
2336
  overlayRef.overlayElement.contains(origin)) {
2317
2337
  break;
2318
2338
  }
2319
- overlayRef._outsidePointerEvents.next(event);
2339
+ const outsidePointerEvents = overlayRef._outsidePointerEvents;
2340
+ /** @breaking-change 14.0.0 _ngZone will be required. */
2341
+ if (this._ngZone) {
2342
+ this._ngZone.run(() => outsidePointerEvents.next(event));
2343
+ }
2344
+ else {
2345
+ outsidePointerEvents.next(event);
2346
+ }
2320
2347
  }
2321
2348
  };
2322
2349
  }
@@ -2331,10 +2358,13 @@ class OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {
2331
2358
  // https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html
2332
2359
  if (!this._isAttached) {
2333
2360
  const body = this._document.body;
2334
- body.addEventListener('pointerdown', this._pointerDownListener, true);
2335
- body.addEventListener('click', this._clickListener, true);
2336
- body.addEventListener('auxclick', this._clickListener, true);
2337
- body.addEventListener('contextmenu', this._clickListener, true);
2361
+ /** @breaking-change 14.0.0 _ngZone will be required. */
2362
+ if (this._ngZone) {
2363
+ this._ngZone.runOutsideAngular(() => this._addEventListeners(body));
2364
+ }
2365
+ else {
2366
+ this._addEventListeners(body);
2367
+ }
2338
2368
  // click event is not fired on iOS. To make element "clickable" we are
2339
2369
  // setting the cursor to pointer
2340
2370
  if (this._platform.IOS && !this._cursorStyleIsSet) {
@@ -2360,8 +2390,14 @@ class OverlayOutsideClickDispatcher extends BaseOverlayDispatcher {
2360
2390
  this._isAttached = false;
2361
2391
  }
2362
2392
  }
2393
+ _addEventListeners(body) {
2394
+ body.addEventListener('pointerdown', this._pointerDownListener, true);
2395
+ body.addEventListener('click', this._clickListener, true);
2396
+ body.addEventListener('auxclick', this._clickListener, true);
2397
+ body.addEventListener('contextmenu', this._clickListener, true);
2398
+ }
2363
2399
  }
2364
- 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 });
2400
+ 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 });
2365
2401
  OverlayOutsideClickDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: OverlayOutsideClickDispatcher, providedIn: 'root' });
2366
2402
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImport: i0, type: OverlayOutsideClickDispatcher, decorators: [{
2367
2403
  type: Injectable,
@@ -2370,7 +2406,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.0", ngImpor
2370
2406
  return [{ type: undefined, decorators: [{
2371
2407
  type: Inject,
2372
2408
  args: [DOCUMENT]
2373
- }] }, { type: i1$1.Platform }];
2409
+ }] }, { type: i1$1.Platform }, { type: i0.NgZone, decorators: [{
2410
+ type: Optional
2411
+ }] }];
2374
2412
  } });
2375
2413
 
2376
2414
  /** Next overlay unique ID. */