{"version":3,"file":"template-virtual-scrolling.mjs","sources":["../../../../libs/template/virtual-scrolling/src/lib/model.ts","../../../../libs/template/virtual-scrolling/src/lib/util.ts","../../../../libs/template/virtual-scrolling/src/lib/virtual-scroll.config.ts","../../../../libs/template/virtual-scrolling/src/lib/scroll-strategies/resize-observer.ts","../../../../libs/template/virtual-scrolling/src/lib/scroll-strategies/autosize-virtual-scroll-strategy.ts","../../../../libs/template/virtual-scrolling/src/lib/scroll-strategies/dynamic-size-virtual-scroll-strategy.ts","../../../../libs/template/virtual-scrolling/src/lib/scroll-strategies/fixed-size-virtual-scroll-strategy.ts","../../../../libs/template/virtual-scrolling/src/lib/virtual-list-template-manager.ts","../../../../libs/template/virtual-scrolling/src/lib/virtual-for.directive.ts","../../../../libs/template/virtual-scrolling/src/lib/virtual-scroll-element.directive.ts","../../../../libs/template/virtual-scrolling/src/lib/observe-element-size.ts","../../../../libs/template/virtual-scrolling/src/lib/virtual-scroll-viewport.component.ts","../../../../libs/template/virtual-scrolling/src/lib/virtual-scroll-window.directive.ts","../../../../libs/template/virtual-scrolling/src/template-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)) || this.tombstoneSize;\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  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 {\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      @if (!this.scrollElement) {\n        <div #sentinel class=\"rx-virtual-scroll__sentinel\"></div>\n      }\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  host: {\n    class: 'rx-virtual-scroll-viewport',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [],\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 { Directive, DOCUMENT, 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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"}