{"version":3,"file":"scrolling.es5.js","sources":["../../../src/cdk/scrolling/viewport-ruler.ts","../../../src/cdk/scrolling/scrolling-module.ts","../../../src/cdk/scrolling/virtual-for-of.ts","../../../src/cdk/scrolling/virtual-scroll-viewport.ts","../../../src/cdk/scrolling/scrollable.ts","../../../src/cdk/scrolling/scroll-dispatcher.ts","../../../src/cdk/scrolling/fixed-size-virtual-scroll.ts","../../../src/cdk/scrolling/virtual-scroll-strategy.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {Injectable, NgZone, OnDestroy, Optional, SkipSelf} from '@angular/core';\nimport {merge, of as observableOf, fromEvent, Observable, Subscription} from 'rxjs';\nimport {auditTime} from 'rxjs/operators';\n\n/** Time in ms to throttle the resize events by default. */\nexport const DEFAULT_RESIZE_TIME = 20;\n\n/** Object that holds the scroll position of the viewport in each direction. */\nexport interface ViewportScrollPosition {\n  top: number;\n  left: number;\n}\n\n/**\n * Simple utility for getting the bounds of the browser viewport.\n * @docs-private\n */\n@Injectable({providedIn: 'root'})\nexport class ViewportRuler implements OnDestroy {\n  /** Cached viewport dimensions. */\n  private _viewportSize: {width: number; height: number};\n\n  /** Stream of viewport change events. */\n  private _change: Observable<Event>;\n\n  /** Subscription to streams that invalidate the cached viewport dimensions. */\n  private _invalidateCache: Subscription;\n\n  constructor(private _platform: Platform, ngZone: NgZone) {\n    ngZone.runOutsideAngular(() => {\n      this._change = _platform.isBrowser ?\n          merge(fromEvent(window, 'resize'), fromEvent(window, 'orientationchange')) :\n          observableOf();\n\n      // Note that we need to do the subscription inside `runOutsideAngular`\n      // since subscribing is what causes the event listener to be added.\n      this._invalidateCache = this.change().subscribe(() => this._updateViewportSize());\n    });\n  }\n\n  ngOnDestroy() {\n    this._invalidateCache.unsubscribe();\n  }\n\n  /** Returns the viewport's width and height. */\n  getViewportSize(): Readonly<{width: number, height: number}> {\n    if (!this._viewportSize) {\n      this._updateViewportSize();\n    }\n\n    const output = {width: this._viewportSize.width, height: this._viewportSize.height};\n\n    // If we're not on a browser, don't cache the size since it'll be mocked out anyway.\n    if (!this._platform.isBrowser) {\n      this._viewportSize = null!;\n    }\n\n    return output;\n  }\n\n  /** Gets a ClientRect for the viewport's bounds. */\n  getViewportRect(): ClientRect {\n    // Use the document element's bounding rect rather than the window scroll properties\n    // (e.g. pageYOffset, scrollY) due to in issue in Chrome and IE where window scroll\n    // properties and client coordinates (boundingClientRect, clientX/Y, etc.) are in different\n    // conceptual viewports. Under most circumstances these viewports are equivalent, but they\n    // can disagree when the page is pinch-zoomed (on devices that support touch).\n    // See https://bugs.chromium.org/p/chromium/issues/detail?id=489206#c4\n    // We use the documentElement instead of the body because, by default (without a css reset)\n    // browsers typically give the document body an 8px margin, which is not included in\n    // getBoundingClientRect().\n    const scrollPosition = this.getViewportScrollPosition();\n    const {width, height} = this.getViewportSize();\n\n    return {\n      top: scrollPosition.top,\n      left: scrollPosition.left,\n      bottom: scrollPosition.top + height,\n      right: scrollPosition.left + width,\n      height,\n      width,\n    };\n  }\n\n  /** Gets the (top, left) scroll position of the viewport. */\n  getViewportScrollPosition(): ViewportScrollPosition {\n    // While we can get a reference to the fake document\n    // during SSR, it doesn't have getBoundingClientRect.\n    if (!this._platform.isBrowser) {\n      return {top: 0, left: 0};\n    }\n\n    // The top-left-corner of the viewport is determined by the scroll position of the document\n    // body, normally just (scrollLeft, scrollTop). However, Chrome and Firefox disagree about\n    // whether `document.body` or `document.documentElement` is the scrolled element, so reading\n    // `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding rect of\n    // `document.documentElement` works consistently, where the `top` and `left` values will\n    // equal negative the scroll position.\n    const documentElement = document.documentElement!;\n    const documentRect = documentElement.getBoundingClientRect();\n\n    const top = -documentRect.top || document.body.scrollTop || window.scrollY ||\n                 documentElement.scrollTop || 0;\n\n    const left = -documentRect.left || document.body.scrollLeft || window.scrollX ||\n                  documentElement.scrollLeft || 0;\n\n    return {top, left};\n  }\n\n  /**\n   * Returns a stream that emits whenever the size of the viewport changes.\n   * @param throttleTime Time in milliseconds to throttle the stream.\n   */\n  change(throttleTime: number = DEFAULT_RESIZE_TIME): Observable<Event> {\n    return throttleTime > 0 ? this._change.pipe(auditTime(throttleTime)) : this._change;\n  }\n\n  /** Updates the cached viewport size. */\n  private _updateViewportSize() {\n    this._viewportSize = this._platform.isBrowser ?\n        {width: window.innerWidth, height: window.innerHeight} :\n        {width: 0, height: 0};\n  }\n}\n\n\n/** @docs-private @deprecated @breaking-change 8.0.0 */\nexport function VIEWPORT_RULER_PROVIDER_FACTORY(parentRuler: ViewportRuler,\n                                                platform: Platform,\n                                                ngZone: NgZone) {\n  return parentRuler || new ViewportRuler(platform, ngZone);\n}\n\n/** @docs-private @deprecated @breaking-change 8.0.0 */\nexport const VIEWPORT_RULER_PROVIDER = {\n  // If there is already a ViewportRuler available, use that. Otherwise, provide a new one.\n  provide: ViewportRuler,\n  deps: [[new Optional(), new SkipSelf(), ViewportRuler], Platform, NgZone],\n  useFactory: VIEWPORT_RULER_PROVIDER_FACTORY\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {BidiModule} from '@angular/cdk/bidi';\nimport {PlatformModule} from '@angular/cdk/platform';\nimport {NgModule} from '@angular/core';\nimport {CdkFixedSizeVirtualScroll} from './fixed-size-virtual-scroll';\nimport {CdkScrollable} from './scrollable';\nimport {CdkVirtualForOf} from './virtual-for-of';\nimport {CdkVirtualScrollViewport} from './virtual-scroll-viewport';\n\n@NgModule({\n  imports: [BidiModule, PlatformModule],\n  exports: [\n    BidiModule,\n    CdkFixedSizeVirtualScroll,\n    CdkScrollable,\n    CdkVirtualForOf,\n    CdkVirtualScrollViewport,\n  ],\n  declarations: [\n    CdkFixedSizeVirtualScroll,\n    CdkScrollable,\n    CdkVirtualForOf,\n    CdkVirtualScrollViewport,\n  ],\n})\nexport class ScrollingModule {}\n\n/**\n * @deprecated ScrollDispatchModule has been renamed to ScrollingModule.\n * @breaking-change 8.0.0 delete this alias\n */\n@NgModule({\n  imports: [ScrollingModule],\n  exports: [ScrollingModule],\n})\nexport class ScrollDispatchModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {\n  ArrayDataSource,\n  CollectionViewer,\n  DataSource,\n  ListRange,\n  isDataSource,\n} from '@angular/cdk/collections';\nimport {\n  Directive,\n  DoCheck,\n  EmbeddedViewRef,\n  Input,\n  IterableChangeRecord,\n  IterableChanges,\n  IterableDiffer,\n  IterableDiffers,\n  NgIterable,\n  NgZone,\n  OnDestroy,\n  SkipSelf,\n  TemplateRef,\n  TrackByFunction,\n  ViewContainerRef,\n} from '@angular/core';\nimport {Observable, Subject, of as observableOf} from 'rxjs';\nimport {pairwise, shareReplay, startWith, switchMap, takeUntil} from 'rxjs/operators';\nimport {CdkVirtualScrollViewport} from './virtual-scroll-viewport';\n\n\n/** The context for an item rendered by `CdkVirtualForOf` */\nexport type CdkVirtualForOfContext<T> = {\n  /** The item value. */\n  $implicit: T;\n  /** The DataSource, Observable, or NgIterable that was passed to *cdkVirtualFor. */\n  cdkVirtualForOf: DataSource<T> | Observable<T[]> | NgIterable<T>;\n  /** The index of the item in the DataSource. */\n  index: number;\n  /** The number of items in the DataSource. */\n  count: number;\n  /** Whether this is the first item in the DataSource. */\n  first: boolean;\n  /** Whether this is the last item in the DataSource. */\n  last: boolean;\n  /** Whether the index is even. */\n  even: boolean;\n  /** Whether the index is odd. */\n  odd: boolean;\n};\n\n\n/** Helper to extract size from a DOM Node. */\nfunction getSize(orientation: 'horizontal' | 'vertical', node: Node): number {\n  const el = node as Element;\n  if (!el.getBoundingClientRect) {\n    return 0;\n  }\n  const rect = el.getBoundingClientRect();\n  return orientation == 'horizontal' ? rect.width : rect.height;\n}\n\n\n/**\n * A directive similar to `ngForOf` to be used for rendering data inside a virtual scrolling\n * container.\n */\n@Directive({\n  selector: '[cdkVirtualFor][cdkVirtualForOf]',\n})\nexport class CdkVirtualForOf<T> implements CollectionViewer, DoCheck, OnDestroy {\n  /** Emits when the rendered view of the data changes. */\n  viewChange = new Subject<ListRange>();\n\n  /** Subject that emits when a new DataSource instance is given. */\n  private _dataSourceChanges = new Subject<DataSource<T>>();\n\n  /** The DataSource to display. */\n  @Input()\n  get cdkVirtualForOf(): DataSource<T> | Observable<T[]> | NgIterable<T> {\n    return this._cdkVirtualForOf;\n  }\n  set cdkVirtualForOf(value: DataSource<T> | Observable<T[]> | NgIterable<T>) {\n    this._cdkVirtualForOf = value;\n    const ds = isDataSource(value) ? value :\n        // Slice the value if its an NgIterable to ensure we're working with an array.\n        new ArrayDataSource<T>(\n            value instanceof Observable ? value : Array.prototype.slice.call(value || []));\n    this._dataSourceChanges.next(ds);\n  }\n  _cdkVirtualForOf: DataSource<T> | Observable<T[]> | NgIterable<T>;\n\n  /**\n   * The `TrackByFunction` to use for tracking changes. The `TrackByFunction` takes the index and\n   * the item and produces a value to be used as the item's identity when tracking changes.\n   */\n  @Input()\n  get cdkVirtualForTrackBy(): TrackByFunction<T> | undefined {\n    return this._cdkVirtualForTrackBy;\n  }\n  set cdkVirtualForTrackBy(fn: TrackByFunction<T> | undefined) {\n    this._needsUpdate = true;\n    this._cdkVirtualForTrackBy = fn ?\n        (index, item) => fn(index + (this._renderedRange ? this._renderedRange.start : 0), item) :\n        undefined;\n  }\n  private _cdkVirtualForTrackBy: TrackByFunction<T> | undefined;\n\n  /** The template used to stamp out new elements. */\n  @Input()\n  set cdkVirtualForTemplate(value: TemplateRef<CdkVirtualForOfContext<T>>) {\n    if (value) {\n      this._needsUpdate = true;\n      this._template = value;\n    }\n  }\n\n  /**\n   * The size of the cache used to store templates that are not being used for re-use later.\n   * Setting the cache size to `0` will disable caching. Defaults to 20 templates.\n   */\n  @Input() cdkVirtualForTemplateCacheSize: number = 20;\n\n  /** Emits whenever the data in the current DataSource changes. */\n  dataStream: Observable<T[] | ReadonlyArray<T>> = this._dataSourceChanges\n      .pipe(\n          // Start off with null `DataSource`.\n          startWith(null!),\n          // Bundle up the previous and current data sources so we can work with both.\n          pairwise(),\n          // Use `_changeDataSource` to disconnect from the previous data source and connect to the\n          // new one, passing back a stream of data changes which we run through `switchMap` to give\n          // us a data stream that emits the latest data from whatever the current `DataSource` is.\n          switchMap(([prev, cur]) => this._changeDataSource(prev, cur)),\n          // Replay the last emitted data when someone subscribes.\n          shareReplay(1));\n\n  /** The differ used to calculate changes to the data. */\n  private _differ: IterableDiffer<T> | null = null;\n\n  /** The most recent data emitted from the DataSource. */\n  private _data: T[] | ReadonlyArray<T>;\n\n  /** The currently rendered items. */\n  private _renderedItems: T[];\n\n  /** The currently rendered range of indices. */\n  private _renderedRange: ListRange;\n\n  /**\n   * The template cache used to hold on ot template instancess that have been stamped out, but don't\n   * currently need to be rendered. These instances will be reused in the future rather than\n   * stamping out brand new ones.\n   */\n  private _templateCache: EmbeddedViewRef<CdkVirtualForOfContext<T>>[] = [];\n\n  /** Whether the rendered data should be updated during the next ngDoCheck cycle. */\n  private _needsUpdate = false;\n\n  private _destroyed = new Subject<void>();\n\n  constructor(\n      /** The view container to add items to. */\n      private _viewContainerRef: ViewContainerRef,\n      /** The template to use when stamping out new items. */\n      private _template: TemplateRef<CdkVirtualForOfContext<T>>,\n      /** The set of available differs. */\n      private _differs: IterableDiffers,\n      /** The virtual scrolling viewport that these items are being rendered in. */\n      @SkipSelf() private _viewport: CdkVirtualScrollViewport,\n      ngZone: NgZone) {\n    this.dataStream.subscribe(data => {\n      this._data = data;\n      this._onRenderedDataChange();\n    });\n    this._viewport.renderedRangeStream.pipe(takeUntil(this._destroyed)).subscribe(range => {\n      this._renderedRange = range;\n      ngZone.run(() => this.viewChange.next(this._renderedRange));\n      this._onRenderedDataChange();\n    });\n    this._viewport.attach(this);\n  }\n\n  /**\n   * Measures the combined size (width for horizontal orientation, height for vertical) of all items\n   * in the specified range. Throws an error if the range includes items that are not currently\n   * rendered.\n   */\n  measureRangeSize(range: ListRange, orientation: 'horizontal' | 'vertical'): number {\n    if (range.start >= range.end) {\n      return 0;\n    }\n    if (range.start < this._renderedRange.start || range.end > this._renderedRange.end) {\n      throw Error(`Error: attempted to measure an item that isn't rendered.`);\n    }\n\n    // The index into the list of rendered views for the first item in the range.\n    const renderedStartIndex = range.start - this._renderedRange.start;\n    // The length of the range we're measuring.\n    const rangeLen = range.end - range.start;\n\n    // Loop over all root nodes for all items in the range and sum up their size.\n    let totalSize = 0;\n    let i = rangeLen;\n    while (i--) {\n      const view = this._viewContainerRef.get(i + renderedStartIndex) as\n          EmbeddedViewRef<CdkVirtualForOfContext<T>> | null;\n      let j = view ? view.rootNodes.length : 0;\n      while (j--) {\n        totalSize += getSize(orientation, view!.rootNodes[j]);\n      }\n    }\n\n    return totalSize;\n  }\n\n  ngDoCheck() {\n    if (this._differ && this._needsUpdate) {\n      // TODO(mmalerba): We should differentiate needs update due to scrolling and a new portion of\n      // this list being rendered (can use simpler algorithm) vs needs update due to data actually\n      // changing (need to do this diff).\n      const changes = this._differ.diff(this._renderedItems);\n      if (!changes) {\n        this._updateContext();\n      } else {\n        this._applyChanges(changes);\n      }\n      this._needsUpdate = false;\n    }\n  }\n\n  ngOnDestroy() {\n    this._viewport.detach();\n\n    this._dataSourceChanges.next();\n    this._dataSourceChanges.complete();\n    this.viewChange.complete();\n\n    this._destroyed.next();\n    this._destroyed.complete();\n\n    for (let view of this._templateCache) {\n      view.destroy();\n    }\n  }\n\n  /** React to scroll state changes in the viewport. */\n  private _onRenderedDataChange() {\n    if (!this._renderedRange) {\n      return;\n    }\n    this._renderedItems = this._data.slice(this._renderedRange.start, this._renderedRange.end);\n    if (!this._differ) {\n      this._differ = this._differs.find(this._renderedItems).create(this.cdkVirtualForTrackBy);\n    }\n    this._needsUpdate = true;\n  }\n\n  /** Swap out one `DataSource` for another. */\n  private _changeDataSource(oldDs: DataSource<T> | null, newDs: DataSource<T> | null):\n    Observable<T[] | ReadonlyArray<T>> {\n\n    if (oldDs) {\n      oldDs.disconnect(this);\n    }\n\n    this._needsUpdate = true;\n    return newDs ? newDs.connect(this) : observableOf();\n  }\n\n  /** Update the `CdkVirtualForOfContext` for all views. */\n  private _updateContext() {\n    const count = this._data.length;\n    let i = this._viewContainerRef.length;\n    while (i--) {\n      let view = this._viewContainerRef.get(i) as EmbeddedViewRef<CdkVirtualForOfContext<T>>;\n      view.context.index = this._renderedRange.start + i;\n      view.context.count = count;\n      this._updateComputedContextProperties(view.context);\n      view.detectChanges();\n    }\n  }\n\n  /** Apply changes to the DOM. */\n  private _applyChanges(changes: IterableChanges<T>) {\n    // Rearrange the views to put them in the right location.\n    changes.forEachOperation((record: IterableChangeRecord<T>,\n                              adjustedPreviousIndex: number | null,\n                              currentIndex: number | null) => {\n      if (record.previousIndex == null) {  // Item added.\n        const view = this._insertViewForNewItem(currentIndex!);\n        view.context.$implicit = record.item;\n      } else if (currentIndex == null) {  // Item removed.\n        this._cacheView(this._detachView(adjustedPreviousIndex !));\n      } else {  // Item moved.\n        const view = this._viewContainerRef.get(adjustedPreviousIndex!) as\n            EmbeddedViewRef<CdkVirtualForOfContext<T>>;\n        this._viewContainerRef.move(view, currentIndex);\n        view.context.$implicit = record.item;\n      }\n    });\n\n    // Update $implicit for any items that had an identity change.\n    changes.forEachIdentityChange((record: IterableChangeRecord<T>) => {\n      const view = this._viewContainerRef.get(record.currentIndex!) as\n          EmbeddedViewRef<CdkVirtualForOfContext<T>>;\n      view.context.$implicit = record.item;\n    });\n\n    // Update the context variables on all items.\n    const count = this._data.length;\n    let i = this._viewContainerRef.length;\n    while (i--) {\n      const view = this._viewContainerRef.get(i) as EmbeddedViewRef<CdkVirtualForOfContext<T>>;\n      view.context.index = this._renderedRange.start + i;\n      view.context.count = count;\n      this._updateComputedContextProperties(view.context);\n    }\n  }\n\n  /** Cache the given detached view. */\n  private _cacheView(view: EmbeddedViewRef<CdkVirtualForOfContext<T>>) {\n    if (this._templateCache.length < this.cdkVirtualForTemplateCacheSize) {\n      this._templateCache.push(view);\n    } else {\n      const index = this._viewContainerRef.indexOf(view);\n\n      // It's very unlikely that the index will ever be -1, but just in case,\n      // destroy the view on its own, otherwise destroy it through the\n      // container to ensure that all the references are removed.\n      if (index === -1) {\n        view.destroy();\n      } else {\n        this._viewContainerRef.remove(index);\n      }\n    }\n  }\n\n  /** Inserts a view for a new item, either from the cache or by creating a new one. */\n  private _insertViewForNewItem(index: number): EmbeddedViewRef<CdkVirtualForOfContext<T>> {\n    return this._insertViewFromCache(index) || this._createEmbeddedViewAt(index);\n  }\n\n  /** Update the computed properties on the `CdkVirtualForOfContext`. */\n  private _updateComputedContextProperties(context: CdkVirtualForOfContext<any>) {\n    context.first = context.index === 0;\n    context.last = context.index === context.count - 1;\n    context.even = context.index % 2 === 0;\n    context.odd = !context.even;\n  }\n\n  /** Creates a new embedded view and moves it to the given index */\n  private _createEmbeddedViewAt(index: number): EmbeddedViewRef<CdkVirtualForOfContext<T>> {\n    // Note that it's important that we insert the item directly at the proper index,\n    // rather than inserting it and the moving it in place, because if there's a directive\n    // on the same node that injects the `ViewContainerRef`, Angular will insert another\n    // comment node which can throw off the move when it's being repeated for all items.\n    return this._viewContainerRef.createEmbeddedView(this._template, {\n      $implicit: null!,\n      cdkVirtualForOf: this._cdkVirtualForOf,\n      index: -1,\n      count: -1,\n      first: false,\n      last: false,\n      odd: false,\n      even: false\n    }, index);\n  }\n\n  /** Inserts a recycled view from the cache at the given index. */\n  private _insertViewFromCache(index: number): EmbeddedViewRef<CdkVirtualForOfContext<T>>|null {\n    const cachedView = this._templateCache.pop();\n    if (cachedView) {\n      this._viewContainerRef.insert(cachedView, index);\n    }\n    return cachedView || null;\n  }\n\n  /** Detaches the embedded view at the given index. */\n  private _detachView(index: number): EmbeddedViewRef<CdkVirtualForOfContext<T>> {\n    return this._viewContainerRef.detach(index) as\n        EmbeddedViewRef<CdkVirtualForOfContext<T>>;\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directionality} from '@angular/cdk/bidi';\nimport {ListRange} from '@angular/cdk/collections';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  Inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {animationFrameScheduler, asapScheduler, Observable, Subject, Observer} from 'rxjs';\nimport {auditTime, startWith, takeUntil} from 'rxjs/operators';\nimport {ScrollDispatcher} from './scroll-dispatcher';\nimport {CdkScrollable, ExtendedScrollToOptions} from './scrollable';\nimport {CdkVirtualForOf} from './virtual-for-of';\nimport {VIRTUAL_SCROLL_STRATEGY, VirtualScrollStrategy} from './virtual-scroll-strategy';\n\n\n/** Checks if the given ranges are equal. */\nfunction rangesEqual(r1: ListRange, r2: ListRange): boolean {\n  return r1.start == r2.start && r1.end == r2.end;\n}\n\n/**\n * Scheduler to be used for scroll events. Needs to fall back to\n * something that doesn't rely on requestAnimationFrame on environments\n * that don't support it (e.g. server-side rendering).\n */\nconst SCROLL_SCHEDULER =\n    typeof requestAnimationFrame !== 'undefined' ? animationFrameScheduler : asapScheduler;\n\n\n/** A viewport that virtualizes it's scrolling with the help of `CdkVirtualForOf`. */\n@Component({\n  moduleId: module.id,\n  selector: 'cdk-virtual-scroll-viewport',\n  templateUrl: 'virtual-scroll-viewport.html',\n  styleUrls: ['virtual-scroll-viewport.css'],\n  host: {\n    'class': 'cdk-virtual-scroll-viewport',\n    '[class.cdk-virtual-scroll-orientation-horizontal]': 'orientation === \"horizontal\"',\n    '[class.cdk-virtual-scroll-orientation-vertical]': 'orientation !== \"horizontal\"',\n  },\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{\n    provide: CdkScrollable,\n    useExisting: CdkVirtualScrollViewport,\n  }]\n})\nexport class CdkVirtualScrollViewport extends CdkScrollable implements OnInit, OnDestroy {\n  /** Emits when the viewport is detached from a CdkVirtualForOf. */\n  private _detachedSubject = new Subject<void>();\n\n  /** Emits when the rendered range changes. */\n  private _renderedRangeSubject = new Subject<ListRange>();\n\n  /** The direction the viewport scrolls. */\n  @Input() orientation: 'horizontal' | 'vertical' = 'vertical';\n\n  // Note: we don't use the typical EventEmitter here because we need to subscribe to the scroll\n  // strategy lazily (i.e. only if the user is actually listening to the events). We do this because\n  // depending on how the strategy calculates the scrolled index, it may come at a cost to\n  // performance.\n  /** Emits when the index of the first element visible in the viewport changes. */\n  @Output() scrolledIndexChange: Observable<number> =\n      new Observable((observer: Observer<number>) =>\n        this._scrollStrategy.scrolledIndexChange.subscribe(index =>\n            Promise.resolve().then(() => this.ngZone.run(() => observer.next(index)))));\n\n  /** The element that wraps the rendered content. */\n  @ViewChild('contentWrapper', {static: true}) _contentWrapper: ElementRef<HTMLElement>;\n\n  /** A stream that emits whenever the rendered range changes. */\n  renderedRangeStream: Observable<ListRange> = this._renderedRangeSubject.asObservable();\n\n  /**\n   * The transform used to scale the spacer to the same size as all content, including content that\n   * is not currently rendered.\n   */\n  _totalContentSizeTransform = '';\n\n  /**\n   * The total size of all content (in pixels), including content that is not currently rendered.\n   */\n  private _totalContentSize = 0;\n\n  /**\n   * The CSS transform applied to the rendered subset of items so that they appear within the bounds\n   * of the visible viewport.\n   */\n  private _renderedContentTransform: string;\n\n  /** The currently rendered range of indices. */\n  private _renderedRange: ListRange = {start: 0, end: 0};\n\n  /** The length of the data bound to this viewport (in number of items). */\n  private _dataLength = 0;\n\n  /** The size of the viewport (in pixels). */\n  private _viewportSize = 0;\n\n  /** the currently attached CdkVirtualForOf. */\n  private _forOf: CdkVirtualForOf<any> | null;\n\n  /** The last rendered content offset that was set. */\n  private _renderedContentOffset = 0;\n\n  /**\n   * Whether the last rendered content offset was to the end of the content (and therefore needs to\n   * be rewritten as an offset to the start of the content).\n   */\n  private _renderedContentOffsetNeedsRewrite = false;\n\n  /** Whether there is a pending change detection cycle. */\n  private _isChangeDetectionPending = false;\n\n  /** A list of functions to run after the next change detection cycle. */\n  private _runAfterChangeDetection: Function[] = [];\n\n  constructor(public elementRef: ElementRef<HTMLElement>,\n              private _changeDetectorRef: ChangeDetectorRef,\n              ngZone: NgZone,\n              @Optional() @Inject(VIRTUAL_SCROLL_STRATEGY)\n                  private _scrollStrategy: VirtualScrollStrategy,\n              @Optional() dir: Directionality,\n              scrollDispatcher: ScrollDispatcher) {\n    super(elementRef, scrollDispatcher, ngZone, dir);\n\n    if (!_scrollStrategy) {\n      throw Error('Error: cdk-virtual-scroll-viewport requires the \"itemSize\" property to be set.');\n    }\n  }\n\n  ngOnInit() {\n    super.ngOnInit();\n\n    // It's still too early to measure the viewport at this point. Deferring with a promise allows\n    // the Viewport to be rendered with the correct size before we measure. We run this outside the\n    // zone to avoid causing more change detection cycles. We handle the change detection loop\n    // ourselves instead.\n    this.ngZone.runOutsideAngular(() => Promise.resolve().then(() => {\n      this._measureViewportSize();\n      this._scrollStrategy.attach(this);\n\n      this.elementScrolled()\n          .pipe(\n              // Start off with a fake scroll event so we properly detect our initial position.\n              startWith(null!),\n              // Collect multiple events into one until the next animation frame. This way if\n              // there are multiple scroll events in the same frame we only need to recheck\n              // our layout once.\n              auditTime(0, SCROLL_SCHEDULER))\n          .subscribe(() => this._scrollStrategy.onContentScrolled());\n\n      this._markChangeDetectionNeeded();\n    }));\n  }\n\n  ngOnDestroy() {\n    this.detach();\n    this._scrollStrategy.detach();\n\n    // Complete all subjects\n    this._renderedRangeSubject.complete();\n    this._detachedSubject.complete();\n\n    super.ngOnDestroy();\n  }\n\n  /** Attaches a `CdkVirtualForOf` to this viewport. */\n  attach(forOf: CdkVirtualForOf<any>) {\n    if (this._forOf) {\n      throw Error('CdkVirtualScrollViewport is already attached.');\n    }\n\n    // Subscribe to the data stream of the CdkVirtualForOf to keep track of when the data length\n    // changes. Run outside the zone to avoid triggering change detection, since we're managing the\n    // change detection loop ourselves.\n    this.ngZone.runOutsideAngular(() => {\n      this._forOf = forOf;\n      this._forOf.dataStream.pipe(takeUntil(this._detachedSubject)).subscribe(data => {\n        const newLength = data.length;\n        if (newLength !== this._dataLength) {\n          this._dataLength = newLength;\n          this._scrollStrategy.onDataLengthChanged();\n        }\n        this._doChangeDetection();\n      });\n    });\n  }\n\n  /** Detaches the current `CdkVirtualForOf`. */\n  detach() {\n    this._forOf = null;\n    this._detachedSubject.next();\n  }\n\n  /** Gets the length of the data bound to this viewport (in number of items). */\n  getDataLength(): number {\n    return this._dataLength;\n  }\n\n  /** Gets the size of the viewport (in pixels). */\n  getViewportSize(): number {\n    return this._viewportSize;\n  }\n\n  // TODO(mmalerba): This is technically out of sync with what's really rendered until a render\n  // cycle happens. I'm being careful to only call it after the render cycle is complete and before\n  // setting it to something else, but its error prone and should probably be split into\n  // `pendingRange` and `renderedRange`, the latter reflecting whats actually in the DOM.\n\n  /** Get the current rendered range of items. */\n  getRenderedRange(): ListRange {\n    return this._renderedRange;\n  }\n\n  /**\n   * Sets the total size of all content (in pixels), including content that is not currently\n   * rendered.\n   */\n  setTotalContentSize(size: number) {\n    if (this._totalContentSize !== size) {\n      this._totalContentSize = size;\n      const axis = this.orientation == 'horizontal' ? 'X' : 'Y';\n      this._totalContentSizeTransform = `scale${axis}(${this._totalContentSize})`;\n      this._markChangeDetectionNeeded();\n    }\n  }\n\n  /** Sets the currently rendered range of indices. */\n  setRenderedRange(range: ListRange) {\n    if (!rangesEqual(this._renderedRange, range)) {\n      this._renderedRangeSubject.next(this._renderedRange = range);\n      this._markChangeDetectionNeeded(() => this._scrollStrategy.onContentRendered());\n    }\n  }\n\n  /**\n   * Gets the offset from the start of the viewport to the start of the rendered data (in pixels).\n   */\n  getOffsetToRenderedContentStart(): number | null {\n    return this._renderedContentOffsetNeedsRewrite ? null : this._renderedContentOffset;\n  }\n\n  /**\n   * Sets the offset from the start of the viewport to either the start or end of the rendered data\n   * (in pixels).\n   */\n  setRenderedContentOffset(offset: number, to: 'to-start' | 'to-end' = 'to-start') {\n    // For a horizontal viewport in a right-to-left language we need to translate along the x-axis\n    // in the negative direction.\n    const isRtl = this.dir && this.dir.value == 'rtl';\n    const isHorizontal = this.orientation == 'horizontal';\n    const axis = isHorizontal ? 'X' : 'Y';\n    const axisDirection = isHorizontal && isRtl ? -1 : 1;\n    let transform = `translate${axis}(${Number(axisDirection * offset)}px)`;\n    this._renderedContentOffset = offset;\n    if (to === 'to-end') {\n      transform += ` translate${axis}(-100%)`;\n      // The viewport should rewrite this as a `to-start` offset on the next render cycle. Otherwise\n      // elements will appear to expand in the wrong direction (e.g. `mat-expansion-panel` would\n      // expand upward).\n      this._renderedContentOffsetNeedsRewrite = true;\n    }\n    if (this._renderedContentTransform != transform) {\n      // We know this value is safe because we parse `offset` with `Number()` before passing it\n      // into the string.\n      this._renderedContentTransform = transform;\n      this._markChangeDetectionNeeded(() => {\n        if (this._renderedContentOffsetNeedsRewrite) {\n          this._renderedContentOffset -= this.measureRenderedContentSize();\n          this._renderedContentOffsetNeedsRewrite = false;\n          this.setRenderedContentOffset(this._renderedContentOffset);\n        } else {\n          this._scrollStrategy.onRenderedOffsetChanged();\n        }\n      });\n    }\n  }\n\n  /**\n   * Scrolls to the given offset from the start of the viewport. Please note that this is not always\n   * the same as setting `scrollTop` or `scrollLeft`. In a horizontal viewport with right-to-left\n   * direction, this would be the equivalent of setting a fictional `scrollRight` property.\n   * @param offset The offset to scroll to.\n   * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.\n   */\n  scrollToOffset(offset: number, behavior: ScrollBehavior = 'auto') {\n    const options: ExtendedScrollToOptions = {behavior};\n    if (this.orientation === 'horizontal') {\n      options.start = offset;\n    } else {\n      options.top = offset;\n    }\n    this.scrollTo(options);\n  }\n\n  /**\n   * Scrolls to the offset for the given index.\n   * @param index The index of the element to scroll to.\n   * @param behavior The ScrollBehavior to use when scrolling. Default is behavior is `auto`.\n   */\n  scrollToIndex(index: number,  behavior: ScrollBehavior = 'auto') {\n    this._scrollStrategy.scrollToIndex(index, behavior);\n  }\n\n  /**\n   * Gets the current scroll offset from the start of the viewport (in pixels).\n   * @param from The edge to measure the offset from. Defaults to 'top' in vertical mode and 'start'\n   *     in horizontal mode.\n   */\n  measureScrollOffset(from?: 'top' | 'left' | 'right' | 'bottom' | 'start' | 'end'): number {\n    return super.measureScrollOffset(\n        from ? from : this.orientation === 'horizontal' ? 'start' : 'top');\n  }\n\n  /** Measure the combined size of all of the rendered items. */\n  measureRenderedContentSize(): number {\n    const contentEl = this._contentWrapper.nativeElement;\n    return this.orientation === 'horizontal' ? contentEl.offsetWidth : contentEl.offsetHeight;\n  }\n\n  /**\n   * Measure the total combined size of the given range. Throws if the range includes items that are\n   * not rendered.\n   */\n  measureRangeSize(range: ListRange): number {\n    if (!this._forOf) {\n      return 0;\n    }\n    return this._forOf.measureRangeSize(range, this.orientation);\n  }\n\n  /** Update the viewport dimensions and re-render. */\n  checkViewportSize() {\n    // TODO: Cleanup later when add logic for handling content resize\n    this._measureViewportSize();\n    this._scrollStrategy.onDataLengthChanged();\n  }\n\n  /** Measure the viewport size. */\n  private _measureViewportSize() {\n    const viewportEl = this.elementRef.nativeElement;\n    this._viewportSize = this.orientation === 'horizontal' ?\n        viewportEl.clientWidth : viewportEl.clientHeight;\n  }\n\n  /** Queue up change detection to run. */\n  private _markChangeDetectionNeeded(runAfter?: Function) {\n    if (runAfter) {\n      this._runAfterChangeDetection.push(runAfter);\n    }\n\n    // Use a Promise to batch together calls to `_doChangeDetection`. This way if we set a bunch of\n    // properties sequentially we only have to run `_doChangeDetection` once at the end.\n    if (!this._isChangeDetectionPending) {\n      this._isChangeDetectionPending = true;\n      this.ngZone.runOutsideAngular(() => Promise.resolve().then(() => {\n        this._doChangeDetection();\n      }));\n    }\n  }\n\n  /** Run change detection. */\n  private _doChangeDetection() {\n    this._isChangeDetectionPending = false;\n\n    // Apply changes to Angular bindings. Note: We must call `markForCheck` to run change detection\n    // from the root, since the repeated items are content projected in. Calling `detectChanges`\n    // instead does not properly check the projected content.\n    this.ngZone.run(() => this._changeDetectorRef.markForCheck());\n    // Apply the content transform. The transform can't be set via an Angular binding because\n    // bypassSecurityTrustStyle is banned in Google. However the value is safe, it's composed of\n    // string literals, a variable that can only be 'X' or 'Y', and user input that is run through\n    // the `Number` function first to coerce it to a numeric value.\n    this._contentWrapper.nativeElement.style.transform = this._renderedContentTransform;\n\n    const runAfterChangeDetection = this._runAfterChangeDetection;\n    this._runAfterChangeDetection = [];\n    for (const fn of runAfterChangeDetection) {\n      fn();\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Directionality} from '@angular/cdk/bidi';\nimport {\n  getRtlScrollAxisType,\n  RtlScrollAxisType,\n  supportsScrollBehavior\n} from '@angular/cdk/platform';\nimport {Directive, ElementRef, NgZone, OnDestroy, OnInit, Optional} from '@angular/core';\nimport {fromEvent, Observable, Subject, Observer} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {ScrollDispatcher} from './scroll-dispatcher';\n\nexport type _Without<T> = {[P in keyof T]?: never};\nexport type _XOR<T, U> = (_Without<T> & U) | (_Without<U> & T);\nexport type _Top = {top?: number};\nexport type _Bottom = {bottom?: number};\nexport type _Left = {left?: number};\nexport type _Right = {right?: number};\nexport type _Start = {start?: number};\nexport type _End = {end?: number};\nexport type _XAxis = _XOR<_XOR<_Left, _Right>, _XOR<_Start, _End>>;\nexport type _YAxis = _XOR<_Top, _Bottom>;\n\n/**\n * An extended version of ScrollToOptions that allows expressing scroll offsets relative to the\n * top, bottom, left, right, start, or end of the viewport rather than just the top and left.\n * Please note: the top and bottom properties are mutually exclusive, as are the left, right,\n * start, and end properties.\n */\nexport type ExtendedScrollToOptions = _XAxis & _YAxis & ScrollOptions;\n\n/**\n * Sends an event when the directive's element is scrolled. Registers itself with the\n * ScrollDispatcher service to include itself as part of its collection of scrolling events that it\n * can be listened to through the service.\n */\n@Directive({\n  selector: '[cdk-scrollable], [cdkScrollable]'\n})\nexport class CdkScrollable implements OnInit, OnDestroy {\n  private _destroyed = new Subject();\n\n  private _elementScrolled: Observable<Event> = new Observable((observer: Observer<Event>) =>\n      this.ngZone.runOutsideAngular(() =>\n          fromEvent(this.elementRef.nativeElement, 'scroll').pipe(takeUntil(this._destroyed))\n              .subscribe(observer)));\n\n  constructor(protected elementRef: ElementRef<HTMLElement>,\n              protected scrollDispatcher: ScrollDispatcher,\n              protected ngZone: NgZone,\n              @Optional() protected dir?: Directionality) {}\n\n  ngOnInit() {\n    this.scrollDispatcher.register(this);\n  }\n\n  ngOnDestroy() {\n    this.scrollDispatcher.deregister(this);\n    this._destroyed.next();\n    this._destroyed.complete();\n  }\n\n  /** Returns observable that emits when a scroll event is fired on the host element. */\n  elementScrolled(): Observable<Event> {\n    return this._elementScrolled;\n  }\n\n  /** Gets the ElementRef for the viewport. */\n  getElementRef(): ElementRef<HTMLElement> {\n    return this.elementRef;\n  }\n\n  /**\n   * Scrolls to the specified offsets. This is a normalized version of the browser's native scrollTo\n   * method, since browsers are not consistent about what scrollLeft means in RTL. For this method\n   * left and right always refer to the left and right side of the scrolling container irrespective\n   * of the layout direction. start and end refer to left and right in an LTR context and vice-versa\n   * in an RTL context.\n   * @param options specified the offsets to scroll to.\n   */\n  scrollTo(options: ExtendedScrollToOptions): void {\n    const el = this.elementRef.nativeElement;\n    const isRtl = this.dir && this.dir.value == 'rtl';\n\n    // Rewrite start & end offsets as right or left offsets.\n    options.left = options.left == null ? (isRtl ? options.end : options.start) : options.left;\n    options.right = options.right == null ? (isRtl ? options.start : options.end) : options.right;\n\n    // Rewrite the bottom offset as a top offset.\n    if (options.bottom != null) {\n      (options as _Without<_Bottom> & _Top).top =\n          el.scrollHeight - el.clientHeight - options.bottom;\n    }\n\n    // Rewrite the right offset as a left offset.\n    if (isRtl && getRtlScrollAxisType() != RtlScrollAxisType.NORMAL) {\n      if (options.left != null) {\n        (options as _Without<_Left> & _Right).right =\n            el.scrollWidth - el.clientWidth - options.left;\n      }\n\n      if (getRtlScrollAxisType() == RtlScrollAxisType.INVERTED) {\n        options.left = options.right;\n      } else if (getRtlScrollAxisType() == RtlScrollAxisType.NEGATED) {\n        options.left = options.right ? -options.right : options.right;\n      }\n    } else {\n      if (options.right != null) {\n        (options as _Without<_Right> & _Left).left =\n            el.scrollWidth - el.clientWidth - options.right;\n      }\n    }\n\n    this._applyScrollToOptions(options);\n  }\n\n  private _applyScrollToOptions(options: ScrollToOptions): void {\n    const el = this.elementRef.nativeElement;\n\n    if (supportsScrollBehavior()) {\n      el.scrollTo(options);\n    } else {\n      if (options.top != null) {\n        el.scrollTop = options.top;\n      }\n      if (options.left != null) {\n        el.scrollLeft = options.left;\n      }\n    }\n  }\n\n  /**\n   * Measures the scroll offset relative to the specified edge of the viewport. This method can be\n   * used instead of directly checking scrollLeft or scrollTop, since browsers are not consistent\n   * about what scrollLeft means in RTL. The values returned by this method are normalized such that\n   * left and right always refer to the left and right side of the scrolling container irrespective\n   * of the layout direction. start and end refer to left and right in an LTR context and vice-versa\n   * in an RTL context.\n   * @param from The edge to measure from.\n   */\n  measureScrollOffset(from: 'top' | 'left' | 'right' | 'bottom' | 'start' | 'end'): number {\n    const LEFT = 'left';\n    const RIGHT = 'right';\n    const el = this.elementRef.nativeElement;\n    if (from == 'top') {\n      return el.scrollTop;\n    }\n    if (from == 'bottom') {\n      return el.scrollHeight - el.clientHeight - el.scrollTop;\n    }\n\n    // Rewrite start & end as left or right offsets.\n    const isRtl = this.dir && this.dir.value == 'rtl';\n    if (from == 'start') {\n      from = isRtl ? RIGHT : LEFT;\n    } else if (from == 'end') {\n      from = isRtl ? LEFT : RIGHT;\n    }\n\n    if (isRtl && getRtlScrollAxisType() == RtlScrollAxisType.INVERTED) {\n      // For INVERTED, scrollLeft is (scrollWidth - clientWidth) when scrolled all the way left and\n      // 0 when scrolled all the way right.\n      if (from == LEFT) {\n        return el.scrollWidth - el.clientWidth - el.scrollLeft;\n      } else {\n        return el.scrollLeft;\n      }\n    } else if (isRtl && getRtlScrollAxisType() == RtlScrollAxisType.NEGATED) {\n      // For NEGATED, scrollLeft is -(scrollWidth - clientWidth) when scrolled all the way left and\n      // 0 when scrolled all the way right.\n      if (from == LEFT) {\n        return el.scrollLeft + el.scrollWidth - el.clientWidth;\n      } else {\n        return -el.scrollLeft;\n      }\n    } else {\n      // For NORMAL, as well as non-RTL contexts, scrollLeft is 0 when scrolled all the way left and\n      // (scrollWidth - clientWidth) when scrolled all the way right.\n      if (from == LEFT) {\n        return el.scrollLeft;\n      } else {\n        return el.scrollWidth - el.clientWidth - el.scrollLeft;\n      }\n    }\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {Platform} from '@angular/cdk/platform';\nimport {\n  ElementRef,\n  Injectable,\n  NgZone,\n  OnDestroy,\n  Optional,\n  SkipSelf,\n} from '@angular/core';\nimport {fromEvent, of as observableOf, Subject, Subscription, Observable, Observer} from 'rxjs';\nimport {auditTime, filter} from 'rxjs/operators';\nimport {CdkScrollable} from './scrollable';\n\n\n/** Time in ms to throttle the scrolling events by default. */\nexport const DEFAULT_SCROLL_TIME = 20;\n\n/**\n * Service contained all registered Scrollable references and emits an event when any one of the\n * Scrollable references emit a scrolled event.\n */\n@Injectable({providedIn: 'root'})\nexport class ScrollDispatcher implements OnDestroy {\n  constructor(private _ngZone: NgZone, private _platform: Platform) { }\n\n  /** Subject for notifying that a registered scrollable reference element has been scrolled. */\n  private _scrolled = new Subject<CdkScrollable|void>();\n\n  /** Keeps track of the global `scroll` and `resize` subscriptions. */\n  _globalSubscription: Subscription | null = null;\n\n  /** Keeps track of the amount of subscriptions to `scrolled`. Used for cleaning up afterwards. */\n  private _scrolledCount = 0;\n\n  /**\n   * Map of all the scrollable references that are registered with the service and their\n   * scroll event subscriptions.\n   */\n  scrollContainers: Map<CdkScrollable, Subscription> = new Map();\n\n  /**\n   * Registers a scrollable instance with the service and listens for its scrolled events. When the\n   * scrollable is scrolled, the service emits the event to its scrolled observable.\n   * @param scrollable Scrollable instance to be registered.\n   */\n  register(scrollable: CdkScrollable): void {\n    if (!this.scrollContainers.has(scrollable)) {\n      this.scrollContainers.set(scrollable, scrollable.elementScrolled()\n          .subscribe(() => this._scrolled.next(scrollable)));\n    }\n  }\n\n  /**\n   * Deregisters a Scrollable reference and unsubscribes from its scroll event observable.\n   * @param scrollable Scrollable instance to be deregistered.\n   */\n  deregister(scrollable: CdkScrollable): void {\n    const scrollableReference = this.scrollContainers.get(scrollable);\n\n    if (scrollableReference) {\n      scrollableReference.unsubscribe();\n      this.scrollContainers.delete(scrollable);\n    }\n  }\n\n  /**\n   * Returns an observable that emits an event whenever any of the registered Scrollable\n   * references (or window, document, or body) fire a scrolled event. Can provide a time in ms\n   * to override the default \"throttle\" time.\n   *\n   * **Note:** in order to avoid hitting change detection for every scroll event,\n   * all of the events emitted from this stream will be run outside the Angular zone.\n   * If you need to update any data bindings as a result of a scroll event, you have\n   * to run the callback using `NgZone.run`.\n   */\n  scrolled(auditTimeInMs: number = DEFAULT_SCROLL_TIME): Observable<CdkScrollable|void> {\n    if (!this._platform.isBrowser) {\n      return observableOf<void>();\n    }\n\n    return new Observable((observer: Observer<CdkScrollable|void>) => {\n      if (!this._globalSubscription) {\n        this._addGlobalListener();\n      }\n\n      // In the case of a 0ms delay, use an observable without auditTime\n      // since it does add a perceptible delay in processing overhead.\n      const subscription = auditTimeInMs > 0 ?\n        this._scrolled.pipe(auditTime(auditTimeInMs)).subscribe(observer) :\n        this._scrolled.subscribe(observer);\n\n      this._scrolledCount++;\n\n      return () => {\n        subscription.unsubscribe();\n        this._scrolledCount--;\n\n        if (!this._scrolledCount) {\n          this._removeGlobalListener();\n        }\n      };\n    });\n  }\n\n  ngOnDestroy() {\n    this._removeGlobalListener();\n    this.scrollContainers.forEach((_, container) => this.deregister(container));\n    this._scrolled.complete();\n  }\n\n  /**\n   * Returns an observable that emits whenever any of the\n   * scrollable ancestors of an element are scrolled.\n   * @param elementRef Element whose ancestors to listen for.\n   * @param auditTimeInMs Time to throttle the scroll events.\n   */\n  ancestorScrolled(elementRef: ElementRef, auditTimeInMs?: number): Observable<CdkScrollable|void> {\n    const ancestors = this.getAncestorScrollContainers(elementRef);\n\n    return this.scrolled(auditTimeInMs).pipe(filter(target => {\n      return !target || ancestors.indexOf(target) > -1;\n    }));\n  }\n\n  /** Returns all registered Scrollables that contain the provided element. */\n  getAncestorScrollContainers(elementRef: ElementRef): CdkScrollable[] {\n    const scrollingContainers: CdkScrollable[] = [];\n\n    this.scrollContainers.forEach((_subscription: Subscription, scrollable: CdkScrollable) => {\n      if (this._scrollableContainsElement(scrollable, elementRef)) {\n        scrollingContainers.push(scrollable);\n      }\n    });\n\n    return scrollingContainers;\n  }\n\n  /** Returns true if the element is contained within the provided Scrollable. */\n  private _scrollableContainsElement(scrollable: CdkScrollable, elementRef: ElementRef): boolean {\n    let element: HTMLElement | null = elementRef.nativeElement;\n    let scrollableElement = scrollable.getElementRef().nativeElement;\n\n    // Traverse through the element parents until we reach null, checking if any of the elements\n    // are the scrollable's element.\n    do {\n      if (element == scrollableElement) { return true; }\n    } while (element = element!.parentElement);\n\n    return false;\n  }\n\n  /** Sets up the global scroll listeners. */\n  private _addGlobalListener() {\n    this._globalSubscription = this._ngZone.runOutsideAngular(() => {\n      return fromEvent(window.document, 'scroll').subscribe(() => this._scrolled.next());\n    });\n  }\n\n  /** Cleans up the global scroll listener. */\n  private _removeGlobalListener() {\n    if (this._globalSubscription) {\n      this._globalSubscription.unsubscribe();\n      this._globalSubscription = null;\n    }\n  }\n}\n\n\n/** @docs-private @deprecated @breaking-change 8.0.0 */\nexport function SCROLL_DISPATCHER_PROVIDER_FACTORY(\n    parentDispatcher: ScrollDispatcher, ngZone: NgZone, platform: Platform) {\n  return parentDispatcher || new ScrollDispatcher(ngZone, platform);\n}\n\n/** @docs-private @deprecated @breaking-change 8.0.0 */\nexport const SCROLL_DISPATCHER_PROVIDER = {\n  // If there is already a ScrollDispatcher available, use that. Otherwise, provide a new one.\n  provide: ScrollDispatcher,\n  deps: [[new Optional(), new SkipSelf(), ScrollDispatcher], NgZone, Platform],\n  useFactory: SCROLL_DISPATCHER_PROVIDER_FACTORY\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {coerceNumberProperty} from '@angular/cdk/coercion';\nimport {Directive, forwardRef, Input, OnChanges} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {distinctUntilChanged} from 'rxjs/operators';\nimport {VIRTUAL_SCROLL_STRATEGY, VirtualScrollStrategy} from './virtual-scroll-strategy';\nimport {CdkVirtualScrollViewport} from './virtual-scroll-viewport';\n\n\n/** Virtual scrolling strategy for lists with items of known fixed size. */\nexport class FixedSizeVirtualScrollStrategy implements VirtualScrollStrategy {\n  private _scrolledIndexChange = new Subject<number>();\n\n  /** @docs-private Implemented as part of VirtualScrollStrategy. */\n  scrolledIndexChange: Observable<number> = this._scrolledIndexChange.pipe(distinctUntilChanged());\n\n  /** The attached viewport. */\n  private _viewport: CdkVirtualScrollViewport | null = null;\n\n  /** The size of the items in the virtually scrolling list. */\n  private _itemSize: number;\n\n  /** The minimum amount of buffer rendered beyond the viewport (in pixels). */\n  private _minBufferPx: number;\n\n  /** The number of buffer items to render beyond the edge of the viewport (in pixels). */\n  private _maxBufferPx: number;\n\n  /**\n   * @param itemSize The size of the items in the virtually scrolling list.\n   * @param minBufferPx The minimum amount of buffer (in pixels) before needing to render more\n   * @param maxBufferPx The amount of buffer (in pixels) to render when rendering more.\n   */\n  constructor(itemSize: number, minBufferPx: number, maxBufferPx: number) {\n    this._itemSize = itemSize;\n    this._minBufferPx = minBufferPx;\n    this._maxBufferPx = maxBufferPx;\n  }\n\n  /**\n   * Attaches this scroll strategy to a viewport.\n   * @param viewport The viewport to attach this strategy to.\n   */\n  attach(viewport: CdkVirtualScrollViewport) {\n    this._viewport = viewport;\n    this._updateTotalContentSize();\n    this._updateRenderedRange();\n  }\n\n  /** Detaches this scroll strategy from the currently attached viewport. */\n  detach() {\n    this._scrolledIndexChange.complete();\n    this._viewport = null;\n  }\n\n  /**\n   * Update the item size and buffer size.\n   * @param itemSize The size of the items in the virtually scrolling list.\n   * @param minBufferPx The minimum amount of buffer (in pixels) before needing to render more\n   * @param maxBufferPx The amount of buffer (in pixels) to render when rendering more.\n   */\n  updateItemAndBufferSize(itemSize: number, minBufferPx: number, maxBufferPx: number) {\n    if (maxBufferPx < minBufferPx) {\n      throw Error('CDK virtual scroll: maxBufferPx must be greater than or equal to minBufferPx');\n    }\n    this._itemSize = itemSize;\n    this._minBufferPx = minBufferPx;\n    this._maxBufferPx = maxBufferPx;\n    this._updateTotalContentSize();\n    this._updateRenderedRange();\n  }\n\n  /** @docs-private Implemented as part of VirtualScrollStrategy. */\n  onContentScrolled() {\n    this._updateRenderedRange();\n  }\n\n  /** @docs-private Implemented as part of VirtualScrollStrategy. */\n  onDataLengthChanged() {\n    this._updateTotalContentSize();\n    this._updateRenderedRange();\n  }\n\n  /** @docs-private Implemented as part of VirtualScrollStrategy. */\n  onContentRendered() { /* no-op */ }\n\n  /** @docs-private Implemented as part of VirtualScrollStrategy. */\n  onRenderedOffsetChanged() { /* no-op */ }\n\n  /**\n   * Scroll to the offset for the given index.\n   * @param index The index of the element to scroll to.\n   * @param behavior The ScrollBehavior to use when scrolling.\n   */\n  scrollToIndex(index: number, behavior: ScrollBehavior): void {\n    if (this._viewport) {\n      this._viewport.scrollToOffset(index * this._itemSize, behavior);\n    }\n  }\n\n  /** Update the viewport's total content size. */\n  private _updateTotalContentSize() {\n    if (!this._viewport) {\n      return;\n    }\n\n    this._viewport.setTotalContentSize(this._viewport.getDataLength() * this._itemSize);\n  }\n\n  /** Update the viewport's rendered range. */\n  private _updateRenderedRange() {\n    if (!this._viewport) {\n      return;\n    }\n\n    const scrollOffset = this._viewport.measureScrollOffset();\n    const firstVisibleIndex = scrollOffset / this._itemSize;\n    const renderedRange = this._viewport.getRenderedRange();\n    const newRange = {start: renderedRange.start, end: renderedRange.end};\n    const viewportSize = this._viewport.getViewportSize();\n    const dataLength = this._viewport.getDataLength();\n\n    const startBuffer = scrollOffset - newRange.start * this._itemSize;\n    if (startBuffer < this._minBufferPx && newRange.start != 0) {\n      const expandStart = Math.ceil((this._maxBufferPx - startBuffer) / this._itemSize);\n      newRange.start = Math.max(0, newRange.start - expandStart);\n      newRange.end = Math.min(dataLength,\n          Math.ceil(firstVisibleIndex + (viewportSize + this._minBufferPx) / this._itemSize));\n    } else {\n      const endBuffer = newRange.end * this._itemSize - (scrollOffset + viewportSize);\n      if (endBuffer < this._minBufferPx && newRange.end != dataLength) {\n        const expandEnd = Math.ceil((this._maxBufferPx - endBuffer) / this._itemSize);\n        if (expandEnd > 0) {\n          newRange.end = Math.min(dataLength, newRange.end + expandEnd);\n          newRange.start = Math.max(0,\n              Math.floor(firstVisibleIndex - this._minBufferPx / this._itemSize));\n        }\n      }\n    }\n\n    this._viewport.setRenderedRange(newRange);\n    this._viewport.setRenderedContentOffset(this._itemSize * newRange.start);\n    this._scrolledIndexChange.next(Math.floor(firstVisibleIndex));\n  }\n}\n\n\n/**\n * Provider factory for `FixedSizeVirtualScrollStrategy` that simply extracts the already created\n * `FixedSizeVirtualScrollStrategy` from the given directive.\n * @param fixedSizeDir The instance of `CdkFixedSizeVirtualScroll` to extract the\n *     `FixedSizeVirtualScrollStrategy` from.\n */\nexport function _fixedSizeVirtualScrollStrategyFactory(fixedSizeDir: CdkFixedSizeVirtualScroll) {\n  return fixedSizeDir._scrollStrategy;\n}\n\n\n/** A virtual scroll strategy that supports fixed-size items. */\n@Directive({\n  selector: 'cdk-virtual-scroll-viewport[itemSize]',\n  providers: [{\n    provide: VIRTUAL_SCROLL_STRATEGY,\n    useFactory: _fixedSizeVirtualScrollStrategyFactory,\n    deps: [forwardRef(() => CdkFixedSizeVirtualScroll)],\n  }],\n})\nexport class CdkFixedSizeVirtualScroll implements OnChanges {\n  /** The size of the items in the list (in pixels). */\n  @Input()\n  get itemSize(): number { return this._itemSize; }\n  set itemSize(value: number) { this._itemSize = coerceNumberProperty(value); }\n  _itemSize = 20;\n\n  /**\n   * The minimum amount of buffer rendered beyond the viewport (in pixels).\n   * If the amount of buffer dips below this number, more items will be rendered. Defaults to 100px.\n   */\n  @Input()\n  get minBufferPx(): number { return this._minBufferPx; }\n  set minBufferPx(value: number) { this._minBufferPx = coerceNumberProperty(value); }\n  _minBufferPx = 100;\n\n  /**\n   * The number of pixels worth of buffer to render for when rendering new items. Defaults to 200px.\n   */\n  @Input()\n  get maxBufferPx(): number { return this._maxBufferPx; }\n  set maxBufferPx(value: number) { this._maxBufferPx = coerceNumberProperty(value); }\n  _maxBufferPx = 200;\n\n  /** The scroll strategy used by this directive. */\n  _scrollStrategy =\n      new FixedSizeVirtualScrollStrategy(this.itemSize, this.minBufferPx, this.maxBufferPx);\n\n  ngOnChanges() {\n    this._scrollStrategy.updateItemAndBufferSize(this.itemSize, this.minBufferPx, this.maxBufferPx);\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport {InjectionToken} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {CdkVirtualScrollViewport} from './virtual-scroll-viewport';\n\n\n/** The injection token used to specify the virtual scrolling strategy. */\nexport const VIRTUAL_SCROLL_STRATEGY =\n    new InjectionToken<VirtualScrollStrategy>('VIRTUAL_SCROLL_STRATEGY');\n\n\n/** A strategy that dictates which items should be rendered in the viewport. */\nexport interface VirtualScrollStrategy {\n  /** Emits when the index of the first element visible in the viewport changes. */\n  scrolledIndexChange: Observable<number>;\n\n  /**\n   * Attaches this scroll strategy to a viewport.\n   * @param viewport The viewport to attach this strategy to.\n   */\n  attach(viewport: CdkVirtualScrollViewport): void;\n\n  /** Detaches this scroll strategy from the currently attached viewport. */\n  detach(): void;\n\n  /** Called when the viewport is scrolled (debounced using requestAnimationFrame). */\n  onContentScrolled(): void;\n\n  /** Called when the length of the data changes. */\n  onDataLengthChanged(): void;\n\n  /** Called when the range of items rendered in the DOM has changed. */\n  onContentRendered(): void;\n\n  /** Called when the offset of the rendered items changed. */\n  onRenderedOffsetChanged(): void;\n\n  /**\n   * Scroll to the offset for the given index.\n   * @param index The index of the element to scroll to.\n   * @param behavior The ScrollBehavior to use when scrolling.\n   */\n  scrollToIndex(index: number, behavior: ScrollBehavior): void;\n}\n"],"names":["observableOf","tslib_1.__extends"],"mappings":"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"}