@angular/cdk 14.0.1 → 14.1.0-next.1

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 (201) hide show
  1. package/a11y/index.d.ts +3 -1
  2. package/collections/index.d.ts +3 -1
  3. package/drag-drop/index.d.ts +12 -58
  4. package/esm2020/a11y/a11y-module.mjs +5 -5
  5. package/esm2020/a11y/aria-describer/aria-describer.mjs +4 -4
  6. package/esm2020/a11y/focus-monitor/focus-monitor.mjs +7 -7
  7. package/esm2020/a11y/focus-trap/configurable-focus-trap-factory.mjs +4 -4
  8. package/esm2020/a11y/focus-trap/focus-trap-manager.mjs +4 -4
  9. package/esm2020/a11y/focus-trap/focus-trap.mjs +7 -7
  10. package/esm2020/a11y/high-contrast-mode/high-contrast-mode-detector.mjs +17 -5
  11. package/esm2020/a11y/input-modality/input-modality-detector.mjs +4 -4
  12. package/esm2020/a11y/interactivity-checker/interactivity-checker.mjs +4 -4
  13. package/esm2020/a11y/live-announcer/live-announcer.mjs +7 -7
  14. package/esm2020/accordion/accordion-item.mjs +4 -4
  15. package/esm2020/accordion/accordion-module.mjs +5 -5
  16. package/esm2020/accordion/accordion.mjs +4 -4
  17. package/esm2020/bidi/bidi-module.mjs +5 -5
  18. package/esm2020/bidi/dir.mjs +4 -4
  19. package/esm2020/bidi/directionality.mjs +4 -4
  20. package/esm2020/clipboard/clipboard-module.mjs +5 -5
  21. package/esm2020/clipboard/clipboard.mjs +4 -4
  22. package/esm2020/clipboard/copy-to-clipboard.mjs +4 -4
  23. package/esm2020/collections/selection-model.mjs +24 -3
  24. package/esm2020/collections/unique-selection-dispatcher.mjs +4 -4
  25. package/esm2020/dialog/dialog-container.mjs +4 -4
  26. package/esm2020/dialog/dialog-module.mjs +5 -5
  27. package/esm2020/dialog/dialog.mjs +4 -4
  28. package/esm2020/drag-drop/directives/drag-handle.mjs +4 -4
  29. package/esm2020/drag-drop/directives/drag-placeholder.mjs +4 -4
  30. package/esm2020/drag-drop/directives/drag-preview.mjs +4 -4
  31. package/esm2020/drag-drop/directives/drag.mjs +4 -4
  32. package/esm2020/drag-drop/directives/drop-list-group.mjs +4 -4
  33. package/esm2020/drag-drop/directives/drop-list.mjs +4 -4
  34. package/esm2020/drag-drop/dom/client-rect.mjs +64 -0
  35. package/esm2020/drag-drop/dom/clone-node.mjs +65 -0
  36. package/esm2020/drag-drop/dom/parent-position-tracker.mjs +76 -0
  37. package/esm2020/drag-drop/dom/styling.mjs +69 -0
  38. package/esm2020/drag-drop/dom/transition-duration.mjs +36 -0
  39. package/esm2020/drag-drop/drag-drop-module.mjs +5 -5
  40. package/esm2020/drag-drop/drag-drop-registry.mjs +4 -4
  41. package/esm2020/drag-drop/drag-drop.mjs +4 -4
  42. package/esm2020/drag-drop/drag-ref.mjs +36 -22
  43. package/esm2020/drag-drop/drop-list-ref.mjs +36 -295
  44. package/esm2020/drag-drop/sorting/drop-list-sort-strategy.mjs +9 -0
  45. package/esm2020/drag-drop/sorting/single-axis-sort-strategy.mjs +341 -0
  46. package/esm2020/layout/breakpoints-observer.mjs +4 -4
  47. package/esm2020/layout/layout-module.mjs +5 -5
  48. package/esm2020/layout/media-matcher.mjs +4 -4
  49. package/esm2020/menu/context-menu-trigger.mjs +7 -7
  50. package/esm2020/menu/menu-aim.mjs +7 -7
  51. package/esm2020/menu/menu-bar.mjs +4 -4
  52. package/esm2020/menu/menu-base.mjs +4 -4
  53. package/esm2020/menu/menu-group.mjs +4 -4
  54. package/esm2020/menu/menu-item-checkbox.mjs +4 -4
  55. package/esm2020/menu/menu-item-radio.mjs +4 -4
  56. package/esm2020/menu/menu-item-selectable.mjs +4 -4
  57. package/esm2020/menu/menu-item.mjs +4 -4
  58. package/esm2020/menu/menu-module.mjs +5 -5
  59. package/esm2020/menu/menu-stack.mjs +4 -4
  60. package/esm2020/menu/menu-trigger-base.mjs +4 -4
  61. package/esm2020/menu/menu-trigger.mjs +4 -4
  62. package/esm2020/menu/menu.mjs +4 -4
  63. package/esm2020/observers/observe-content.mjs +14 -14
  64. package/esm2020/overlay/dispatchers/base-overlay-dispatcher.mjs +4 -4
  65. package/esm2020/overlay/dispatchers/overlay-keyboard-dispatcher.mjs +4 -4
  66. package/esm2020/overlay/dispatchers/overlay-outside-click-dispatcher.mjs +4 -4
  67. package/esm2020/overlay/fullscreen-overlay-container.mjs +4 -4
  68. package/esm2020/overlay/overlay-container.mjs +4 -4
  69. package/esm2020/overlay/overlay-directives.mjs +7 -7
  70. package/esm2020/overlay/overlay-module.mjs +5 -5
  71. package/esm2020/overlay/overlay.mjs +4 -4
  72. package/esm2020/overlay/position/overlay-position-builder.mjs +4 -4
  73. package/esm2020/overlay/scroll/scroll-strategy-options.mjs +4 -4
  74. package/esm2020/platform/platform-module.mjs +5 -5
  75. package/esm2020/platform/platform.mjs +4 -4
  76. package/esm2020/portal/portal-directives.mjs +17 -17
  77. package/esm2020/scrolling/fixed-size-virtual-scroll.mjs +4 -4
  78. package/esm2020/scrolling/public-api.mjs +4 -1
  79. package/esm2020/scrolling/scroll-dispatcher.mjs +4 -4
  80. package/esm2020/scrolling/scrollable.mjs +4 -4
  81. package/esm2020/scrolling/scrolling-module.mjs +27 -11
  82. package/esm2020/scrolling/viewport-ruler.mjs +4 -4
  83. package/esm2020/scrolling/virtual-for-of.mjs +4 -4
  84. package/esm2020/scrolling/virtual-scroll-viewport.mjs +72 -21
  85. package/esm2020/scrolling/virtual-scrollable-element.mjs +41 -0
  86. package/esm2020/scrolling/virtual-scrollable-window.mjs +40 -0
  87. package/esm2020/scrolling/virtual-scrollable.mjs +40 -0
  88. package/esm2020/stepper/step-header.mjs +4 -4
  89. package/esm2020/stepper/step-label.mjs +4 -4
  90. package/esm2020/stepper/stepper-button.mjs +7 -7
  91. package/esm2020/stepper/stepper-module.mjs +5 -5
  92. package/esm2020/stepper/stepper.mjs +7 -7
  93. package/esm2020/table/cell.mjs +22 -22
  94. package/esm2020/table/coalesced-style-scheduler.mjs +4 -4
  95. package/esm2020/table/row.mjs +28 -28
  96. package/esm2020/table/table-module.mjs +5 -5
  97. package/esm2020/table/table.mjs +19 -19
  98. package/esm2020/table/text-column.mjs +4 -4
  99. package/esm2020/testing/testbed/fake-events/dispatch-events.mjs +5 -5
  100. package/esm2020/testing/testbed/fake-events/event-objects.mjs +17 -6
  101. package/esm2020/testing/testbed/unit-test-element.mjs +17 -12
  102. package/esm2020/text-field/autofill.mjs +7 -7
  103. package/esm2020/text-field/autosize.mjs +4 -4
  104. package/esm2020/text-field/text-field-module.mjs +5 -5
  105. package/esm2020/tree/nested-node.mjs +4 -4
  106. package/esm2020/tree/node.mjs +4 -4
  107. package/esm2020/tree/outlet.mjs +4 -4
  108. package/esm2020/tree/padding.mjs +4 -4
  109. package/esm2020/tree/toggle.mjs +4 -4
  110. package/esm2020/tree/tree-module.mjs +5 -5
  111. package/esm2020/tree/tree.mjs +7 -7
  112. package/esm2020/version.mjs +1 -1
  113. package/fesm2015/a11y.mjs +59 -40
  114. package/fesm2015/a11y.mjs.map +1 -1
  115. package/fesm2015/accordion.mjs +10 -10
  116. package/fesm2015/accordion.mjs.map +1 -1
  117. package/fesm2015/bidi.mjs +10 -10
  118. package/fesm2015/bidi.mjs.map +1 -1
  119. package/fesm2015/cdk.mjs +1 -1
  120. package/fesm2015/cdk.mjs.map +1 -1
  121. package/fesm2015/clipboard.mjs +10 -10
  122. package/fesm2015/clipboard.mjs.map +1 -1
  123. package/fesm2015/collections.mjs +26 -5
  124. package/fesm2015/collections.mjs.map +1 -1
  125. package/fesm2015/dialog.mjs +10 -10
  126. package/fesm2015/dialog.mjs.map +1 -1
  127. package/fesm2015/drag-drop.mjs +552 -459
  128. package/fesm2015/drag-drop.mjs.map +1 -1
  129. package/fesm2015/layout.mjs +10 -10
  130. package/fesm2015/layout.mjs.map +1 -1
  131. package/fesm2015/menu.mjs +49 -49
  132. package/fesm2015/menu.mjs.map +1 -1
  133. package/fesm2015/observers.mjs +13 -13
  134. package/fesm2015/observers.mjs.map +1 -1
  135. package/fesm2015/overlay.mjs +34 -34
  136. package/fesm2015/overlay.mjs.map +1 -1
  137. package/fesm2015/platform.mjs +7 -7
  138. package/fesm2015/platform.mjs.map +1 -1
  139. package/fesm2015/portal.mjs +16 -16
  140. package/fesm2015/portal.mjs.map +1 -1
  141. package/fesm2015/scrolling.mjs +194 -47
  142. package/fesm2015/scrolling.mjs.map +1 -1
  143. package/fesm2015/stepper.mjs +22 -22
  144. package/fesm2015/stepper.mjs.map +1 -1
  145. package/fesm2015/table.mjs +76 -76
  146. package/fesm2015/table.mjs.map +1 -1
  147. package/fesm2015/testing/testbed.mjs +36 -20
  148. package/fesm2015/testing/testbed.mjs.map +1 -1
  149. package/fesm2015/text-field.mjs +13 -13
  150. package/fesm2015/text-field.mjs.map +1 -1
  151. package/fesm2015/tree.mjs +25 -25
  152. package/fesm2015/tree.mjs.map +1 -1
  153. package/fesm2020/a11y.mjs +52 -40
  154. package/fesm2020/a11y.mjs.map +1 -1
  155. package/fesm2020/accordion.mjs +10 -10
  156. package/fesm2020/accordion.mjs.map +1 -1
  157. package/fesm2020/bidi.mjs +10 -10
  158. package/fesm2020/bidi.mjs.map +1 -1
  159. package/fesm2020/cdk.mjs +1 -1
  160. package/fesm2020/cdk.mjs.map +1 -1
  161. package/fesm2020/clipboard.mjs +10 -10
  162. package/fesm2020/clipboard.mjs.map +1 -1
  163. package/fesm2020/collections.mjs +26 -5
  164. package/fesm2020/collections.mjs.map +1 -1
  165. package/fesm2020/dialog.mjs +10 -10
  166. package/fesm2020/dialog.mjs.map +1 -1
  167. package/fesm2020/drag-drop.mjs +552 -459
  168. package/fesm2020/drag-drop.mjs.map +1 -1
  169. package/fesm2020/layout.mjs +10 -10
  170. package/fesm2020/layout.mjs.map +1 -1
  171. package/fesm2020/menu.mjs +49 -49
  172. package/fesm2020/menu.mjs.map +1 -1
  173. package/fesm2020/observers.mjs +13 -13
  174. package/fesm2020/observers.mjs.map +1 -1
  175. package/fesm2020/overlay.mjs +34 -34
  176. package/fesm2020/overlay.mjs.map +1 -1
  177. package/fesm2020/platform.mjs +7 -7
  178. package/fesm2020/platform.mjs.map +1 -1
  179. package/fesm2020/portal.mjs +16 -16
  180. package/fesm2020/portal.mjs.map +1 -1
  181. package/fesm2020/scrolling.mjs +208 -47
  182. package/fesm2020/scrolling.mjs.map +1 -1
  183. package/fesm2020/stepper.mjs +22 -22
  184. package/fesm2020/stepper.mjs.map +1 -1
  185. package/fesm2020/table.mjs +76 -76
  186. package/fesm2020/table.mjs.map +1 -1
  187. package/fesm2020/testing/testbed.mjs +36 -20
  188. package/fesm2020/testing/testbed.mjs.map +1 -1
  189. package/fesm2020/text-field.mjs +13 -13
  190. package/fesm2020/text-field.mjs.map +1 -1
  191. package/fesm2020/tree.mjs +25 -25
  192. package/fesm2020/tree.mjs.map +1 -1
  193. package/package.json +1 -1
  194. package/schematics/ng-add/index.js +1 -1
  195. package/schematics/ng-add/index.mjs +1 -1
  196. package/scrolling/index.d.ts +71 -8
  197. package/esm2020/drag-drop/client-rect.mjs +0 -64
  198. package/esm2020/drag-drop/clone-node.mjs +0 -65
  199. package/esm2020/drag-drop/drag-styling.mjs +0 -69
  200. package/esm2020/drag-drop/parent-position-tracker.mjs +0 -76
  201. package/esm2020/drag-drop/transition-duration.mjs +0 -36
