{"version":3,"file":"ng-table-virtual-scroll.mjs","sources":["../../../projects/ng-table-virtual-scroll/src/lib/fixed-size-table-virtual-scroll-strategy.ts","../../../projects/ng-table-virtual-scroll/src/lib/table-data-source.ts","../../../projects/ng-table-virtual-scroll/src/lib/table-item-size.directive.ts","../../../projects/ng-table-virtual-scroll/src/lib/table-virtual-scroll.module.ts","../../../projects/ng-table-virtual-scroll/src/public-api.ts","../../../projects/ng-table-virtual-scroll/src/ng-table-virtual-scroll.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { CdkVirtualScrollViewport, VirtualScrollStrategy } from '@angular/cdk/scrolling';\nimport { ListRange } from '@angular/cdk/collections';\n\nexport interface TSVStrategyConfigs {\n  rowHeight: number;\n  headerHeight: number;\n  footerHeight: number;\n  bufferMultiplier: number;\n}\n\n@Injectable()\nexport class FixedSizeTableVirtualScrollStrategy implements VirtualScrollStrategy {\n  private rowHeight!: number;\n  private headerHeight!: number;\n  private footerHeight!: number;\n  private bufferMultiplier!: number;\n  private indexChange = new Subject<number>();\n  public stickyChange = new Subject<number>();\n\n  public viewport: CdkVirtualScrollViewport;\n\n  public renderedRangeStream = new BehaviorSubject<ListRange>({start: 0, end: 0});\n\n  public scrolledIndexChange = this.indexChange.pipe(distinctUntilChanged());\n\n  get dataLength(): number {\n    return this._dataLength;\n  }\n\n  set dataLength(value: number) {\n    if (value !== this._dataLength) {\n      this._dataLength = value;\n      this.onDataLengthChanged();\n    }\n  }\n\n  private _dataLength = 0;\n\n  public attach(viewport: CdkVirtualScrollViewport): void {\n    this.viewport = viewport;\n    this.viewport.renderedRangeStream.subscribe(this.renderedRangeStream);\n    this.stickyChange.next(0);\n    this.onDataLengthChanged();\n  }\n\n  public detach(): void {\n    this.indexChange.complete();\n    this.stickyChange.complete();\n    this.renderedRangeStream.complete();\n  }\n\n  public onContentScrolled(): void {\n    this.updateContent();\n  }\n\n  public onDataLengthChanged(): void {\n    if (this.viewport) {\n      const contentSize = this.dataLength * this.rowHeight + this.headerHeight + this.footerHeight;\n      this.viewport.setTotalContentSize(contentSize);\n      const viewportSize = this.viewport.getViewportSize();\n      if (this.viewport.measureScrollOffset() + viewportSize >= contentSize) {\n        this.viewport.scrollToOffset(contentSize - viewportSize);\n      }\n    }\n    this.updateContent();\n  }\n\n  public onContentRendered(): void {\n  }\n\n  public onRenderedOffsetChanged(): void {\n    // no-op\n  }\n\n  public scrollToIndex(index: number, behavior?: ScrollBehavior): void {\n    if (!this.viewport || !this.rowHeight) {\n      return;\n    }\n    this.viewport.scrollToOffset((index - 1 ) * this.rowHeight + this.headerHeight, behavior);\n  }\n\n  public setConfig(configs: TSVStrategyConfigs) {\n    const {rowHeight, headerHeight, footerHeight, bufferMultiplier} = configs;\n    if (\n      this.rowHeight === rowHeight\n      && this.headerHeight === headerHeight\n      && this.footerHeight === footerHeight\n      && this.bufferMultiplier === bufferMultiplier\n    ) {\n      return;\n    }\n    this.rowHeight = rowHeight;\n    this.headerHeight = headerHeight;\n    this.footerHeight = footerHeight;\n    this.bufferMultiplier = bufferMultiplier;\n    this.onDataLengthChanged();\n  }\n\n  private updateContent() {\n    if (!this.viewport || !this.rowHeight) {\n      return;\n    }\n\n    const renderedOffset = this.viewport.getOffsetToRenderedContentStart();\n    const start = renderedOffset / this.rowHeight;\n    const itemsDisplayed = Math.ceil(this.viewport.getViewportSize() / this.rowHeight);\n    const bufferItems = Math.ceil(itemsDisplayed * this.bufferMultiplier);\n    const end = start + itemsDisplayed + 2 * bufferItems;\n\n\n    const bufferOffset = renderedOffset + bufferItems * this.rowHeight;\n    const scrollOffset = this.viewport.measureScrollOffset();\n\n    // How far the scroll offset is from the lower buffer, which is usually where items start being displayed\n    const relativeScrollOffset = scrollOffset - bufferOffset;\n    const rowsScrolled = relativeScrollOffset / this.rowHeight;\n\n    const displayed = scrollOffset / this.rowHeight;\n    this.indexChange.next(displayed);\n\n    // Only bother updating the displayed information if we've scrolled more than a row\n    const rowSensitivity = 1.0;\n    if (Math.abs(rowsScrolled) < rowSensitivity) {\n      this.viewport.setRenderedContentOffset(renderedOffset);\n      this.viewport.setRenderedRange({start, end});\n      return;\n    }\n\n    // Special case for the start of the table.\n    // At the top of the table, the first few rows are first rendered because they're visible, and then still rendered\n    // Because they move into the buffer. So we only need to change what's rendered once the user scrolls far enough down.\n    if (renderedOffset === 0 && rowsScrolled < 0) {\n      this.viewport.setRenderedContentOffset(renderedOffset);\n      this.viewport.setRenderedRange({start, end});\n      return;\n    }\n\n    const rowsToMove = Math.sign(rowsScrolled) * Math.floor(Math.abs(rowsScrolled));\n    const adjustedRenderedOffset = Math.max(0, renderedOffset + rowsToMove * this.rowHeight);\n    this.viewport.setRenderedContentOffset(adjustedRenderedOffset);\n\n    const adjustedStart = Math.max(0, start + rowsToMove);\n    const adjustedEnd = adjustedStart + itemsDisplayed + 2 * bufferItems;\n    this.viewport.setRenderedRange({start: adjustedStart, end: adjustedEnd});\n\n    this.stickyChange.next(adjustedRenderedOffset);\n  }\n}\n","import { BehaviorSubject, combineLatest, merge, Observable, of, ReplaySubject, Subject, Subscription } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatSort, Sort } from '@angular/material/sort';\nimport { MatPaginator, PageEvent } from '@angular/material/paginator';\nimport { DataSource } from '@angular/cdk/collections';\n\nexport interface TVSDataSource<T> {\n  dataToRender$: Subject<T[]>;\n  dataOfRange$: Subject<T[]>;\n}\n\nexport function isTVSDataSource<T>(dataSource: unknown): dataSource is TVSDataSource<T> {\n  return dataSource instanceof CdkTableVirtualScrollDataSource || dataSource instanceof TableVirtualScrollDataSource;\n}\n\nexport class CdkTableVirtualScrollDataSource<T> extends DataSource<T> implements TVSDataSource<T> {\n  /** Stream that emits when a new data array is set on the data source. */\n  private readonly _data: BehaviorSubject<T[]>;\n\n  /** Stream emitting render data to the table (depends on ordered data changes). */\n  private readonly _renderData = new BehaviorSubject<T[]>([]);\n\n  /**\n   * Subscription to the changes that should trigger an update to the table's rendered rows, such\n   * as filtering, sorting, pagination, or base data changes.\n   */\n  _renderChangesSubscription: Subscription | null = null;\n\n  /** Array of data that should be rendered by the table, where each object represents one row. */\n  get data() {\n    return this._data.value;\n  }\n\n  set data(data: T[]) {\n    data = Array.isArray(data) ? data : [];\n    this._data.next(data);\n  }\n\n  public dataToRender$: Subject<T[]>;\n  public dataOfRange$: Subject<T[]>;\n  private streamsReady: boolean;\n\n\n  constructor(initialData: T[] = []) {\n    super();\n    this._data = new BehaviorSubject<T[]>(initialData);\n    this._updateChangeSubscription();\n  }\n\n  _updateChangeSubscription() {\n    this.initStreams();\n\n    this._renderChangesSubscription?.unsubscribe();\n    this._renderChangesSubscription = new Subscription();\n    this._renderChangesSubscription.add(\n      this._data.subscribe(data => this.dataToRender$.next(data))\n    );\n    this._renderChangesSubscription.add(\n      this.dataOfRange$.subscribe(data => this._renderData.next(data))\n    );\n  }\n\n  connect() {\n    if (!this._renderChangesSubscription) {\n      this._updateChangeSubscription();\n    }\n\n    return this._renderData;\n  }\n\n\n  disconnect() {\n    this._renderChangesSubscription?.unsubscribe();\n    this._renderChangesSubscription = null;\n  }\n\n  private initStreams() {\n    if (!this.streamsReady) {\n      this.dataToRender$ = new ReplaySubject<T[]>(1);\n      this.dataOfRange$ = new ReplaySubject<T[]>(1);\n      this.streamsReady = true;\n    }\n  }\n}\n\nexport class TableVirtualScrollDataSource<T> extends MatTableDataSource<T> implements TVSDataSource<T> {\n  public dataToRender$: Subject<T[]>;\n  public dataOfRange$: Subject<T[]>;\n  private streamsReady: boolean;\n\n  _updateChangeSubscription() {\n    this.initStreams();\n    const _sort: MatSort | null = this['_sort'];\n    const _paginator: MatPaginator | null = this['_paginator'];\n    const _internalPageChanges: Subject<void> = this['_internalPageChanges'];\n    const _filter: BehaviorSubject<string> = this['_filter'];\n    const _renderData: BehaviorSubject<T[]> = this['_renderData'];\n\n    const sortChange: Observable<Sort | null | void> = _sort ?\n      merge(_sort.sortChange, _sort.initialized) as Observable<Sort | void> :\n      of(null);\n    const pageChange: Observable<PageEvent | null | void> = _paginator ?\n      merge(\n        _paginator.page,\n        _internalPageChanges,\n        _paginator.initialized\n      ) as Observable<PageEvent | void> :\n      of(null);\n    const dataStream: Observable<T[]> = this['_data'];\n    const filteredData = combineLatest([dataStream, _filter])\n      .pipe(map(([data]) => this._filterData(data)));\n    const orderedData = combineLatest([filteredData, sortChange])\n      .pipe(map(([data]) => this._orderData(data)));\n    const paginatedData = combineLatest([orderedData, pageChange])\n      .pipe(map(([data]) => this._pageData(data)));\n\n    this._renderChangesSubscription?.unsubscribe();\n    this._renderChangesSubscription = new Subscription();\n    this._renderChangesSubscription.add(\n      paginatedData.subscribe(data => this.dataToRender$.next(data))\n    );\n    this._renderChangesSubscription.add(\n      this.dataOfRange$.subscribe(data => _renderData.next(data))\n    );\n  }\n\n  private initStreams() {\n    if (!this.streamsReady) {\n      this.dataToRender$ = new ReplaySubject<T[]>(1);\n      this.dataOfRange$ = new ReplaySubject<T[]>(1);\n      this.streamsReady = true;\n    }\n  }\n}\n","import { VIRTUAL_SCROLL_STRATEGY } from '@angular/cdk/scrolling';\nimport { CanStick, CdkTable } from '@angular/cdk/table';\nimport {\n  AfterContentInit,\n  ContentChild,\n  Directive,\n  forwardRef,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy\n} from '@angular/core';\nimport { MatTable } from '@angular/material/table';\nimport { combineLatest, from, Subject } from 'rxjs';\nimport { delayWhen, distinctUntilChanged, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { FixedSizeTableVirtualScrollStrategy } from './fixed-size-table-virtual-scroll-strategy';\nimport { CdkTableVirtualScrollDataSource, isTVSDataSource, TableVirtualScrollDataSource } from './table-data-source';\n\nexport function _tableVirtualScrollDirectiveStrategyFactory(tableDir: TableItemSizeDirective) {\n  return tableDir.scrollStrategy;\n}\n\nfunction combineSelectors(...pairs: string[][]): string {\n  return pairs.map((selectors) => `${selectors.join(' ')}, ${selectors.join('')}`).join(', ');\n}\n\nconst stickyHeaderSelector = combineSelectors(\n  ['.mat-mdc-header-row', '.mat-mdc-table-sticky'],\n  ['.mat-header-row', '.mat-table-sticky'],\n  ['.cdk-header-row', '.cdk-table-sticky']\n);\n\nconst stickyFooterSelector = combineSelectors(\n  ['.mat-mdc-footer-row', '.mat-mdc-table-sticky'],\n  ['.mat-footer-row', '.mat-table-sticky'],\n  ['.cdk-footer-row', '.cdk-table-sticky']\n);\n\nfunction isMatTable<T>(table: unknown): table is MatTable<T> {\n  return table instanceof CdkTable && table['stickyCssClass'].includes('mat');\n}\n\nfunction isCdkTable<T>(table: unknown): table is CdkTable<T> {\n  return table instanceof CdkTable && table['stickyCssClass'].includes('cdk');\n}\n\nconst defaults = {\n  rowHeight: 48,\n  headerHeight: 56,\n  headerEnabled: true,\n  footerHeight: 48,\n  footerEnabled: false,\n  bufferMultiplier: 0.7\n};\n\n@Directive({\n  selector: 'cdk-virtual-scroll-viewport[tvsItemSize]',\n  providers: [{\n    provide: VIRTUAL_SCROLL_STRATEGY,\n    useFactory: _tableVirtualScrollDirectiveStrategyFactory,\n    deps: [forwardRef(() => TableItemSizeDirective)]\n  }]\n})\nexport class TableItemSizeDirective<T = unknown> implements OnChanges, AfterContentInit, OnDestroy {\n  private destroyed$ = new Subject<void>();\n\n  // eslint-disable-next-line @angular-eslint/no-input-rename\n  @Input('tvsItemSize')\n  rowHeight: string | number = defaults.rowHeight;\n\n  @Input()\n  headerEnabled: boolean = defaults.headerEnabled;\n\n  @Input()\n  headerHeight: string | number = defaults.headerHeight;\n\n  @Input()\n  footerEnabled: boolean = defaults.footerEnabled;\n\n  @Input()\n  footerHeight: string | number = defaults.footerHeight;\n\n  @Input()\n  bufferMultiplier: string | number = defaults.bufferMultiplier;\n\n  @ContentChild(CdkTable, { static: false })\n  table: CdkTable<T>;\n\n  scrollStrategy = new FixedSizeTableVirtualScrollStrategy();\n\n  dataSourceChanges = new Subject<void>();\n\n  private stickyPositions: Map<HTMLElement, number>;\n  private resetStickyPositions = new Subject<void>();\n  private stickyEnabled = {\n    header: false,\n    footer: false\n  };\n\n  constructor(private zone: NgZone) {\n  }\n\n  ngOnDestroy() {\n    this.destroyed$.next();\n    this.destroyed$.complete();\n    this.dataSourceChanges.complete();\n  }\n\n  ngAfterContentInit() {\n    const switchDataSourceOrigin = this.table['_switchDataSource'];\n    this.table['_switchDataSource'] = (dataSource: any) => {\n      switchDataSourceOrigin.call(this.table, dataSource);\n      this.connectDataSource(dataSource);\n    };\n\n    const updateStickyColumnStylesOrigin = this.table.updateStickyColumnStyles;\n    this.table.updateStickyColumnStyles = () => {\n      const stickyColumnStylesNeedReset = this.table['_stickyColumnStylesNeedReset'];\n      updateStickyColumnStylesOrigin.call(this.table);\n      if (stickyColumnStylesNeedReset) {\n        this.resetStickyPositions.next();\n      }\n    };\n\n    this.connectDataSource(this.table.dataSource);\n\n    combineLatest([\n      this.scrollStrategy.stickyChange,\n      this.resetStickyPositions.pipe(\n        startWith(void 0),\n        delayWhen(() => this.getScheduleObservable()),\n        tap(() => {\n          this.stickyPositions = null;\n        })\n      )\n    ])\n      .pipe(\n        takeUntil(this.destroyed$)\n      )\n      .subscribe(([stickyOffset]) => {\n        if (!this.stickyPositions) {\n          this.initStickyPositions();\n        }\n        if (this.stickyEnabled.header) {\n          this.setStickyHeader(stickyOffset);\n        }\n        if (this.stickyEnabled.footer) {\n          this.setStickyFooter(stickyOffset);\n        }\n      });\n  }\n\n  connectDataSource(dataSource: unknown) {\n    this.dataSourceChanges.next();\n    if (!isTVSDataSource(dataSource)) {\n      throw new Error('[tvsItemSize] requires TableVirtualScrollDataSource or CdkTableVirtualScrollDataSource be set as [dataSource] of the table');\n    }\n    if (isMatTable(this.table) && !(dataSource instanceof TableVirtualScrollDataSource)) {\n      throw new Error('[tvsItemSize] requires TableVirtualScrollDataSource be set as [dataSource] of [mat-table]');\n    }\n    if (isCdkTable(this.table) && !(dataSource instanceof CdkTableVirtualScrollDataSource)) {\n      throw new Error('[tvsItemSize] requires CdkTableVirtualScrollDataSource be set as [dataSource] of [cdk-table]');\n    }\n\n    dataSource\n      .dataToRender$\n      .pipe(\n        distinctUntilChanged(),\n        takeUntil(this.dataSourceChanges),\n        takeUntil(this.destroyed$),\n        tap(data => this.scrollStrategy.dataLength = data.length),\n        switchMap(data =>\n          this.scrollStrategy\n            .renderedRangeStream\n            .pipe(\n              map(({\n                     start,\n                     end\n                   }) => typeof start !== 'number' || typeof end !== 'number' ? data : data.slice(start, end))\n            )\n        )\n      )\n      .subscribe(data => {\n        this.zone.run(() => {\n          dataSource.dataOfRange$.next(data);\n        });\n      });\n  }\n\n  ngOnChanges() {\n    const config = {\n      rowHeight: +this.rowHeight || defaults.rowHeight,\n      headerHeight: this.headerEnabled ? +this.headerHeight || defaults.headerHeight : 0,\n      footerHeight: this.footerEnabled ? +this.footerHeight || defaults.footerHeight : 0,\n      bufferMultiplier: +this.bufferMultiplier || defaults.bufferMultiplier\n    };\n    this.scrollStrategy.setConfig(config);\n  }\n\n  private setStickyEnabled(): boolean {\n    if (!this.scrollStrategy.viewport) {\n      this.stickyEnabled = {\n        header: false,\n        footer: false\n      };\n      return;\n    }\n\n    const isEnabled = (rowDefs: CanStick[]) => rowDefs\n      .map(def => def.sticky)\n      .reduce((prevState, state) => prevState && state, true);\n\n    this.stickyEnabled = {\n      header: isEnabled(this.table['_headerRowDefs']),\n      footer: isEnabled(this.table['_footerRowDefs']),\n    };\n  }\n\n  private setStickyHeader(offset: number) {\n    this.scrollStrategy.viewport.elementRef.nativeElement.querySelectorAll(stickyHeaderSelector)\n      .forEach((el: HTMLElement) => {\n        const parent = el.parentElement;\n        let baseOffset = 0;\n        if (this.stickyPositions.has(parent)) {\n          baseOffset = this.stickyPositions.get(parent);\n        }\n        el.style.top = `${baseOffset - offset}px`;\n      });\n  }\n\n  private setStickyFooter(offset: number) {\n    this.scrollStrategy.viewport.elementRef.nativeElement.querySelectorAll(stickyFooterSelector)\n      .forEach((el: HTMLElement) => {\n        const parent = el.parentElement;\n        let baseOffset = 0;\n        if (this.stickyPositions.has(parent)) {\n          baseOffset = this.stickyPositions.get(parent);\n        }\n        el.style.bottom = `${-baseOffset + offset}px`;\n      });\n  }\n\n  private initStickyPositions() {\n    this.stickyPositions = new Map<HTMLElement, number>();\n\n    this.setStickyEnabled();\n\n    if (this.stickyEnabled.header) {\n      this.scrollStrategy.viewport.elementRef.nativeElement.querySelectorAll(stickyHeaderSelector)\n        .forEach(el => {\n          const parent = el.parentElement;\n          if (!this.stickyPositions.has(parent)) {\n            this.stickyPositions.set(parent, parent.offsetTop);\n          }\n        });\n    }\n\n    if (this.stickyEnabled.footer) {\n      this.scrollStrategy.viewport.elementRef.nativeElement.querySelectorAll(stickyFooterSelector)\n        .forEach(el => {\n          const parent = el.parentElement;\n          if (!this.stickyPositions.has(parent)) {\n            this.stickyPositions.set(parent, -parent.offsetTop);\n          }\n        });\n    }\n  }\n\n\n  private getScheduleObservable() {\n    // Use onStable when in the context of an ongoing change detection cycle so that we\n    // do not accidentally trigger additional cycles.\n    return this.zone.isStable\n      ? from(Promise.resolve(undefined))\n      : this.zone.onStable.pipe(take(1));\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { TableItemSizeDirective } from './table-item-size.directive';\n\n\n@NgModule({\n  declarations: [TableItemSizeDirective],\n  imports: [],\n  exports: [TableItemSizeDirective]\n})\nexport class TableVirtualScrollModule {\n}\n","/*\n * Public API Surface of ng-fixed-size-table-virtual-scroll\n */\n\nexport * from './lib/table-virtual-scroll.module';\nexport * from './lib/table-item-size.directive';\nexport * from './lib/fixed-size-table-virtual-scroll-strategy';\nexport * from './lib/table-data-source';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}