@rx-angular/template
Version:
**Fully** Reactive Component Template Rendering in Angular. @rx-angular/template aims to be a reflection of Angular's built in renderings just reactive.
1 lines • 192 kB
Source Map (JSON)
{"version":3,"file":"template-experimental-virtual-scrolling.mjs","sources":["../../../../libs/template/experimental/virtual-scrolling/src/lib/model.ts","../../../../libs/template/experimental/virtual-scrolling/src/lib/util.ts","../../../../libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll.config.ts","../../../../libs/template/experimental/virtual-scrolling/src/lib/scroll-strategies/resize-observer.ts","../../../../libs/template/experimental/virtual-scrolling/src/lib/scroll-strategies/autosize-virtual-scroll-strategy.ts","../../../../libs/template/experimental/virtual-scrolling/src/lib/scroll-strategies/dynamic-size-virtual-scroll-strategy.ts","../../../../libs/template/experimental/virtual-scrolling/src/lib/scroll-strategies/fixed-size-virtual-scroll-strategy.ts","../../../../libs/template/experimental/virtual-scrolling/src/lib/virtual-list-template-manager.ts","../../../../libs/template/experimental/virtual-scrolling/src/lib/virtual-for.directive.ts","../../../../libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-element.directive.ts","../../../../libs/template/experimental/virtual-scrolling/src/lib/observe-element-size.ts","../../../../libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-viewport.component.ts","../../../../libs/template/experimental/virtual-scrolling/src/lib/virtual-scroll-window.directive.ts","../../../../libs/template/experimental/virtual-scrolling/src/template-experimental-virtual-scrolling.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n EmbeddedViewRef,\n NgIterable,\n TemplateRef,\n TrackByFunction,\n ViewContainerRef,\n} from '@angular/core';\nimport { RxDefaultListViewContext } from '@rx-angular/cdk/template';\nimport { Observable, of, Subject } from 'rxjs';\n\ntype CreateViewContext<Implicit, Context, ComputedContext> = (\n value: Implicit,\n computedContext: ComputedContext,\n) => Context;\n\ntype UpdateViewContext<Implicit, Context, ComputedContext> = (\n value: Implicit,\n view: EmbeddedViewRef<Context>,\n computedContext?: ComputedContext,\n) => void;\n\nexport interface TemplateSettings<Implicit, Context, ComputedContext> {\n viewContainerRef: ViewContainerRef;\n templateRef: TemplateRef<Context>;\n createViewContext: CreateViewContext<Implicit, Context, ComputedContext>;\n updateViewContext: UpdateViewContext<Implicit, Context, ComputedContext>;\n templateCacheSize: number;\n}\n\nexport interface ListRange {\n start: number;\n end: number;\n}\n\n/**\n * @Directive RxVirtualScrollStrategy\n *\n * @description\n * Abstract implementation for the actual implementations of the ScrollStrategies\n * being consumed by `*rxVirtualFor` and `rx-virtual-scroll-viewport`.\n *\n * This is one of the core parts for the virtual scrolling implementation. It has\n * to determine the `ListRange` being rendered to the DOM as well as managing\n * the layouting task for the `*rxVirtualFor` directive.\n *\n * @docsCategory RxVirtualFor\n * @docsPage RxVirtualFor\n * @publicApi\n */\n@Directive()\nexport abstract class RxVirtualScrollStrategy<\n T,\n U extends NgIterable<T> = NgIterable<T>,\n> {\n /** Emits when the index of the first element visible in the viewport changes. */\n /** @internal */\n abstract scrolledIndex$: Observable<number>;\n /** @internal */\n abstract renderedRange$: Observable<ListRange>;\n /** @internal */\n abstract contentSize$: Observable<number>;\n /** @internal */\n get isStable() {\n return of(true);\n }\n\n /**\n * @description\n *\n * Emits whenever an update to a single view was rendered\n */\n readonly viewRenderCallback = new Subject<{\n view: EmbeddedViewRef<RxVirtualForViewContext<T, U>>;\n item: T;\n index: number;\n }>();\n\n /** @internal */\n private nodeIndex?: number;\n\n /** @internal */\n protected getElement(\n view: EmbeddedViewRef<RxVirtualForViewContext<T, U>>,\n ): HTMLElement {\n if (this.nodeIndex !== undefined) {\n return view.rootNodes[this.nodeIndex];\n }\n const rootNode = view.rootNodes[0];\n this.nodeIndex = rootNode instanceof HTMLElement ? 0 : 1;\n return view.rootNodes[this.nodeIndex] as HTMLElement;\n }\n\n /**\n * Attaches this scroll strategy to a viewport.\n * @param viewport The viewport to attach this strategy to.\n * @param viewRepeater The viewRepeater attached to the viewport.\n */\n abstract attach(\n viewport: RxVirtualScrollViewport,\n viewRepeater: RxVirtualViewRepeater<any>,\n ): void;\n\n /** Detaches this scroll strategy from the currently attached viewport. */\n abstract detach(): 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 abstract scrollToIndex(index: number, behavior?: ScrollBehavior): void;\n}\n\n/** @internal */\n@Directive()\nexport abstract class RxVirtualScrollViewport {\n abstract elementScrolled$: Observable<void>;\n abstract containerRect$: Observable<{ height: number; width: number }>;\n abstract getScrollTop(): number;\n abstract scrollTo(scrollTo: number, behavior?: ScrollBehavior): void;\n abstract getScrollElement(): HTMLElement;\n abstract measureOffset(): number;\n}\n\n/** @internal */\n@Directive()\nexport abstract class RxVirtualViewRepeater<\n T,\n U extends NgIterable<T> = NgIterable<T>,\n> {\n abstract values$: Observable<U | null | undefined>;\n abstract viewsRendered$: Observable<\n EmbeddedViewRef<RxVirtualForViewContext<T, U>>[]\n >;\n abstract viewRendered$: Observable<{\n view: EmbeddedViewRef<RxVirtualForViewContext<T, U>>;\n index: number;\n item: T;\n }>;\n abstract viewContainer: ViewContainerRef;\n abstract renderingStart$: Observable<Set<number>>;\n _trackBy: TrackByFunction<T> | null;\n}\n\n/** @internal */\nexport class RxVirtualForViewContext<\n T,\n U extends NgIterable<T> = NgIterable<T>,\n C extends { count: number; index: number } = { count: number; index: number },\n K = keyof T,\n> extends RxDefaultListViewContext<T, U, K> {\n constructor(\n item: T,\n public rxVirtualForOf: U,\n customProps?: C,\n ) {\n super(item, customProps);\n }\n}\n\n@Directive()\nexport abstract class RxVirtualScrollElement {\n abstract elementScrolled$: Observable<void>;\n abstract getElementRef(): ElementRef<HTMLElement>;\n abstract measureOffset(): number;\n}\n","import { getZoneUnPatchedApi } from '@rx-angular/cdk/internals/core';\nimport {\n cancelAnimationFrame,\n Promise,\n requestAnimationFrame,\n} from '@rx-angular/cdk/zone-less/browser';\nimport { from, Observable } from 'rxjs';\n\nexport function toBoolean(input: null | boolean | string | undefined): boolean {\n return input != null && `${input}` !== 'false';\n}\n\nexport function unpatchedAnimationFrameTick(): Observable<void> {\n return new Observable<void>((observer) => {\n const tick = requestAnimationFrame(() => {\n observer.next();\n observer.complete();\n });\n return () => {\n cancelAnimationFrame(tick);\n };\n });\n}\n\nexport function unpatchedMicroTask(): Observable<void> {\n return from(Promise.resolve()) as Observable<void>;\n}\n\nexport function unpatchedScroll(el: EventTarget): Observable<void> {\n return new Observable<void>((observer) => {\n const listener = () => observer.next();\n getZoneUnPatchedApi(el, 'addEventListener').call(el, 'scroll', listener, {\n passive: true,\n });\n return () => {\n getZoneUnPatchedApi(el, 'removeEventListener').call(\n el,\n 'scroll',\n listener,\n { passive: true }\n );\n };\n });\n}\n\n/**\n * @description\n *\n * calculates the correct scrollTop value in which the rx-virtual-scroll-viewport\n * is actually visible\n */\nexport function parseScrollTopBoundaries(\n scrollTop: number,\n offset: number,\n contentSize: number,\n containerSize: number\n): {\n scrollTopWithOutOffset: number;\n scrollTopAfterOffset: number;\n scrollTop: number;\n} {\n const scrollTopWithOutOffset = scrollTop - offset;\n const maxSize = Math.max(contentSize - containerSize, containerSize);\n const maxScrollTop = Math.max(contentSize, containerSize);\n const adjustedScrollTop = Math.max(0, scrollTopWithOutOffset);\n const scrollTopAfterOffset = adjustedScrollTop - maxSize;\n return {\n scrollTopWithOutOffset,\n scrollTopAfterOffset,\n scrollTop: Math.min(adjustedScrollTop, maxScrollTop),\n };\n}\n\n/**\n * @description\n *\n * Calculates the visible size of the rx-virtual-scroll-viewport container. It\n * accounts for the fact that the viewport can partially or fully be out of viewport because\n * static contents that are living between the boundaries of rx-virtual-scroll-viewport\n * and its scrollable element.\n */\nexport function calculateVisibleContainerSize(\n containerSize: number,\n scrollTopWithOutOffset: number,\n scrollTopAfterOffset: number\n) {\n let clamped = containerSize;\n if (scrollTopWithOutOffset < 0) {\n clamped = Math.max(0, containerSize + scrollTopWithOutOffset);\n } else if (scrollTopAfterOffset > 0) {\n clamped = Math.max(0, containerSize - scrollTopAfterOffset);\n }\n return clamped;\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface RxVirtualScrollDefaultOptions {\n /* determines how many templates can be cached and re-used on rendering, defaults to 20 */\n templateCacheSize?: number;\n /* determines how many views will be rendered in scroll direction, defaults to 15 */\n runwayItems?: number;\n /* determines how many views will be rendered in the opposite scroll direction, defaults to 5 */\n runwayItemsOpposite?: number;\n /* default item size to be used for scroll strategies. Used as tombstone size for the autosized strategy */\n itemSize?: number;\n}\n/** Injection token to be used to override the default options. */\nexport const RX_VIRTUAL_SCROLL_DEFAULT_OPTIONS =\n new InjectionToken<RxVirtualScrollDefaultOptions>(\n 'rx-virtual-scrolling-default-options',\n {\n providedIn: 'root',\n factory: RX_VIRTUAL_SCROLL_DEFAULT_OPTIONS_FACTORY,\n }\n );\n\n/** @internal */\nexport function RX_VIRTUAL_SCROLL_DEFAULT_OPTIONS_FACTORY(): RxVirtualScrollDefaultOptions {\n return {\n runwayItems: DEFAULT_RUNWAY_ITEMS,\n runwayItemsOpposite: DEFAULT_RUNWAY_ITEMS_OPPOSITE,\n templateCacheSize: DEFAULT_TEMPLATE_CACHE_SIZE,\n itemSize: DEFAULT_ITEM_SIZE,\n };\n}\n\n/** @internal */\nexport const DEFAULT_TEMPLATE_CACHE_SIZE = 20;\n/** @internal */\nexport const DEFAULT_ITEM_SIZE = 50;\n/** @internal */\nexport const DEFAULT_RUNWAY_ITEMS = 10;\n/** @internal */\nexport const DEFAULT_RUNWAY_ITEMS_OPPOSITE = 2;\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable()\nexport class RxaResizeObserver {\n private resizeObserver = new ResizeObserver((events) => {\n this.viewsResized$.next(events);\n });\n\n /** @internal */\n private readonly viewsResized$ = new Subject<ResizeObserverEntry[]>();\n\n observeElement(\n element: Element,\n options?: ResizeObserverOptions\n ): Observable<ResizeObserverEntry> {\n this.resizeObserver.observe(element, options);\n return new Observable<ResizeObserverEntry>((observer) => {\n const inner = this.viewsResized$.subscribe((events) => {\n const event = events.find((event) => event.target === element);\n if (event) {\n observer.next(event);\n }\n });\n return () => {\n this.resizeObserver.unobserve(element);\n inner.unsubscribe();\n };\n });\n }\n\n destroy() {\n this.resizeObserver.disconnect();\n }\n}\n","import {\n Directive,\n EmbeddedViewRef,\n inject,\n Input,\n NgIterable,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n} from '@angular/core';\nimport { coalesceWith } from '@rx-angular/cdk/coalescing';\nimport {\n combineLatest,\n merge,\n MonoTypeOperatorFunction,\n Observable,\n of,\n ReplaySubject,\n Subject,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n exhaustMap,\n filter,\n finalize,\n groupBy,\n map,\n mergeMap,\n pairwise,\n startWith,\n switchMap,\n take,\n takeUntil,\n takeWhile,\n tap,\n} from 'rxjs/operators';\nimport {\n ListRange,\n RxVirtualForViewContext,\n RxVirtualScrollStrategy,\n RxVirtualScrollViewport,\n RxVirtualViewRepeater,\n} from '../model';\nimport {\n calculateVisibleContainerSize,\n parseScrollTopBoundaries,\n toBoolean,\n unpatchedMicroTask,\n} from '../util';\nimport { RX_VIRTUAL_SCROLL_DEFAULT_OPTIONS } from '../virtual-scroll.config';\nimport { RxaResizeObserver } from './resize-observer';\n\n/** @internal */\ntype VirtualViewItem = {\n size: number;\n cached?: boolean;\n position?: number;\n};\n\n/** @internal */\ntype AnchorItem = {\n index: number;\n offset: number;\n};\n\nconst defaultSizeExtract = (entry: ResizeObserverEntry) =>\n entry.borderBoxSize[0].blockSize;\n\n/**\n * @Directive AutosizeVirtualScrollStrategy\n *\n * @description\n *\n * The `AutosizeVirtualScrollStrategy` provides a twitter-like virtual-scrolling\n * experience. It is able to render and position items based on their individual\n * size. It is comparable to \\@angular/cdk/experimental `AutosizeVirtualScrollStrategy`, but\n * with a high performant layouting technique and more features.\n *\n * On top of this the `AutosizeVirtualScrollStrategy` is leveraging the native\n * `ResizeObserver` in order to detect size changes for each individual view\n * rendered to the DOM and properly re-position accordingly.\n *\n * In order to provide top-notch runtime performance the `AutosizeVirtualScrollStrategy`\n * builds up caches that prevent DOM interactions whenever possible. Once a view\n * was visited, its properties will be stored instead of re-read from the DOM again as\n * this can potentially lead to unwanted forced reflows.\n *\n * @docsCategory RxVirtualFor\n * @docsPage RxVirtualFor\n * @publicApi\n */\n@Directive({\n selector: 'rx-virtual-scroll-viewport[autosize]',\n providers: [\n {\n provide: RxVirtualScrollStrategy,\n useExisting: AutoSizeVirtualScrollStrategy,\n },\n RxaResizeObserver,\n ],\n standalone: true,\n})\nexport class AutoSizeVirtualScrollStrategy<\n T,\n U extends NgIterable<T> = NgIterable<T>,\n >\n extends RxVirtualScrollStrategy<T, U>\n implements OnChanges, OnDestroy\n{\n private readonly defaults? = inject(RX_VIRTUAL_SCROLL_DEFAULT_OPTIONS, {\n optional: true,\n });\n\n /**\n * @description\n * The amount of items to render upfront in scroll direction\n */\n @Input() runwayItems = this.defaults?.runwayItems ?? 10;\n\n /**\n * @description\n * The amount of items to render upfront in reverse scroll direction\n */\n @Input() runwayItemsOpposite = this.defaults?.runwayItemsOpposite ?? 2;\n\n /**\n * @description\n * The default size of the items being rendered. The autosized strategy will assume\n * this size for items it doesn't know yet. For the smoothest experience,\n * you provide the mean size of all items being rendered - if possible of course.\n *\n * As soon as rxVirtualFor is able to also render actual tombstone items, this\n * will be the size of a tombstone item being rendered before the actual item\n * is inserted into its position.\n */\n @Input() tombstoneSize = this.defaults?.itemSize ?? 50;\n\n /**\n * @description\n * The autosized strategy uses the native ResizeObserver in order to determine\n * if an item changed in size to afterwards properly position the views.\n * You can customize the config passed to the ResizeObserver as well as determine\n * which result property to use when determining the views size.\n */\n @Input() resizeObserverConfig?: {\n options?: ResizeObserverOptions;\n extractSize?: (entry: ResizeObserverEntry) => number;\n };\n\n /**\n * @description\n * When enabled, the autosized scroll strategy attaches a `ResizeObserver`\n * to every view within the given renderedRange. If your views receive\n * dimension changes that are not caused by list updates, this is a way to\n * still track height changes. This also applies to resize events of the whole\n * document.\n */\n @Input({ transform: toBoolean }) withResizeObserver = true;\n\n /**\n * @description\n * When enabled, the scroll strategy stops removing views from the viewport,\n * instead it only adds views. This setting can be changed on the fly. Views will be added in both directions\n * according to the user interactions.\n */\n @Input({ transform: toBoolean }) appendOnly = false;\n\n /**\n * @description\n * When enabled, the autosized scroll strategy removes css styles that\n * prevent the scrollbar from being in sync with the input device.\n * Use with caution, as this can lead to extremely weird scroll behavior\n * on chromium based browsers when the rendered views differ\n * in dimensions too much or change dimensions heavily.\n */\n @Input({ transform: toBoolean }) withSyncScrollbar = false;\n\n /**\n * @description\n * If this flag is true, the virtual scroll strategy maintains the scrolled item when new data\n * is prepended to the list. This is very useful when implementing a reversed infinite scroller, that prepends\n * data instead of appending it\n */\n @Input({ transform: toBoolean }) keepScrolledIndexOnPrepend = false;\n\n /** @internal */\n private viewport: RxVirtualScrollViewport | null = null;\n /** @internal */\n private viewRepeater: RxVirtualViewRepeater<T, U> | null = null;\n\n /** @internal */\n private readonly _contentSize$ = new ReplaySubject<number>(1);\n /** @internal */\n override readonly contentSize$ = this._contentSize$.asObservable();\n\n /** @internal */\n private _contentSize = 0;\n /** @internal */\n private set contentSize(size: number) {\n this._contentSize = size;\n this._contentSize$.next(size);\n }\n private get contentSize(): number {\n return this._contentSize;\n }\n\n /** @internal */\n private readonly _renderedRange$ = new Subject<ListRange>();\n /** @internal */\n readonly renderedRange$ = this._renderedRange$.asObservable();\n /** @internal */\n private _renderedRange: ListRange = { start: 0, end: 0 };\n\n /** @internal */\n private set renderedRange(range: ListRange) {\n this._renderedRange = range;\n this._renderedRange$.next(range);\n }\n /** @internal */\n private get renderedRange(): ListRange {\n return this._renderedRange;\n }\n /** @internal */\n private positionedRange: ListRange = { start: 0, end: 0 };\n\n /** @internal */\n private readonly _scrolledIndex$ = new ReplaySubject<number>(1);\n /** @internal */\n readonly scrolledIndex$ = this._scrolledIndex$.pipe(distinctUntilChanged());\n /**\n * @internal\n * The action used to kick off the scroll process\n */\n private scrollToTrigger$ = new Subject<{\n scrollTop: number;\n behavior?: ScrollBehavior;\n }>();\n /** @internal */\n private _scrolledIndex = 0;\n /** @internal */\n private get scrolledIndex(): number {\n return this._scrolledIndex;\n }\n /** @internal */\n private set scrolledIndex(index: number) {\n this._scrolledIndex = index;\n this._scrolledIndex$.next(index);\n }\n\n /**\n * is set, when scrollToIndex is called\n * @internal\n * */\n private _scrollToIndex: number | null = null;\n\n /** @internal */\n private containerSize = 0;\n /** @internal */\n private contentLength = 0;\n /** @internal */\n private _virtualItems: VirtualViewItem[] = [];\n /** @internal */\n private scrollTop = 0;\n /** @internal */\n private scrollTopWithOutOffset = 0;\n /** @internal */\n private scrollTopAfterOffset = 0;\n /** @internal */\n private viewportOffset = 0;\n /** @internal */\n private direction: 'up' | 'down' = 'down';\n /** @internal */\n private anchorScrollTop = 0;\n\n /** @internal */\n private anchorItem = {\n index: 0,\n offset: 0,\n };\n /** @internal */\n private lastScreenItem = {\n index: 0,\n offset: 0,\n };\n\n /** @internal */\n private waitForScroll = false;\n\n /** @internal */\n private isStable$ = new ReplaySubject<boolean>(1);\n\n /** @internal */\n private readonly detached$ = new Subject<void>();\n\n /** @internal */\n private resizeObserver = inject(RxaResizeObserver, { self: true });\n /** @internal */\n private readonly recalculateRange$ = new Subject<void>();\n\n /** @internal */\n private until$<A>(): MonoTypeOperatorFunction<A> {\n return (o$) => o$.pipe(takeUntil(this.detached$));\n }\n\n /** @internal */\n private get extractSize() {\n return this.resizeObserverConfig?.extractSize ?? defaultSizeExtract;\n }\n\n /** @internal */\n override get isStable(): Observable<boolean> {\n return this.isStable$.pipe(filter((w) => w));\n }\n\n /** @internal */\n ngOnChanges(changes: SimpleChanges) {\n if (\n (changes['runwayItemsOpposite'] &&\n !changes['runwayItemsOpposite'].firstChange) ||\n (changes['runwayItems'] && !changes['runwayItems'].firstChange)\n ) {\n this.recalculateRange$.next();\n }\n if (changes['withSyncScrollbar']) {\n this.updateScrollElementClass();\n }\n }\n\n /** @internal */\n ngOnDestroy() {\n this.detach();\n }\n\n /** @internal */\n attach(\n viewport: RxVirtualScrollViewport,\n viewRepeater: RxVirtualViewRepeater<T, U>,\n ): void {\n this.viewport = viewport;\n this.viewRepeater = viewRepeater;\n this.updateScrollElementClass();\n this.maintainVirtualItems();\n this.calcRenderedRange();\n this.positionElements();\n this.listenToScrollTrigger();\n }\n\n /** @internal */\n detach(): void {\n this.updateScrollElementClass(false);\n this.viewport = null;\n this.viewRepeater = null;\n this._virtualItems = [];\n this.resizeObserver.destroy();\n this.detached$.next();\n }\n\n scrollToIndex(index: number, behavior?: ScrollBehavior): void {\n const _index = Math.min(\n Math.max(index, 0),\n Math.max(0, this.contentLength - 1),\n );\n if (_index !== this.scrolledIndex) {\n const scrollTop = this.calcInitialPosition(_index);\n this._scrollToIndex = _index;\n this.scrollToTrigger$.next({ scrollTop, behavior });\n }\n }\n\n private scrollTo(scrollTo: number, behavior?: ScrollBehavior): void {\n this.waitForScroll =\n scrollTo !== this.scrollTop && this.contentSize > this.containerSize;\n if (this.waitForScroll) {\n this.isStable$.next(false);\n }\n this.viewport!.scrollTo(this.viewportOffset + scrollTo, behavior);\n }\n\n /**\n * starts the subscriptions that maintain the virtualItems array on changes\n * to the underlying dataset\n * @internal\n */\n private maintainVirtualItems(): void {\n // reset virtual viewport when opposite orientation to the scroll direction\n // changes, as we have to expect dimension changes for all items when this\n // happens. This could also be configurable as it maybe costs performance\n this.viewport!.containerRect$.pipe(\n map(({ width }) => width),\n distinctUntilChanged(),\n filter(() => this.renderedRange.end > 0 && this._virtualItems.length > 0),\n this.until$(),\n ).subscribe(() => {\n // reset because we have no idea how items will behave\n let i = 0;\n while (i < this.renderedRange.start) {\n this._virtualItems[i].cached = false;\n i++;\n }\n i = this.renderedRange.end;\n while (i < this.contentLength - 1) {\n this._virtualItems[i].cached = false;\n i++;\n }\n });\n\n // synchronises the values with the virtual viewport we've built up\n // it might get costy when having > 100k elements, it's still faster than\n // the IterableDiffer approach, especially on move operations\n const itemCache = new Map<any, { item: T; index: number }>();\n const trackBy = this.viewRepeater!._trackBy ?? ((i, item) => item);\n this.renderedRange$\n .pipe(pairwise(), this.until$())\n .subscribe(([oldRange, newRange]) => {\n let i = oldRange.start;\n if (i < this._virtualItems.length) {\n for (i; i < Math.min(this._virtualItems.length, oldRange.end); i++) {\n if (i < newRange.start || i >= newRange.end) {\n this._virtualItems[i].position = undefined;\n }\n }\n }\n });\n this.viewRepeater!.values$.pipe(\n this.until$(),\n tap((values) => {\n const dataArr = Array.isArray(values)\n ? values\n : values\n ? Array.from(values)\n : [];\n const existingIds = new Set<any>();\n let size = 0;\n const dataLength = dataArr.length;\n const virtualItems = new Array<VirtualViewItem>(dataLength);\n let anchorItemIndex = this.anchorItem.index;\n const keepScrolledIndexOnPrepend =\n this.keepScrolledIndexOnPrepend &&\n dataArr.length > 0 &&\n itemCache.size > 0;\n for (let i = 0; i < dataLength; i++) {\n const item = dataArr[i];\n const id = trackBy(i, item);\n const cachedItem = itemCache.get(id);\n if (cachedItem === undefined) {\n // add\n virtualItems[i] = { size: 0 };\n itemCache.set(id, { item: dataArr[i], index: i });\n if (i <= anchorItemIndex) {\n anchorItemIndex++;\n }\n } else if (cachedItem.index !== i) {\n // move\n virtualItems[i] = this._virtualItems[cachedItem.index];\n virtualItems[i].position = undefined;\n itemCache.set(id, { item: dataArr[i], index: i });\n } else {\n // update\n // todo: properly determine update (Object.is?)\n virtualItems[i] = this._virtualItems[i];\n // if index is not part of rendered range, remove cache\n if (\n !this.withResizeObserver ||\n i < this.renderedRange.start ||\n i >= this.renderedRange.end\n ) {\n virtualItems[i].cached = false;\n }\n itemCache.set(id, { item: dataArr[i], index: i });\n }\n existingIds.add(id);\n size += virtualItems[i].size || this.tombstoneSize;\n }\n this._virtualItems = virtualItems;\n // sync delete operations\n if (itemCache.size > dataLength) {\n itemCache.forEach((v, k) => {\n if (!existingIds.has(k)) {\n itemCache.delete(k);\n }\n });\n }\n existingIds.clear();\n this.contentLength = dataLength;\n if (\n keepScrolledIndexOnPrepend &&\n this.anchorItem.index !== anchorItemIndex\n ) {\n this.scrollToIndex(anchorItemIndex);\n } else if (dataLength === 0) {\n this.anchorItem = {\n index: 0,\n offset: 0,\n };\n this._renderedRange = {\n start: 0,\n end: 0,\n };\n this.scrollTo(0);\n this.scrollTop = this.anchorScrollTop = 0;\n } else if (dataLength < this._renderedRange.end) {\n this.anchorItem = this.calculateAnchoredItem(\n {\n index: dataLength,\n offset: 0,\n },\n Math.max(\n -size,\n -calculateVisibleContainerSize(\n this.containerSize,\n this.scrollTopWithOutOffset,\n this.scrollTopAfterOffset,\n ),\n ),\n );\n this.calcAnchorScrollTop();\n this._renderedRange = {\n start: Math.max(0, this.anchorItem.index - this.runwayItems),\n end: dataLength,\n };\n this.scrollTo(size);\n this.scrollTop = this.anchorScrollTop;\n }\n this.contentSize = size;\n }),\n finalize(() => itemCache.clear()),\n ).subscribe();\n }\n\n /**\n * listen to triggers that should change the renderedRange\n * @internal\n */\n private calcRenderedRange(): void {\n let removeScrollAnchorOnNextScroll = false;\n const onlyTriggerWhenStable =\n <A>() =>\n (o$: Observable<A>) =>\n o$.pipe(\n filter(\n () =>\n this.renderedRange.end === 0 ||\n (this.scrollTop === this.anchorScrollTop &&\n this._scrollToIndex === null),\n ),\n );\n combineLatest([\n this.viewport!.containerRect$.pipe(\n map(({ height }) => {\n this.containerSize = height;\n return height;\n }),\n distinctUntilChanged(),\n onlyTriggerWhenStable(),\n ),\n this.viewport!.elementScrolled$.pipe(\n startWith(void 0),\n tap(() => {\n this.viewportOffset = this.viewport!.measureOffset();\n const { scrollTop, scrollTopWithOutOffset, scrollTopAfterOffset } =\n parseScrollTopBoundaries(\n this.viewport!.getScrollTop(),\n this.viewportOffset,\n this._contentSize,\n this.containerSize,\n );\n this.direction =\n scrollTopWithOutOffset > this.scrollTopWithOutOffset\n ? 'down'\n : 'up';\n this.scrollTopWithOutOffset = scrollTopWithOutOffset;\n this.scrollTopAfterOffset = scrollTopAfterOffset;\n this.scrollTop = scrollTop;\n if (removeScrollAnchorOnNextScroll) {\n this._scrollToIndex = null;\n removeScrollAnchorOnNextScroll = false;\n } else {\n removeScrollAnchorOnNextScroll = this._scrollToIndex !== null;\n }\n this.waitForScroll = false;\n }),\n ),\n this._contentSize$.pipe(distinctUntilChanged(), onlyTriggerWhenStable()),\n this.recalculateRange$.pipe(onlyTriggerWhenStable(), startWith(void 0)),\n ])\n .pipe(\n // make sure to not over calculate things by coalescing all triggers to the next microtask\n coalesceWith(unpatchedMicroTask()),\n map(() => {\n const range = { start: 0, end: 0 };\n const delta = this.scrollTop - this.anchorScrollTop;\n if (this.scrollTop === 0) {\n this.anchorItem = { index: 0, offset: 0 };\n } else {\n this.anchorItem = this.calculateAnchoredItem(\n this.anchorItem,\n delta,\n );\n }\n this.anchorScrollTop = this.scrollTop;\n this.scrolledIndex = this.anchorItem.index;\n this.lastScreenItem = this.calculateAnchoredItem(\n this.anchorItem,\n calculateVisibleContainerSize(\n this.containerSize,\n this.scrollTopWithOutOffset,\n this.scrollTopAfterOffset,\n ),\n );\n if (this.direction === 'up') {\n range.start = Math.max(0, this.anchorItem.index - this.runwayItems);\n range.end = Math.min(\n this.contentLength,\n this.lastScreenItem.index + this.runwayItemsOpposite,\n );\n } else {\n range.start = Math.max(\n 0,\n this.anchorItem.index - this.runwayItemsOpposite,\n );\n range.end = Math.min(\n this.contentLength,\n this.lastScreenItem.index + this.runwayItems,\n );\n }\n if (this.appendOnly) {\n range.start = Math.min(this._renderedRange.start, range.start);\n range.end = Math.max(this._renderedRange.end, range.end);\n }\n return range;\n }),\n )\n .pipe(this.until$())\n .subscribe((range: ListRange) => {\n this.renderedRange = range;\n this.isStable$.next(!this.waitForScroll);\n });\n }\n\n /**\n * position elements after they are created/updated/moved or their dimensions\n * change from other sources\n * @internal\n */\n private positionElements(): void {\n const viewsToObserve$ = new Subject<\n EmbeddedViewRef<RxVirtualForViewContext<T, U>>\n >();\n const positionByIterableChange$ = this.viewRepeater!.renderingStart$.pipe(\n switchMap((batchedUpdates) => {\n // initialIndex tells us what will be the first index to be change detected\n // if it's not the first one, we maybe have to adjust the position\n // of all items in the viewport before this index\n const initialIndex = batchedUpdates.size\n ? batchedUpdates.values().next().value + this.renderedRange.start\n : this.renderedRange.start;\n let position = 0;\n let scrollToAnchorPosition: number | null = null;\n return this.viewRepeater!.viewRendered$.pipe(\n tap(({ view, index: viewIndex, item }) => {\n const itemIndex = view.context.index;\n // this most of the time causes a forced reflow per rendered view.\n // it doesn't sound good, but it's still way more stable than\n // having one large reflow in a microtask after the actual\n // scheduler tick.\n // Right here, we can insert work into the task which is currently\n // executed as part of the concurrent scheduler tick.\n // causing the forced reflow here, also makes it count for the\n // schedulers frame budget. This way we will always run with the\n // configured FPS. The only case where this is not true is when rendering 1 single view\n // already explodes the budget\n const [, sizeDiff] = this.updateElementSize(view, itemIndex);\n const virtualItem = this._virtualItems[itemIndex];\n\n // before positioning the first view of this batch, calculate the\n // anchorScrollTop & initial position of the view\n if (itemIndex === initialIndex) {\n this.calcAnchorScrollTop();\n position = this.calcInitialPosition(itemIndex);\n\n // if we receive a partial update and the current views position is\n // new, we can safely assume that all positions from views before the current\n // index are also off. We need to adjust them\n if (\n initialIndex > this.renderedRange.start &&\n virtualItem.position !== position\n ) {\n let beforePosition = position;\n let i = initialIndex - 1;\n while (i >= this.renderedRange.start) {\n const view = this.getViewRef(i - this.renderedRange.start);\n const virtualItem = this._virtualItems[i];\n const element = this.getElement(view);\n beforePosition -= virtualItem.size;\n virtualItem.position = beforePosition;\n this.positionElement(element, beforePosition);\n i--;\n }\n }\n } else if (itemIndex < this.anchorItem.index && sizeDiff) {\n this.anchorScrollTop += sizeDiff;\n }\n const size = virtualItem.size;\n // position current element if we need to\n if (virtualItem.position !== position) {\n const element = this.getElement(view);\n this.positionElement(element, position);\n virtualItem.position = position;\n }\n if (this._scrollToIndex === itemIndex) {\n scrollToAnchorPosition = position;\n }\n position += size;\n // immediately activate the ResizeObserver after initial positioning\n viewsToObserve$.next(view);\n this.viewRenderCallback.next({\n index: itemIndex,\n view,\n item,\n });\n // after positioning the actual view, we also need to position all\n // views from the current index on until either the renderedRange.end\n // is hit or we hit an index that will anyway receive an update.\n // we can derive that information from the batchedUpdates index Set\n const { lastPositionedIndex: lastIndex, position: newPosition } =\n this.positionUnchangedViews({\n viewIndex,\n itemIndex,\n batchedUpdates,\n position,\n });\n position = newPosition;\n this.positionedRange.start = this.renderedRange.start;\n this.positionedRange.end = lastIndex + 1;\n }),\n coalesceWith(unpatchedMicroTask()),\n tap(() => {\n this.adjustContentSize(position);\n if (this._scrollToIndex === null) {\n this.maybeAdjustScrollPosition();\n } else if (scrollToAnchorPosition != null) {\n if (scrollToAnchorPosition !== this.anchorScrollTop) {\n if (\n scrollToAnchorPosition >\n this.contentSize - this.containerSize\n ) {\n // if the anchorItemPosition is larger than the maximum scrollPos,\n // we want to scroll until the bottom.\n // of course, we need to be sure all the items until the end are positioned\n // until we are sure that we need to scroll to the bottom\n if (this.renderedRange.end === this.positionedRange.end) {\n this._scrollToIndex = null;\n this.scrollTo(this.contentSize);\n }\n } else {\n this._scrollToIndex = null;\n this.scrollTo(scrollToAnchorPosition);\n }\n } else {\n this._scrollToIndex = null;\n this.maybeAdjustScrollPosition();\n }\n }\n }),\n );\n }),\n );\n const positionByResizeObserver$ = viewsToObserve$.pipe(\n filter(() => this.withResizeObserver),\n groupBy((viewRef) => viewRef),\n mergeMap((o$) =>\n o$.pipe(\n exhaustMap((viewRef) => this.observeViewSize$(viewRef)),\n tap(([index, viewIndex]) => {\n this.calcAnchorScrollTop();\n let position = this.calcInitialPosition(index);\n let viewIdx = viewIndex;\n if (this._virtualItems[index].position !== position) {\n // we want to reposition the whole viewport, when the current position has changed\n while (viewIdx > 0) {\n viewIdx--;\n position -=\n this._virtualItems[this.getViewRef(viewIdx).context.index]\n .size;\n }\n } else {\n // we only need to reposition everything from the next viewIndex on\n viewIdx++;\n position += this._virtualItems[index].size;\n }\n // position all views from the specified viewIndex\n while (viewIdx < this.viewRepeater!.viewContainer.length) {\n const view = this.getViewRef(viewIdx);\n const itemIndex = view.context.index;\n const virtualItem = this._virtualItems[itemIndex];\n const element = this.getElement(view);\n this.updateElementSize(view, itemIndex);\n virtualItem.position = position;\n this.positionElement(element, position);\n position += virtualItem.size;\n viewIdx++;\n }\n this.maybeAdjustScrollPosition();\n }),\n ),\n ),\n );\n merge(positionByIterableChange$, positionByResizeObserver$)\n .pipe(this.until$())\n .subscribe();\n }\n\n /** listen to API initiated scroll triggers (e.g. initialScrollIndex) */\n private listenToScrollTrigger(): void {\n this.scrollToTrigger$\n .pipe(\n switchMap((scrollTo) =>\n // wait until containerRect at least emitted once\n this.containerSize === 0\n ? this.viewport!.containerRect$.pipe(\n map(() => scrollTo),\n take(1),\n )\n : of(scrollTo),\n ),\n this.until$(),\n )\n .subscribe(({ scrollTop, behavior }) => {\n this.scrollTo(scrollTop, behavior);\n });\n }\n /** @internal */\n private adjustContentSize(position: number) {\n let newContentSize = position;\n for (let i = this.positionedRange.end; i < this._virtualItems.length; i++) {\n newContentSize += this.getItemSize(i);\n }\n this.contentSize = newContentSize;\n }\n\n /** @internal */\n private observeViewSize$(\n viewRef: EmbeddedViewRef<RxVirtualForViewContext<T, U>>,\n ) {\n const element = this.getElement(viewRef);\n return this.resizeObserver\n .observeElement(element, this.resizeObserverConfig?.options)\n .pipe(\n takeWhile(\n (event) =>\n event.target.isConnected &&\n !!this._virtualItems[viewRef.context.index],\n ),\n map((event) => {\n const index = viewRef.context.index;\n const size = Math.round(this.extractSize(event));\n const diff = size - this._virtualItems[index].size;\n if (diff !== 0) {\n this._virtualItems[index].size = size;\n this._virtualItems[index].cached = true;\n this.contentSize += diff;\n return [index, this.viewRepeater!.viewContainer.indexOf(viewRef)];\n }\n return null as unknown as [number, number];\n }),\n filter(\n (diff) =>\n diff !== null &&\n diff[0] >= this.positionedRange.start &&\n diff[0] < this.positionedRange.end,\n ),\n takeUntil(\n merge(\n this.viewRepeater!.viewRendered$,\n this.viewRepeater!.renderingStart$,\n ).pipe(\n tap(() => {\n // we need to clean up the position property for views\n // that fall out of the renderedRange.\n const index = viewRef.context.index;\n if (\n this._virtualItems[index] &&\n (index < this.renderedRange.start ||\n index >= this.renderedRange.end)\n ) {\n this._virtualItems[index].position = undefined;\n }\n }),\n filter(\n () => this.viewRepeater!.viewContainer.indexOf(viewRef) === -1,\n ),\n ),\n ),\n );\n }\n\n /**\n * @internal\n * heavily inspired by\n * https://github.com/GoogleChromeLabs/ui-element-samples/blob/gh-pages/infinite-scroller/scripts/infinite-scroll.js\n */\n private calculateAnchoredItem(\n initialAnchor: AnchorItem,\n delta: number,\n ): AnchorItem {\n if (delta === 0) return initialAnchor;\n delta += initialAnchor.offset;\n let i = initialAnchor.index;\n const items = this._virtualItems;\n if (delta < 0) {\n while (delta < 0 && i > 0) {\n delta += this.getItemSize(i - 1);\n i--;\n }\n } else {\n while (delta > 0 && i < items.length && this.getItemSize(i) <= delta) {\n delta -= this.getItemSize(i);\n i++;\n }\n }\n return {\n index: Math.min(i, items.length),\n offset: delta,\n };\n }\n\n /** @internal */\n private positionUnchangedViews({\n viewIndex,\n itemIndex,\n batchedUpdates,\n position,\n }: {\n viewIndex: number;\n itemIndex: number;\n batchedUpdates: Set<number>;\n position: number;\n }): { position: number; lastPositionedIndex: number } {\n let _viewIndex = viewIndex + 1;\n let index = itemIndex + 1;\n let lastPositionedIndex = itemIndex;\n while (!batchedUpdates.has(_viewIndex) && index < this.renderedRange.end) {\n const virtualItem = this._virtualItems[index];\n if (position !== virtualItem.position) {\n const view = this.getViewRef(_viewIndex);\n const element = this.getElement(view);\n this.positionElement(element, position);\n virtualItem.position = position;\n }\n position += virtualItem.size;\n lastPositionedIndex = index;\n index++;\n _viewIndex++;\n }\n return { position, lastPositionedIndex };\n }\n\n /**\n * Adjust the scroll position when the anchorScrollTop differs from\n * the actual scrollTop.\n * Trigger a range recalculation if there is empty space\n *\n * @internal\n */\n private maybeAdjustScrollPosition(): void {\n if (this.anchorScrollTop !== this.scrollTop) {\n this.scrollTo(this.anchorScrollTop);\n }\n }\n\n /** @internal */\n private calcAnchorScrollTop(): void {\n this.anchorScrollTop = 0;\n for (let i = 0; i < this.anchorItem.index; i++) {\n this.anchorScrollTop += this.getItemSize(i);\n }\n this.anchorScrollTop += this.anchorItem.offset;\n }\n\n /** @internal */\n private calcInitialPosition(start: number): number {\n // Calculate position of starting node\n let pos = this.anchorScrollTop - this.anchorItem.offset;\n let i = this.anchorItem.index;\n while (i > start) {\n const itemSize = this.getItemSize(i - 1);\n pos -= itemSize;\n i--;\n }\n while (i < start) {\n const itemSize = this.getItemSize(i);\n pos += itemSize;\n i++;\n }\n return pos;\n }\n\n /** @internal */\n private getViewRef(\n index: number,\n ): EmbeddedViewRef<RxVirtualForViewContext<T, U>> {\n return <EmbeddedViewRef<RxVirtualForViewContext<T, U>>>(\n this.viewRepeater!.viewContainer.get(index)!\n );\n }\n\n /** @internal */\n private updateElementSize(\n view: EmbeddedViewRef<any>,\n index: number,\n ): [number, number] {\n const oldSize = this.getItemSize(index);\n const isCached = this._virtualItems[index].cached;\n const size = isCached\n ? oldSize\n : this.getElementSize(this.getElement(view));\n this._virtualItems[index].size = size;\n this._virtualItems[index].cached = true;\n return [size, size - oldSize];\n }\n\n /** @internal */\n private getItemSize(index: number): number {\n return this._virtualItems[index].size || this.tombstoneSize;\n }\n /** @internal */\n private getElementSize(element: HTMLElement): number {\n return element.offsetHeight;\n }\n /** @internal */\n private positionElement(element: HTMLElement, scrollTop: number): void {\n element.style.position = 'absolute';\n element.style.transform = `translateY(${scrollTop}px)`;\n }\n\n /** @internal */\n private updateScrollElementClass(force = this.withSyncScrollbar): void {\n const scrollElement = this.viewport?.getScrollElement?.();\n if (\n !!scrollElement &&\n scrollElement.classList.contains('rx-virtual-scroll-element')\n ) {\n scrollElement.classList.toggle(\n 'rx-virtual-scroll-element--withSyncScrollbar',\n force,\n );\n }\n }\n}\n","import {\n Directive,\n inject,\n Input,\n NgIterable,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n} from '@angular/core';\nimport { coalesceWith } from '@rx-angular/cdk/coalescing';\nimport {\n combineLatest,\n MonoTypeOperatorFunction,\n Observable,\n ReplaySubject,\n Subject,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n startWith,\n switchMap,\n takeUntil,\n tap,\n} from 'rxjs/operators';\nimport {\n ListRange,\n RxVirtualScrollStrategy,\n RxVirtualScrollViewport,\n RxVirtualViewRepeater,\n} from '../model';\nimport {\n calculateVisibleContainerSize,\n parseScrollTopBoundaries,\n toBoolean,\n unpatchedMicroTask,\n} from '../util';\nimport {\n DEFAULT_ITEM_SIZE,\n DEFAULT_RUNWAY_ITEMS,\n DEFAULT_RUNWAY_ITEMS_OPPOSITE,\n RX_VIRTUAL_SCROLL_DEFAULT_OPTIONS,\n} from '../virtual-scroll.config';\n\n/** @internal */\ntype VirtualViewItem = {\n size: number;\n};\n\n/** @internal */\ntype AnchorItem = {\n index: number;\n offset: number;\n};\n\nconst defaultItemSize = () => DEFAULT_ITEM_SIZE;\n\n/**\n * @Directive DynamicSizeVirtualScrollStrategy\n *\n * @description\n *\n * The `DynamicSizeVirtualScrollStrategy` is very similar to the `AutosizeVirtualScrollStrategy`.\n * It positions items based on a function determining its size.\n *\n * @docsCategory RxVirtualFor\n * @docsPage RxVirtualFor\n * @publicApi\n */\n@Directive({\n selector: 'rx-virtual-scroll-viewport[dynamic]',\n providers: [\n {\n provide: RxVirtualScrollStrategy,\n useExisting: DynamicSizeVirtualScrollStrategy,\n },\n ],\n standalone: true,\n})\nexport class DynamicSizeVirtualScrollStrategy<\n T,\n U extends NgIterable<T> = NgIterable<T>,\n >\n extends RxVirtualScrollStrategy<T, U>\n implements OnChanges, OnDestroy\n{\n private readonly defaults? = inject(RX_VIRTUAL_SCROLL_DEFAULT_OPTIONS, {\n optional: true,\n });\n\n /**\n * @description\n * The amount of items to render upfront in scroll direction\n */\n @Input() runwayItems = this.defaults?.runwayItems ?? DEFAULT_RUNWAY_ITEMS;\n\n /**\n * @description\n * The amount of items to render upfront in reverse scroll direction\n */\n @Input() runwayItemsOpposite =\n this.defaults?.runwayItemsOpposite ?? DEFAULT_RUNWAY_ITEMS_OPPOSITE;\n\n /**\n * @description\n * When enabled, the scroll strategy stops removing views from the viewport,\n * instead it only adds views. This setting can be changed on the fly. Views will be added in both directions\n * according to the user interactions.\n */\n @Input({ transform: toBoolean }) appendOnly = false;\n\n /**\n * @description\n * If this flag is true, the virtual scroll strategy maintains the scrolled item when new data\n * is prepended to the list. This is very useful when implementing a reversed infinite scroller, that prepends\n * data instead of appending it\n */\n @Input({ transform: toBoolean }) keepScrolledIndexOnPrepend = false;\n\n /**\n * @description\n * Function returning the size of an item\n */\n @Input('dynamic')\n set itemSize(fn: (item: T) => number) {\n if (fn) {\n this._itemSizeFn = fn;\n }\n }\n get itemSize() {\n return this._itemSizeFn;\n }\n private _itemSizeFn: (item: T) => number = defaultItemSize;\n\n /** @internal */\n private waitForScroll = false;\n\n /** @internal */\n private isStable$ = new ReplaySubject<boolean>(1);\n\n /** @internal */\n override get isStable(): Observable<boolean> {\n return this.isStable$.pipe(filter((w) => w));\n }\n\n /** @internal */\n private viewport: RxVirtualScrollViewport | null = null;\n /** @internal */\n private viewRepeater: RxVirtualViewRepeater<T, U> | null = null;\n\n /** @internal */\n private readonly _contentSize$ = new ReplaySubject<number>(1);\n /** @internal */\n readonly contentSize$ = this._contentSize$.asObservable();\n\n /** @internal */\n private _contentSize = 0;\n /** @internal */\n private set contentSize(size: number) {\n this._contentSize = size;\n this._contentSize$.next(size);\n }\n\n private get contentSize(): number {\n return this._contentSize;\n }\n\n /** @internal */\n private readonly _renderedRange$ = new ReplaySubject<ListRange>(1);\n /** @internal */\n readonly renderedRange$ = this._renderedRange$.asObservable();\n /** @internal */\n private _renderedRange: ListRange = { start: 0, end: 0 };\n // range of items where size is known and doesn't need to be re-calculated\n\n /** @internal */\n private set renderedRange(range: ListRange) {\n this._renderedRange = range;\n this._renderedRange$.next(range);\n }\n /** @internal */\n private get renderedRange(): ListRange {\n return this._renderedRange;\n }\n /** @internal */\n private readonly _scrolledIndex$ = new ReplaySubject<number>(1);\n /** @internal */\n readonly scrolledIndex$ = this._scrolledIndex$.pipe(distinctUntilChanged());\n private _scrolledIndex = 0;\n /** @internal */\n private set scrolledIndex(index: number) {\n this._scrolledIndex = index;\n this._scrolledIndex$.next(index);\n }\n private get scrolledIndex() {\n return this._scrolledIndex;\n }\n /** @internal */\n private get contentLength(): number {\n return this._virtualItems.length;\n }\n /** @internal */\n private containerSize = 0;\n /** @internal */\n private _virtualItems: VirtualViewItem[] = [];\n /** @internal */\n private scrollTop = 0;\n /** @internal */\n private scrollTopWithOutOffset = 0;\n /** @internal */\n private scrollTopAfterOffset = 0;\n /** @internal */\n private viewportOffset = 0;\n /** @internal */\n private direction: 'up' | 'down' = 'down';\n /** @internal */\n private anchorScrollTop = 0;\n /** @internal */\n private anchorItem = {\n index: 0,\n offset: 0,\n };\n /** @internal */\n private lastScreenItem = {\n index: 0,\n offset: 0,\n };\n\n /** @internal */\n private readonly detached$ = new Subject<void>();\n /** @internal */\n private readonly recalculateRange$ = new Subject<void>();\n /** @internal */\n private until$<A>(): MonoTypeOperatorFunction<A> {\n return (o$) => o$.pipe(takeUntil(this.detached$));\n }\n\n /** @internal */\n ngOnChanges(changes: SimpleChanges) {\n if (\n (changes['runwayItemsOpposite'] &&\n !changes['runwayItemsOpposite'].firstChange) ||\n (changes['runwayItems'] && !changes['runwayItems'].firstChange)\n ) {\n this.recalculateRange$.next();\n }\n }\n\n /** @internal */\n ngOnDestroy() {\n this.detach();\n }\n\n /** @internal */\n attach(\n viewport: RxVirtualScrollViewport,\n viewRepeater: RxVirtualViewRepeater<T, U>,\n ): void {\n this.viewport = viewport;\n this.viewRepeater = viewRepeater;\n this.maintainVirtualItems();\n this.calcRenderedRange();\n this.positionElements();\n }\n\n /** @internal */\n detach(): void {\n this.viewport = null;\n this.viewRepeater = null;\n this._virtualItems = [];\n this.detached$.next();\n }\n\n scrollToIndex(index: number, behavior?: ScrollBehavior): void {\n const _index = Math.min(Math.max(index, 0), this.contentLength - 1);\n let scrollTo = 0;\n for (let i = 0; i < _index; i++) {\n scrollTo += this._virtualItems[i].size;\n }\n this.scrollTo(scrollTo, behavior);\n }\n\n private scrollTo(scrollTo: number, behavior?: ScrollBehavior): void {\n this.waitForScroll =\n scrollTo !== this.scrollTop && this.contentSize > this.containerSize;\n if (this.waitForScroll) {\n this.isStable$.next(false);\n }\n this.viewport!.scrollTo(this.viewportOffset + scrollTo, behavior);\n }\n\n /** @internal */\n private maintainVirtualItems(): void {\n const valueArray$ = this.viewRepeater!.values$.pipe(\n map((values) =>\n Array.isArray(values)\n ? values\n : values != null\n ? Array.from(values)\n : [],\n ),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n valueArray$.pipe(this.until$()).subscribe((dataArr) => {\n const dataLength = dataArr.length;\n if (!dataLength) {\n this._virtualItems = [];\n this.contentSize = 0;\n this._renderedRange = {\n start: 0,\n end: 0,\n };\n this.anchorItem = {\n index: 0,\n offset: 0,\n };\n this.recalculateRange$.next();\n } else {\n let shouldRecalculateRange = false;\n let contentSize = 0;\n for (let i = 0; i < dataArr.length; i++) {\n const oldSize = this._virtualItems[i]?.size;\n const newSize = this.itemSize(dataArr[i]);\n contentSize += newSize;\n if (oldSize === undefined || oldSize !== newSize) {\n this._virtualItems[i] = { size: newSize };\n if (\n !shouldRecalculateRange &&\n (!this.contentSize ||\n (i >= this.renderedRange.start && i < this.renderedRange.end))\n ) {\n shouldRecalculateRange = true;\n }\n }\n }\n if (dataLength < this._renderedRange.end) {\n this.anchorItem = this.calculateAnchoredItem(\n {\n index: dataLength,\n offset: 0,\n },\n -calculateVisibleContainerSize(\n this.containerSize,\n this.scrollTopWithOutOffset,\n this.scrollTopAfterOffset,\n ),\n );\n this._renderedRange.start = Math.max(\n 0,\n this.anchorItem.index - this.runwayItems,\n );\n this._renderedRange.end = dataLength;\n this.calcAnchorScrollTop();\n this.scrollTo(contentSize);\n this.scrollTop = this.anchorScrollTop;\n }\n this.contentSize = contentSize;\n if (shouldRecalculateRange) {\n this.recalculateRange$.next();\n }\n }\n });\n\n let valueCache: Record<any, T> = {};\n /*\n * when keepScrolledIndexOnPrepend is active, we need to listen to data changes and figure out what was appended\n * before the last scrolledToItem\n */\n valueArray$\n .pipe(\n // TODO: this might cause issues when turning on/off at runtime\n filter(() => this.keepScrolledIndexOnPrepend),\n this.until$(),\n )\n .subscribe((valueArray) => {\n const trackBy = this.viewRepeater!._trackBy;\n let scrollTo = this.scrolledIndex;\n const dataLength = valueArray.length;\n const oldDataLength = Object.keys(valueCache).length;\n\n if (oldDataLength > 0) {\n let i = 0;\n // check for each item from the last known scrolledIndex if it's an insert\n for (i; i <= scrollTo && i < dataLength; i++) {\n // item is not in the valueCache, so it was added\n if (!valueCache[trackBy(i, valueArray[i])]) {\n scrollTo++;\n }\n }\n }\n valueCache = {};\n valueArray.forEach((v, i) => (valueCache[trackBy(i, v)] = v));\n if (scrollTo !== this.scrolledIndex) {\n this.scrollToIndex(scrollTo);\n }\n });\n }\n\n /** @internal */\n private calcRenderedRange(): void {\n combineLatest([\n this.viewport!.containerRect$.pipe(\n map(({ height }) => {\n this.containerSize = height;\n return height;\n }),\n distinctUntilChanged(),\n ),\n this.viewport!.elementScrolled$.pipe(\n startWith(void 0),\n tap(() => {\n this.viewportOffset = this.viewport!.measureOffset();\n const { scrollTop, scrollTopWithOutOffset, scrollTopAfterOffset } =\n parseScrollTopBoundaries(\n this.viewport!.getScrollTop(),\n this.viewportOffset,\n this._contentSize,\n this.containerSize,\n );\n this.direction =\n scrollTopWithOutOffset > this.scrollTopWithOutOffset\n ? 'down'\n : 'up';\n this.scrollTopWithOutOffset = scrollTopWithOutOffset;\n this.scrollTopAfterOffset = scrollTopAfterOffset;\n this.scrollTop = scrollTop;\n this.waitForScroll = false;\n }),\n ),\n this._contentSize$.pipe(distinctUntilChanged()),\n this.recalculateRange$.pipe(startWith(void 0)),\n ])\n .pipe(\n // make sure to not over calculate things by coalescing all triggers to the next microtask\n coalesceWith(unpatchedMicroTask()),\n map(() => {\n const range = { start: 0, end: 0 };\n const length = this.contentLength;\n const delta = this.scrollTop - this.anchorScrollTop;\n if (this.scrollTop == 0) {\n this.anchorItem = { index: 0, offset: 0 };\n } else {\n this.anchorItem = this.calculateAnchoredItem(\n this.anchorItem,\n delta,\n );\n }\n this.scrolledIndex = this.anchorItem.index;\n this.anchorScrollTop = this.scrollTop;\n this.lastScreenItem = this.calculateAnchoredItem(\n this.anchorItem,\n calculateVisibleContainerSize(\n this.containerSize,\n this.scrollTopWithOutOffset,\n this.scrollTopAfterOffset,\n ),\n );\n if (this.direction === 'up') {\n range.start = Math.max(0, this.anchorItem.index - this.runwayItems);\n range.end = Math.min(\n length,\n this.lastScreenItem.index + this.runwayItemsOpposite,\n );\n } else {\n range.start = Math.max(\n 0,\n this.anchorItem.index - this.runwayItemsOpposite,\n );\n range.end = Math.min(\n length,\n this.lastScreenItem.index + this.runwayItems,\n );\n }\n if (this.appendOnly) {\n range.start = Math.min(this._renderedRange.start, range.start);\n range.end = Math.max(this._renderedRange.end, range.end);\n }\n return range;\n }),\n )\n .pipe(this.until$())\n .subscribe((range: ListRange) => {\n this.renderedRange = range;\n this.isStable$.next(!this.waitForScroll);\n });\n }\n\n /** @internal */\n private positionElements(): void {\n this.viewRepeater!.renderingStart$.pipe(\n switchMap((batchedUpdates) => {\n const renderedRange = this.renderedRange;\n const adjustIndexWith = renderedRange.start;\n const initialIndex = batchedUpdates.size\n ? batchedUpdates.values().next().value + this.renderedRange.start\n : this.renderedRange.start;\n let position = this.calcInitialPosition(initialIndex);\n return this.viewRepeater!.viewRendered$.pipe(\n tap(({ view, index: viewIndex, item }) => {\n const index = viewIndex + adjustIndexWith;\n const size = this.getItemSize(index);\n this.positionElement(this.getElement(view), position);\n position += size;\n this.viewRenderCallback.next({\n index,\n view,\n item,\n });\n }),\n );\n }),\n this.until$(),\n ).subscribe();\n }\n\n /**\n * @internal\n * heavily inspired by\n * https://github.com/GoogleChromeLabs/ui-element-samples/blob/gh-pages/infinite-scroller/scripts/infinite-scroll.js\n */\n private calculateAnchoredItem(\n initialAnchor: AnchorItem,\n delta: number,\n ): AnchorItem {\n if (delta == 0) return initialAnchor;\n delta += initialAnchor.offset;\n let i = initialAnchor.index;\n const items = this._virtualItems;\n if (delta < 0) {\n while (delta < 0 && i > 0) {\n delta += items[i - 1].size;\n i--;\n }\n } else {\n while (delta > 0 && i < items.length && items[i].size <= delta) {\n delta -= items[i].size;\n i++;\n }\n }\n return {\n index: Math.min(i, items.length),\n offset: delta,\n };\n }\n\n /** @internal */\n private calcInitialPosition(start: number): number {\n // Calculate position of starting node\n let pos = this.anchorScrollTop - this.anchorItem.offset;\n let i = this.anchorItem.index;\n while (i > start) {\n const itemSize = this.getItemSize(i - 1);\n pos -= itemSize;\n i--;\n }\n while (i < start) {\n const itemSize = this.getItemSize(i);\n pos += itemSize;\n i++;\n }\n return pos;\n }\n\n /** @internal */\n private calcAnchorScrollTop(): void {\n this.anchorScrollTop = 0;\n for (let i = 0; i < this.anchorItem.index; i++) {\n this.anchorScrollTop += this.getItemSize(i);\n }\n this.anchorScrollTop += this.anchorItem.offset;\n }\n\n /** @internal */\n private getItemSize(index: number): number {\n return this._virtualItems[index].size;\n }\n\n /** @internal */\n private positionElement(element: HTMLElement, scrollTop: number): void {\n element.style.position = 'absolute';\n element.style.transform = `translateY(${scrollTop}px)`;\n }\n}\n","import {\n Directive,\n EmbeddedViewRef,\n inject,\n Input,\n NgIterable,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n} from '@angular/core';\nimport { coalesceWith } from '@rx-angular/cdk/coalescing';\nimport {\n combineLatest,\n MonoTypeOperatorFunction,\n ReplaySubject,\n Subject,\n} from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n startWith,\n switchMap,\n takeUntil,\n tap,\n} from 'rxjs/operators';\nimport {\n ListRange,\n RxVirtualForViewContext,\n RxVirtualScrollStrategy,\n RxVirtualScrollViewport,\n RxVirtualViewRepeater,\n} from '../model';\nimport {\n calculateVisibleContainerSize,\n parseScrollTopBoundaries,\n toBoolean,\n unpatchedAnimationFrameTick,\n} from '../util';\nimport {\n DEFAULT_ITEM_SIZE,\n DEFAULT_RUNWAY_ITEMS,\n DEFAULT_RUNWAY_ITEMS_OPPOSITE,\n RX_VIRTUAL_SCROLL_DEFAULT_OPTIONS,\n} from '../virtual-scroll.config';\n\n/**\n * @Directive FixedSizeVirtualScrollStrategy\n *\n * @description\n *\n * The `FixedSizeVirtualScrollStrategy` provides a very performant way of rendering\n * items of a given size. It is comparable to \\@angular/cdk `FixedSizeVirtualScrollStrategy`, but\n * with a high performant layouting technique.\n *\n * @docsCategory RxVirtualFor\n * @docsPage RxVirtualFor\n * @publicApi\n */\n@Directive({\n selector: 'rx-virtual-scroll-viewport[itemSize]',\n providers: [\n {\n provide: RxVirtualScrollStrategy,\n useExisting: FixedSizeVirtualScrollStrategy,\n },\n ],\n standalone: true,\n})\nexport class FixedSizeVirtualScrollStrategy<\n T,\n U extends NgIterable<T> = NgIterable<T>,\n >\n extends RxVirtualScrollStrategy<T, U>\n implements OnChanges, OnDestroy\n{\n private readonly defaults? = inject(RX_VIRTUAL_SCROLL_DEFAULT_OPTIONS, {\n optional: true,\n });\n\n /**\n * @description\n * The size of the items in the virtually scrolled list\n */\n @Input()\n set itemSize(itemSize: number) {\n if (typeof itemSize === 'number') {\n this._itemSize = itemSize;\n }\n }\n get itemSize() {\n return this._itemSize;\n }\n\n private _itemSize = DEFAULT_ITEM_SIZE;\n\n /**\n * @description\n * When enabled, the scroll strategy stops removing views from the viewport,\n * instead it only adds views. This setting can be changed on the fly. Views will be added in both directions\n * according to the user interactions.\n */\n @Input({ transform: toBoolean }) appendOnly = false;\n\n /**\n * @description\n * The amount of items to render upfront in scroll direction\n */\n @Input() runwayItems = this.defaults?.runwayItems ?? DEFAULT_RUNWAY_ITEMS;\n\n /**\n * @description\n * The amount of items to render upfront in reverse scroll direction\n */\n @Input() runwayItemsOpposite =\n this.defaults?.runwayItemsOpposite ?? DEFAULT_RUNWAY_ITEMS_OPPOSITE;\n\n /**\n * @description\n * If this flag is true, the virtual scroll strategy maintains the scrolled item when new data\n * is prepended to the list. This is very useful when implementing a reversed infinite scroller, that prepends\n * data instead of appending it\n */\n @Input({ transform: toBoolean }) keepScrolledIndexOnPrepend = false;\n\n /** @internal */\n private readonly runwayStateChanged$ = new Subject<void>();\n\n private viewport: RxVirtualScrollViewport | null = null;\n private viewRepeater: RxVirtualViewRepeater<T, U> | null = null;\n\n private readonly _scrolledIndex$ = new ReplaySubject<number>(1);\n readonly scrolledIndex$ = this._scrolledIndex$.pipe(distinctUntilChanged());\n private _scrolledIndex = 0;\n private set scrolledIndex(index: number) {\n this._scrolledIndex = index;\n this._scrolledIndex$.next(index);\n }\n\n private get scrolledIndex(): number {\n return this._scrolledIndex;\n }\n\n private readonly _contentSize$ = new ReplaySubject<number>(1);\n readonly contentSize$ = this._contentSize$.asObservable();\n private _contentSize = 0;\n private set contentSize(size: number) {\n this._contentSize = size;\n this._contentSize$.next(size);\n }\n\n private readonly _renderedRange$ = new ReplaySubject<ListRange>(1);\n renderedRange$ = this._renderedRange$.asObservable();\n private _renderedRange: ListRange = { start: 0, end: 0 };\n private set renderedRange(range: ListRange) {\n this._renderedRange = range;\n this._renderedRange$.next(range);\n }\n private get renderedRange(): ListRange {\n return this._renderedRange;\n }\n\n private scrollTop = 0;\n /** @internal */\n private scrollTopWithOutOffset = 0;\n /** @internal */\n private scrollTopAfterOffset = 0;\n /** @internal */\n private viewportOffset = 0;\n /** @internal */\n private containerSize = 0;\n private direction: 'up' | 'down' = 'down';\n\n private readonly detached$ = new Subject<void>();\n\n /** @internal */\n ngOnChanges(changes: SimpleChanges) {\n if (\n (changes['runwayItemsOpposite'] &&\n !changes['runwayItemsOpposite'].firstChange) ||\n (changes['runwayItems'] && !changes['runwayItems'].firstChange)\n ) {\n this.runwayStateChanged$.next();\n }\n }\n\n ngOnDestroy() {\n this.detach();\n }\n\n attach(\n viewport: RxVirtualScrollViewport,\n viewRepeater: RxVirtualViewRepeater<T, U>,\n ): void {\n this.viewport = viewport;\n this.viewRepeater = viewRepeater;\n this.calcRenderedRange();\n this.positionElements();\n }\n\n detach(): void {\n this.viewport = null;\n this.viewRepeater = null;\n this.detached$.next();\n }\n\n private positionElements(): void {\n this.viewRepeater!.renderingStart$.pipe(\n switchMap(() => {\n const start = this.renderedRange.start;\n return this.viewRepeater!.viewRendered$.pipe(\n tap(({ view, index, item }) => {\n this._setViewPosition(view, (index + start) * this.itemSize);\n this.viewRenderCallback.next({\n view,\n item,\n index,\n });\n }),\n );\n }),\n this.untilDetached$(),\n ).subscribe();\n }\n\n private calcRenderedRange(): void {\n const valueArray$ = this.viewRepeater!.values$.pipe(\n map((values) =>\n Array.isArray(values)\n ? values\n : values != null\n ? Array.from(values)\n : [],\n ),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n /*\n * when keepScrolledIndexOnPrepend is active, we need to listen to data changes and figure out what was appended\n * before the last scrolledToItem\n */\n let valueCache: Record<any, T> = {};\n valueArray$\n .pipe(\n // TODO: this might cause issues when turning on/off\n filter(() => this.keepScrolledIndexOnPrepend),\n this.untilDetached$(),\n )\n .subscribe((valueArray) => {\n const trackBy = this.viewRepeater!._trackBy;\n let scrollTo = this.scrolledIndex;\n const dataLength = valueArray.length;\n const oldDataLength = Object.keys(valueCache).length;\n\n if (oldDataLength > 0) {\n let i = 0;\n // check for each item from the last known scrolledIndex if it's an insert\n for (i; i <= scrollTo && i < dataLength; i++) {\n // item is not in the valueCache, so it was added\n if (!valueCache[trackBy(i, valueArray[i])]) {\n scrollTo++;\n }\n }\n }\n valueCache = {};\n valueArray.forEach((v, i) => (valueCache[trackBy(i, v)] = v));\n if (scrollTo !== this.scrolledIndex) {\n this.scrollToIndex(scrollTo);\n }\n });\n const dataLengthChanged$ = valueArray$.pipe(\n map((values) => values.length),\n distinctUntilChanged(),\n tap((dataLength) => (this.contentSize = dataLength * this.itemSize)),\n );\n const onScroll$ = this.viewport!.elementScrolled$.pipe(\n coalesceWith(unpatchedAnimationFrameTick()),\n startWith(void 0),\n tap(() => {\n this.viewportOffset = this.viewport!.measureOffset();\n const { scrollTop, scrollTopWithOutOffset, scrollTopAfterOffset } =\n parseScrollTopBoundaries(\n this.viewport!.getScrollTop(),\n this.viewportOffset,\n this._contentSize,\n this.containerSize,\n );\n this.direction =\n scrollTopWithOutOffset > this.scrollTopWithOutOffset ? 'down' : 'up';\n this.scrollTopWithOutOffset = scrollTopWithOutOffset;\n this.scrollTopAfterOffset = scrollTopAfterOffset;\n this.scrollTop = scrollTop;\n }),\n );\n combineLatest([\n dataLengthChanged$,\n this.viewport!.containerRect$.pipe(\n map(({ height }) => {\n this.containerSize = height;\n return height;\n }),\n distinctUntilChanged(),\n ),\n onScroll$,\n this.runwayStateChanged$.pipe(startWith(void 0)),\n ])\n .pipe(\n map(([length]) => {\n const containerSize = calculateVisibleContainerSize(\n this.containerSize,\n this.scrollTopWithOutOffset,\n this.scrollTopAfterOffset,\n );\n const range: ListRange = { start: 0, end: 0 };\n if (this.direction === 'up') {\n range.start = Math.floor(\n Math.max(0, this.scrollTop - this.runwayItems * this.itemSize) /\n this.itemSize,\n );\n range.end = Math.min(\n length,\n Math.ceil(\n (this.scrollTop +\n containerSize +\n this.runwayItemsOpposite * this.itemSize) /\n this.itemSize,\n ),\n );\n } else {\n range.start = Math.floor(\n Math.max(\n 0,\n this.scrollTop - this.runwayItemsOpposite * this.itemSize,\n ) / this.itemSize,\n );\n range.end = Math.min(\n length,\n Math.ceil(\n (this.scrollTop +\n containerSize +\n this.runwayItems * this.itemSize) /\n this.itemSize,\n ),\n );\n }\n if (this.appendOnly) {\n range.start = Math.min(this._renderedRange.start, range.start);\n range.end = Math.max(this._renderedRange.end, range.end);\n }\n this.scrolledIndex = Math.floor(this.scrollTop / this.itemSize);\n return range;\n }),\n distinctUntilChanged(\n ({ start: prevStart, end: prevEnd }, { start, end }) =>\n prevStart === start && prevEnd === end,\n ),\n this.untilDetached$(),\n )\n .subscribe((range) => (this.renderedRange = range));\n }\n\n scrollToIndex(index: number, behavior?: ScrollBehavior): void {\n const scrollTop = this.itemSize * index;\n this.viewport!.scrollTo(this.viewportOffset + scrollTop, behavior);\n }\n\n private untilDetached$<A>(): MonoTypeOperatorFunction<A> {\n return (o$) => o$.pipe(takeUntil(this.detached$));\n }\n\n private _setViewPosition(\n view: EmbeddedViewRef<RxVirtualForViewContext<T, U>>,\n scrollTop: number,\n ): void {\n const element = this.getElement(view);\n element.style.position = 'absolute';\n element.style.transform = `translateY(${scrollTop}px)`;\n }\n}\n","import { EmbeddedViewRef, IterableChanges, ViewRef } from '@angular/core';\nimport { RxListViewContext } from '@rx-angular/cdk/template';\nimport { TemplateSettings } from './model';\n\nexport interface RxVirtualListChange<T, C> {\n index?: number;\n view?: EmbeddedViewRef<C>;\n item: T;\n}\n\nexport type RxVirtualListChanges<T, C> = [\n number,\n () => RxVirtualListChange<T, C>,\n boolean?, // removed\n][];\n\n/**\n * @internal\n *\n * An object that holds methods needed to introduce actions to a list e.g. move, remove, insert\n */\nexport interface RxVirtualListTemplateManager<T, C> {\n getListChanges(\n changes: IterableChanges<T>,\n items: T[],\n renderCount: number,\n adjustIndexWith: number,\n ): [RxVirtualListChanges<T, C>, boolean];\n setItemCount(itemCount: number): void;\n detach(): void;\n}\n\n/**\n * @internal\n *\n * Factory that returns a `ListTemplateManager` for the passed params.\n *\n * @param templateSettings\n */\nexport function createVirtualListTemplateManager<\n C extends RxListViewContext<T>,\n T,\n>({\n viewContainerRef,\n templateRef,\n createViewContext,\n updateViewContext,\n templateCacheSize,\n}: TemplateSettings<T, C, any>): RxVirtualListTemplateManager<T, C> {\n let _viewCache: EmbeddedViewRef<C>[] = [];\n let itemCount = 0;\n\n return {\n getListChanges,\n setItemCount: (count) => (itemCount = count),\n detach: () => {\n for (let i = 0; i < _viewCache.length; i++) {\n _viewCache[i].destroy();\n }\n _viewCache = [];\n },\n };\n\n function _updateView(\n item: T,\n index: number,\n count: number,\n contextIndex: number,\n ): EmbeddedViewRef<C> {\n const view = <EmbeddedViewRef<C>>viewContainerRef.get(index);\n updateViewContext(item, view, {\n count,\n index: contextIndex,\n });\n view.detectChanges();\n return view;\n }\n\n /**\n * Inserts a view for a new item, either from the cache or by creating a new\n * one.\n */\n function _insertView(\n value: T,\n count: number,\n adjustIndexWith: number,\n currentIndex?: number,\n ): [number, EmbeddedViewRef<C>] {\n currentIndex = currentIndex ?? viewContainerRef.length;\n const contextIndex = currentIndex + adjustIndexWith;\n const cachedView = _insertViewFromCache(currentIndex);\n if (cachedView) {\n updateViewContext(value, cachedView, {\n count,\n index: contextIndex,\n });\n cachedView.detectChanges();\n return [currentIndex, cachedView];\n }\n const context = createViewContext(value, {\n count,\n index: contextIndex,\n });\n const view = viewContainerRef.createEmbeddedView(\n templateRef,\n context,\n currentIndex,\n );\n view.detectChanges();\n return [currentIndex, view];\n }\n\n /** Detaches the view at the given index and inserts into the view cache. */\n function _detachAndCacheView(index: number | undefined) {\n const detachedView = viewContainerRef.detach(index) as EmbeddedViewRef<C>;\n _maybeCacheView(detachedView);\n detachedView.detectChanges();\n }\n\n /** Moves view at the previous index to the current index. */\n function _moveView(\n value: T,\n adjustedPreviousIndex: number,\n currentIndex: number,\n count: number,\n contextIndex: number,\n ): EmbeddedViewRef<C> {\n const oldView = viewContainerRef.get(adjustedPreviousIndex);\n const view = <EmbeddedViewRef<C>>(\n viewContainerRef.move(oldView as ViewRef, currentIndex)\n );\n updateViewContext(value, view, {\n count,\n index: contextIndex,\n });\n view.detectChanges();\n return view;\n }\n\n /**\n * Cache the given detached view. If the cache is full, the view will be\n * destroyed.\n */\n function _maybeCacheView(view: EmbeddedViewRef<C>) {\n if (_viewCache.length < templateCacheSize) {\n _viewCache.push(view);\n return true;\n } else {\n const index = viewContainerRef.indexOf(view);\n\n // The host component could remove views from the container outside of\n // the view repeater. It's unlikely this will occur, but just in case,\n // destroy the view on its own, otherwise destroy it through the\n // container to ensure that all the references are removed.\n if (index === -1) {\n view.destroy();\n } else {\n viewContainerRef.remove(index);\n }\n return false;\n }\n }\n\n /** Inserts a recycled view from the cache at the given index. */\n function _insertViewFromCache(index?: number): EmbeddedViewRef<C> | null {\n const cachedView = _viewCache.pop();\n if (cachedView) {\n return <EmbeddedViewRef<C>>viewContainerRef.insert(cachedView, index);\n }\n return null;\n }\n\n /**\n * @internal\n */\n function getListChanges(\n changes: IterableChanges<T>,\n items: T[],\n count: number,\n adjustIndexWith: number,\n ): [RxVirtualListChanges<T, C>, boolean] {\n const changedIdxs = new Set<T>();\n const listChanges: RxVirtualListChanges<T, C> = [];\n let notifyParent = false;\n let appendedAtEnd = 0;\n const otherMovedIds: number[] = [];\n changes.forEachOperation(\n ({ item, previousIndex }, adjustedPreviousIndex, currentIndex) => {\n if (previousIndex == null) {\n // insert\n const index = currentIndex === null ? undefined : currentIndex;\n listChanges.push([\n index ?? items.length + appendedAtEnd,\n () => {\n const [insertedIndex, view] = _insertView(\n item,\n count,\n adjustIndexWith,\n index,\n );\n return {\n view,\n index: insertedIndex,\n item,\n };\n },\n ]);\n if (index === undefined) {\n appendedAtEnd++;\n }\n changedIdxs.add(item);\n notifyParent = true;\n } else if (currentIndex == null) {\n // remove\n listChanges.push([\n adjustedPreviousIndex as number,\n () => {\n _detachAndCacheView(adjustedPreviousIndex ?? undefined);\n return { item };\n },\n true,\n ]);\n notifyParent = true;\n } else if (adjustedPreviousIndex !== null) {\n // move\n listChanges.push([\n currentIndex,\n () => {\n const view = _moveView(\n item,\n adjustedPreviousIndex,\n currentIndex,\n count,\n currentIndex + adjustIndexWith,\n );\n return {\n view,\n index: currentIndex,\n item,\n };\n },\n ]);\n otherMovedIds.push(adjustedPreviousIndex);\n changedIdxs.add(item);\n notifyParent = true;\n }\n },\n );\n changes.forEachIdentityChange(({ item, currentIndex }) => {\n if (currentIndex != null && !changedIdxs.has(item)) {\n listChanges.push([\n currentIndex,\n () => {\n const view = _updateView(\n item,\n currentIndex,\n count,\n currentIndex + adjustIndexWith,\n );\n return {\n view,\n index: currentIndex,\n item,\n };\n },\n ]);\n changedIdxs.add(item);\n }\n });\n for (let i = 0; i < otherMovedIds.length; i++) {\n const itemIndex = otherMovedIds[i];\n const item = items[itemIndex];\n if (item && !changedIdxs.has(item)) {\n changedIdxs.add(item);\n listChanges.push([\n itemIndex,\n () =>\n maybeUpdateView(\n itemIndex,\n count,\n itemIndex + adjustIndexWith,\n item,\n ),\n ]);\n }\n }\n if (changedIdxs.size < items.length) {\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n if (!changedIdxs.has(item)) {\n listChanges.push([\n i,\n () => maybeUpdateView(i, count, i + adjustIndexWith, item),\n ]);\n }\n }\n }\n return [listChanges, notifyParent];\n }\n\n function maybeUpdateView(\n viewIndex: number,\n count: number,\n itemIndex: number,\n item: T,\n ) {\n const view = <EmbeddedViewRef<C>>viewContainerRef.get(viewIndex);\n if (view.context.count !== count || view.context.index !== itemIndex) {\n return {\n view: _updateView(item, viewIndex, count, itemIndex),\n index: viewIndex,\n item,\n };\n }\n return {\n index: viewIndex,\n view,\n item,\n };\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n DoCheck,\n EmbeddedViewRef,\n ErrorHandler,\n inject,\n Injector,\n Input,\n isSignal,\n IterableChanges,\n IterableDiffer,\n IterableDiffers,\n NgIterable,\n NgZone,\n OnDestroy,\n OnInit,\n Signal,\n TemplateRef,\n TrackByFunction,\n ViewContainerRef,\n} from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { coerceObservableWith } from '@rx-angular/cdk/coercing';\nimport {\n onStrategy,\n RxStrategyCredentials,\n RxStrategyNames,\n RxStrategyProvider,\n strategyHandling,\n} from '@rx-angular/cdk/render-strategies';\nimport { RxListViewComputedContext } from '@rx-angular/cdk/template';\nimport { Promise } from '@rx-angular/cdk/zone-less/browser';\nimport {\n combineLatest,\n concat,\n isObservable,\n MonoTypeOperatorFunction,\n NEVER,\n Observable,\n of,\n ReplaySubject,\n Subject,\n} from 'rxjs';\nimport {\n catchError,\n distinctUntilChanged,\n ignoreElements,\n map,\n shareReplay,\n switchAll,\n switchMap,\n take,\n takeUntil,\n tap,\n} from 'rxjs/operators';\nimport {\n ListRange,\n RxVirtualForViewContext,\n RxVirtualScrollStrategy,\n RxVirtualViewRepeater,\n} from './model';\nimport {\n createVirtualListTemplateManager,\n RxVirtualListTemplateManager,\n} from './virtual-list-template-manager';\nimport {\n DEFAULT_TEMPLATE_CACHE_SIZE,\n RX_VIRTUAL_SCROLL_DEFAULT_OPTIONS,\n} from './virtual-scroll.config';\n\n/**\n * @description Will be provided through Terser global definitions by Angular CLI\n * during the production build.\n */\ndeclare const ngDevMode: boolean;\n\nconst NG_DEV_MODE = typeof ngDevMode === 'undefined' || !!ngDevMode;\n\n/**\n * @Directive RxVirtualFor\n *\n * @description\n *\n * The `*rxVirtualFor` structural directive provides a convenient and performant\n * way for rendering huge lists of items. It brings all the benefits `rxFor` does,\n * and implements virtual rendering.\n *\n * Instead of rendering every item provided, rxVirtualFor only renders what is\n * currently visible to the user, thus providing excellent runtime performance\n * for huge sets of data.\n *\n * The technique to render items is comparable to the on used by twitter and\n * explained in very much detail by @DasSurma in his blog post about the [complexities\n * of infinite scrollers](https://developer.chrome.com/blog/infinite-scroller/).\n *\n * \"Each recycling of a DOM element would normally relayout the entire runway which\n * would bring us well below our target of 60 frames per second.\n * To avoid this, we are taking the burden of layout onto ourselves and use\n * absolutely positioned elements with transforms.\" (@DasSurma)\n *\n * ## API\n * The API is a combination of \\@rx-angular/template/for &\n * \\@angular/cdk `*cdkVirtualFor`.\n * * trackBy: `(index: number, item: T) => any` | `keyof T`\n * * strategy: `string` | `Observable<string>`\n * * parent: `boolean`;\n * * renderCallback: `Subject<T[]>`\n * * viewCache: `number`\n * * (Injected) scrollStrategy: `RxVirtualScrollStrategy<T, U>`\n * * provides itself as RxVirtualViewRepeater for RxVirtualViewPortComponent to operate\n *\n * ## Features\n * * Push based architecture\n * * Comprehensive set of context variables\n * * Opt-out of `NgZone` with `patchZone`\n * * Notify when rendering of child templates is finished (`renderCallback`)\n * * Super efficient layouting with css transformations\n * * Define a viewCache in order to re-use views instead of re-creating them\n * * Configurable RxVirtualScrollStrategy<T, U> providing the core logic to calculate the viewRange and position DOM\n * Nodes\n *\n * ### Context Variables\n *\n * The following context variables are available for each template:\n *\n * - $implicit: `T` // the default variable accessed by `let val`\n * - item$: `Observable<T>` // the same value as $implicit, but as `Observable`\n * - index: `number` // current index of the item\n * - count: `number` // count of all items in the list\n * - first: `boolean` // true if the item is the first in the list\n * - last: `boolean` // true if the item is the last in the list\n * - even: `boolean` // true if the item has on even index (index % 2 === 0)\n * - odd: `boolean` // the opposite of even\n * - index$: `Observable<number>` // index as `Observable`\n * - count$: `Observable<number>` // count as `Observable`\n * - first$: `Observable<boolean>` // first as `Observable`\n * - last$: `Observable<boolean>` // last as `Observable`\n * - even$: `Observable<boolean>` // even as `Observable`\n * - odd$: `Observable<boolean>` // odd as `Observable`\n * - select: `(keys: (keyof T)[], distinctByMap) => Observable<Partial<T>>`\n * // returns a selection function which\n * // accepts an array of properties to pluck out of every list item. The function returns the selected properties of\n * // the current list item as distinct `Observable` key-value-pair. See the example below:\n *\n * This example showcases the `select` view-context function used for deeply nested lists.\n *\n * ```html\n * <rx-virtual-scroll-viewport>\n * <div\n * autosized\n * *rxVirtualFor=\"let hero of heroes$; trackBy: trackItem; let select = select;\">\n * <div>\n * <strong>{{ hero.name }}</strong></br>\n * Defeated enemies:\n * </div>\n * <span *rxFor=\"let enemy of select(['defeatedEnemies']); trackBy: trackEnemy;\">\n * {{ enemy.name }}\n * </span>\n * </div>\n * </rx-virtual-scroll-viewport>\n * ```\n *\n * ### Using the context variables\n *\n * ```html\n * <rx-virtual-scroll-viewport>\n * <div\n * *rxVirtualFor=\"\n * let item of observableItems$;\n * let count = count;\n * let index = index;\n * let first = first;\n * let last = last;\n * let even = even;\n * let odd = odd;\n * trackBy: trackItem;\n * \"\n * >\n * <div>{{ count }}</div>\n * <div>{{ index }}</div>\n * <div>{{ item }}</div>\n * <div>{{ first }}</div>\n * <div>{{ last }}</div>\n * <div>{{ even }}</div>\n * <div>{{ odd }}</div>\n * </div>\n * </rx-virtual-scroll-viewport>\n * ```\n *\n * @docsCategory RxVirtualFor\n * @docsPage RxVirtualFor\n * @publicApi\n */\n@Directive({\n selector: '[rxVirtualFor][rxVirtualForOf]',\n providers: [{ provide: RxVirtualViewRepeater, useExisting: RxVirtualFor }],\n standalone: true,\n})\nexport class RxVirtualFor<T, U extends NgIterable<T> = NgIterable<T>>\n implements RxVirtualViewRepeater<T>, OnInit, DoCheck, OnDestroy\n{\n private readonly scrollStrategy = inject(RxVirtualScrollStrategy<T, U>);\n private readonly iterableDiffers = inject(IterableDiffers);\n private readonly cdRef = inject(ChangeDetectorRef);\n private readonly ngZone = inject(NgZone);\n /** @internal */\n private injector = inject(Injector);\n readonly viewContainer = inject(ViewContainerRef);\n private readonly strategyProvider = inject(RxStrategyProvider);\n private readonly errorHandler = inject(ErrorHandler);\n private readonly defaults? = inject(RX_VIRTUAL_SCROLL_DEFAULT_OPTIONS, {\n optional: true,\n });\n\n /** @internal */\n private _differ?: IterableDiffer<T>;\n\n /** @internal */\n private partiallyFinished = false;\n\n /** @internal */\n private staticValue?: U;\n /** @internal */\n private renderStatic = false;\n\n /**\n * @description\n * The iterable input\n *\n * @example\n * <rx-virtual-scroll-viewport>\n * <app-hero *rxVirtualFor=\"heroes$; let hero\"\n * [hero]=\"hero\"></app-hero>\n * </rx-virtual-scroll-viewport>\n *\n * @param potentialSignalOrObservable\n */\n @Input()\n set rxVirtualForOf(\n potentialSignalOrObservable:\n | Observable<(U & NgIterable<T>) | undefined | null>\n | Signal<(U & NgIterable<T>) | undefined | null>\n | (U & NgIterable<T>)\n | null\n | undefined,\n ) {\n if (isSignal(potentialSignalOrObservable)) {\n this.staticValue = undefined;\n this.renderStatic = false;\n this.observables$.next(\n toObservable(potentialSignalOrObservable, { injector: this.injector }),\n );\n } else if (!isObservable(potentialSignalOrObservable)) {\n this.staticValue = potentialSignalOrObservable;\n this.renderStatic = true;\n } else {\n this.staticValue = undefined;\n this.renderStatic = false;\n this.observables$.next(potentialSignalOrObservable);\n }\n }\n\n /**\n * @internal\n * A reference to the template that is created for each item in the iterable.\n * @see [template reference variable](guide/template-reference-variables)\n * (inspired by @angular/common `ng_for_of.ts`)\n */\n private _template?: TemplateRef<RxVirtualForViewContext<T, U>>;\n @Input()\n set rxVirtualForTemplate(value: TemplateRef<RxVirtualForViewContext<T, U>>) {\n this._template = value;\n }\n\n /** @internal */\n private strategyHandler = strategyHandling(\n this.strategyProvider.primaryStrategy,\n this.strategyProvider.strategies,\n );\n /**\n * @description\n * The rendering strategy to be used to render updates to the DOM.\n * Use it to dynamically manage your rendering strategy. You can switch the strategy\n * imperatively (with a string) or by binding an Observable.\n * The default strategy is `'normal'` if not configured otherwise.\n *\n * @example\n * \\@Component({\n * selector: 'app-root',\n * template: `\n * <rx-virtual-scroll-viewport>\n * <app-hero\n * autosized\n * *rxVirtualFor=\"let hero of heroes$; strategy: strategy\"\n * [hero]=\"hero\"></app-hero>\n * </rx-virtual-scroll-viewport>\n * `\n * })\n * export class AppComponent {\n * strategy = 'low';\n * }\n *\n * // OR\n *\n * \\@Component({\n * selector: 'app-root',\n * template: `\n * <rx-virtual-scroll-viewport>\n * <app-hero\n * autosized\n * *rxVirtualFor=\"let hero of heroes$; strategy: strategy$\"\n * [hero]=\"hero\"></app-hero>\n * </rx-virtual-scroll-viewport>\n * `\n * })\n * export class AppComponent {\n * strategy$ = new BehaviorSubject('immediate');\n * }\n *\n * @param strategyName\n * @see {@link strategies}\n */\n @Input('rxVirtualForStrategy')\n set strategy(\n strategyName: RxStrategyNames<string> | Observable<RxStrategyNames<string>>,\n ) {\n this.strategyHandler.next(strategyName);\n }\n\n /**\n * @description\n * Controls the amount if views held in cache for later re-use when a user is\n * scrolling the list. If this is set to 0, `rxVirtualFor` won't cache any view,\n * thus destroying & re-creating very often on scroll events.\n */\n @Input('rxVirtualForTemplateCacheSize') templateCacheSize =\n this.defaults?.templateCacheSize || DEFAULT_TEMPLATE_CACHE_SIZE;\n\n /**\n * @description\n * If `parent` is set to `true` (default to `false`), `*rxVirtualFor` will\n * automatically run change-detection for its parent component when its scheduled\n * tasks are done in order to update any pending `@ContentChild` or `@ViewChild`\n * relation to be updated according to the updated ViewContainer.\n *\n * @example\n * \\@Component({\n * selector: 'app-root',\n * template: `\n * <rx-virtual-scroll-viewport>\n * <app-list-item\n * *rxVirtualFor=\"\n * let item of items$;\n * trackBy: trackItem;\n * parent: true;\n * \"\n * [item]=\"item\"\n * autosized\n * ></app-list-item>\n * </rx-virtual-scroll-viewport>\n * `\n * })\n * export class AppComponent {\n * // those queries won't be in sync with what `rxVirtualFor` is rendering\n * // when parent is set to false.\n * \\@ViewChildren(AppListItem) listItems: QueryList<AppListItem>;\n *\n * items$ = itemService.getItems();\n * }\n *\n * @param renderParent\n *\n * @deprecated this flag will be dropped soon, as it is no longer required when using signal based view & content queries\n */\n @Input('rxVirtualForParent') renderParent = false;\n\n /**\n * @description\n * A flag to control whether `*rxVirtualFor` rendering happens within\n * `NgZone` or not. The default value is set to `true` if not configured otherwise.\n * If `patchZone` is set to `false` `*rxVirtualFor` will operate completely outside of `NgZone`.\n *\n * @example\n * \\@Component({\n * selector: 'app-root',\n * template: `\n * <rx-virtual-scroll-viewport>\n * <app-list-item\n * *rxVirtualFor=\"\n * let item of items$;\n * trackBy: trackItem;\n * patchZone: false;\n * \"\n * [item]=\"item\"\n * autosized\n * ></app-list-item>\n * </rx-virtual-scroll-viewport>\n * `\n * })\n * export class AppComponent {\n * items$ = itemService.getItems();\n * }\n *\n * @param patchZone\n */\n @Input('rxVirtualForPatchZone') patchZone =\n this.strategyProvider.config.patchZone;\n\n /*@Input('rxVirtualForTombstone') tombstone: TemplateRef<\n RxVirtualForViewContext<T>\n > | null = null;*/\n\n /**\n * @description\n * A function or key that defines how to track changes for items in the provided\n * iterable data.\n *\n * When items are added, moved, or removed in the iterable,\n * the directive must re-render the appropriate DOM nodes.\n * To minimize operations on the DOM, only nodes that have changed\n * are re-rendered.\n *\n * By default, `rxVirtualFor` assumes that the object instance identifies\n * the node in the iterable (equality check `===`).\n * When a function or key is supplied, `rxVirtualFor` uses the result to identify the item node.\n *\n * @example\n * \\@Component({\n * selector: 'app-root',\n * template: `\n * <rx-virtual-scroll-viewport>\n * <app-list-item\n * *rxVirtualFor=\"\n * let item of items$;\n * trackBy: 'id';\n * \"\n * autosized\n * [item]=\"item\"\n * >\n * </app-list-item>\n * </rx-virtual-scroll-viewport>\n * `\n * })\n * export class AppComponent {\n * items$ = itemService.getItems();\n * }\n *\n * // OR\n *\n * \\@Component({\n * selector: 'app-root',\n * template: `\n * <rx-virtual-scroll-viewport>\n * <app-list-item\n * *rxVirtualFor=\"\n * let item of items$;\n * trackBy: trackItem;\n * \"\n * autosized\n * [item]=\"item\"\n * >\n * </app-list-item>\n * </rx-virtual-scroll-viewport>\n * `\n * })\n * export class AppComponent {\n * items$ = itemService.getItems();\n * trackItem = (idx, item) => item.id;\n * }\n *\n * @param trackByFnOrKey\n */\n @Input('rxVirtualForTrackBy')\n set trackBy(trackByFnOrKey: keyof T | TrackByFunction<T>) {\n if (\n NG_DEV_MODE &&\n trackByFnOrKey != null &&\n typeof trackByFnOrKey !== 'string' &&\n typeof trackByFnOrKey !== 'symbol' &&\n typeof trackByFnOrKey !== 'function'\n ) {\n throw new Error(\n `trackBy must be typeof function or keyof T, but received ${JSON.stringify(\n trackByFnOrKey,\n )}.`,\n );\n }\n if (trackByFnOrKey == null) {\n this._trackBy = null;\n } else {\n this._trackBy =\n typeof trackByFnOrKey !== 'function'\n ? (i, a) => a[trackByFnOrKey]\n : trackByFnOrKey;\n }\n }\n\n /**\n * @description\n * A `Subject` which emits whenever `*rxVirtualFor` finished rendering a\n * set of changes to the view.\n * This enables developers to perform actions exactly at the timing when the\n * updates passed are rendered to the DOM.\n * The `renderCallback` is useful in situations where you rely on specific DOM\n * properties like the `height` of a table after all items got rendered.\n * It is also possible to use the renderCallback in order to determine if a\n * view should be visible or not. This way developers can hide a list as\n * long as it has not finished rendering.\n *\n * The result of the `renderCallback` will contain the currently rendered set\n * of items in the iterable.\n *\n * @example\n * \\@Component({\n * selector: 'app-root',\n * template: `\n * <rx-virtual-scroll-viewport>\n * <app-list-item\n * *rxVirtualFor=\"\n * let item of items$;\n * trackBy: trackItem;\n * renderCallback: itemsRendered;\n * \"\n * autosized\n * [item]=\"item\"\n * >\n * </app-list-item>\n * </rx-virtual-scroll-viewport>\n * `\n * })\n * export class AppComponent {\n * items$: Observable<Item[]> = itemService.getItems();\n * trackItem = (idx, item) => item.id;\n * // this emits whenever rxVirtualFor finished rendering changes\n * itemsRendered = new Subject<Item[]>();\n * }\n *\n * @param renderCallback\n */\n @Input('rxVirtualForRenderCallback') set renderCallback(\n renderCallback: Subject<U>,\n ) {\n this._renderCallback = renderCallback;\n }\n\n /** @internal */\n readonly viewsRendered$ = new Subject<\n EmbeddedViewRef<RxVirtualForViewContext<T, U, RxListViewComputedContext>>[]\n >();\n /** @internal */\n readonly viewRendered$ = new Subject<{\n view: EmbeddedViewRef<RxVirtualForViewContext<T, U>>;\n index: number;\n item: T;\n }>();\n /** @internal */\n readonly renderingStart$ = new Subject<Set<number>>();\n\n /** @internal */\n private get template(): TemplateRef<RxVirtualForViewContext<T, U>> {\n return this._template || this.templateRef;\n }\n\n /** @internal */\n private observables$ = new ReplaySubject<\n | Observable<NgIterable<T> | null | undefined>\n | NgIterable<T>\n | null\n | undefined\n >(1);\n\n /** @internal */\n private _renderCallback?: Subject<U>;\n\n /** @internal */\n readonly values$ = this.observables$.pipe(\n coerceObservableWith(),\n switchAll(),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n /** @internal */\n private values?: NgIterable<T> | null | undefined;\n\n /** @internal */\n private templateManager!: RxVirtualListTemplateManager<\n T,\n RxVirtualForViewContext<T, U>\n >;\n\n /** @internal */\n private _destroy$ = new Subject<void>();\n\n /** @internal */\n _trackBy: TrackByFunction<T> | null = null;\n\n /** @internal */\n static ngTemplateContextGuard<\n T,\n U extends NgIterable<T> = NgIterable<T>,\n K = keyof T,\n >(\n dir: RxVirtualFor<T, U>,\n ctx: any,\n ): ctx is RxVirtualForViewContext<T, U, RxListViewComputedContext, K> {\n return true;\n }\n\n constructor(\n private readonly templateRef: TemplateRef<RxVirtualForViewContext<T, U>>,\n ) {}\n\n /** @internal */\n ngOnInit() {\n this.values$.pipe(takeUntil(this._destroy$)).subscribe((values) => {\n this.values = values;\n });\n this.templateManager = createVirtualListTemplateManager({\n viewContainerRef: this.viewContainer,\n templateRef: this.template,\n createViewContext: this.createViewContext.bind(this),\n updateViewContext: this.updateViewContext.bind(this),\n templateCacheSize: this.templateCacheSize,\n });\n // let the scroll strategy initialize before\n Promise.resolve().then(() => {\n this.render()\n .pipe(takeUntil(this._destroy$))\n .subscribe((v) => {\n this._renderCallback?.next(v as U);\n });\n });\n }\n\n /** @internal */\n ngDoCheck() {\n if (this.renderStatic) {\n this.observables$.next(this.staticValue);\n }\n }\n\n /** @internal */\n ngOnDestroy() {\n this._destroy$.next();\n this.templateManager.detach();\n }\n\n private render() {\n return combineLatest<[T[], ListRange, RxStrategyCredentials]>([\n this.values$.pipe(\n map((values) =>\n Array.isArray(values)\n ? values\n : values != null\n ? Array.from(values)\n : [],\n ),\n ),\n this.scrollStrategy.renderedRange$.pipe(\n distinctUntilChanged(\n (oldRange, newRange) =>\n oldRange.start === newRange.start && oldRange.end === newRange.end,\n ),\n ),\n this.strategyHandler.strategy$.pipe(distinctUntilChanged()),\n ]).pipe(\n switchMap(([items, range, strategy]) =>\n // wait for scrollStrategy to be stable until computing new state\n this.scrollStrategy.isStable.pipe(\n take(1),\n // map iterable to latest diff\n switchMap(() => {\n const iterable = items.slice(range.start, range.end);\n const differ = this.getDiffer(iterable);\n let changes: IterableChanges<T> | null = null;\n if (differ) {\n if (this.partiallyFinished) {\n const currentIterable = [];\n for (\n let i = 0, ilen = this.viewContainer.length;\n i < ilen;\n i++\n ) {\n const viewRef = <EmbeddedViewRef<any>>(\n this.viewContainer.get(i)\n );\n currentIterable[i] = viewRef.context.$implicit;\n }\n differ.diff(currentIterable);\n }\n changes = differ.diff(iterable);\n }\n if (!changes) {\n return NEVER;\n }\n const listChanges = this.templateManager.getListChanges(\n changes,\n iterable,\n items.length,\n range.start,\n );\n const updates = listChanges[0].sort((a, b) => a[0] - b[0]);\n\n const indicesToPosition = new Set<number>();\n const insertedOrRemoved = listChanges[1];\n const work$ = updates.map(([index, work, removed]) => {\n if (!removed) {\n indicesToPosition.add(index);\n }\n return onStrategy(\n null,\n strategy,\n () => {\n const update = work();\n if (update.view) {\n this.viewRendered$.next(update as any);\n }\n },\n { ngZone: this.patchZone ? this.ngZone : undefined },\n );\n });\n this.partiallyFinished = true;\n const notifyParent = insertedOrRemoved && this.renderParent;\n this.renderingStart$.next(indicesToPosition);\n return combineLatest(\n // emit after all changes are rendered\n work$.length > 0 ? work$ : [of(iterable)],\n ).pipe(\n tap(() => {\n this.templateManager.setItemCount(items.length);\n this.partiallyFinished = false;\n const viewsRendered = [];\n const end = this.viewContainer.length;\n let i = 0;\n for (i; i < end; i++) {\n viewsRendered.push(this.viewContainer.get(i));\n }\n this.viewsRendered$.next(viewsRendered as any);\n }),\n notifyParent\n ? switchMap((v) =>\n concat(\n of(v),\n onStrategy(\n null,\n strategy,\n (_, work, options) => {\n work(this.cdRef, options.scope);\n },\n {\n ngZone: this.patchZone ? this.ngZone : undefined,\n scope: (this.cdRef as any).context || this.cdRef,\n },\n ).pipe(ignoreElements()),\n ),\n )\n : (o$) => o$,\n this.handleError(),\n map(() => iterable),\n );\n }),\n ),\n ),\n this.handleError(),\n );\n }\n\n private handleError<T>(): MonoTypeOperatorFunction<T | null> {\n return (o$) =>\n o$.pipe(\n catchError((err: Error) => {\n this.partiallyFinished = false;\n this.errorHandler.handleError(err);\n return of(null);\n }),\n );\n }\n\n private getDiffer(values: NgIterable<T>): IterableDiffer<T> | null {\n if (this._differ) {\n return this._differ;\n }\n return values\n ? (this._differ = this.iterableDiffers.find(values).create(this._trackBy))\n : null;\n }\n\n /** @internal */\n private createViewContext(\n item: T,\n computedContext: RxListViewComputedContext,\n ): RxVirtualForViewContext<T, U, RxListViewComputedContext> {\n return new RxVirtualForViewContext(\n item,\n this.values! as U,\n computedContext,\n );\n }\n\n /** @internal */\n private updateViewContext(\n item: T,\n view: EmbeddedViewRef<\n RxVirtualForViewContext<T, U, RxListViewComputedContext>\n >,\n computedContext?: RxListViewComputedContext,\n ): void {\n view.context.updateContext(computedContext!);\n view.context.$implicit = item;\n view.context.rxVirtualForOf = this.values! as U;\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { RxVirtualScrollElement } from './model';\nimport { unpatchedScroll } from './util';\n\n@Directive({\n selector: '[rxVirtualScrollElement]',\n providers: [\n {\n provide: RxVirtualScrollElement,\n useExisting: RxVirtualScrollElementDirective,\n },\n ],\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n class: 'rx-virtual-scroll-element',\n },\n standalone: true,\n})\nexport class RxVirtualScrollElementDirective implements RxVirtualScrollElement {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly elementScrolled$ = unpatchedScroll(this.elementRef.nativeElement);\n\n getElementRef(): ElementRef<HTMLElement> {\n return this.elementRef;\n }\n measureOffset(): number {\n return this.elementRef.nativeElement.getBoundingClientRect().top;\n }\n}\n","import { Observable } from 'rxjs';\n\nexport function observeElementSize(\n element: Element,\n config?: {\n options?: ResizeObserverOptions;\n }\n): Observable<DOMRectReadOnly>;\nexport function observeElementSize<T>(\n element: Element,\n config?: {\n options?: ResizeObserverOptions;\n extract: (entries: ResizeObserverEntry[]) => T;\n }\n): Observable<T>;\nexport function observeElementSize<T>(\n element: Element,\n config?: {\n options?: ResizeObserverOptions;\n extract?: (entries: ResizeObserverEntry[]) => T;\n }\n): Observable<T | DOMRectReadOnly> {\n const extractProp: (entries: ResizeObserverEntry[]) => T | DOMRectReadOnly =\n config?.extract ?? ((entries) => entries[0].contentRect);\n return new Observable<T | DOMRectReadOnly>((subscriber) => {\n const observer = new ResizeObserver((entries) => {\n subscriber.next(extractProp(entries));\n });\n observer.observe(element, config?.options);\n return () => observer.disconnect();\n });\n}\n","import { NgIf } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n inject,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { defer, ReplaySubject, Subject } from 'rxjs';\nimport { distinctUntilChanged, filter, take, takeUntil } from 'rxjs/operators';\nimport {\n RxVirtualScrollElement,\n RxVirtualScrollStrategy,\n RxVirtualScrollViewport,\n RxVirtualViewRepeater,\n} from './model';\nimport { observeElementSize } from './observe-element-size';\nimport { unpatchedScroll } from './util';\n\n/**\n * @description Will be provided through Terser global definitions by Angular CLI\n * during the production build.\n */\ndeclare const ngDevMode: boolean;\n\nconst NG_DEV_MODE = typeof ngDevMode === 'undefined' || !!ngDevMode;\n\n/**\n * @Component RxVirtualScrollViewport\n *\n * @description\n * Container component comparable to CdkVirtualScrollViewport acting as viewport\n * for `*rxVirtualFor` to operate on.\n *\n * Its main purpose is to implement the `RxVirtualScrollViewport` interface\n * as well as maintaining the scroll runways' height in order to give\n * the provided `RxVirtualScrollStrategy` room to position items.\n *\n * Furthermore, it will gather and forward all events to the consumer of `rxVirtualFor`.\n *\n * @docsCategory RxVirtualFor\n * @docsPage RxVirtualFor\n * @publicApi\n */\n@Component({\n selector: 'rx-virtual-scroll-viewport',\n template: `\n <div\n #runway\n class=\"rx-virtual-scroll__runway\"\n [class.rx-virtual-scroll-element]=\"!scrollElement\"\n >\n <div\n #sentinel\n class=\"rx-virtual-scroll__sentinel\"\n *ngIf=\"!this.scrollElement\"\n ></div>\n <ng-content></ng-content>\n </div>\n `,\n providers: [\n {\n provide: RxVirtualScrollViewport,\n useExisting: RxVirtualScrollViewportComponent,\n },\n ],\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./virtual-scroll-viewport.component.scss'],\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {\n class: 'rx-virtual-scroll-viewport',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgIf],\n})\nexport class RxVirtualScrollViewportComponent\n implements\n RxVirtualScrollViewport,\n AfterViewInit,\n AfterContentInit,\n OnDestroy\n{\n private elementRef = inject(ElementRef<HTMLElement>);\n private scrollStrategy = inject(RxVirtualScrollStrategy<unknown>, {\n optional: true,\n });\n protected scrollElement = inject(RxVirtualScrollElement, { optional: true });\n\n /**\n * @description\n *\n * Sets the first view to be visible to the user.\n * The viewport waits for the data to arrive and scrolls to the given index immediately.\n *\n * */\n @Input() initialScrollIndex = 0;\n\n /** @internal */\n @ViewChild('sentinel')\n private scrollSentinel!: ElementRef<HTMLElement>;\n\n /** @internal */\n @ViewChild('runway', { static: true })\n private runway!: ElementRef<HTMLElement>;\n\n /** @internal */\n @ContentChild(RxVirtualViewRepeater)\n viewRepeater!: RxVirtualViewRepeater<unknown>;\n\n readonly elementScrolled$ =\n this.scrollElement?.elementScrolled$ ??\n defer(() => unpatchedScroll(this.runway.nativeElement));\n\n /** @internal */\n private _containerRect$ = new ReplaySubject<{\n width: number;\n height: number;\n }>(1);\n readonly containerRect$ = this._containerRect$.asObservable();\n\n /**\n * @description\n *\n * The range to be rendered by `*rxVirtualFor`. This value is determined by the\n * provided `RxVirtualScrollStrategy`. It gives the user information about the\n * range of items being actually rendered to the DOM.\n * Note this value updates before the `renderCallback` kicks in, thus it is only\n * in sync with the DOM when the next `renderCallback` emitted an event.\n */\n @Output()\n readonly viewRange = this.scrollStrategy.renderedRange$;\n\n /**\n * @description\n *\n * The index of the currently scrolled item. The scrolled item is the topmost\n * item actually being visible to the user.\n */\n @Output()\n readonly scrolledIndexChange = this.scrollStrategy.scrolledIndex$;\n\n /** @internal */\n private readonly destroy$ = new Subject<void>();\n\n /** @internal */\n constructor() {\n if (NG_DEV_MODE && !this.scrollStrategy) {\n throw Error(\n 'Error: rx-virtual-scroll-viewport requires an `RxVirtualScrollStrategy` to be set.',\n );\n }\n observeElementSize(\n this.scrollElement?.getElementRef()?.nativeElement ??\n this.elementRef.nativeElement,\n {\n extract: (entries) => ({\n height: Math.round(entries[0].contentRect.height),\n width: Math.round(entries[0].contentRect.width),\n }),\n },\n )\n .pipe(\n distinctUntilChanged(\n ({ height: prevHeight, width: prevWidth }, { height, width }) =>\n prevHeight === height && prevWidth === width,\n ),\n takeUntil(this.destroy$),\n )\n .subscribe(this._containerRect$);\n }\n\n ngAfterViewInit() {\n this.scrollStrategy.contentSize$\n .pipe(distinctUntilChanged(), takeUntil(this.destroy$))\n .subscribe((size) => {\n this.updateContentSize(size);\n });\n if (this.initialScrollIndex != null && this.initialScrollIndex > 0) {\n this.scrollStrategy.contentSize$\n .pipe(\n filter((size) => size > 0),\n take(1),\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n this.scrollToIndex(this.initialScrollIndex);\n });\n }\n }\n\n /** @internal */\n ngAfterContentInit(): void {\n if (ngDevMode && !this.viewRepeater) {\n throw Error(\n 'Error: rx-virtual-scroll-viewport requires a `RxVirtualViewRepeater` to be provided.',\n );\n }\n this.scrollStrategy.attach(this, this.viewRepeater);\n }\n\n /** @internal */\n ngOnDestroy(): void {\n this.destroy$.next();\n this.scrollStrategy.detach();\n }\n\n getScrollElement(): HTMLElement {\n return (\n this.scrollElement?.getElementRef()?.nativeElement ??\n this.runway.nativeElement\n );\n }\n\n getScrollTop(): number {\n return this.getScrollElement().scrollTop;\n }\n\n scrollTo(position: number, behavior?: ScrollBehavior): void {\n // TODO: implement more complex scroll scenarios\n this.getScrollElement().scrollTo({ top: position, behavior: behavior });\n }\n\n scrollToIndex(index: number, behavior?: ScrollBehavior): void {\n this.scrollStrategy.scrollToIndex(index, behavior);\n }\n\n measureOffset(): number {\n if (this.scrollElement) {\n const scrollableOffset = this.scrollElement.measureOffset();\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n return this.getScrollTop() + (rect.top - scrollableOffset);\n } else {\n return 0;\n }\n }\n\n protected updateContentSize(size: number): void {\n if (this.scrollElement) {\n this.elementRef.nativeElement.style.height = `${size}px`;\n } else {\n this.scrollSentinel.nativeElement.style.transform = `translate(0, ${\n size - 1\n }px)`;\n }\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, inject } from '@angular/core';\nimport { RxVirtualScrollElement } from './model';\nimport { unpatchedScroll } from './util';\n\n@Directive({\n selector: 'rx-virtual-scroll-viewport[scrollWindow]',\n providers: [\n {\n provide: RxVirtualScrollElement,\n useExisting: RxVirtualScrollWindowDirective,\n },\n ],\n standalone: true,\n})\nexport class RxVirtualScrollWindowDirective implements RxVirtualScrollElement {\n private readonly document = inject(DOCUMENT);\n private readonly elementRef = new ElementRef(this.document.documentElement);\n\n readonly elementScrolled$ = unpatchedScroll(this.document);\n\n getElementRef(): ElementRef<HTMLElement> {\n return this.elementRef;\n }\n measureOffset(): number {\n return 0;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["Promise","NG_DEV_MODE"],"mappings":"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"}