@@ -1,6 +1,6 @@
1
1
  import { coerceNumberProperty, coerceElement, coerceBooleanProperty } from '@angular/cdk/coercion';
2
2
  import * as i0 from '@angular/core';
3
- import { InjectionToken, forwardRef, Directive, Input, Injectable, Optional, Inject, Component, ViewEncapsulation, ChangeDetectionStrategy, Output, ViewChild, SkipSelf, NgModule } from '@angular/core';
3
+ import { InjectionToken, forwardRef, Directive, Input, Injectable, Optional, Inject, Component, ViewEncapsulation, ChangeDetectionStrategy, Output, ViewChild, SkipSelf, ElementRef, NgModule } from '@angular/core';
4
4
  import { Subject, of, Observable, fromEvent, animationFrameScheduler, asapScheduler, Subscription, isObservable } from 'rxjs';
5
5
  import { distinctUntilChanged, auditTime, filter, takeUntil, startWith, pairwise, switchMap, shareReplay } from 'rxjs/operators';
6
6
  import { DOCUMENT } from '@angular/common';
@@ -204,15 +204,15 @@ class CdkFixedSizeVirtualScroll {
204
204
  this._scrollStrategy.updateItemAndBufferSize(this.itemSize, this.minBufferPx, this.maxBufferPx);
205
205
  }
