source: trip-planner-front/node_modules/@angular/cdk/__ivy_ngcc__/fesm2015/scrolling.js.map@ 6c1585f

Last change on this file since 6c1585f was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 99.7 KB
Line 
1{"version":3,"file":"scrolling.js","sources":["../../../../../../src/cdk/scrolling/virtual-scroll-strategy.ts","../../../../../../src/cdk/scrolling/fixed-size-virtual-scroll.ts","../../../../../../src/cdk/scrolling/scroll-dispatcher.ts","../../../../../../src/cdk/scrolling/scrollable.ts","../../../../../../src/cdk/scrolling/viewport-ruler.ts","../../../../../../src/cdk/scrolling/virtual-scroll-viewport.ts","../../../../../../src/cdk/scrolling/virtual-for-of.ts","../../../../../../src/cdk/scrolling/scrolling-module.ts","../../../../../../src/cdk/scrolling/virtual-scroll-repeater.ts","../../../../../../src/cdk/scrolling/public-api.ts","../../../../../../src/cdk/scrolling/index.ts"],"names":["observableOf"],"mappings":"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","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 {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","/**\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 coerceNumberProperty,\n NumberInput\n} 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 readonly _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 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\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 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 let scrollOffset = this._viewport.measureScrollOffset();\n // Prevent NaN as result when dividing by zero.\n let firstVisibleIndex = (this._itemSize > 0) ? scrollOffset / this._itemSize : 0;\n\n // If user scrolls to the bottom of the list and data changes to a smaller list\n if (newRange.end > dataLength) {\n // We have to recalculate the first visible index based on new data length and viewport size.\n const maxVisibleItems = Math.ceil(viewportSize / this._itemSize);\n const newVisibleIndex = Math.max(0,\n Math.min(firstVisibleIndex, dataLength - maxVisibleItems));\n\n // If first visible index changed we must update scroll offset to handle start/end buffers\n // Current range must also be adjusted to cover the new position (bottom of new list).\n if (firstVisibleIndex != newVisibleIndex) {\n firstVisibleIndex = newVisibleIndex;\n scrollOffset = newVisibleIndex * this._itemSize;\n newRange.start = Math.floor(firstVisibleIndex);\n }\n\n newRange.end = Math.max(0, Math.min(dataLength, newRange.start + maxVisibleItems));\n }\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 static ngAcceptInputType_itemSize: NumberInput;\n static ngAcceptInputType_minBufferPx: NumberInput;\n static ngAcceptInputType_maxBufferPx: NumberInput;\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 {coerceElement} from '@angular/cdk/coercion';\nimport {Platform} from '@angular/cdk/platform';\nimport {ElementRef, Injectable, NgZone, OnDestroy, Optional, Inject} from '@angular/core';\nimport {fromEvent, of as observableOf, Subject, Subscription, Observable, Observer} from 'rxjs';\nimport {auditTime, filter} from 'rxjs/operators';\nimport {CdkScrollable} from './scrollable';\nimport {DOCUMENT} from '@angular/common';\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 /** Used to reference correct document/window */\n protected _document: Document;\n\n constructor(private _ngZone: NgZone,\n private _platform: Platform,\n @Optional() @Inject(DOCUMENT) document: any) {\n this._document = document;\n }\n\n /** Subject for notifying that a registered scrollable reference element has been scrolled. */\n private readonly _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 elementOrElementRef Element whose ancestors to listen for.\n * @param auditTimeInMs Time to throttle the scroll events.\n */\n ancestorScrolled(\n elementOrElementRef: ElementRef|HTMLElement,\n auditTimeInMs?: number): Observable<CdkScrollable|void> {\n const ancestors = this.getAncestorScrollContainers(elementOrElementRef);\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(elementOrElementRef: ElementRef|HTMLElement): CdkScrollable[] {\n const scrollingContainers: CdkScrollable[] = [];\n\n this.scrollContainers.forEach((_subscription: Subscription, scrollable: CdkScrollable) => {\n if (this._scrollableContainsElement(scrollable, elementOrElementRef)) {\n scrollingContainers.push(scrollable);\n }\n });\n\n return scrollingContainers;\n }\n\n /** Use defaultView of injected document if available or fallback to global window reference */\n private _getWindow(): Window {\n return this._document.defaultView || window;\n }\n\n /** Returns true if the element is contained within the provided Scrollable. */\n private _scrollableContainsElement(\n scrollable: CdkScrollable,\n elementOrElementRef: ElementRef|HTMLElement): boolean {\n let element: HTMLElement | null = coerceElement(elementOrElementRef);\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 const window = this._getWindow();\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 * @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 readonly _destroyed = new Subject<void>();\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 if (options.left == null) {\n options.left = isRtl ? options.end : options.start;\n }\n\n if (options.right == null) {\n options.right = isRtl ? options.start : options.end;\n }\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 {Injectable, NgZone, OnDestroy, Optional, Inject} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {auditTime} from 'rxjs/operators';\nimport {DOCUMENT} from '@angular/common';\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} | null;\n\n /** Stream of viewport change events. */\n private readonly _change = new Subject<Event>();\n\n /** Event listener that will be used to handle the viewport change events. */\n private _changeListener = (event: Event) => {\n this._change.next(event);\n }\n\n /** Used to reference correct document/window */\n protected _document: Document;\n\n constructor(private _platform: Platform,\n ngZone: NgZone,\n @Optional() @Inject(DOCUMENT) document: any) {\n this._document = document;\n\n ngZone.runOutsideAngular(() => {\n if (_platform.isBrowser) {\n const window = this._getWindow();\n\n // Note that bind the events ourselves, rather than going through something like RxJS's\n // `fromEvent` so that we can ensure that they're bound outside of the NgZone.\n window.addEventListener('resize', this._changeListener);\n window.addEventListener('orientationchange', this._changeListener);\n }\n\n // Clear the cached position so that the viewport is re-measured next time it is required.\n // We don't need to keep track of the subscription, because it is completed on destroy.\n this.change().subscribe(() => this._viewportSize = null);\n });\n }\n\n ngOnDestroy() {\n if (this._platform.isBrowser) {\n const window = this._getWindow();\n window.removeEventListener('resize', this._changeListener);\n window.removeEventListener('orientationchange', this._changeListener);\n }\n\n this._change.complete();\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 document = this._document;\n const window = this._getWindow();\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 * This stream emits outside of the Angular zone.\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 /** Use defaultView of injected document if available or fallback to global window reference */\n private _getWindow(): Window {\n return this._document.defaultView || window;\n }\n\n /** Updates the cached viewport size. */\n private _updateViewportSize() {\n const window = this._getWindow();\n this._viewportSize = this._platform.isBrowser ?\n {width: window.innerWidth, height: window.innerHeight} :\n {width: 0, height: 0};\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 {\n animationFrameScheduler,\n asapScheduler,\n Observable,\n Subject,\n Observer,\n Subscription,\n} from 'rxjs';\nimport {auditTime, startWith, takeUntil} from 'rxjs/operators';\nimport {ScrollDispatcher} from './scroll-dispatcher';\nimport {CdkScrollable, ExtendedScrollToOptions} from './scrollable';\nimport {VIRTUAL_SCROLL_STRATEGY, VirtualScrollStrategy} from './virtual-scroll-strategy';\nimport {ViewportRuler} from './viewport-ruler';\nimport {CdkVirtualScrollRepeater} from './virtual-scroll-repeater';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\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 its scrolling with the help of `CdkVirtualForOf`. */\n@Component({\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 readonly _detachedSubject = new Subject<void>();\n\n /** Emits when the rendered range changes. */\n private readonly _renderedRangeSubject = new Subject<ListRange>();\n\n /** The direction the viewport scrolls. */\n @Input()\n get orientation() {\n return this._orientation;\n }\n set orientation(orientation: 'horizontal' | 'vertical') {\n if (this._orientation !== orientation) {\n this._orientation = orientation;\n this._calculateSpacerSize();\n }\n }\n private _orientation: 'horizontal' | 'vertical' = 'vertical';\n\n /**\n * Whether rendered items should persist in the DOM after scrolling out of view. By default, items\n * will be removed.\n */\n @Input()\n get appendOnly(): boolean {\n return this._appendOnly;\n }\n set appendOnly(value: boolean) {\n this._appendOnly = coerceBooleanProperty(value);\n }\n private _appendOnly = false;\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()\n readonly scrolledIndexChange: Observable<number> = new Observable(\n (observer: Observer<number>) => this._scrollStrategy.scrolledIndexChange.subscribe(\n index => 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 readonly renderedRangeStream: Observable<ListRange> = this._renderedRangeSubject;\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 /** A string representing the `style.width` property value to be used for the spacer element. */\n _totalContentWidth = '';\n\n /** A string representing the `style.height` property value to be used for the spacer element. */\n _totalContentHeight = '';\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 CdkVirtualScrollRepeater. */\n private _forOf: CdkVirtualScrollRepeater<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 /** Subscription to changes in the viewport size. */\n private _viewportChanges = Subscription.EMPTY;\n\n constructor(public override 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 viewportRuler: ViewportRuler) {\n super(elementRef, scrollDispatcher, ngZone, dir);\n\n if (!_scrollStrategy && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw Error('Error: cdk-virtual-scroll-viewport requires the \"itemSize\" property to be set.');\n }\n\n this._viewportChanges = viewportRuler.change().subscribe(() => {\n this.checkViewportSize();\n });\n }\n\n override 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 override ngOnDestroy() {\n this.detach();\n this._scrollStrategy.detach();\n\n // Complete all subjects\n this._renderedRangeSubject.complete();\n this._detachedSubject.complete();\n this._viewportChanges.unsubscribe();\n\n super.ngOnDestroy();\n }\n\n /** Attaches a `CdkVirtualScrollRepeater` to this viewport. */\n attach(forOf: CdkVirtualScrollRepeater<any>) {\n if (this._forOf && (typeof ngDevMode === 'undefined' || ngDevMode)) {\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 this._calculateSpacerSize();\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 if (this.appendOnly) {\n range = {start: 0, end: Math.max(this._renderedRange.end, range.end)};\n }\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 override measureScrollOffset(\n from?: 'top' | 'left' | 'right' | 'bottom' | 'start' | 'end'): number {\n return from ?\n super.measureScrollOffset(from) :\n super.measureScrollOffset(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 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 // 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\n const runAfterChangeDetection = this._runAfterChangeDetection;\n this._runAfterChangeDetection = [];\n for (const fn of runAfterChangeDetection) {\n fn();\n }\n }\n\n /** Calculates the `style.width` and `style.height` for the spacer element. */\n private _calculateSpacerSize() {\n this._totalContentHeight =\n this.orientation === 'horizontal' ? '' : `${this._totalContentSize}px`;\n this._totalContentWidth =\n this.orientation === 'horizontal' ? `${this._totalContentSize}px` : '';\n }\n\n static ngAcceptInputType_appendOnly: BooleanInput;\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 {\n ArrayDataSource,\n CollectionViewer,\n DataSource,\n ListRange,\n isDataSource,\n _RecycleViewRepeaterStrategy,\n _VIEW_REPEATER_STRATEGY,\n _ViewRepeaterItemInsertArgs,\n} from '@angular/cdk/collections';\nimport {\n Directive,\n DoCheck,\n EmbeddedViewRef,\n Inject,\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 {coerceNumberProperty, NumberInput} from '@angular/cdk/coercion';\nimport {Observable, Subject, of as observableOf, isObservable} from 'rxjs';\nimport {pairwise, shareReplay, startWith, switchMap, takeUntil} from 'rxjs/operators';\nimport {CdkVirtualScrollRepeater} from './virtual-scroll-repeater';\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 the offset of a DOM Node in a certain direction. */\nfunction getOffset(orientation: 'horizontal' | 'vertical', direction: 'start' | 'end', node: Node) {\n const el = node as Element;\n if (!el.getBoundingClientRect) {\n return 0;\n }\n const rect = el.getBoundingClientRect();\n\n if (orientation === 'horizontal') {\n return direction === 'start' ? rect.left : rect.right;\n }\n\n return direction === 'start' ? rect.top : rect.bottom;\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 providers: [\n {provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy},\n ]\n})\nexport class CdkVirtualForOf<T> implements\n CdkVirtualScrollRepeater<T>, CollectionViewer, DoCheck, OnDestroy {\n /** Emits when the rendered view of the data changes. */\n readonly viewChange = new Subject<ListRange>();\n\n /** Subject that emits when a new DataSource instance is given. */\n private readonly _dataSourceChanges = new Subject<DataSource<T>>();\n\n /** The DataSource to display. */\n @Input()\n get cdkVirtualForOf(): DataSource<T> | Observable<T[]> | NgIterable<T> | null | undefined {\n return this._cdkVirtualForOf;\n }\n set cdkVirtualForOf(value: DataSource<T> | Observable<T[]> | NgIterable<T> | null | undefined) {\n this._cdkVirtualForOf = value;\n if (isDataSource(value)) {\n this._dataSourceChanges.next(value);\n } else {\n // If value is an an NgIterable, convert it to an array.\n this._dataSourceChanges.next(new ArrayDataSource<T>(\n isObservable(value) ? value : Array.from(value || [])));\n }\n }\n\n _cdkVirtualForOf: DataSource<T> | Observable<T[]> | NgIterable<T> | null | undefined;\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()\n get cdkVirtualForTemplateCacheSize() {\n return this._viewRepeater.viewCacheSize;\n }\n set cdkVirtualForTemplateCacheSize(size: number) {\n this._viewRepeater.viewCacheSize = coerceNumberProperty(size);\n }\n\n /** Emits whenever the data in the current DataSource changes. */\n readonly dataStream: Observable<readonly 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: readonly 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 /** Whether the rendered data should be updated during the next ngDoCheck cycle. */\n private _needsUpdate = false;\n\n private readonly _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 strategy used to render items in the virtual scroll viewport. */\n @Inject(_VIEW_REPEATER_STRATEGY)\n private _viewRepeater: _RecycleViewRepeaterStrategy<T, T, CdkVirtualForOfContext<T>>,\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 (typeof ngDevMode === 'undefined' || ngDevMode)) {\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 the views, find the first and land node and compute the size by subtracting\n // the top of the first node from the bottom of the last one.\n let firstNode: HTMLElement | undefined;\n let lastNode: HTMLElement | undefined;\n\n // Find the first node by starting from the beginning and going forwards.\n for (let i = 0; i < rangeLen; i++) {\n const view = this._viewContainerRef.get(i + renderedStartIndex) as\n EmbeddedViewRef<CdkVirtualForOfContext<T>> | null;\n if (view && view.rootNodes.length) {\n firstNode = lastNode = view.rootNodes[0];\n break;\n }\n }\n\n // Find the last node by starting from the end and going backwards.\n for (let i = rangeLen - 1; i > -1; i--) {\n const view = this._viewContainerRef.get(i + renderedStartIndex) as\n EmbeddedViewRef<CdkVirtualForOfContext<T>> | null;\n if (view && view.rootNodes.length) {\n lastNode = view.rootNodes[view.rootNodes.length - 1];\n break;\n }\n }\n\n return firstNode && lastNode ?\n getOffset(orientation, 'end', lastNode) - getOffset(orientation, 'start', firstNode) : 0;\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(undefined!);\n this._dataSourceChanges.complete();\n this.viewChange.complete();\n\n this._destroyed.next();\n this._destroyed.complete();\n this._viewRepeater.detach();\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 // Use a wrapper function for the `trackBy` so any new values are\n // picked up automatically without having to recreate the differ.\n this._differ = this._differs.find(this._renderedItems).create((index, item) => {\n return this.cdkVirtualForTrackBy ? this.cdkVirtualForTrackBy(index, item) : item;\n });\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<readonly 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 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 view.detectChanges();\n }\n }\n\n /** Apply changes to the DOM. */\n private _applyChanges(changes: IterableChanges<T>) {\n this._viewRepeater.applyChanges(\n changes,\n this._viewContainerRef,\n (record: IterableChangeRecord<T>,\n _adjustedPreviousIndex: number | null,\n currentIndex: number | null) => this._getEmbeddedViewArgs(record, currentIndex!),\n (record) => record.item);\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 /** 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 private _getEmbeddedViewArgs(record: IterableChangeRecord<T>, index: number):\n _ViewRepeaterItemInsertArgs<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 {\n templateRef: this._template,\n context: {\n $implicit: record.item,\n // It's guaranteed that the iterable is not \"undefined\" or \"null\" because we only\n // generate views for elements if the \"cdkVirtualForOf\" iterable has elements.\n cdkVirtualForOf: this._cdkVirtualForOf!,\n index: -1,\n count: -1,\n first: false,\n last: false,\n odd: false,\n even: false\n },\n index,\n };\n }\n\n static ngAcceptInputType_cdkVirtualForTemplateCacheSize: NumberInput;\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 exports: [CdkScrollable],\n declarations: [CdkScrollable]\n})\nexport class CdkScrollableModule {}\n\n/**\n * @docs-primary-export\n */\n@NgModule({\n imports: [\n BidiModule,\n PlatformModule,\n CdkScrollableModule\n ],\n exports: [\n BidiModule,\n CdkScrollableModule,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n ],\n declarations: [\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n ],\n})\nexport class ScrollingModule {}\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 {Observable} from 'rxjs';\nimport {ListRange} from '@angular/cdk/collections';\n\n/**\n * An item to be repeated by the VirtualScrollViewport\n */\nexport interface CdkVirtualScrollRepeater<T> {\n readonly dataStream: Observable<readonly T[]>;\n measureRangeSize(range: ListRange, orientation: 'horizontal' | 'vertical'): number;\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\nexport * from './fixed-size-virtual-scroll';\nexport * from './scroll-dispatcher';\nexport * from './scrollable';\nexport * from './scrolling-module';\nexport * from './viewport-ruler';\nexport * from './virtual-for-of';\nexport * from './virtual-scroll-strategy';\nexport * from './virtual-scroll-viewport';\nexport * from './virtual-scroll-repeater';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"]}
Note: See TracBrowser for help on using the repository browser.