mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
119 KiB
1 lines
119 KiB
{"version":3,"file":"scrolling.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/scrolling/virtual-scroll-strategy.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/scrolling/fixed-size-virtual-scroll.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/scrolling/scroll-dispatcher.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/scrolling/scrollable.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/scrolling/viewport-ruler.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/scrolling/virtual-scrollable.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/scrolling/virtual-scroll-viewport.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/scrolling/virtual-scroll-viewport.html","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/scrolling/virtual-for-of.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/scrolling/virtual-scrollable-element.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/scrolling/virtual-scrollable-window.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/src/cdk/scrolling/scrolling-module.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.dev/license\n */\n\nimport {InjectionToken} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport type {CdkVirtualScrollViewport} from './virtual-scroll-viewport';\n\n/** The injection token used to specify the virtual scrolling strategy. */\nexport const VIRTUAL_SCROLL_STRATEGY = new InjectionToken<VirtualScrollStrategy>(\n '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.dev/license\n */\n\nimport {coerceNumberProperty, NumberInput} from '../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/** 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() {\n /* no-op */\n }\n\n /** @docs-private Implemented as part of VirtualScrollStrategy. */\n onRenderedOffsetChanged() {\n /* no-op */\n }\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(\n 0,\n Math.min(firstVisibleIndex, dataLength - maxVisibleItems),\n );\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(\n dataLength,\n Math.ceil(firstVisibleIndex + (viewportSize + this._minBufferPx) / this._itemSize),\n );\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(\n 0,\n Math.floor(firstVisibleIndex - this._minBufferPx / this._itemSize),\n );\n }\n }\n }\n\n this._viewport.setRenderedRange(newRange);\n this._viewport.setRenderedContentOffset(Math.round(this._itemSize * newRange.start));\n this._scrolledIndexChange.next(Math.floor(firstVisibleIndex));\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/** A virtual scroll strategy that supports fixed-size items. */\n@Directive({\n selector: 'cdk-virtual-scroll-viewport[itemSize]',\n providers: [\n {\n provide: VIRTUAL_SCROLL_STRATEGY,\n useFactory: _fixedSizeVirtualScrollStrategyFactory,\n deps: [forwardRef(() => CdkFixedSizeVirtualScroll)],\n },\n ],\n})\nexport class CdkFixedSizeVirtualScroll implements OnChanges {\n /** The size of the items in the list (in pixels). */\n @Input()\n get itemSize(): number {\n return this._itemSize;\n }\n set itemSize(value: NumberInput) {\n this._itemSize = coerceNumberProperty(value);\n }\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 {\n return this._minBufferPx;\n }\n set minBufferPx(value: NumberInput) {\n this._minBufferPx = coerceNumberProperty(value);\n }\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 {\n return this._maxBufferPx;\n }\n set maxBufferPx(value: NumberInput) {\n this._maxBufferPx = coerceNumberProperty(value);\n }\n _maxBufferPx = 200;\n\n /** The scroll strategy used by this directive. */\n _scrollStrategy = new FixedSizeVirtualScrollStrategy(\n this.itemSize,\n this.minBufferPx,\n this.maxBufferPx,\n );\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.dev/license\n */\n\nimport {coerceElement} from '../coercion';\nimport {Platform} from '../platform';\nimport {ElementRef, Injectable, NgZone, OnDestroy, RendererFactory2, inject} from '@angular/core';\nimport {of as observableOf, Subject, Subscription, Observable, Observer} from 'rxjs';\nimport {auditTime, filter} from 'rxjs/operators';\nimport type {CdkScrollable} from './scrollable';\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 private _ngZone = inject(NgZone);\n private _platform = inject(Platform);\n private _renderer = inject(RendererFactory2).createRenderer(null, null);\n private _cleanupGlobalListener: (() => void) | undefined;\n\n constructor(...args: unknown[]);\n constructor() {}\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 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(\n scrollable,\n scrollable.elementScrolled().subscribe(() => this._scrolled.next(scrollable)),\n );\n }\n }\n\n /**\n * De-registers 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._cleanupGlobalListener) {\n this._cleanupGlobalListener = this._ngZone.runOutsideAngular(() =>\n this._renderer.listen('document', 'scroll', () => this._scrolled.next()),\n );\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 =\n 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._cleanupGlobalListener?.();\n this._cleanupGlobalListener = undefined;\n }\n };\n });\n }\n\n ngOnDestroy() {\n this._cleanupGlobalListener?.();\n this._cleanupGlobalListener = undefined;\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,\n ): Observable<CdkScrollable | void> {\n const ancestors = this.getAncestorScrollContainers(elementOrElementRef);\n\n return this.scrolled(auditTimeInMs).pipe(\n filter(target => !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 /** Returns true if the element is contained within the provided Scrollable. */\n private _scrollableContainsElement(\n scrollable: CdkScrollable,\n elementOrElementRef: ElementRef | HTMLElement,\n ): 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) {\n return true;\n }\n } while ((element = element!.parentElement));\n\n return false;\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.dev/license\n */\n\nimport {Directionality} from '../bidi';\nimport {getRtlScrollAxisType, RtlScrollAxisType, supportsScrollBehavior} from '../platform';\nimport {Directive, ElementRef, NgZone, OnDestroy, OnInit, Renderer2, inject} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\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 protected elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n protected scrollDispatcher = inject(ScrollDispatcher);\n protected ngZone = inject(NgZone);\n protected dir? = inject(Directionality, {optional: true});\n protected _scrollElement: EventTarget = this.elementRef.nativeElement;\n protected readonly _destroyed = new Subject<void>();\n private _renderer = inject(Renderer2);\n private _cleanupScroll: (() => void) | undefined;\n private _elementScrolled = new Subject<Event>();\n\n constructor(...args: unknown[]);\n constructor() {}\n\n ngOnInit() {\n this._cleanupScroll = this.ngZone.runOutsideAngular(() =>\n this._renderer.listen(this._scrollElement, 'scroll', event =>\n this._elementScrolled.next(event),\n ),\n );\n this.scrollDispatcher.register(this);\n }\n\n ngOnDestroy() {\n this._cleanupScroll?.();\n this._elementScrolled.complete();\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.dev/license\n */\n\nimport {Platform} from '../platform';\nimport {Injectable, NgZone, OnDestroy, RendererFactory2, inject, DOCUMENT} from '@angular/core';\nimport {Observable, Subject} 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 private _platform = inject(Platform);\n private _listeners: (() => void)[] | undefined;\n\n /** Cached viewport dimensions. */\n private _viewportSize: {width: number; height: number} | null = null;\n\n /** Stream of viewport change events. */\n private readonly _change = new Subject<Event>();\n\n /** Used to reference correct document/window */\n protected _document = inject(DOCUMENT);\n\n constructor(...args: unknown[]);\n\n constructor() {\n const ngZone = inject(NgZone);\n const renderer = inject(RendererFactory2).createRenderer(null, null);\n\n ngZone.runOutsideAngular(() => {\n if (this._platform.isBrowser) {\n const changeListener = (event: Event) => this._change.next(event);\n this._listeners = [\n renderer.listen('window', 'resize', changeListener),\n renderer.listen('window', 'orientationchange', changeListener),\n ];\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 this._listeners?.forEach(cleanup => cleanup());\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 DOMRect for the viewport's bounds. */\n getViewportRect() {\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 =\n -documentRect.top ||\n // `document.body` can be `null` per WHATWG spec when document element is not `<html>`\n // or has no body/frameset child: https://html.spec.whatwg.org/multipage/dom.html#dom-document-body\n // Note: TypeScript incorrectly types this as non-nullable, but it can be `null` in practice.\n document.body?.scrollTop ||\n window.scrollY ||\n documentElement.scrollTop ||\n 0;\n\n const left =\n -documentRect.left ||\n document.body?.scrollLeft ||\n window.scrollX ||\n documentElement.scrollLeft ||\n 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.dev/license\n */\n\nimport {Directive, InjectionToken} from '@angular/core';\nimport {CdkScrollable} from './scrollable';\n\nexport const VIRTUAL_SCROLLABLE = new InjectionToken<CdkVirtualScrollable>('VIRTUAL_SCROLLABLE');\n\n/**\n * Extending the `CdkScrollable` to be used as scrolling container for virtual scrolling.\n */\n@Directive()\nexport abstract class CdkVirtualScrollable extends CdkScrollable {\n constructor(...args: unknown[]);\n constructor() {\n super();\n }\n\n /**\n * Measure the viewport size for the provided orientation.\n *\n * @param orientation The orientation to measure the size from.\n */\n measureViewportSize(orientation: 'horizontal' | 'vertical') {\n const viewportEl = this.elementRef.nativeElement;\n return orientation === 'horizontal' ? viewportEl.clientWidth : viewportEl.clientHeight;\n }\n\n /**\n * Measure the bounding DOMRect size including the scroll offset.\n *\n * @param from The edge to measure from.\n */\n abstract measureBoundingClientRectWithScrollOffset(\n from: 'left' | 'top' | 'right' | 'bottom',\n ): 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.dev/license\n */\n\nimport {ListRange} from '../collections';\nimport {Platform} from '../platform';\nimport {\n afterNextRender,\n ApplicationRef,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n InjectionToken,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Output,\n signal,\n untracked,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n animationFrameScheduler,\n asapScheduler,\n Observable,\n Observer,\n Subject,\n Subscription,\n} from 'rxjs';\nimport {auditTime, distinctUntilChanged, filter, startWith, takeUntil} from 'rxjs/operators';\nimport {CdkScrollable, ExtendedScrollToOptions} from './scrollable';\nimport {ViewportRuler} from './viewport-ruler';\nimport {CdkVirtualScrollRepeater} from './virtual-scroll-repeater';\nimport {VIRTUAL_SCROLL_STRATEGY, VirtualScrollStrategy} from './virtual-scroll-strategy';\nimport {CdkVirtualScrollable, VIRTUAL_SCROLLABLE} from './virtual-scrollable';\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 * Lightweight token that can be used to inject the `CdkVirtualScrollViewport`\n * without introducing a hard dependency on it.\n */\nexport const CDK_VIRTUAL_SCROLL_VIEWPORT = new InjectionToken<CdkVirtualScrollViewport>(\n 'CDK_VIRTUAL_SCROLL_VIEWPORT',\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 styleUrl: '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 {\n provide: CdkScrollable,\n useFactory: () =>\n inject(VIRTUAL_SCROLLABLE, {optional: true}) || inject(CdkVirtualScrollViewport),\n },\n {provide: CDK_VIRTUAL_SCROLL_VIEWPORT, useExisting: CdkVirtualScrollViewport},\n ],\n})\nexport class CdkVirtualScrollViewport extends CdkVirtualScrollable implements OnInit, OnDestroy {\n override elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private _changeDetectorRef = inject(ChangeDetectorRef);\n private _scrollStrategy = inject<VirtualScrollStrategy>(VIRTUAL_SCROLL_STRATEGY, {\n optional: true,\n })!;\n scrollable = inject<CdkVirtualScrollable>(VIRTUAL_SCROLLABLE, {optional: true})!;\n\n private _platform = inject(Platform);\n\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 private readonly _renderedContentOffsetSubject = new Subject<number | null>();\n\n /** The direction the viewport scrolls. */\n @Input()\n get orientation() {\n return this._orientation;\n }\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({transform: booleanAttribute}) appendOnly: boolean = 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((observer: Observer<number>) =>\n this._scrollStrategy.scrolledIndexChange.subscribe(index =>\n Promise.resolve().then(() => this.ngZone.run(() => observer.next(index))),\n ),\n );\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 * Emits the offset from the start of the viewport to the start of the rendered data (in pixels).\n */\n readonly renderedContentOffset: Observable<number> = this._renderedContentOffsetSubject.pipe(\n filter(offset => offset !== null),\n distinctUntilChanged(),\n );\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 = signal('');\n\n /** A string representing the `style.height` property value to be used for the spacer element. */\n _totalContentHeight = signal('');\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 | undefined;\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 = 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 private _changeDetectionNeeded = signal(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 private _injector = inject(Injector);\n\n private _isDestroyed = false;\n\n constructor(...args: unknown[]);\n\n constructor() {\n super();\n const viewportRuler = inject(ViewportRuler);\n\n if (!this._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 if (!this.scrollable) {\n // No scrollable is provided, so the virtual-scroll-viewport needs to become a scrollable\n this.elementRef.nativeElement.classList.add('cdk-virtual-scrollable');\n this.scrollable = this;\n }\n\n const ref = effect(\n () => {\n if (this._changeDetectionNeeded()) {\n this._doChangeDetection();\n }\n },\n // Using ApplicationRef injector is important here because we want this to be a root\n // effect that runs before change detection of any application views (since we're depending on markForCheck marking parents dirty)\n {injector: inject(ApplicationRef).injector},\n );\n inject(DestroyRef).onDestroy(() => void ref.destroy());\n }\n\n override ngOnInit() {\n // Scrolling depends on the element dimensions which we can't get during SSR.\n if (!this._platform.isBrowser) {\n return;\n }\n\n if (this.scrollable === this) {\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(() =>\n Promise.resolve().then(() => {\n this._measureViewportSize();\n this._scrollStrategy.attach(this);\n\n this.scrollable\n .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 // Usually `elementScrolled` is completed when the scrollable is destroyed, but\n // that may not be the case if a `CdkVirtualScrollableElement` is used so we have\n // to unsubscribe here just in case.\n takeUntil(this._destroyed),\n )\n .subscribe(() => this._scrollStrategy.onContentScrolled());\n\n this._markChangeDetectionNeeded();\n }),\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 this._isDestroyed = true;\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 measureBoundingClientRectWithScrollOffset(from: 'left' | 'top' | 'right' | 'bottom'): number {\n return this.getElementRef().nativeElement.getBoundingClientRect()[from];\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 // In appendOnly, we always start from the top\n offset = this.appendOnly && to === 'to-start' ? 0 : offset;\n\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.scrollable.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 scrollable (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',\n ): number {\n // This is to break the call cycle\n let measureScrollOffset: InstanceType<typeof CdkVirtualScrollable>['measureScrollOffset'];\n if (this.scrollable == this) {\n measureScrollOffset = (_from: NonNullable<typeof from>) => super.measureScrollOffset(_from);\n } else {\n measureScrollOffset = (_from: NonNullable<typeof from>) =>\n this.scrollable.measureScrollOffset(_from);\n }\n\n return Math.max(\n 0,\n measureScrollOffset(from ?? (this.orientation === 'horizontal' ? 'start' : 'top')) -\n this.measureViewportOffset(),\n );\n }\n\n /**\n * Measures the offset of the viewport from the scrolling container\n * @param from The edge to measure from.\n */\n measureViewportOffset(from?: 'top' | 'left' | 'right' | 'bottom' | 'start' | 'end') {\n let fromRect: 'left' | 'top' | 'right' | 'bottom';\n const LEFT = 'left';\n const RIGHT = 'right';\n const isRtl = this.dir?.value == 'rtl';\n if (from == 'start') {\n fromRect = isRtl ? RIGHT : LEFT;\n } else if (from == 'end') {\n fromRect = isRtl ? LEFT : RIGHT;\n } else if (from) {\n fromRect = from;\n } else {\n fromRect = this.orientation === 'horizontal' ? 'left' : 'top';\n }\n\n const scrollerClientRect = this.scrollable.measureBoundingClientRectWithScrollOffset(fromRect);\n const viewportClientRect = this.elementRef.nativeElement.getBoundingClientRect()[fromRect];\n\n return viewportClientRect - scrollerClientRect;\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 this._viewportSize = this.scrollable.measureViewportSize(this.orientation);\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 if (untracked(this._changeDetectionNeeded)) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n Promise.resolve().then(() => {\n this.ngZone.run(() => {\n this._changeDetectionNeeded.set(true);\n });\n });\n });\n }\n\n /** Run change detection. */\n private _doChangeDetection() {\n if (this._isDestroyed) {\n return;\n }\n\n this.ngZone.run(() => {\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._changeDetectorRef.markForCheck();\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 this._renderedContentOffsetSubject.next(this.getOffsetToRenderedContentStart());\n\n afterNextRender(\n () => {\n this._changeDetectionNeeded.set(false);\n const runAfterChangeDetection = this._runAfterChangeDetection;\n this._runAfterChangeDetection = [];\n for (const fn of runAfterChangeDetection) {\n fn();\n }\n },\n {injector: this._injector},\n );\n });\n }\n\n /** Calculates the `style.width` and `style.height` for the spacer element. */\n private _calculateSpacerSize() {\n this._totalContentHeight.set(\n this.orientation === 'horizontal' ? '' : `${this._totalContentSize}px`,\n );\n this._totalContentWidth.set(\n this.orientation === 'horizontal' ? `${this._totalContentSize}px` : '',\n );\n }\n}\n","<!--\n Wrap the rendered content in an element that will be used to offset it based on the scroll\n position.\n-->\n<div #contentWrapper class=\"cdk-virtual-scroll-content-wrapper\">\n <ng-content></ng-content>\n</div>\n<!--\n Spacer used to force the scrolling container to the correct size for the *total* number of items\n so that the scrollbar captures the size of the entire data set.\n-->\n<div class=\"cdk-virtual-scroll-spacer\"\n [style.width]=\"_totalContentWidth()\" [style.height]=\"_totalContentHeight()\"></div>\n","/**\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.dev/license\n */\n\nimport {\n ArrayDataSource,\n CollectionViewer,\n DataSource,\n ListRange,\n isDataSource,\n _RecycleViewRepeaterStrategy,\n _ViewRepeaterItemInsertArgs,\n} from '../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 TemplateRef,\n TrackByFunction,\n ViewContainerRef,\n inject,\n} from '@angular/core';\nimport {NumberInput, coerceNumberProperty} from '../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 {CDK_VIRTUAL_SCROLL_VIEWPORT} from './virtual-scroll-viewport';\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/** 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})\nexport class CdkVirtualForOf<T>\n implements CdkVirtualScrollRepeater<T>, CollectionViewer, DoCheck, OnDestroy\n{\n private _viewContainerRef = inject(ViewContainerRef);\n private _template = inject<TemplateRef<CdkVirtualForOfContext<T>>>(TemplateRef);\n private _differs = inject(IterableDiffers);\n private _viewRepeater = new _RecycleViewRepeaterStrategy<T, T, CdkVirtualForOfContext<T>>();\n private _viewport = inject(CDK_VIRTUAL_SCROLL_VIEWPORT, {skipSelf: true});\n\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(\n new ArrayDataSource<T>(isObservable(value) ? value : Array.from(value || [])),\n );\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(): number {\n return this._viewRepeater.viewCacheSize;\n }\n set cdkVirtualForTemplateCacheSize(size: NumberInput) {\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.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\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 = {start: 0, end: 0};\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(...args: unknown[]);\n\n constructor() {\n const ngZone = inject(NgZone);\n\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 if (this.viewChange.observers.length) {\n ngZone.run(() => this.viewChange.next(this._renderedRange));\n }\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 (\n (range.start < this._renderedRange.start || range.end > this._renderedRange.end) &&\n (typeof ngDevMode === 'undefined' || ngDevMode)\n ) {\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 EmbeddedViewRef<\n CdkVirtualForOfContext<T>\n > | 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 EmbeddedViewRef<\n CdkVirtualForOfContext<T>\n > | 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)\n : 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(\n oldDs: DataSource<T> | null,\n newDs: DataSource<T> | null,\n ): Observable<readonly T[]> {\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 (\n record: IterableChangeRecord<T>,\n _adjustedPreviousIndex: number | null,\n currentIndex: number | null,\n ) => this._getEmbeddedViewArgs(record, currentIndex!),\n record => record.item,\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 EmbeddedViewRef<\n CdkVirtualForOfContext<T>\n >;\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(\n record: IterableChangeRecord<T>,\n 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 ngTemplateContextGuard<T>(\n directive: CdkVirtualForOf<T>,\n context: unknown,\n ): context is CdkVirtualForOfContext<T> {\n return true;\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.dev/license\n */\n\nimport {Directive} from '@angular/core';\nimport {CdkVirtualScrollable, VIRTUAL_SCROLLABLE} from './virtual-scrollable';\n\n/**\n * Provides a virtual scrollable for the element it is attached to.\n */\n@Directive({\n selector: '[cdkVirtualScrollingElement]',\n providers: [{provide: VIRTUAL_SCROLLABLE, useExisting: CdkVirtualScrollableElement}],\n host: {\n 'class': 'cdk-virtual-scrollable',\n },\n})\nexport class CdkVirtualScrollableElement extends CdkVirtualScrollable {\n constructor(...args: unknown[]);\n\n constructor() {\n super();\n }\n\n override measureBoundingClientRectWithScrollOffset(\n from: 'left' | 'top' | 'right' | 'bottom',\n ): number {\n return (\n this.getElementRef().nativeElement.getBoundingClientRect()[from] -\n this.measureScrollOffset(from)\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.dev/license\n */\n\nimport {Directive, ElementRef, inject, DOCUMENT} from '@angular/core';\n\nimport {CdkVirtualScrollable, VIRTUAL_SCROLLABLE} from './virtual-scrollable';\n\n/**\n * Provides as virtual scrollable for the global / window scrollbar.\n */\n@Directive({\n selector: 'cdk-virtual-scroll-viewport[scrollWindow]',\n providers: [{provide: VIRTUAL_SCROLLABLE, useExisting: CdkVirtualScrollableWindow}],\n})\nexport class CdkVirtualScrollableWindow extends CdkVirtualScrollable {\n constructor(...args: unknown[]);\n\n constructor() {\n super();\n const document = inject(DOCUMENT);\n this.elementRef = new ElementRef(document.documentElement);\n this._scrollElement = document;\n }\n\n override measureBoundingClientRectWithScrollOffset(\n from: 'left' | 'top' | 'right' | 'bottom',\n ): number {\n return this.getElementRef().nativeElement.getBoundingClientRect()[from];\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.dev/license\n */\n\nimport {BidiModule} from '../bidi';\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';\nimport {CdkVirtualScrollableElement} from './virtual-scrollable-element';\nimport {CdkVirtualScrollableWindow} from './virtual-scrollable-window';\n\n@NgModule({\n exports: [CdkScrollable],\n imports: [CdkScrollable],\n})\nexport class CdkScrollableModule {}\n\n/**\n * @docs-primary-export\n */\n@NgModule({\n imports: [\n BidiModule,\n CdkScrollableModule,\n CdkVirtualScrollViewport,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollableWindow,\n CdkVirtualScrollableElement,\n ],\n exports: [\n BidiModule,\n CdkScrollableModule,\n CdkFixedSizeVirtualScroll,\n CdkVirtualForOf,\n CdkVirtualScrollViewport,\n CdkVirtualScrollableWindow,\n CdkVirtualScrollableElement,\n ],\n})\nexport class ScrollingModule {}\n\n// Re-export needed by the Angular compiler.\n// See: https://github.com/angular/components/issues/30663.\n// Note: These exports need to be stable and shouldn't be renamed unnecessarily because\n// consuming libraries might have references to them in their own partial compilation output.\nexport {Dir as ɵɵDir} from '../bidi';\n"],"names":["VIRTUAL_SCROLL_STRATEGY","InjectionToken","FixedSizeVirtualScrollStrategy","_scrolledIndexChange","Subject","scrolledIndexChange","pipe","distinctUntilChanged","_viewport","_itemSize","_minBufferPx","_maxBufferPx","constructor","itemSize","minBufferPx","maxBufferPx","attach","viewport","_updateTotalContentSize","_updateRenderedRange","detach","complete","updateItemAndBufferSize","ngDevMode","Error","onContentScrolled","onDataLengthChanged","onContentRendered","onRenderedOffsetChanged","scrollToIndex","index","behavior","scrollToOffset","setTotalContentSize","getDataLength","renderedRange","getRenderedRange","newRange","start","end","viewportSize","getViewportSize","dataLength","scrollOffset","measureScrollOffset","firstVisibleIndex","maxVisibleItems","Math","ceil","newVisibleIndex","max","min","floor","startBuffer","expandStart","endBuffer","expandEnd","setRenderedRange","setRenderedContentOffset","round","next","_fixedSizeVirtualScrollStrategyFactory","fixedSizeDir","_scrollStrategy","CdkFixedSizeVirtualScroll","value","coerceNumberProperty","ngOnChanges","deps","target","i0","ɵɵFactoryTarget","Directive","ɵdir","ɵɵngDeclareDirective","minVersion","version","type","isStandalone","selector","inputs","providers","provide","useFactory","forwardRef","usesOnChanges","ngImport","decorators","args","Input","DEFAULT_SCROLL_TIME","ScrollDispatcher","_ngZone","inject","NgZone","_platform","Platform","_renderer","RendererFactory2","createRenderer","_cleanupGlobalListener","_scrolled","_scrolledCount","scrollContainers","Map","register","scrollable","has","set","elementScrolled","subscribe","deregister","scrollableReference","get","unsubscribe","delete","scrolled","auditTimeInMs","isBrowser","observableOf","Observable","observer","runOutsideAngular","listen","subscription","auditTime","undefined","ngOnDestroy","forEach","_","container","ancestorScrolled","elementOrElementRef","ancestors","getAncestorScrollContainers","filter","indexOf","scrollingContainers","_subscription","_scrollableContainsElement","push","element","coerceElement","scrollableElement","getElementRef","nativeElement","parentElement","Injectable","ɵprov","ɵɵngDeclareInjectable","providedIn","CdkScrollable","elementRef","ElementRef","scrollDispatcher","ngZone","dir","Directionality","optional","_scrollElement","_destroyed","Renderer2","_cleanupScroll","_elementScrolled","ngOnInit","event","scrollTo","options","el","isRtl","left","right","bottom","top","scrollHeight","clientHeight","getRtlScrollAxisType","RtlScrollAxisType","NORMAL","scrollWidth","clientWidth","INVERTED","NEGATED","_applyScrollToOptions","supportsScrollBehavior","scrollTop","scrollLeft","from","LEFT","RIGHT","DEFAULT_RESIZE_TIME","ViewportRuler","_listeners","_viewportSize","_change","_document","DOCUMENT","renderer","changeListener","change","cleanup","_updateViewportSize","output","width","height","getViewportRect","scrollPosition","getViewportScrollPosition","document","window","_getWindow","documentElement","documentRect","getBoundingClientRect","body","scrollY","scrollX","throttleTime","defaultView","innerWidth","innerHeight","VIRTUAL_SCROLLABLE","CdkVirtualScrollable","measureViewportSize","orientation","viewportEl","usesInheritance","rangesEqual","r1","r2","SCROLL_SCHEDULER","requestAnimationFrame","animationFrameScheduler","asapScheduler","CDK_VIRTUAL_SCROLL_VIEWPORT","CdkVirtualScrollViewport","_changeDetectorRef","ChangeDetectorRef","_detachedSubject","_renderedRangeSubject","_renderedContentOffsetSubject","_orientation","_calculateSpacerSize","appendOnly","Promise","resolve","then","run","_contentWrapper","renderedRangeStream","renderedContentOffset","offset","_totalContentSize","_totalContentWidth","signal","_totalContentHeight","_renderedContentTransform","_renderedRange","_dataLength","_forOf","_renderedContentOffset","_renderedContentOffsetNeedsRewrite","_changeDetectionNeeded","_runAfterChangeDetection","_viewportChanges","Subscription","EMPTY","_injector","Injector","_isDestroyed","viewportRuler","checkViewportSize","classList","add","ref","effect","_doChangeDetection","debugName","injector","ApplicationRef","DestroyRef","onDestroy","destroy","_measureViewportSize","startWith","takeUntil","_markChangeDetectionNeeded","forOf","dataStream","data","newLength","length","measureBoundingClientRectWithScrollOffset","size","range","getOffsetToRenderedContentStart","to","isHorizontal","axis","axisDirection","transform","Number","measureRenderedContentSize","_from","measureViewportOffset","fromRect","scrollerClientRect","viewportClientRect","contentEl","offsetWidth","offsetHeight","measureRangeSize","runAfter","untracked","markForCheck","style","afterNextRender","runAfterChangeDetection","fn","Component","booleanAttribute","outputs","host","properties","classAttribute","useExisting","viewQueries","propertyName","first","predicate","descendants","static","template","styles","changeDetection","ChangeDetectionStrategy","OnPush","encapsulation","ViewEncapsulation","None","Output","ViewChild","getOffset","direction","node","rect","CdkVirtualForOf","_viewContainerRef","ViewContainerRef","_template","TemplateRef","_differs","IterableDiffers","_viewRepeater","_RecycleViewRepeaterStrategy","skipSelf","viewChange","_dataSourceChanges","cdkVirtualForOf","_cdkVirtualForOf","isDataSource","ArrayDataSource","isObservable","Array","cdkVirtualForTrackBy","_cdkVirtualForTrackBy","_needsUpdate","item","cdkVirtualForTemplate","cdkVirtualForTemplateCacheSize","viewCacheSize","pairwise","switchMap","prev","cur","_changeDataSource","shareReplay","_differ","_data","_renderedItems","_onRenderedDataChange","observers","renderedStartIndex","rangeLen","firstNode","lastNode","i","view","rootNodes","ngDoCheck","changes","diff","_updateContext","_applyChanges","slice","find","create","oldDs","newDs","disconnect","connect","count","context","_updateComputedContextProperties","detectChanges","applyChanges","record","_adjustedPreviousIndex","currentIndex","_getEmbeddedViewArgs","forEachIdentityChange","$implicit","last","even","odd","templateRef","ngTemplateContextGuard","directive","CdkVirtualScrollableElement","CdkVirtualScrollableWindow","CdkScrollableModule","NgModule","imports","exports","ScrollingModule","ɵmod","ɵɵngDeclareNgModule","BidiModule","ɵinj","ɵɵngDeclareInjector"],"mappings":"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"}
|