206
206
  }
207
- CdkFixedSizeVirtualScroll.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: CdkFixedSizeVirtualScroll, deps: [], target: i0.ɵɵFactoryTarget.Directive });
208
- CdkFixedSizeVirtualScroll.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.0-rc.1", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: { itemSize: "itemSize", minBufferPx: "minBufferPx", maxBufferPx: "maxBufferPx" }, providers: [
207
+ CdkFixedSizeVirtualScroll.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkFixedSizeVirtualScroll, deps: [], target: i0.ɵɵFactoryTarget.Directive });
208
+ CdkFixedSizeVirtualScroll.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.1", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: { itemSize: "itemSize", minBufferPx: "minBufferPx", maxBufferPx: "maxBufferPx" }, providers: [
209
209
  {
210
210
  provide: VIRTUAL_SCROLL_STRATEGY,
211
211
  useFactory: _fixedSizeVirtualScrollStrategyFactory,
212
212
  deps: [forwardRef(() => CdkFixedSizeVirtualScroll)],
213
213
  },
214
214
  ], usesOnChanges: true, ngImport: i0 });
215
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: CdkFixedSizeVirtualScroll, decorators: [{
215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkFixedSizeVirtualScroll, decorators: [{
216
216
  type: Directive,
217
217
  args: [{
218
218
  selector: 'cdk-virtual-scroll-viewport[itemSize]',
@@ -375,9 +375,9 @@ class ScrollDispatcher {
375
375
  }
376
376
  }
377
377
  }
378
- ScrollDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: ScrollDispatcher, deps: [{ token: i0.NgZone }, { token: i1.Platform }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
379
- ScrollDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: ScrollDispatcher, providedIn: 'root' });
380
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: ScrollDispatcher, decorators: [{
378
+ ScrollDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: ScrollDispatcher, deps: [{ token: i0.NgZone }, { token: i1.Platform }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
379
+ ScrollDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: ScrollDispatcher, providedIn: 'root' });
380
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: ScrollDispatcher, decorators: [{
381
381
  type: Injectable,
382
382
  args: [{ providedIn: 'root' }]
383
383
  }], ctorParameters: function () {
@@ -538,9 +538,9 @@ class CdkScrollable {
538
538
  }
539
539
  }
540
540
  }
541
- CdkScrollable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: CdkScrollable, deps: [{ token: i0.ElementRef }, { token: ScrollDispatcher }, { token: i0.NgZone }, { token: i2.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
542
- CdkScrollable.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.0-rc.1", type: CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]", ngImport: i0 });
543
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: CdkScrollable, decorators: [{
541
+ CdkScrollable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkScrollable, deps: [{ token: i0.ElementRef }, { token: ScrollDispatcher }, { token: i0.NgZone }, { token: i2.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
542
+ CdkScrollable.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.1", type: CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]", ngImport: i0 });
543
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkScrollable, decorators: [{
544
544
  type: Directive,
545
545
  args: [{
546
546
  selector: '[cdk-scrollable], [cdkScrollable]',
@@ -551,6 +551,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ng
551
551
  }] }];
552
552
  } });
553
553
 
554
+ const VIRTUAL_SCROLLABLE = new InjectionToken('VIRTUAL_SCROLLABLE');
555
+ /**
556
+ * Extending the {@link CdkScrollable} to be used as scrolling container for virtual scrolling.
557
+ */
558
+ class CdkVirtualScrollable extends CdkScrollable {
559
+ constructor(elementRef, scrollDispatcher, ngZone, dir) {
560
+ super(elementRef, scrollDispatcher, ngZone, dir);
561
+ }
562
+ /**
563
+ * Measure the viewport size for the provided orientation.
564
+ *
565
+ * @param orientation The orientation to measure the size from.
566
+ */
567
+ measureViewportSize(orientation) {
568
+ const viewportEl = this.elementRef.nativeElement;
569
+ return orientation === 'horizontal' ? viewportEl.clientWidth : viewportEl.clientHeight;
570
+ }
571
+ }
572
+ CdkVirtualScrollable.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkVirtualScrollable, deps: [{ token: i0.ElementRef }, { token: ScrollDispatcher }, { token: i0.NgZone }, { token: i2.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
573
+ CdkVirtualScrollable.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.1", type: CdkVirtualScrollable, usesInheritance: true, ngImport: i0 });
574
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkVirtualScrollable, decorators: [{
575
+ type: Directive
576
+ }], ctorParameters: function () {
577
+ return [{ type: i0.ElementRef }, { type: ScrollDispatcher }, { type: i0.NgZone }, { type: i2.Directionality, decorators: [{
578
+ type: Optional
579
+ }] }];
580
+ } });
581
+
554
582
  /** Time in ms to throttle the resize events by default. */
555
583
  const DEFAULT_RESIZE_TIME = 20;
556
584
  /**
@@ -671,9 +699,9 @@ class ViewportRuler {
671
699
  : { width: 0, height: 0 };
672
700
  }
673
701
  }
674
- ViewportRuler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: ViewportRuler, deps: [{ token: i1.Platform }, { token: i0.NgZone }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
675
- ViewportRuler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: ViewportRuler, providedIn: 'root' });
676
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: ViewportRuler, decorators: [{
702
+ ViewportRuler.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: ViewportRuler, deps: [{ token: i1.Platform }, { token: i0.NgZone }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
703
+ ViewportRuler.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: ViewportRuler, providedIn: 'root' });
704
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: ViewportRuler, decorators: [{
677
705
  type: Injectable,
678
706
  args: [{ providedIn: 'root' }]
679
707
  }], ctorParameters: function () {
@@ -696,12 +724,13 @@ function rangesEqual(r1, r2) {
696
724
  */
697
725
  const SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? animationFrameScheduler : asapScheduler;
698
726
  /** A viewport that virtualizes its scrolling with the help of `CdkVirtualForOf`. */
699
- class CdkVirtualScrollViewport extends CdkScrollable {
700
- constructor(elementRef, _changeDetectorRef, ngZone, _scrollStrategy, dir, scrollDispatcher, viewportRuler) {
727
+ class CdkVirtualScrollViewport extends CdkVirtualScrollable {
728
+ constructor(elementRef, _changeDetectorRef, ngZone, _scrollStrategy, dir, scrollDispatcher, viewportRuler, scrollable) {
701
729
  super(elementRef, scrollDispatcher, ngZone, dir);
702
730
  this.elementRef = elementRef;
703
731
  this._changeDetectorRef = _changeDetectorRef;
704
732
  this._scrollStrategy = _scrollStrategy;
733
+ this.scrollable = scrollable;
705
734
  /** Emits when the viewport is detached from a CdkVirtualForOf. */
706
735
  this._detachedSubject = new Subject();
707
736
  /** Emits when the rendered range changes. */
@@ -749,6 +778,11 @@ class CdkVirtualScrollViewport extends CdkScrollable {
749
778
  this._viewportChanges = viewportRuler.change().subscribe(() => {
750
779
  this.checkViewportSize();
751
780
  });
781
+ if (!this.scrollable) {
782
+ // No scrollable is provided, so the virtual-scroll-viewport needs to become a scrollable
783
+ this.elementRef.nativeElement.classList.add('cdk-virtual-scrollable');
784
+ this.scrollable = this;
785
+ }
752
786
  }
753
787
  /** The direction the viewport scrolls. */
754
788
  get orientation() {
@@ -771,7 +805,9 @@ class CdkVirtualScrollViewport extends CdkScrollable {
771
805
  this._appendOnly = coerceBooleanProperty(value);
772
806
  }
773
807
  ngOnInit() {
774
- super.ngOnInit();
808
+ if (this.scrollable === this) {
809
+ super.ngOnInit();
810
+ }
775
811
  // It's still too early to measure the viewport at this point. Deferring with a promise allows
776
812
  // the Viewport to be rendered with the correct size before we measure. We run this outside the
777
813
  // zone to avoid causing more change detection cycles. We handle the change detection loop
@@ -779,7 +815,8 @@ class CdkVirtualScrollViewport extends CdkScrollable {
779
815
  this.ngZone.runOutsideAngular(() => Promise.resolve().then(() => {
780
816
  this._measureViewportSize();
781
817
  this._scrollStrategy.attach(this);
782
- this.elementScrolled()
818
+ this.scrollable
819
+ .elementScrolled()
783
820
  .pipe(
784
821
  // Start off with a fake scroll event so we properly detect our initial position.
785
822
  startWith(null),
@@ -841,6 +878,9 @@ class CdkVirtualScrollViewport extends CdkScrollable {
841
878
  getRenderedRange() {
842
879
  return this._renderedRange;
843
880
  }
881
+ measureBoundingClientRectWithScrollOffset(from) {
882
+ return this.getElementRef().nativeElement.getBoundingClientRect()[from];
883
+ }
844
884
  /**
845
885
  * Sets the total size of all content (in pixels), including content that is not currently
846
886
  * rendered.
@@ -921,7 +961,7 @@ class CdkVirtualScrollViewport extends CdkScrollable {
921
961
  else {
922
962
  options.top = offset;
923
963
  }
924
- this.scrollTo(options);
964
+ this.scrollable.scrollTo(options);
925
965
  }
926
966
  /**
927
967
  * Scrolls to the offset for the given index.
@@ -932,14 +972,47 @@ class CdkVirtualScrollViewport extends CdkScrollable {
932
972
  this._scrollStrategy.scrollToIndex(index, behavior);
933
973
  }
934
974
  /**
935
- * Gets the current scroll offset from the start of the viewport (in pixels).
975
+ * Gets the current scroll offset from the start of the scrollable (in pixels).
936
976
  * @param from The edge to measure the offset from. Defaults to 'top' in vertical mode and 'start'
937
977
  * in horizontal mode.
938
978
  */
939
979
  measureScrollOffset(from) {
940
- return from
941
- ? super.measureScrollOffset(from)
942
- : super.measureScrollOffset(this.orientation === 'horizontal' ? 'start' : 'top');
980
+ // This is to break the call cycle
981
+ let measureScrollOffset;
982
+ if (this.scrollable == this) {
983
+ measureScrollOffset = (_from) => super.measureScrollOffset(_from);
984
+ }
985
+ else {
986
+ measureScrollOffset = (_from) => this.scrollable.measureScrollOffset(_from);
987
+ }
988
+ return Math.max(0, measureScrollOffset(from !== null && from !== void 0 ? from : (this.orientation === 'horizontal' ? 'start' : 'top')) -
989
+ this.measureViewportOffset());
990
+ }
991
+ /**
992
+ * Measures the offset of the viewport from the scrolling container
993
+ * @param from The edge to measure from.
994
+ */
995
+ measureViewportOffset(from) {
996
+ var _a;
997
+ let fromRect;
998
+ const LEFT = 'left';
999
+ const RIGHT = 'right';
1000
+ const isRtl = ((_a = this.dir) === null || _a === void 0 ? void 0 : _a.value) == 'rtl';
1001
+ if (from == 'start') {
1002
+ fromRect = isRtl ? RIGHT : LEFT;
1003
+ }
1004
+ else if (from == 'end') {
1005
+ fromRect = isRtl ? LEFT : RIGHT;
1006
+ }
1007
+ else if (from) {
1008
+ fromRect = from;
1009
+ }
1010
+ else {
1011
+ fromRect = this.orientation === 'horizontal' ? 'left' : 'top';
1012
+ }
1013
+ const scrollerClientRect = this.scrollable.measureBoundingClientRectWithScrollOffset(fromRect);
1014
+ const viewportClientRect = this.elementRef.nativeElement.getBoundingClientRect()[fromRect];
1015
+ return viewportClientRect - scrollerClientRect;
943
1016
  }
944
1017
  /** Measure the combined size of all of the rendered items. */
945
1018
  measureRenderedContentSize() {
@@ -964,9 +1037,7 @@ class CdkVirtualScrollViewport extends CdkScrollable {
964
1037
  }
965
1038
  /** Measure the viewport size. */
966
1039
  _measureViewportSize() {
967
- const viewportEl = this.elementRef.nativeElement;
968
- this._viewportSize =
969
- this.orientation === 'horizontal' ? viewportEl.clientWidth : viewportEl.clientHeight;
1040
+ this._viewportSize = this.scrollable.measureViewportSize(this.orientation);
970
1041
  }
971
1042
  /** Queue up change detection to run. */
972
1043
  _markChangeDetectionNeeded(runAfter) {
@@ -1008,14 +1079,15 @@ class CdkVirtualScrollViewport extends CdkScrollable {
1008
1079
  this.orientation === 'horizontal' ? `${this._totalContentSize}px` : '';
1009
1080
  }
1010
1081
  }
1011
- CdkVirtualScrollViewport.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: CdkVirtualScrollViewport, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: VIRTUAL_SCROLL_STRATEGY, optional: true }, { token: i2.Directionality, optional: true }, { token: ScrollDispatcher }, { token: ViewportRuler }], target: i0.ɵɵFactoryTarget.Component });
1012
- CdkVirtualScrollViewport.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0-rc.1", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: { orientation: "orientation", appendOnly: "appendOnly" }, outputs: { scrolledIndexChange: "scrolledIndexChange" }, host: { properties: { "class.cdk-virtual-scroll-orientation-horizontal": "orientation === \"horizontal\"", "class.cdk-virtual-scroll-orientation-vertical": "orientation !== \"horizontal\"" }, classAttribute: "cdk-virtual-scroll-viewport" }, providers: [
1082
+ CdkVirtualScrollViewport.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkVirtualScrollViewport, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: VIRTUAL_SCROLL_STRATEGY, optional: true }, { token: i2.Directionality, optional: true }, { token: ScrollDispatcher }, { token: ViewportRuler }, { token: VIRTUAL_SCROLLABLE, optional: true }], target: i0.ɵɵFactoryTarget.Component });
1083
+ CdkVirtualScrollViewport.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.1", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: { orientation: "orientation", appendOnly: "appendOnly" }, outputs: { scrolledIndexChange: "scrolledIndexChange" }, host: { properties: { "class.cdk-virtual-scroll-orientation-horizontal": "orientation === \"horizontal\"", "class.cdk-virtual-scroll-orientation-vertical": "orientation !== \"horizontal\"" }, classAttribute: "cdk-virtual-scroll-viewport" }, providers: [
1013
1084
  {
1014
1085
  provide: CdkScrollable,
1015
- useExisting: CdkVirtualScrollViewport,
1086
+ useFactory: (virtualScrollable, viewport) => virtualScrollable || viewport,
1087
+ deps: [CdkVirtualScrollable, CdkVirtualScrollViewport],
1016
1088
  },
1017
- ], viewQueries: [{ propertyName: "_contentWrapper", first: true, predicate: ["contentWrapper"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<!--\n Wrap the rendered content in an element that will be used to offset it based on the scroll\n position.\n-->\n<div #contentWrapper class=\"cdk-virtual-scroll-content-wrapper\">\n <ng-content></ng-content>\n</div>\n<!--\n Spacer used to force the scrolling container to the correct size for the *total* number of items\n so that the scrollbar captures the size of the entire data set.\n-->\n<div class=\"cdk-virtual-scroll-spacer\"\n [style.width]=\"_totalContentWidth\" [style.height]=\"_totalContentHeight\"></div>\n", styles: ["cdk-virtual-scroll-viewport{display:block;position:relative;overflow:auto;contain:strict;transform:translateZ(0);will-change:scroll-position;-webkit-overflow-scrolling:touch}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{position:absolute;top:0;left:0;height:1px;width:1px;transform-origin:0 0}[dir=rtl] .cdk-virtual-scroll-spacer{right:0;left:auto;transform-origin:100% 0}"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1018
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: CdkVirtualScrollViewport, decorators: [{
1089
+ ], viewQueries: [{ propertyName: "_contentWrapper", first: true, predicate: ["contentWrapper"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<!--\n Wrap the rendered content in an element that will be used to offset it based on the scroll\n position.\n-->\n<div #contentWrapper class=\"cdk-virtual-scroll-content-wrapper\">\n <ng-content></ng-content>\n</div>\n<!--\n Spacer used to force the scrolling container to the correct size for the *total* number of items\n so that the scrollbar captures the size of the entire data set.\n-->\n<div class=\"cdk-virtual-scroll-spacer\"\n [style.width]=\"_totalContentWidth\" [style.height]=\"_totalContentHeight\"></div>\n", styles: ["cdk-virtual-scroll-viewport{display:block;position:relative;transform:translateZ(0)}.cdk-virtual-scrollable{overflow:auto;will-change:scroll-position;contain:strict;-webkit-overflow-scrolling:touch}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{height:1px;transform-origin:0 0;flex:0 0 auto}[dir=rtl] .cdk-virtual-scroll-spacer{transform-origin:100% 0}"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1090
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkVirtualScrollViewport, decorators: [{
1019
1091
  type: Component,
1020
1092
  args: [{ selector: 'cdk-virtual-scroll-viewport', host: {
1021
1093
  'class': 'cdk-virtual-scroll-viewport',
@@ -1024,9 +1096,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ng
1024
1096
  }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
1025
1097
  {
1026
1098
  provide: CdkScrollable,
1027
- useExisting: CdkVirtualScrollViewport,
1099
+ useFactory: (virtualScrollable, viewport) => virtualScrollable || viewport,
1100
+ deps: [CdkVirtualScrollable, CdkVirtualScrollViewport],
1028
1101
  },
1029
- ], template: "<!--\n Wrap the rendered content in an element that will be used to offset it based on the scroll\n position.\n-->\n<div #contentWrapper class=\"cdk-virtual-scroll-content-wrapper\">\n <ng-content></ng-content>\n</div>\n<!--\n Spacer used to force the scrolling container to the correct size for the *total* number of items\n so that the scrollbar captures the size of the entire data set.\n-->\n<div class=\"cdk-virtual-scroll-spacer\"\n [style.width]=\"_totalContentWidth\" [style.height]=\"_totalContentHeight\"></div>\n", styles: ["cdk-virtual-scroll-viewport{display:block;position:relative;overflow:auto;contain:strict;transform:translateZ(0);will-change:scroll-position;-webkit-overflow-scrolling:touch}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{position:absolute;top:0;left:0;height:1px;width:1px;transform-origin:0 0}[dir=rtl] .cdk-virtual-scroll-spacer{right:0;left:auto;transform-origin:100% 0}"] }]
1102
+ ], template: "<!--\n Wrap the rendered content in an element that will be used to offset it based on the scroll\n position.\n-->\n<div #contentWrapper class=\"cdk-virtual-scroll-content-wrapper\">\n <ng-content></ng-content>\n</div>\n<!--\n Spacer used to force the scrolling container to the correct size for the *total* number of items\n so that the scrollbar captures the size of the entire data set.\n-->\n<div class=\"cdk-virtual-scroll-spacer\"\n [style.width]=\"_totalContentWidth\" [style.height]=\"_totalContentHeight\"></div>\n", styles: ["cdk-virtual-scroll-viewport{display:block;position:relative;transform:translateZ(0)}.cdk-virtual-scrollable{overflow:auto;will-change:scroll-position;contain:strict;-webkit-overflow-scrolling:touch}.cdk-virtual-scroll-content-wrapper{position:absolute;top:0;left:0;contain:content}[dir=rtl] .cdk-virtual-scroll-content-wrapper{right:0;left:auto}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper{min-height:100%}.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-horizontal .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-left:0;padding-right:0;margin-left:0;margin-right:0;border-left-width:0;border-right-width:0;outline:none}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper{min-width:100%}.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>dl:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ol:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>table:not([cdkVirtualFor]),.cdk-virtual-scroll-orientation-vertical .cdk-virtual-scroll-content-wrapper>ul:not([cdkVirtualFor]){padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0;border-top-width:0;border-bottom-width:0;outline:none}.cdk-virtual-scroll-spacer{height:1px;transform-origin:0 0;flex:0 0 auto}[dir=rtl] .cdk-virtual-scroll-spacer{transform-origin:100% 0}"] }]
1030
1103
  }], ctorParameters: function () {
1031
1104
  return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: undefined, decorators: [{
1032
1105
  type: Optional
@@ -1035,7 +1108,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ng
1035
1108
  args: [VIRTUAL_SCROLL_STRATEGY]
1036
1109
  }] }, { type: i2.Directionality, decorators: [{
1037
1110
  type: Optional
1038
- }] }, { type: ScrollDispatcher }, { type: ViewportRuler }];
1111
+ }] }, { type: ScrollDispatcher }, { type: ViewportRuler }, { type: CdkVirtualScrollable, decorators: [{
1112
+ type: Optional
1113
+ }, {
1114
+ type: Inject,
1115
+ args: [VIRTUAL_SCROLLABLE]
1116
+ }] }];
1039
1117
  }, propDecorators: { orientation: [{
1040
1118
  type: Input
1041
1119
  }], appendOnly: [{
@@ -1313,9 +1391,9 @@ class CdkVirtualForOf {
1313
1391
  };
1314
1392
  }
1315
1393
  }
1316
- CdkVirtualForOf.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: CdkVirtualForOf, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: _VIEW_REPEATER_STRATEGY }, { token: CdkVirtualScrollViewport, skipSelf: true }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
1317
- CdkVirtualForOf.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.0-rc.1", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: { cdkVirtualForOf: "cdkVirtualForOf", cdkVirtualForTrackBy: "cdkVirtualForTrackBy", cdkVirtualForTemplate: "cdkVirtualForTemplate", cdkVirtualForTemplateCacheSize: "cdkVirtualForTemplateCacheSize" }, providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }], ngImport: i0 });
1318
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: CdkVirtualForOf, decorators: [{
1394
+ CdkVirtualForOf.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkVirtualForOf, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i0.IterableDiffers }, { token: _VIEW_REPEATER_STRATEGY }, { token: CdkVirtualScrollViewport, skipSelf: true }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
1395
+ CdkVirtualForOf.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.1", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: { cdkVirtualForOf: "cdkVirtualForOf", cdkVirtualForTrackBy: "cdkVirtualForTrackBy", cdkVirtualForTemplate: "cdkVirtualForTemplate", cdkVirtualForTemplateCacheSize: "cdkVirtualForTemplateCacheSize" }, providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }], ngImport: i0 });
1396
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkVirtualForOf, decorators: [{
1319
1397
  type: Directive,
1320
1398
  args: [{
1321
1399
  selector: '[cdkVirtualFor][cdkVirtualForOf]',
@@ -1338,6 +1416,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ng
1338
1416
  type: Input
1339
1417
  }] } });
1340
1418
 
1419
+ /**
1420
+ * Provides a virtual scrollable for the element it is attached to.
1421
+ */
1422
+ class CdkVirtualScrollableElement extends CdkVirtualScrollable {
1423
+ constructor(elementRef, scrollDispatcher, ngZone, dir) {
1424
+ super(elementRef, scrollDispatcher, ngZone, dir);
1425
+ }
1426
+ measureBoundingClientRectWithScrollOffset(from) {
1427
+ return (this.getElementRef().nativeElement.getBoundingClientRect()[from] -
1428
+ this.measureScrollOffset(from));
1429
+ }
1430
+ }
1431
+ CdkVirtualScrollableElement.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkVirtualScrollableElement, deps: [{ token: i0.ElementRef }, { token: ScrollDispatcher }, { token: i0.NgZone }, { token: i2.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
1432
+ CdkVirtualScrollableElement.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.1", type: CdkVirtualScrollableElement, selector: "[cdkVirtualScrollingElement]", host: { classAttribute: "cdk-virtual-scrollable" }, providers: [{ provide: VIRTUAL_SCROLLABLE, useExisting: CdkVirtualScrollableElement }], usesInheritance: true, ngImport: i0 });
1433
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkVirtualScrollableElement, decorators: [{
1434
+ type: Directive,
1435
+ args: [{
1436
+ selector: '[cdkVirtualScrollingElement]',
1437
+ providers: [{ provide: VIRTUAL_SCROLLABLE, useExisting: CdkVirtualScrollableElement }],
1438
+ host: {
1439
+ 'class': 'cdk-virtual-scrollable',
1440
+ },
1441
+ }]
1442
+ }], ctorParameters: function () {
1443
+ return [{ type: i0.ElementRef }, { type: ScrollDispatcher }, { type: i0.NgZone }, { type: i2.Directionality, decorators: [{
1444
+ type: Optional
1445
+ }] }];
1446
+ } });
1447
+
1448
+ /**
1449
+ * Provides as virtual scrollable for the global / window scrollbar.
1450
+ */
1451
+ class CdkVirtualScrollableWindow extends CdkVirtualScrollable {
1452
+ constructor(scrollDispatcher, ngZone, dir) {
1453
+ super(new ElementRef(document.documentElement), scrollDispatcher, ngZone, dir);
1454
+ this._elementScrolled = new Observable((observer) => this.ngZone.runOutsideAngular(() => fromEvent(document, 'scroll').pipe(takeUntil(this._destroyed)).subscribe(observer)));
1455
+ }
1456
+ measureBoundingClientRectWithScrollOffset(from) {
1457
+ return this.getElementRef().nativeElement.getBoundingClientRect()[from];
1458
+ }
1459
+ }
1460
+ CdkVirtualScrollableWindow.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkVirtualScrollableWindow, deps: [{ token: ScrollDispatcher }, { token: i0.NgZone }, { token: i2.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
1461
+ CdkVirtualScrollableWindow.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.1", type: CdkVirtualScrollableWindow, selector: "cdk-virtual-scroll-viewport[scrollWindow]", providers: [{ provide: VIRTUAL_SCROLLABLE, useExisting: CdkVirtualScrollableWindow }], usesInheritance: true, ngImport: i0 });
1462
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkVirtualScrollableWindow, decorators: [{
1463
+ type: Directive,
1464
+ args: [{
1465
+ selector: 'cdk-virtual-scroll-viewport[scrollWindow]',
1466
+ providers: [{ provide: VIRTUAL_SCROLLABLE, useExisting: CdkVirtualScrollableWindow }],
1467
+ }]
1468
+ }], ctorParameters: function () {
1469
+ return [{ type: ScrollDispatcher }, { type: i0.NgZone }, { type: i2.Directionality, decorators: [{
1470
+ type: Optional
1471
+ }] }];
1472
+ } });
1473
+
1341
1474
  /**
1342
1475
  * @license
1343
1476
  * Copyright Google LLC All Rights Reserved.
@@ -1347,10 +1480,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ng
1347
1480
  */
1348
1481
  class CdkScrollableModule {
1349
1482
  }
1350
- CdkScrollableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: CdkScrollableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1351
- CdkScrollableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.0-rc.1", ngImport: i0, type: CdkScrollableModule, declarations: [CdkScrollable], exports: [CdkScrollable] });
1352
- CdkScrollableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: CdkScrollableModule });
1353
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: CdkScrollableModule, decorators: [{
1483
+ CdkScrollableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkScrollableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1484
+ CdkScrollableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.1", ngImport: i0, type: CdkScrollableModule, declarations: [CdkScrollable], exports: [CdkScrollable] });
1485
+ CdkScrollableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkScrollableModule });
1486
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: CdkScrollableModule, decorators: [{
1354
1487
  type: NgModule,
1355
1488
  args: [{
1356
1489
  exports: [CdkScrollable],
@@ -1362,12 +1495,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ng
1362
1495
  */
1363
1496
  class ScrollingModule {
1364
1497
  }
1365
- ScrollingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: ScrollingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1366
- ScrollingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.0-rc.1", ngImport: i0, type: ScrollingModule, declarations: [CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport], imports: [BidiModule, CdkScrollableModule], exports: [BidiModule, CdkScrollableModule, CdkFixedSizeVirtualScroll,
1498
+ ScrollingModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: ScrollingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1499
+ ScrollingModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.0.1", ngImport: i0, type: ScrollingModule, declarations: [CdkFixedSizeVirtualScroll,
1500
+ CdkVirtualForOf,
1501
+ CdkVirtualScrollViewport,
1502
+ CdkVirtualScrollableWindow,
1503
+ CdkVirtualScrollableElement], imports: [BidiModule, CdkScrollableModule], exports: [BidiModule, CdkScrollableModule, CdkFixedSizeVirtualScroll,
1367
1504
  CdkVirtualForOf,
1368
- CdkVirtualScrollViewport] });
1369
- ScrollingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: ScrollingModule, imports: [BidiModule, CdkScrollableModule, BidiModule, CdkScrollableModule] });
1370
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ngImport: i0, type: ScrollingModule, decorators: [{
1505
+ CdkVirtualScrollViewport,
1506
+ CdkVirtualScrollableWindow,
1507
+ CdkVirtualScrollableElement] });
1508
+ ScrollingModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: ScrollingModule, imports: [BidiModule, CdkScrollableModule, BidiModule, CdkScrollableModule] });
1509
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.1", ngImport: i0, type: ScrollingModule, decorators: [{
1371
1510
  type: NgModule,
1372
1511
  args: [{
1373
1512
  imports: [BidiModule, CdkScrollableModule],
@@ -1377,8 +1516,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ng
1377
1516
  CdkFixedSizeVirtualScroll,
1378
1517
  CdkVirtualForOf,
1379
1518
  CdkVirtualScrollViewport,
1519
+ CdkVirtualScrollableWindow,
1520
+ CdkVirtualScrollableElement,
1521
+ ],
1522
+ declarations: [
1523
+ CdkFixedSizeVirtualScroll,
1524
+ CdkVirtualForOf,
1525
+ CdkVirtualScrollViewport,
1526
+ CdkVirtualScrollableWindow,
1527
+ CdkVirtualScrollableElement,
1380
1528
  ],
1381
- declarations: [CdkFixedSizeVirtualScroll, CdkVirtualForOf, CdkVirtualScrollViewport],
1382
1529
  }]
1383
1530
  }] });
1384
1531
 
@@ -1402,5 +1549,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-rc.1", ng
1402
1549
  * Generated bundle index. Do not edit.
1403
1550
  */
1404
1551
 
1405
- export { CdkFixedSizeVirtualScroll, CdkScrollable, CdkScrollableModule, CdkVirtualForOf, CdkVirtualScrollViewport, DEFAULT_RESIZE_TIME, DEFAULT_SCROLL_TIME, FixedSizeVirtualScrollStrategy, ScrollDispatcher, ScrollingModule, VIRTUAL_SCROLL_STRATEGY, ViewportRuler, _fixedSizeVirtualScrollStrategyFactory };
1552
+ export { CdkFixedSizeVirtualScroll, CdkScrollable, CdkScrollableModule, CdkVirtualForOf, CdkVirtualScrollViewport, CdkVirtualScrollable, CdkVirtualScrollableElement, CdkVirtualScrollableWindow, DEFAULT_RESIZE_TIME, DEFAULT_SCROLL_TIME, FixedSizeVirtualScrollStrategy, ScrollDispatcher, ScrollingModule, VIRTUAL_SCROLLABLE, VIRTUAL_SCROLL_STRATEGY, ViewportRuler, _fixedSizeVirtualScrollStrategyFactory };
1406
1553
  //# sourceMappingURL=scrolling.mjs.map