ng-virtual-list 19.3.6 → 19.3.7-beta-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -757,6 +757,13 @@ class TrackBox extends CacheMap {
757
757
  _previousTotalSize = 0;
758
758
  _scrollDelta = 0;
759
759
  get scrollDelta() { return this._scrollDelta; }
760
+ isAdaptiveBuffer = true;
761
+ _maxBufferSize = 200;
762
+ _maxBufferSizeSequenceLength = 100;
763
+ _bufferSizeSequence = [];
764
+ _bufferSize = 0;
765
+ get bufferSize() { return this._bufferSize; }
766
+ _defaultBufferSize = 0;
760
767
  lifeCircle() {
761
768
  this.fireChangeIfNeed();
762
769
  this.lifeCircleDo();
@@ -850,6 +857,7 @@ class TrackBox extends CacheMap {
850
857
  */
851
858
  getItemPosition(id, stickyMap, options) {
852
859
  const opt = { fromItemId: id, stickyMap, ...options };
860
+ this._defaultBufferSize = opt.itemsOffset;
853
861
  const { scrollSize, isFromItemIdFound } = this.recalculateMetrics({
854
862
  ...opt,
855
863
  dynamicSize: this._crudDetected || opt.dynamicSize,
@@ -867,6 +875,7 @@ class TrackBox extends CacheMap {
867
875
  if (opt.dynamicSize) {
868
876
  this.cacheElements();
869
877
  }
878
+ this._defaultBufferSize = opt.itemsOffset;
870
879
  const metrics = this.recalculateMetrics({
871
880
  ...opt,
872
881
  collection: items,
@@ -875,6 +884,7 @@ class TrackBox extends CacheMap {
875
884
  deletedItemsMap,
876
885
  });
877
886
  this._delta += metrics.delta;
887
+ this.updateAdaptiveBufferParams(metrics, items.length);
878
888
  this._previousTotalSize = metrics.totalSize;
879
889
  this._deletedItemsMap = {};
880
890
  this._crudDetected = false;
@@ -890,6 +900,22 @@ class TrackBox extends CacheMap {
890
900
  getNearestItem(scrollSize, items, itemSize, isVertical) {
891
901
  return this.getElementFromStart(scrollSize, items, this._map, itemSize, isVertical);
892
902
  }
903
+ _previousScrollSize = 0;
904
+ updateAdaptiveBufferParams(metrics, totalItemsLength) {
905
+ const scrollSize = metrics.scrollSize + this._delta, delta = Math.abs(this._previousScrollSize - scrollSize);
906
+ this._previousScrollSize = scrollSize;
907
+ const bufferSize = Math.min(Math.floor(delta / metrics.typicalItemSize) * 5, totalItemsLength), actualBufferSize = bufferSize < this._defaultBufferSize ? this._defaultBufferSize : bufferSize, buff = actualBufferSize > this._maxBufferSize ? this._maxBufferSize : actualBufferSize;
908
+ this._bufferSizeSequence.push(buff);
909
+ while (this._bufferSizeSequence.length >= this._maxBufferSizeSequenceLength) {
910
+ this._bufferSizeSequence.shift();
911
+ }
912
+ const l = this._bufferSizeSequence.length;
913
+ let buffer = 0;
914
+ for (let i = 0; i < l; i++) {
915
+ buffer += this._bufferSizeSequence[i];
916
+ }
917
+ this._bufferSize = Math.ceil(buffer / l);
918
+ }
893
919
  /**
894
920
  * Calculates the position of an element based on the given scrollSize
895
921
  */
@@ -942,6 +968,7 @@ class TrackBox extends CacheMap {
942
968
  */
943
969
  recalculateMetrics(options) {
944
970
  const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, itemsOffset, scrollSize, snap, stickyMap, enabledBufferOptimization, previousTotalSize, crudDetected, deletedItemsMap } = options;
971
+ const bufferSize = Math.max(itemsOffset, this._bufferSize);
945
972
  const { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME, size = isVertical ? height : width, totalLength = collection.length, typicalItemSize = itemSize, w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height, map = this._map, snapshot = this._snapshot, checkOverscrollItemsLimit = Math.ceil(size / typicalItemSize), snippedPos = Math.floor(scrollSize), leftItemsWeights = [], isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)
946
973
  || (typeof fromItemId === 'string' && fromItemId > '-1');
947
974
  let leftItemsOffset = 0, rightItemsOffset = 0;
@@ -949,22 +976,22 @@ class TrackBox extends CacheMap {
949
976
  switch (this.scrollDirection) {
950
977
  case 1: {
951
978
  leftItemsOffset = 0;
952
- rightItemsOffset = itemsOffset;
979
+ rightItemsOffset = bufferSize;
953
980
  break;
954
981
  }
955
982
  case -1: {
956
- leftItemsOffset = itemsOffset;
983
+ leftItemsOffset = bufferSize;
957
984
  rightItemsOffset = 0;
958
985
  break;
959
986
  }
960
987
  case 0:
961
988
  default: {
962
- leftItemsOffset = rightItemsOffset = itemsOffset;
989
+ leftItemsOffset = rightItemsOffset = bufferSize;
963
990
  }
964
991
  }
965
992
  }
966
993
  else {
967
- leftItemsOffset = rightItemsOffset = itemsOffset;
994
+ leftItemsOffset = rightItemsOffset = bufferSize;
968
995
  }
969
996
  let itemsFromStartToScrollEnd = -1, itemsFromDisplayEndToOffsetEnd = 0, itemsFromStartToDisplayEnd = -1, leftItemLength = 0, rightItemLength = 0, leftItemsWeight = 0, rightItemsWeight = 0, leftHiddenItemsWeight = 0, totalItemsToDisplayEndWeight = 0, leftSizeOfAddedItems = 0, leftSizeOfUpdatedItems = 0, leftSizeOfDeletedItems = 0, itemById = undefined, itemByIdPos = 0, targetDisplayItemIndex = -1, isTargetInOverscroll = false, actualScrollSize = itemByIdPos, totalSize = 0, startIndex, isFromItemIdFound = false;
970
997
  // If the list is dynamic or there are new elements in the collection, then it switches to the long algorithm.
@@ -1139,9 +1166,9 @@ class TrackBox extends CacheMap {
1139
1166
  }
1140
1167
  itemsFromStartToScrollEnd = Math.floor(scrollSize / typicalItemSize);
1141
1168
  itemsFromStartToDisplayEnd = Math.ceil((scrollSize + size) / typicalItemSize);
1142
- leftItemLength = Math.min(itemsFromStartToScrollEnd, itemsOffset);
1143
- rightItemLength = itemsFromStartToDisplayEnd + itemsOffset > totalLength
1144
- ? totalLength - itemsFromStartToDisplayEnd : itemsOffset;
1169
+ leftItemLength = Math.min(itemsFromStartToScrollEnd, bufferSize);
1170
+ rightItemLength = itemsFromStartToDisplayEnd + bufferSize > totalLength
1171
+ ? totalLength - itemsFromStartToDisplayEnd : bufferSize;
1145
1172
  leftItemsWeight = leftItemLength * typicalItemSize;
1146
1173
  rightItemsWeight = rightItemLength * typicalItemSize;
1147
1174
  leftHiddenItemsWeight = itemsFromStartToScrollEnd * typicalItemSize;
@@ -1 +1 @@
1
- {"version":3,"file":"ng-virtual-list.mjs","sources":["../../../projects/ng-virtual-list/src/lib/enums/directions.ts","../../../projects/ng-virtual-list/src/lib/enums/snapping-methods.ts","../../../projects/ng-virtual-list/src/lib/const/index.ts","../../../projects/ng-virtual-list/src/lib/models/base-virtual-list-item-component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-virtual-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-virtual-list-item.component.html","../../../projects/ng-virtual-list/src/lib/utils/isDirection.ts","../../../projects/ng-virtual-list/src/lib/utils/debounce.ts","../../../projects/ng-virtual-list/src/lib/utils/toggleClassName.ts","../../../projects/ng-virtual-list/src/lib/utils/tracker.ts","../../../projects/ng-virtual-list/src/lib/utils/eventEmitter.ts","../../../projects/ng-virtual-list/src/lib/utils/cacheMap.ts","../../../projects/ng-virtual-list/src/lib/utils/trackBox.ts","../../../projects/ng-virtual-list/src/lib/utils/scrollEvent.ts","../../../projects/ng-virtual-list/src/lib/utils/snapping-method.ts","../../../projects/ng-virtual-list/src/lib/utils/browser.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.component.html","../../../projects/ng-virtual-list/src/public-api.ts","../../../projects/ng-virtual-list/src/ng-virtual-list.ts"],"sourcesContent":["/**\r\n * Axis of the arrangement of virtual list elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/enums/directions.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum Directions {\r\n /**\r\n * Horizontal axis.\r\n */\r\n HORIZONTAL = 'horizontal',\r\n /**\r\n * Vertical axis.\r\n */\r\n VERTICAL = 'vertical',\r\n}","/**\r\n * Snapping method.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/enums/snapping-method.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SnappingMethods {\r\n /**\r\n * Normal group rendering.\r\n */\r\n NORMAL = 'normal',\r\n /**\r\n * The group is rendered on a transparent background. List items below the group are not rendered.\r\n */\r\n ADVANCED = 'advanced',\r\n}","import { SnappingMethods } from \"../enums\";\r\nimport { Directions } from \"../enums/directions\";\r\n\r\nexport const DEFAULT_ITEM_SIZE = 24;\r\n\r\nexport const DEFAULT_ITEMS_OFFSET = 2;\r\n\r\nexport const DEFAULT_LIST_SIZE = 400;\r\n\r\nexport const DEFAULT_SNAP = false;\r\n\r\nexport const DEFAULT_ENABLED_BUFFER_OPTIMIZATION = false;\r\n\r\nexport const DEFAULT_DYNAMIC_SIZE = false;\r\n\r\nexport const TRACK_BY_PROPERTY_NAME = 'id';\r\n\r\nexport const DEFAULT_DIRECTION = Directions.VERTICAL;\r\n\r\nexport const DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR = 1;\r\n\r\nexport const MAX_SCROLL_TO_ITERATIONS = 5;\r\n\r\nexport const DEFAULT_SNAPPING_METHOD = SnappingMethods.NORMAL;\r\n\r\n// presets\r\n\r\nexport const BEHAVIOR_AUTO = 'auto';\r\n\r\nexport const BEHAVIOR_INSTANT = 'instant';\r\n\r\nexport const BEHAVIOR_SMOOTH = 'smooth';\r\n\r\nexport const DISPLAY_BLOCK = 'block';\r\n\r\nexport const DISPLAY_NONE = 'none';\r\n\r\nexport const OPACITY_0 = '0';\r\n\r\nexport const OPACITY_100 = '100';\r\n\r\nexport const VISIBILITY_VISIBLE = 'visible';\r\n\r\nexport const VISIBILITY_HIDDEN = 'hidden';\r\n\r\nexport const SIZE_100_PERSENT = '100%';\r\n\r\nexport const SIZE_AUTO = 'auto';\r\n\r\nexport const POSITION_ABSOLUTE = 'absolute';\r\n\r\nexport const POSITION_STICKY = 'sticky';\r\n\r\nexport const TRANSLATE_3D = 'translate3d';\r\n\r\nexport const ZEROS_TRANSLATE_3D = `${TRANSLATE_3D}(0,0,0)`;\r\n\r\nexport const HIDDEN_ZINDEX = '-1';\r\n\r\nexport const DEFAULT_ZINDEX = '0';\r\n\r\nexport const TOP_PROP_NAME = 'top';\r\n\r\nexport const LEFT_PROP_NAME = 'left';\r\n\r\nexport const X_PROP_NAME = 'x';\r\n\r\nexport const Y_PROP_NAME = 'y';\r\n\r\nexport const WIDTH_PROP_NAME = 'width';\r\n\r\nexport const HEIGHT_PROP_NAME = 'height';\r\n\r\nexport const PX = 'px';\r\n\r\nexport const SCROLL = 'scroll';\r\n\r\nexport const SCROLL_END = 'scrollend';\r\n\r\nexport const CLASS_LIST_VERTICAL = 'vertical';\r\n\r\nexport const CLASS_LIST_HORIZONTAL = 'horizontal';\r\n","import { TemplateRef, WritableSignal } from '@angular/core';\r\nimport { Id, ISize } from '../types';\r\nimport { IRenderVirtualListItem } from './render-item.model';\r\n\r\n/**\r\n * Virtual List Item Interface\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/base-virtual-list-item-component.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport abstract class BaseVirtualListItemComponent {\r\n abstract get id(): number;\r\n abstract data: WritableSignal<IRenderVirtualListItem | undefined>;\r\n abstract regular: boolean;\r\n abstract set regularLength(v: string)\r\n abstract set item(v: IRenderVirtualListItem | null | undefined);\r\n abstract get item(): IRenderVirtualListItem | null | undefined;\r\n abstract get itemId(): Id | undefined;\r\n abstract itemRenderer: WritableSignal<TemplateRef<any> | undefined>;\r\n abstract set renderer(v: TemplateRef<any> | undefined);\r\n abstract get element(): HTMLElement;\r\n protected abstract update(): void;\r\n public abstract getBounds(): ISize;\r\n public abstract show(): void;\r\n public abstract hide(): void;\r\n}","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, ElementRef, inject, signal, TemplateRef } from '@angular/core';\r\nimport { IRenderVirtualListItem } from '../models/render-item.model';\r\nimport { ISize } from '../types';\r\nimport {\r\n DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, POSITION_ABSOLUTE, POSITION_STICKY, PX, SIZE_100_PERSENT,\r\n SIZE_AUTO, TRANSLATE_3D, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE, ZEROS_TRANSLATE_3D,\r\n} from '../const';\r\nimport { BaseVirtualListItemComponent } from '../models';\r\n\r\n/**\r\n * Virtual list item component\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/ng-virtual-list-item.component.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-virtual-list-item',\r\n imports: [CommonModule],\r\n templateUrl: './ng-virtual-list-item.component.html',\r\n styleUrl: './ng-virtual-list-item.component.scss',\r\n host: {\r\n 'class': 'ngvl__item',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgVirtualListItemComponent extends BaseVirtualListItemComponent {\r\n protected static __nextId: number = 0;\r\n\r\n protected _id!: number;\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n regular: boolean = false;\r\n\r\n data = signal<IRenderVirtualListItem | undefined>(undefined);\r\n protected _data: IRenderVirtualListItem | undefined = undefined;\r\n set item(v: IRenderVirtualListItem | undefined) {\r\n if (this._data === v) {\r\n return;\r\n }\r\n\r\n const data = this._data = v;\r\n\r\n this.update();\r\n\r\n this.data.set(v);\r\n }\r\n\r\n protected _regularLength: string = SIZE_100_PERSENT;\r\n set regularLength(v: string) {\r\n if (this._regularLength === v) {\r\n return;\r\n }\r\n\r\n this._regularLength = v;\r\n\r\n this.update();\r\n }\r\n\r\n get item() {\r\n return this._data;\r\n }\r\n\r\n get itemId() {\r\n return this._data?.id;\r\n }\r\n\r\n itemRenderer = signal<TemplateRef<any> | undefined>(undefined);\r\n\r\n set renderer(v: TemplateRef<any> | undefined) {\r\n this.itemRenderer.set(v);\r\n }\r\n\r\n protected _elementRef: ElementRef<HTMLElement> = inject(ElementRef<HTMLElement>);\r\n get element() {\r\n return this._elementRef.nativeElement;\r\n }\r\n\r\n constructor() {\r\n super();\r\n this._id = NgVirtualListItemComponent.__nextId = NgVirtualListItemComponent.__nextId === Number.MAX_SAFE_INTEGER\r\n ? 0 : NgVirtualListItemComponent.__nextId + 1;\r\n }\r\n\r\n protected update() {\r\n const data = this._data, regular = this.regular, length = this._regularLength;\r\n if (data) {\r\n const styles = this._elementRef.nativeElement.style;\r\n styles.zIndex = data.config.zIndex;\r\n if (data.config.snapped) {\r\n styles.transform = data.config.sticky === 1 ? ZEROS_TRANSLATE_3D : `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX} , 0)`;;\r\n if (!data.config.isSnappingMethodAdvanced) {\r\n styles.position = POSITION_STICKY;\r\n }\r\n } else {\r\n styles.position = POSITION_ABSOLUTE;\r\n if (regular) {\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.delta}${PX}, ${data.config.isVertical ? data.measures.delta : 0}${PX} , 0)`;\r\n } else {\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX} , 0)`;\r\n }\r\n }\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : SIZE_100_PERSENT;\r\n styles.width = data.config.isVertical ? regular ? length : SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n }\r\n }\r\n\r\n getBounds(): ISize {\r\n const el: HTMLElement = this._elementRef.nativeElement,\r\n { width, height } = el.getBoundingClientRect();\r\n return { width, height };\r\n }\r\n\r\n show() {\r\n const styles = this._elementRef.nativeElement.style;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_BLOCK) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_BLOCK;\r\n } else {\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;\r\n }\r\n\r\n hide() {\r\n const styles = this._elementRef.nativeElement.style;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_NONE) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_NONE;\r\n } else {\r\n if (styles.visibility === VISIBILITY_HIDDEN) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_HIDDEN;\r\n }\r\n styles.position = POSITION_ABSOLUTE;\r\n styles.transform = ZEROS_TRANSLATE_3D;\r\n styles.zIndex = HIDDEN_ZINDEX;\r\n }\r\n}\r\n","@let item = data();\r\n@let renderer = itemRenderer();\r\n\r\n@if (item) {\r\n <li #listItem part=\"item\" class=\"ngvl-item__container\" [ngClass]=\"{'snapped': item.config.snapped,\r\n 'snapped-out': item.config.snappedOut}\">\r\n @if (renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\"\r\n [ngTemplateOutletContext]=\"{data: item.data || {}, config: item.config}\" />\r\n }\r\n </li>\r\n}","import { Direction, Directions } from \"../enums\";\r\n\r\nconst HORIZONTAL_ALIASES = [Directions.HORIZONTAL, 'horizontal'],\r\n VERTICAL_ALIASES = [Directions.VERTICAL, 'vertical'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/isDirection.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isDirection = (src: Direction, expected: Direction): boolean => {\r\n if (HORIZONTAL_ALIASES.includes(expected)) {\r\n return HORIZONTAL_ALIASES.includes(src);\r\n }\r\n return VERTICAL_ALIASES.includes(src);\r\n}","/**\r\n * Simple debounce function.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/debounce.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const debounce = (cb: (...args: Array<any>) => void, debounceTime: number = 0) => {\r\n let timeout: any;\r\n const dispose = () => {\r\n if (timeout !== undefined) {\r\n clearTimeout(timeout);\r\n }\r\n }\r\n const execute = (...args: Array<any>) => {\r\n dispose();\r\n\r\n timeout = setTimeout(() => {\r\n cb(...args);\r\n }, debounceTime);\r\n };\r\n return {\r\n /**\r\n * Call handling method\r\n */\r\n execute,\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose,\r\n };\r\n};\r\n","\r\n/**\r\n * Switch css classes\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/toggleClassName.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const toggleClassName = (el: HTMLElement, className: string, removeClassName?: string) => {\r\n if (!el.classList.contains(className)) {\r\n el.classList.add(className);\r\n }\r\n if (removeClassName) {\r\n el.classList.remove(removeClassName);\r\n }\r\n};\r\n","import { ComponentRef } from \"@angular/core\";\r\nimport { BaseVirtualListItemComponent, ScrollDirection } from \"../models\";\r\nimport { Id, ISize } from \"../types\";\r\n\r\ntype TrackingPropertyId = string | number;\r\n\r\nexport interface IVirtualListItemComponent<I = any> {\r\n getBounds(): ISize;\r\n itemId: Id;\r\n id: number;\r\n item: I | null;\r\n show: () => void;\r\n hide: () => void;\r\n}\r\n\r\n/**\r\n * Tracks display items by property\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/tracker.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class Tracker<C extends BaseVirtualListItemComponent = any> {\r\n /**\r\n * display objects dictionary of indexes by id\r\n */\r\n private _displayObjectIndexMapById: { [id: number]: number } = {};\r\n\r\n set displayObjectIndexMapById(v: { [id: number]: number }) {\r\n if (this._displayObjectIndexMapById === v) {\r\n return;\r\n }\r\n\r\n this._displayObjectIndexMapById = v;\r\n }\r\n\r\n get displayObjectIndexMapById() {\r\n return this._displayObjectIndexMapById;\r\n }\r\n\r\n /**\r\n * Dictionary displayItems propertyNameId by items propertyNameId\r\n */\r\n private _trackMap: { [id: TrackingPropertyId]: number } | null = {};\r\n\r\n get trackMap() {\r\n return this._trackMap;\r\n }\r\n\r\n private _trackingPropertyName!: string;\r\n\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = v;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n this._trackingPropertyName = trackingPropertyName;\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(items: Array<any>, components: Array<ComponentRef<C>>, snapedComponent: ComponentRef<C> | null | undefined,\r\n direction: ScrollDirection): void {\r\n if (!items) {\r\n return;\r\n }\r\n\r\n const idPropName = this._trackingPropertyName, untrackedItems = [...components], isDown = direction === 0 || direction === 1;\r\n let isRegularSnapped = false;\r\n\r\n for (let i = isDown ? 0 : items.length - 1, l = isDown ? items.length : 0; isDown ? i < l : i >= l; isDown ? i++ : i--) {\r\n const item = items[i], itemTrackingProperty = item[idPropName];\r\n\r\n if (this._trackMap) {\r\n if (this._trackMap.hasOwnProperty(itemTrackingProperty)) {\r\n const diId = this._trackMap[itemTrackingProperty],\r\n compIndex = this._displayObjectIndexMapById[diId], comp = components[compIndex];\r\n\r\n const compId = comp?.instance?.id;\r\n if (comp !== undefined && compId === diId) {\r\n const indexByUntrackedItems = untrackedItems.findIndex(v => {\r\n return v.instance.id === compId;\r\n });\r\n if (indexByUntrackedItems > -1) {\r\n if (snapedComponent) {\r\n if (item['config']['snapped'] || item['config']['snappedOut']) {\r\n isRegularSnapped = true;\r\n snapedComponent.instance.item = item;\r\n snapedComponent.instance.show();\r\n }\r\n }\r\n comp.instance.item = item;\r\n\r\n if (snapedComponent) {\r\n if (item['config']['snapped'] || item['config']['snappedOut']) {\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.show();\r\n }\r\n untrackedItems.splice(indexByUntrackedItems, 1);\r\n continue;\r\n }\r\n }\r\n delete this._trackMap[itemTrackingProperty];\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n const comp = untrackedItems.shift(), item = items[i];\r\n if (comp) {\r\n if (snapedComponent) {\r\n if (item['config']['snapped'] || item['config']['snappedOut']) {\r\n isRegularSnapped = true;\r\n snapedComponent.instance.item = item;\r\n snapedComponent.instance.show();\r\n }\r\n }\r\n comp.instance.item = item;\r\n if (snapedComponent) {\r\n if (item['config']['snapped'] || item['config']['snappedOut']) {\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.show();\r\n }\r\n\r\n if (this._trackMap) {\r\n this._trackMap[itemTrackingProperty] = comp.instance.id;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (untrackedItems.length) {\r\n for (let i = 0, l = untrackedItems.length; i < l; i++) {\r\n const comp = untrackedItems[i];\r\n comp.instance.hide();\r\n }\r\n }\r\n\r\n if (!isRegularSnapped) {\r\n if (snapedComponent) {\r\n snapedComponent.instance.item = null;\r\n snapedComponent.instance.hide();\r\n }\r\n }\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C): void {\r\n if (!component) {\r\n return;\r\n }\r\n\r\n const propertyIdName = this._trackingPropertyName;\r\n\r\n if (this._trackMap && (component as any)[propertyIdName] !== undefined) {\r\n delete this._trackMap[propertyIdName];\r\n }\r\n }\r\n\r\n dispose() {\r\n this._trackMap = null;\r\n }\r\n}","export type TEventHandler = (...args: Array<any>) => void;\r\n\r\n/**\r\n * Simple event emitter\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/eventEmitter.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class EventEmitter<E = string, H = TEventHandler> {\r\n private _listeners: {\r\n [eventName: string]: Array<TEventHandler>,\r\n } = {};\r\n\r\n protected _disposed: boolean = false;\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Emits the event\r\n */\r\n dispatch(event: E, ...args: Array<any>): void {\r\n const ctx = this;\r\n const listeners = this._listeners[event as string];\r\n if (Array.isArray(listeners)) {\r\n for (let i = 0, l = listeners.length; i < l; i++) {\r\n const listener = listeners[i];\r\n if (listener) {\r\n listener.apply(ctx, args);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Emits the event async\r\n */\r\n dispatchAsync(event: E, ...args: Array<any>): void {\r\n queueMicrotask(() => {\r\n if (this._disposed) {\r\n return;\r\n }\r\n this.dispatch(event, ...args);\r\n });\r\n }\r\n\r\n /**\r\n * Returns true if the event listener is already subscribed.\r\n */\r\n hasEventListener(eventName: E, handler: H): boolean {\r\n const event = eventName as string;\r\n if (this._listeners.hasOwnProperty(event)) {\r\n const listeners = this._listeners[event];\r\n const index = listeners.findIndex(v => v === handler);\r\n if (index > -1) {\r\n return true;\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Add event listener\r\n */\r\n addEventListener(eventName: E, handler: H): void {\r\n const event = eventName as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n this._listeners[event] = [];\r\n }\r\n this._listeners[event].push(handler as TEventHandler);\r\n }\r\n\r\n /**\r\n * Remove event listener\r\n */\r\n removeEventListener(eventName: E, handler: H): void {\r\n const event = eventName as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n return;\r\n }\r\n const listeners = this._listeners[event], index = listeners.findIndex(v => v === handler);\r\n if (index > -1) {\r\n listeners.splice(index, 1);\r\n\r\n if (listeners.length === 0) {\r\n delete this._listeners[event];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove all listeners\r\n */\r\n removeAllListeners() {\r\n const events = Object.keys(this._listeners);\r\n while (events.length > 0) {\r\n const event = events.pop();\r\n if (event) {\r\n const listeners = this._listeners[event];\r\n if (Array.isArray(listeners)) {\r\n while (listeners.length > 0) {\r\n const listener = listeners.pop();\r\n if (listener) {\r\n this.removeEventListener(event as E, listener as H);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose() {\r\n this._disposed = true;\r\n\r\n this.removeAllListeners();\r\n }\r\n}","import { ScrollDirection } from \"../models\";\r\nimport { debounce } from \"./debounce\";\r\nimport { EventEmitter } from \"./eventEmitter\";\r\n\r\nexport class CMap<K = string, V = any> {\r\n private _dict: { [k: string | number]: V } = {};\r\n\r\n constructor(dict?: CMap<K, V>) {\r\n if (dict) {\r\n this._dict = { ...dict._dict };\r\n }\r\n }\r\n\r\n get(key: K) {\r\n const k = String(key);\r\n return this._dict[k];\r\n }\r\n set(key: K, value: V) {\r\n const k = String(key);\r\n this._dict[k] = value;\r\n return this;\r\n }\r\n has(key: K) {\r\n return this._dict.hasOwnProperty(String(key));\r\n }\r\n delete(key: K) {\r\n const k = String(key);\r\n delete this._dict[k];\r\n }\r\n clear() {\r\n this._dict = {};\r\n }\r\n}\r\n\r\nexport interface ICacheMap<I = any, B = any> {\r\n set: (id: I, bounds: B) => CMap<I, B>;\r\n has: (id: I) => boolean;\r\n get: (id: I) => B | undefined;\r\n}\r\n\r\nexport const CACHE_BOX_CHANGE_EVENT_NAME = 'change';\r\n\r\ntype CacheMapEvents = typeof CACHE_BOX_CHANGE_EVENT_NAME;\r\n\r\ntype OnChangeEventListener = (version: number) => void;\r\n\r\ntype CacheMapListeners = OnChangeEventListener;\r\n\r\nconst MAX_SCROLL_DIRECTION_POOL = 50, CLEAR_SCROLL_DIRECTION_TO = 10,\r\n DIR_BACK = '-1', DIR_NONE = '0', DIR_FORWARD = '1';\r\n\r\n/**\r\n * Cache map.\r\n * Emits a change event on each mutation.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/cacheMap.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class CacheMap<I = string | number, B = any, E = CacheMapEvents, L = CacheMapListeners> extends EventEmitter<E, L> implements ICacheMap {\r\n protected _map = new CMap<I, B>();\r\n\r\n protected _snapshot = new CMap<I, B>();\r\n\r\n protected _version: number = 0;\r\n\r\n protected _previousVersion = this._version;\r\n\r\n protected _lifeCircleTimeout: any;\r\n\r\n protected _delta: number = 0;\r\n\r\n get delta() {\r\n return this._delta;\r\n }\r\n\r\n protected _deltaDirection: ScrollDirection = 0;\r\n set deltaDirection(v: ScrollDirection) {\r\n this._deltaDirection = v;\r\n\r\n this._scrollDirection = this.calcScrollDirection(v);\r\n }\r\n get deltaDirection() {\r\n return this._deltaDirection;\r\n }\r\n\r\n private _scrollDirectionCache: Array<ScrollDirection> = [];\r\n private _scrollDirection: ScrollDirection = 0;\r\n get scrollDirection() {\r\n return this._scrollDirection;\r\n }\r\n\r\n get version() {\r\n return this._version;\r\n }\r\n\r\n private _clearScrollDirectionDebounce = debounce(() => {\r\n while (this._scrollDirectionCache.length > CLEAR_SCROLL_DIRECTION_TO) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n }, 10);\r\n\r\n constructor() {\r\n super();\r\n this.lifeCircle();\r\n }\r\n\r\n protected changesDetected() {\r\n return this._version !== this._previousVersion;\r\n }\r\n\r\n protected stopLifeCircle() {\r\n clearTimeout(this._lifeCircleTimeout);\r\n }\r\n\r\n protected nextTick(cb: () => void) {\r\n if (this._disposed) {\r\n return;\r\n }\r\n\r\n this._lifeCircleTimeout = setTimeout(() => {\r\n cb();\r\n });\r\n return this._lifeCircleTimeout;\r\n }\r\n\r\n protected lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n protected lifeCircleDo() {\r\n this._previousVersion = this._version;\r\n\r\n this.nextTick(() => {\r\n this.lifeCircle();\r\n });\r\n }\r\n\r\n clearScrollDirectionCache() {\r\n this._clearScrollDirectionDebounce.execute();\r\n }\r\n\r\n private calcScrollDirection(v: ScrollDirection): ScrollDirection {\r\n while (this._scrollDirectionCache.length >= MAX_SCROLL_DIRECTION_POOL) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n this._scrollDirectionCache.push(v);\r\n const dict: { [x: string]: number } = { [DIR_BACK]: 0, [DIR_NONE]: 0, [DIR_FORWARD]: 0 };\r\n for (let i = 0, l = this._scrollDirectionCache.length, li = l - 1; i < l; i++) {\r\n const dir = String(this._scrollDirectionCache[i]);\r\n dict[dir] += 1;\r\n if (i === li) {\r\n for (let d in dict) {\r\n if (d === String(v)) {\r\n continue;\r\n }\r\n dict[d] -= 1;\r\n }\r\n }\r\n }\r\n\r\n if (dict[DIR_BACK] > dict[DIR_NONE] && dict[DIR_BACK] > dict[DIR_FORWARD]) {\r\n return -1;\r\n } else if (dict[DIR_FORWARD] > dict[DIR_BACK] && dict[DIR_FORWARD] > dict[DIR_NONE]) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n protected bumpVersion() {\r\n if (this.changesDetected()) {\r\n return;\r\n }\r\n const v = this._version === Number.MAX_SAFE_INTEGER ? 0 : this._version + 1;\r\n this._version = v;\r\n }\r\n\r\n protected fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(CACHE_BOX_CHANGE_EVENT_NAME as E, this.version);\r\n }\r\n }\r\n\r\n set(id: I, bounds: B): CMap<I, B> {\r\n if (this._map.has(id)) {\r\n const b: any = this._map.get(id), bb: any = bounds;\r\n if (b.width === bb.width && b.height === bb.height) {\r\n return this._map;\r\n }\r\n return this._map;\r\n }\r\n\r\n const v = this._map.set(id, bounds);\r\n\r\n this.bumpVersion();\r\n\r\n return v;\r\n }\r\n\r\n has(id: I): boolean {\r\n return this._map.has(id);\r\n }\r\n\r\n get(id: I): B | undefined {\r\n return this._map.get(id);\r\n }\r\n\r\n snapshot() {\r\n this._snapshot = new CMap(this._map);\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.stopLifeCircle();\r\n\r\n this._snapshot.clear();\r\n\r\n this._map.clear();\r\n }\r\n}","import { ComponentRef } from \"@angular/core\";\r\nimport { IRenderVirtualListCollection, } from \"../models/render-collection.model\";\r\nimport { IRenderVirtualListItem } from \"../models/render-item.model\";\r\nimport { Id } from \"../types/id\";\r\nimport { CacheMap, CMap } from \"./cacheMap\";\r\nimport { Tracker } from \"./tracker\";\r\nimport { ISize } from \"../types\";\r\nimport { HEIGHT_PROP_NAME, WIDTH_PROP_NAME, X_PROP_NAME, Y_PROP_NAME } from \"../const\";\r\nimport { BaseVirtualListItemComponent, IVirtualListStickyMap } from \"../models\";\r\n\r\nexport const TRACK_BOX_CHANGE_EVENT_NAME = 'change';\r\n\r\nexport interface IMetrics {\r\n delta: number;\r\n normalizedItemWidth: number;\r\n normalizedItemHeight: number;\r\n width: number;\r\n height: number;\r\n dynamicSize: boolean;\r\n itemSize: number;\r\n itemsFromStartToScrollEnd: number;\r\n itemsFromStartToDisplayEnd: number;\r\n itemsOnDisplayWeight: number;\r\n itemsOnDisplayLength: number;\r\n isVertical: boolean;\r\n leftHiddenItemsWeight: number;\r\n leftItemLength: number;\r\n leftItemsWeight: number;\r\n renderItems: number;\r\n rightItemLength: number;\r\n rightItemsWeight: number;\r\n scrollSize: number;\r\n leftSizeOfAddedItems: number;\r\n sizeProperty: typeof HEIGHT_PROP_NAME | typeof WIDTH_PROP_NAME;\r\n snap: boolean;\r\n snippedPos: number;\r\n startIndex: number;\r\n startPosition: number;\r\n totalItemsToDisplayEndWeight: number;\r\n totalLength: number;\r\n totalSize: number;\r\n typicalItemSize: number;\r\n isFromItemIdFound: boolean;\r\n}\r\n\r\nexport interface IRecalculateMetricsOptions<I extends { id: Id }, C extends Array<I>> {\r\n bounds: ISize;\r\n collection: C;\r\n isVertical: boolean;\r\n itemSize: number;\r\n itemsOffset: number;\r\n dynamicSize: boolean;\r\n scrollSize: number;\r\n snap: boolean;\r\n enabledBufferOptimization: boolean;\r\n fromItemId?: Id;\r\n previousTotalSize: number;\r\n crudDetected: boolean;\r\n deletedItemsMap: { [index: number]: ISize; };\r\n}\r\n\r\nexport interface IGetItemPositionOptions<I extends { id: Id }, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport interface IUpdateCollectionOptions<I extends { id: Id }, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'collection' | 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport type CacheMapEvents = typeof TRACK_BOX_CHANGE_EVENT_NAME;\r\n\r\nexport type OnChangeEventListener = (version: number) => void;\r\n\r\nexport type CacheMapListeners = OnChangeEventListener;\r\n\r\nexport enum ItemDisplayMethods {\r\n CREATE,\r\n UPDATE,\r\n DELETE,\r\n NOT_CHANGED,\r\n}\r\n\r\nexport interface IUpdateCollectionReturns {\r\n displayItems: IRenderVirtualListCollection;\r\n totalSize: number;\r\n delta: number;\r\n crudDetected: boolean;\r\n}\r\n\r\n/**\r\n * An object that performs tracking, calculations and caching.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/trackBox.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class TrackBox<C extends BaseVirtualListItemComponent = any>\r\n extends CacheMap<Id, ISize & { method?: ItemDisplayMethods }, CacheMapEvents, CacheMapListeners> {\r\n\r\n protected _tracker!: Tracker<C>;\r\n\r\n protected _items: IRenderVirtualListCollection | null | undefined;\r\n\r\n set items(v: IRenderVirtualListCollection | null | undefined) {\r\n if (this._items === v) {\r\n return;\r\n }\r\n\r\n this._items = v;\r\n }\r\n\r\n protected _displayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set displayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._displayComponents === v) {\r\n return;\r\n }\r\n\r\n this._displayComponents = v;\r\n }\r\n\r\n protected _snapedDisplayComponent: ComponentRef<C> | null | undefined;\r\n\r\n set snapedDisplayComponent(v: ComponentRef<C> | null | undefined) {\r\n if (this._snapedDisplayComponent === v) {\r\n return;\r\n }\r\n\r\n this._snapedDisplayComponent = v;\r\n }\r\n\r\n protected _isSnappingMethodAdvanced: boolean = false;\r\n\r\n set isSnappingMethodAdvanced(v: boolean) {\r\n if (this._isSnappingMethodAdvanced === v) {\r\n return;\r\n }\r\n\r\n this._isSnappingMethodAdvanced = v;\r\n }\r\n\r\n /**\r\n * Set the trackBy property\r\n */\r\n set trackingPropertyName(v: string) {\r\n this._tracker.trackingPropertyName = v;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n super();\r\n\r\n this._tracker = new Tracker(trackingPropertyName);\r\n }\r\n\r\n override set(id: Id, bounds: ISize): CMap<Id, ISize> {\r\n if (this._map.has(id)) {\r\n const b = this._map.get(id);\r\n if (b?.width === bounds.width && b.height === bounds.height) {\r\n return this._map;\r\n }\r\n }\r\n\r\n const v = this._map.set(id, bounds);\r\n\r\n this.bumpVersion();\r\n return v;\r\n }\r\n\r\n protected _previousCollection: Array<{ id: Id; }> | null | undefined;\r\n\r\n protected _deletedItemsMap: { [index: number]: ISize } = {};\r\n\r\n protected _crudDetected = false;\r\n get crudDetected() { return this._crudDetected; }\r\n\r\n protected override fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(TRACK_BOX_CHANGE_EVENT_NAME, this._version);\r\n }\r\n }\r\n\r\n protected _previousTotalSize = 0;\r\n\r\n protected _scrollDelta: number = 0;\r\n get scrollDelta() { return this._scrollDelta; }\r\n\r\n protected override lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n /**\r\n * Scans the collection for deleted items and flushes the deleted item cache.\r\n */\r\n resetCollection<I extends { id: Id; }, C extends Array<I>>(currentCollection: C | null | undefined, itemSize: number): void {\r\n if (currentCollection !== undefined && currentCollection !== null && currentCollection === this._previousCollection) {\r\n console.warn('Attention! The collection must be immutable.');\r\n return;\r\n }\r\n\r\n this.updateCache(this._previousCollection, currentCollection, itemSize);\r\n\r\n this._previousCollection = currentCollection;\r\n }\r\n\r\n /**\r\n * Update the cache of items from the list\r\n */\r\n protected updateCache<I extends { id: Id; }, C extends Array<I>>(previousCollection: C | null | undefined, currentCollection: C | null | undefined,\r\n itemSize: number): void {\r\n let crudDetected = false;\r\n\r\n if (!currentCollection || currentCollection.length === 0) {\r\n if (previousCollection) {\r\n // deleted\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item.id;\r\n crudDetected = true;\r\n if (this._map.has(id)) {\r\n this._map.delete(id);\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n if (!previousCollection || previousCollection.length === 0) {\r\n if (currentCollection) {\r\n // added\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n crudDetected = true;\r\n const item = currentCollection[i], id = item.id;\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n return;\r\n }\r\n const collectionDict: { [id: Id]: I } = {};\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i];\r\n if (item) {\r\n collectionDict[item.id] = item;\r\n }\r\n }\r\n const notChangedMap: { [id: Id]: I } = {}, deletedMap: { [id: Id]: I } = {}, deletedItemsMap: { [index: number]: ISize } = {}, updatedMap: { [id: Id]: I } = {};\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item.id;\r\n if (item) {\r\n if (collectionDict.hasOwnProperty(id)) {\r\n if (item === collectionDict[id]) {\r\n // not changed\r\n notChangedMap[item.id] = item;\r\n this._map.set(id, { ...(this._map.get(id) || { width: itemSize, height: itemSize }), method: ItemDisplayMethods.NOT_CHANGED });\r\n continue;\r\n } else {\r\n // updated\r\n crudDetected = true;\r\n updatedMap[item.id] = item;\r\n this._map.set(id, { ...(this._map.get(id) || { width: itemSize, height: itemSize }), method: ItemDisplayMethods.UPDATE });\r\n continue;\r\n }\r\n }\r\n\r\n // deleted\r\n crudDetected = true;\r\n deletedMap[item.id] = item;\r\n deletedItemsMap[i] = this._map.get(item.id);\r\n this._map.delete(id);\r\n }\r\n }\r\n\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i], id = item.id;\r\n if (item && !deletedMap.hasOwnProperty(id) && !updatedMap.hasOwnProperty(id) && !notChangedMap.hasOwnProperty(id)) {\r\n // added\r\n crudDetected = true;\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n this._crudDetected = crudDetected;\r\n this._deletedItemsMap = deletedItemsMap;\r\n }\r\n\r\n /**\r\n * Finds the position of a collection element by the given Id\r\n */\r\n getItemPosition<I extends { id: Id }, C extends Array<I>>(id: Id, stickyMap: IVirtualListStickyMap,\r\n options: IGetItemPositionOptions<I, C>): number {\r\n const opt = { fromItemId: id, stickyMap, ...options };\r\n const { scrollSize, isFromItemIdFound } = this.recalculateMetrics({\r\n ...opt,\r\n dynamicSize: this._crudDetected || opt.dynamicSize,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap: this._deletedItemsMap,\r\n });\r\n return isFromItemIdFound ? scrollSize : -1;\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n updateCollection<I extends { id: Id }, C extends Array<I>>(items: C, stickyMap: IVirtualListStickyMap,\r\n options: IUpdateCollectionOptions<I, C>): IUpdateCollectionReturns {\r\n const opt = { stickyMap, ...options }, crudDetected = this._crudDetected, deletedItemsMap = this._deletedItemsMap;\r\n if (opt.dynamicSize) {\r\n this.cacheElements();\r\n }\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n this._delta += metrics.delta;\r\n\r\n this._previousTotalSize = metrics.totalSize;\r\n\r\n this._deletedItemsMap = {};\r\n\r\n this._crudDetected = false;\r\n\r\n if (opt.dynamicSize) {\r\n this.snapshot();\r\n }\r\n\r\n const displayItems = this.generateDisplayCollection(items, stickyMap, { ...metrics, });\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n /**\r\n * Finds the closest element in the collection by scrollSize\r\n */\r\n getNearestItem<I extends { id: Id }, C extends Array<I>>(scrollSize: number, items: C, itemSize: number, isVertical: boolean): I | undefined {\r\n return this.getElementFromStart(scrollSize, items, this._map, itemSize, isVertical);\r\n }\r\n\r\n /**\r\n * Calculates the position of an element based on the given scrollSize\r\n */\r\n protected getElementFromStart<I extends { id: Id }, C extends Array<I>>(scrollSize: number, collection: C, map: CMap<Id, ISize>, typicalItemSize: number,\r\n isVertical: boolean): I | undefined {\r\n const sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;\r\n let offset = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const item = collection[i];\r\n let itemSize = 0;\r\n if (map.has(item.id)) {\r\n const bounds = map.get(item.id);\r\n itemSize = bounds ? bounds[sizeProperty] : typicalItemSize;\r\n } else {\r\n itemSize = typicalItemSize;\r\n }\r\n if (offset > scrollSize) {\r\n return item;\r\n }\r\n offset += itemSize;\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Calculates the entry into the overscroll area and returns the number of overscroll elements\r\n */\r\n protected getElementNumToEnd<I extends { id: Id }, C extends Array<I>>(i: number, collection: C, map: CMap<Id, ISize>, typicalItemSize: number,\r\n size: number, isVertical: boolean, indexOffset: number = 0): { num: number, offset: number } {\r\n const sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;\r\n let offset = 0, num = 0;\r\n for (let j = collection.length - indexOffset - 1; j >= i; j--) {\r\n const item = collection[j];\r\n let itemSize = 0;\r\n if (map.has(item.id)) {\r\n const bounds = map.get(item.id);\r\n itemSize = bounds ? bounds[sizeProperty] : typicalItemSize;\r\n } else {\r\n itemSize = typicalItemSize;\r\n }\r\n offset += itemSize;\r\n num++;\r\n if (offset > size) {\r\n return { num: 0, offset };\r\n }\r\n }\r\n return { num, offset };\r\n }\r\n\r\n /**\r\n * Calculates list metrics\r\n */\r\n protected recalculateMetrics<I extends { id: Id }, C extends Array<I>>(options: IRecalculateMetricsOptions<I, C>): IMetrics {\r\n const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize,\r\n itemsOffset, scrollSize, snap, stickyMap, enabledBufferOptimization,\r\n previousTotalSize, crudDetected, deletedItemsMap } = options as IRecalculateMetricsOptions<I, C> & {\r\n stickyMap: IVirtualListStickyMap,\r\n };\r\n\r\n const { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME, size = isVertical ? height : width,\r\n totalLength = collection.length, typicalItemSize = itemSize,\r\n w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height,\r\n map = this._map, snapshot = this._snapshot,\r\n checkOverscrollItemsLimit = Math.ceil(size / typicalItemSize),\r\n snippedPos = Math.floor(scrollSize),\r\n leftItemsWeights: Array<number> = [],\r\n isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)\r\n || (typeof fromItemId === 'string' && fromItemId > '-1');\r\n\r\n let leftItemsOffset = 0, rightItemsOffset = 0;\r\n if (enabledBufferOptimization) {\r\n switch (this.scrollDirection) {\r\n case 1: {\r\n leftItemsOffset = 0;\r\n rightItemsOffset = itemsOffset;\r\n break;\r\n }\r\n case -1: {\r\n leftItemsOffset = itemsOffset;\r\n rightItemsOffset = 0;\r\n break;\r\n }\r\n case 0:\r\n default: {\r\n leftItemsOffset = rightItemsOffset = itemsOffset;\r\n }\r\n }\r\n } else {\r\n leftItemsOffset = rightItemsOffset = itemsOffset;\r\n }\r\n\r\n let itemsFromStartToScrollEnd: number = -1, itemsFromDisplayEndToOffsetEnd = 0, itemsFromStartToDisplayEnd = -1,\r\n leftItemLength = 0, rightItemLength = 0,\r\n leftItemsWeight = 0, rightItemsWeight = 0,\r\n leftHiddenItemsWeight = 0,\r\n totalItemsToDisplayEndWeight = 0,\r\n leftSizeOfAddedItems = 0,\r\n leftSizeOfUpdatedItems = 0,\r\n leftSizeOfDeletedItems = 0,\r\n itemById: I | undefined = undefined,\r\n itemByIdPos: number = 0,\r\n targetDisplayItemIndex: number = -1,\r\n isTargetInOverscroll: boolean = false,\r\n actualScrollSize = itemByIdPos,\r\n totalSize = 0,\r\n startIndex: number,\r\n isFromItemIdFound = false;\r\n\r\n // If the list is dynamic or there are new elements in the collection, then it switches to the long algorithm.\r\n if (dynamicSize) {\r\n let y = 0, stickyCollectionItem: I | undefined = undefined, stickyComponentSize = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const ii = i + 1, collectionItem = collection[i], id = collectionItem.id;\r\n\r\n let componentSize = 0, componentSizeDelta = 0, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const bounds = map.get(id) || { width: typicalItemSize, height: typicalItemSize };\r\n componentSize = bounds[sizeProperty];\r\n itemDisplayMethod = bounds?.method ?? ItemDisplayMethods.UPDATE;\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.UPDATE: {\r\n const snapshotBounds = snapshot.get(id);\r\n const componentSnapshotSize = componentSize - (snapshotBounds ? snapshotBounds[sizeProperty] : typicalItemSize);\r\n componentSizeDelta = componentSnapshotSize;\r\n map.set(id, { ...bounds, method: ItemDisplayMethods.NOT_CHANGED });\r\n break;\r\n }\r\n case ItemDisplayMethods.CREATE: {\r\n componentSizeDelta = typicalItemSize;\r\n map.set(id, { ...bounds, method: ItemDisplayMethods.NOT_CHANGED });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const bounds = deletedItemsMap[i], size = bounds?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n totalSize += componentSize;\r\n\r\n if (isFromId) {\r\n if (itemById === undefined) {\r\n if (id !== fromItemId && stickyMap && stickyMap[id] === 1) {\r\n stickyComponentSize = componentSize;\r\n stickyCollectionItem = collectionItem;\r\n }\r\n\r\n if (id === fromItemId) {\r\n isFromItemIdFound = true;\r\n targetDisplayItemIndex = i;\r\n if (stickyCollectionItem && stickyMap) {\r\n const { num } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical);\r\n if (num > 0) {\r\n isTargetInOverscroll = true;\r\n y -= size - componentSize;\r\n } else {\r\n if (stickyMap && !stickyMap[collectionItem.id] && y >= scrollSize && y < scrollSize + stickyComponentSize) {\r\n const snappedY = scrollSize - stickyComponentSize;\r\n leftHiddenItemsWeight -= (snappedY - y);\r\n y = snappedY;\r\n } else {\r\n y -= stickyComponentSize;\r\n leftHiddenItemsWeight -= stickyComponentSize;\r\n }\r\n }\r\n }\r\n itemById = collectionItem;\r\n itemByIdPos = y;\r\n } else {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n }\r\n } else if (y <= scrollSize - componentSize) {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === undefined || y < itemByIdPos + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n } else if (y <= scrollSize + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n\r\n if (y <= scrollSize - componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfAddedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE: {\r\n leftSizeOfUpdatedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSizeDelta;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n if (i < itemsFromDisplayEndToOffsetEnd) {\r\n rightItemsWeight += componentSize;\r\n }\r\n }\r\n\r\n y += componentSize;\r\n }\r\n\r\n if (isTargetInOverscroll) {\r\n const { num } = this.getElementNumToEnd(\r\n collection.length - (checkOverscrollItemsLimit < 0 ? 0 : collection.length - checkOverscrollItemsLimit),\r\n collection, map, typicalItemSize, size, isVertical, collection.length - (collection.length - (targetDisplayItemIndex + 1)),\r\n );\r\n if (num > 0) {\r\n itemsFromStartToScrollEnd -= num;\r\n }\r\n }\r\n\r\n if (itemsFromStartToScrollEnd <= -1) {\r\n itemsFromStartToScrollEnd = 0;\r\n }\r\n if (itemsFromStartToDisplayEnd <= -1) {\r\n itemsFromStartToDisplayEnd = 0;\r\n }\r\n actualScrollSize = isFromId ? itemByIdPos : scrollSize;\r\n\r\n leftItemsWeights.splice(0, leftItemsWeights.length - leftItemsOffset);\r\n leftItemsWeights.forEach(v => {\r\n leftItemsWeight += v;\r\n });\r\n\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, leftItemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + rightItemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : rightItemsOffset;\r\n\r\n } else\r\n // Buffer optimization does not work on fast linear algorithm\r\n {\r\n if (crudDetected) {\r\n let y = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const collectionItem = collection[i], id = collectionItem.id;\r\n let componentSize = typicalItemSize, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const bounds = map.get(id)!;\r\n itemDisplayMethod = bounds?.method ?? ItemDisplayMethods.UPDATE;\r\n if (itemDisplayMethod === ItemDisplayMethods.CREATE) {\r\n map.set(id, { ...bounds, method: ItemDisplayMethods.NOT_CHANGED });\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const bounds = deletedItemsMap[i], size = bounds?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n if (y < scrollSize - componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfUpdatedItems += componentSize;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE: {\r\n leftSizeOfUpdatedItems += componentSize;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSize;\r\n break;\r\n }\r\n }\r\n }\r\n y += componentSize;\r\n }\r\n }\r\n itemsFromStartToScrollEnd = Math.floor(scrollSize / typicalItemSize);\r\n itemsFromStartToDisplayEnd = Math.ceil((scrollSize + size) / typicalItemSize);\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, itemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + itemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : itemsOffset;\r\n leftItemsWeight = leftItemLength * typicalItemSize;\r\n rightItemsWeight = rightItemLength * typicalItemSize;\r\n leftHiddenItemsWeight = itemsFromStartToScrollEnd * typicalItemSize;\r\n totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * typicalItemSize;\r\n totalSize = totalLength * typicalItemSize;\r\n\r\n const k = totalSize !== 0 ? previousTotalSize / totalSize : 0;\r\n actualScrollSize = scrollSize * k;\r\n }\r\n startIndex = Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0);\r\n\r\n const itemsOnDisplayWeight = totalItemsToDisplayEndWeight - leftItemsWeight,\r\n itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd,\r\n startPosition = leftHiddenItemsWeight - leftItemsWeight,\r\n renderItems = itemsOnDisplayLength + leftItemLength + rightItemLength,\r\n delta = leftSizeOfUpdatedItems + leftSizeOfAddedItems - leftSizeOfDeletedItems;\r\n\r\n const metrics: IMetrics = {\r\n delta,\r\n normalizedItemWidth: w,\r\n normalizedItemHeight: h,\r\n width,\r\n height,\r\n dynamicSize,\r\n itemSize,\r\n itemsFromStartToScrollEnd,\r\n itemsFromStartToDisplayEnd,\r\n itemsOnDisplayWeight,\r\n itemsOnDisplayLength,\r\n isVertical,\r\n leftHiddenItemsWeight,\r\n leftItemLength,\r\n leftItemsWeight,\r\n renderItems,\r\n rightItemLength,\r\n rightItemsWeight,\r\n scrollSize: actualScrollSize,\r\n leftSizeOfAddedItems,\r\n sizeProperty,\r\n snap,\r\n snippedPos,\r\n startIndex,\r\n startPosition,\r\n totalItemsToDisplayEndWeight,\r\n totalLength,\r\n totalSize,\r\n typicalItemSize,\r\n isFromItemIdFound,\r\n };\r\n\r\n return metrics;\r\n }\r\n\r\n clearDeltaDirection() {\r\n this.clearScrollDirectionCache();\r\n }\r\n\r\n clearDelta(clearDirectionDetector = false): void {\r\n this._delta = 0;\r\n\r\n if (clearDirectionDetector) {\r\n this.clearScrollDirectionCache();\r\n }\r\n }\r\n\r\n changes(): void {\r\n this.bumpVersion();\r\n }\r\n\r\n protected generateDisplayCollection<I extends { id: Id }, C extends Array<I>>(items: C, stickyMap: IVirtualListStickyMap,\r\n metrics: IMetrics): IRenderVirtualListCollection {\r\n const {\r\n width,\r\n height,\r\n normalizedItemWidth,\r\n normalizedItemHeight,\r\n dynamicSize,\r\n itemsOnDisplayLength,\r\n itemsFromStartToScrollEnd,\r\n isVertical,\r\n renderItems: renderItemsLength,\r\n scrollSize,\r\n sizeProperty,\r\n snap,\r\n snippedPos,\r\n startPosition,\r\n totalLength,\r\n startIndex,\r\n typicalItemSize,\r\n } = metrics,\r\n displayItems: IRenderVirtualListCollection = [];\r\n if (items.length) {\r\n const actualSnippedPosition = snippedPos, isSnappingMethodAdvanced = this.isSnappingMethodAdvanced,\r\n boundsSize = isVertical ? height : width, actualEndSnippedPosition = boundsSize;\r\n let pos = startPosition,\r\n renderItems = renderItemsLength,\r\n stickyItem: IRenderVirtualListItem | undefined, nextSticky: IRenderVirtualListItem | undefined, stickyItemIndex = -1,\r\n stickyItemSize = 0, endStickyItem: IRenderVirtualListItem | undefined, nextEndSticky: IRenderVirtualListItem | undefined,\r\n endStickyItemIndex = -1, endStickyItemSize = 0;\r\n\r\n if (snap) {\r\n for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? itemsFromStartToScrollEnd : 0, totalLength - 1); i >= 0; i--) {\r\n if (!items[i]) {\r\n continue;\r\n }\r\n const id = items[i].id, sticky = stickyMap[id], size = dynamicSize ? this.get(id)?.[sizeProperty] || typicalItemSize : typicalItemSize;\r\n if (sticky === 1) {\r\n const measures = {\r\n x: isVertical ? 0 : actualSnippedPosition,\r\n y: isVertical ? actualSnippedPosition : 0,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n delta: 0,\r\n }, config = {\r\n isVertical,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = items[i];\r\n\r\n stickyItem = { id, measures, data: itemData, config };\r\n stickyItemIndex = i;\r\n stickyItemSize = size;\r\n\r\n displayItems.push(stickyItem);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (snap) {\r\n const startIndex = itemsFromStartToScrollEnd + itemsOnDisplayLength - 1;\r\n for (let i = Math.min(startIndex, totalLength > 0 ? totalLength - 1 : 0), l = totalLength; i < l; i++) {\r\n const id = items[i].id, sticky = stickyMap[id], size = dynamicSize\r\n ? this.get(id)?.[sizeProperty] || typicalItemSize\r\n : typicalItemSize;\r\n if (sticky === 2) {\r\n const w = isVertical ? normalizedItemWidth : size, h = isVertical ? size : normalizedItemHeight, measures = {\r\n x: isVertical ? 0 : actualEndSnippedPosition - w,\r\n y: isVertical ? actualEndSnippedPosition - h : 0,\r\n width: w,\r\n height: h,\r\n delta: 0,\r\n }, config = {\r\n isVertical,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = items[i];\r\n\r\n endStickyItem = { id, measures, data: itemData, config };\r\n endStickyItemIndex = i;\r\n endStickyItemSize = size;\r\n\r\n displayItems.push(endStickyItem);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let i = startIndex;\r\n\r\n while (renderItems > 0) {\r\n if (i >= totalLength) {\r\n break;\r\n }\r\n\r\n const id = items[i].id, size = dynamicSize ? this.get(id)?.[sizeProperty] || typicalItemSize : typicalItemSize;\r\n\r\n if (id !== stickyItem?.id && id !== endStickyItem?.id) {\r\n const snapped = snap && (stickyMap[id] === 1 && pos <= scrollSize || stickyMap[id] === 2 && pos >= scrollSize + boundsSize - size),\r\n measures = {\r\n x: isVertical ? stickyMap[id] === 1 ? 0 : boundsSize - size : pos,\r\n y: isVertical ? pos : stickyMap[id] === 2 ? boundsSize - size : 0,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n delta: 0,\r\n }, config = {\r\n isVertical,\r\n sticky: stickyMap[id],\r\n snap,\r\n snapped: false,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n zIndex: '0',\r\n };\r\n\r\n if (snapped) {\r\n config.zIndex = '2';\r\n }\r\n\r\n const itemData: I = items[i];\r\n\r\n const item: IRenderVirtualListItem = { id, measures, data: itemData, config };\r\n if (!nextSticky && stickyItemIndex < i && stickyMap[id] === 1 && (pos <= scrollSize + size + stickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualSnippedPosition : pos;\r\n item.measures.y = isVertical ? snapped ? actualSnippedPosition : pos : 0;\r\n nextSticky = item;\r\n nextSticky.config.snapped = snapped;\r\n nextSticky.measures.delta = isVertical ? (item.measures.y - scrollSize) : (item.measures.x - scrollSize);\r\n nextSticky.config.zIndex = '3';\r\n } else if (!nextEndSticky && endStickyItemIndex > i && stickyMap[id] === 2 && (pos >= scrollSize + boundsSize - size - endStickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualEndSnippedPosition - size : pos;\r\n item.measures.y = isVertical ? snapped ? actualEndSnippedPosition - size : pos : 0;\r\n nextEndSticky = item;\r\n nextEndSticky.config.zIndex = '3';\r\n nextEndSticky.config.snapped = snapped;\r\n nextEndSticky.measures.delta = isVertical ? (item.measures.y - scrollSize) : (item.measures.x - scrollSize);\r\n }\r\n\r\n displayItems.push(item);\r\n }\r\n\r\n renderItems -= 1;\r\n pos += size;\r\n i++;\r\n }\r\n\r\n const axis = isVertical ? Y_PROP_NAME : X_PROP_NAME;\r\n\r\n if (nextSticky && stickyItem && nextSticky.measures[axis] <= scrollSize + stickyItemSize) {\r\n if (nextSticky.measures[axis] > scrollSize) {\r\n stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItemSize;\r\n stickyItem.config.snapped = nextSticky.config.snapped = false;\r\n stickyItem.config.snappedOut = true;\r\n stickyItem.config.sticky = 1;\r\n stickyItem.measures.delta = isVertical ? stickyItem.measures.y - scrollSize : stickyItem.measures.x - scrollSize;\r\n } else {\r\n nextSticky.config.snapped = true;\r\n nextSticky.measures.delta = isVertical ? nextSticky.measures.y - scrollSize : nextSticky.measures.x - scrollSize;\r\n }\r\n }\r\n\r\n if (nextEndSticky && endStickyItem && nextEndSticky.measures[axis] >= scrollSize + boundsSize - endStickyItemSize - nextEndSticky.measures[sizeProperty]) {\r\n if (nextEndSticky.measures[axis] < scrollSize + boundsSize - endStickyItemSize) {\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n endStickyItem.config.snapped = nextEndSticky.config.snapped = false;\r\n endStickyItem.config.snappedOut = true;\r\n endStickyItem.config.sticky = 2;\r\n endStickyItem.measures.delta = isVertical ? endStickyItem.measures.y - scrollSize : endStickyItem.measures.x - scrollSize;\r\n } else {\r\n nextEndSticky.config.snapped = true;\r\n nextEndSticky.measures.delta = isVertical ? nextEndSticky.measures.y - scrollSize : nextEndSticky.measures.x - scrollSize;\r\n }\r\n }\r\n }\r\n return displayItems;\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(): void {\r\n if (!this._items || !this._displayComponents) {\r\n return;\r\n }\r\n\r\n this._tracker.track(this._items, this._displayComponents, this._snapedDisplayComponent, this.scrollDirection);\r\n }\r\n\r\n setDisplayObjectIndexMapById(v: { [id: number]: number }): void {\r\n this._tracker.displayObjectIndexMapById = v;\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C | undefined) {\r\n this._tracker.untrackComponentByIdProperty(component);\r\n }\r\n\r\n getItemBounds(id: Id): ISize | undefined {\r\n if (this.has(id)) {\r\n return this.get(id);\r\n }\r\n return undefined;\r\n }\r\n\r\n protected cacheElements(): void {\r\n if (!this._displayComponents) {\r\n return;\r\n }\r\n\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const component = this._displayComponents[i], itemId = component.instance.itemId;\r\n if (itemId === undefined) {\r\n continue;\r\n }\r\n const bounds = component.instance.getBounds();\r\n this.set(itemId, bounds);\r\n }\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n if (this._tracker) {\r\n this._tracker.dispose();\r\n }\r\n }\r\n}\r\n","import { IScrollEvent, ScrollDirection } from \"../models\";\r\n\r\ninterface IScrollEventParams {\r\n direction: ScrollDirection;\r\n container: HTMLElement;\r\n list: HTMLElement;\r\n delta: number;\r\n scrollDelta: number;\r\n isVertical: boolean;\r\n}\r\n\r\n/**\r\n * Scroll event.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/scrollEvent.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollEvent implements IScrollEvent {\r\n private _direction: ScrollDirection = 1;\r\n get direction() { return this._direction; }\r\n\r\n private _scrollSize: number = 0;\r\n get scrollSize() { return this._scrollSize; }\r\n\r\n private _scrollWeight: number = 0;\r\n get scrollWeight() { return this._scrollWeight; }\r\n\r\n private _isVertical: boolean = true;\r\n get isVertical() { return this._isVertical; }\r\n\r\n private _listSize: number = 0;\r\n get listSize() { return this._listSize; }\r\n\r\n private _size: number = 0;\r\n get size() { return this._size; }\r\n\r\n private _isStart: boolean = true;\r\n get isStart() { return this._isStart; }\r\n\r\n private _isEnd: boolean = false;\r\n get isEnd() { return this._isEnd; }\r\n\r\n private _delta: number = 0;\r\n get delta() { return this._delta; }\r\n\r\n private _scrollDelta: number = 0;\r\n get scrollDelta() { return this._scrollDelta; }\r\n\r\n constructor(params: IScrollEventParams) {\r\n const { direction, isVertical, container, list, delta, scrollDelta } = params;\r\n this._direction = direction;\r\n this._isVertical = isVertical;\r\n this._scrollSize = isVertical ? container.scrollTop : container.scrollLeft;\r\n this._scrollWeight = isVertical ? container.scrollHeight : container.scrollWidth;\r\n this._listSize = isVertical ? list.offsetHeight : list.offsetWidth;\r\n this._size = isVertical ? container.offsetHeight : container.offsetWidth;\r\n this._isEnd = (this._scrollSize + this._size) === this._scrollWeight;\r\n this._delta = delta;\r\n this._scrollDelta = scrollDelta;\r\n this._isStart = this._scrollSize === 0;\r\n }\r\n}","import { SnappingMethod, SnappingMethods } from \"../enums\";\r\n\r\nconst ADVANCED_PATTERNS: Array<SnappingMethod> = [SnappingMethods.ADVANCED, 'advanced'],\r\n DEFAULT_PATTERN: Array<SnappingMethod> = [SnappingMethods.NORMAL, 'normal'];\r\n\r\nexport const isSnappingMethodAdvenced = (method: SnappingMethod): boolean => {\r\n return ADVANCED_PATTERNS.includes(method);\r\n}\r\n\r\nexport const isSnappingMethodDefault = (method: SnappingMethod): boolean => {\r\n return DEFAULT_PATTERN.includes(method);\r\n}","export const IS_FIREFOX = navigator.userAgent.toLowerCase().includes('firefox');\r\n\r\nexport const FIREFOX_SCROLLBAR_OVERLAP_SIZE = 12;\r\n","import {\r\n AfterViewInit, ChangeDetectionStrategy, Component, ComponentRef, ElementRef, inject, input,\r\n OnDestroy, OnInit, output, signal, TemplateRef, ViewChild, viewChild, ViewContainerRef, ViewEncapsulation,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { combineLatest, distinctUntilChanged, filter, map, Observable, of, switchMap, tap } from 'rxjs';\r\nimport { NgVirtualListItemComponent } from './components/ng-virtual-list-item.component';\r\nimport {\r\n BEHAVIOR_AUTO, BEHAVIOR_INSTANT, CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE,\r\n DEFAULT_ENABLED_BUFFER_OPTIMIZATION, DEFAULT_ITEM_SIZE, DEFAULT_ITEMS_OFFSET, DEFAULT_LIST_SIZE, DEFAULT_SNAP, DEFAULT_SNAPPING_METHOD,\r\n HEIGHT_PROP_NAME, LEFT_PROP_NAME, MAX_SCROLL_TO_ITERATIONS, PX, SCROLL, SCROLL_END, TOP_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n} from './const';\r\nimport { BaseVirtualListItemComponent, Component$1, IScrollEvent, IVirtualListCollection, IVirtualListItem, IVirtualListStickyMap } from './models';\r\nimport { Id, ISize } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { Direction, Directions, SnappingMethod } from './enums';\r\nimport { ScrollEvent, TrackBox, isDirection, toggleClassName } from './utils';\r\nimport { IGetItemPositionOptions, IUpdateCollectionOptions, TRACK_BOX_CHANGE_EVENT_NAME } from './utils/trackBox';\r\nimport { isSnappingMethodAdvenced } from './utils/snapping-method';\r\nimport { FIREFOX_SCROLLBAR_OVERLAP_SIZE, IS_FIREFOX } from './utils/browser';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-virtual-list',\r\n imports: [CommonModule],\r\n templateUrl: './ng-virtual-list.component.html',\r\n styleUrl: './ng-virtual-list.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgVirtualListComponent implements AfterViewInit, OnInit, OnDestroy {\r\n protected static __nextId: number = 0;\r\n\r\n protected _id: number = NgVirtualListComponent.__nextId;\r\n /**\r\n * Readonly. Returns the unique identifier of the component.\r\n */\r\n get id() { return this._id; }\r\n\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n protected _listContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('snapRendererContainer', { read: ViewContainerRef })\r\n protected _snapContainerRef: ViewContainerRef | undefined;\r\n\r\n protected _snappedContainer = viewChild<ElementRef<HTMLDivElement>>('snapped');\r\n\r\n protected _container = viewChild<ElementRef<HTMLDivElement>>('container');\r\n\r\n protected _list = viewChild<ElementRef<HTMLUListElement>>('list');\r\n\r\n /**\r\n * Fires when the list has been scrolled.\r\n */\r\n onScroll = output<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the list has completed scrolling.\r\n */\r\n onScrollEnd = output<IScrollEvent>();\r\n\r\n protected _itemsOptions = {\r\n transform: (v: IVirtualListCollection | undefined) => {\r\n this._trackBox.resetCollection(v, this.itemSize());\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Collection of list items.\r\n */\r\n items = input.required<IVirtualListCollection>({\r\n ...this._itemsOptions,\r\n });\r\n\r\n /**\r\n * Determines whether elements will snap. Default value is \"true\".\r\n */\r\n snap = input<boolean>(DEFAULT_SNAP);\r\n\r\n /**\r\n * Experimental!\r\n * Enables buffer optimization.\r\n * Can only be used if items in the collection are not added or updated. Otherwise, artifacts in the form of twitching of the scroll area are possible.\r\n * Works only if the property dynamic = true\r\n */\r\n enabledBufferOptimization = input<boolean>(DEFAULT_ENABLED_BUFFER_OPTIMIZATION);\r\n\r\n /**\r\n * Rendering element template.\r\n */\r\n itemRenderer = input.required<TemplateRef<any>>();\r\n\r\n protected _itemRenderer = signal<TemplateRef<any> | undefined>(undefined);\r\n\r\n /**\r\n * Dictionary zIndex by id of the list element. If the value is not set or equal to 0,\r\n * then a simple element is displayed, if the value is greater than 0, then the sticky position mode is enabled for the element.\r\n */\r\n stickyMap = input<IVirtualListStickyMap>({});\r\n\r\n protected _itemSizeOptions = {\r\n transform: (v: number | undefined) => {\r\n if (v === undefined) {\r\n return DEFAULT_ITEM_SIZE;\r\n }\r\n const val = Number(v);\r\n return Number.isNaN(val) || val <= 0 ? DEFAULT_ITEM_SIZE : val;\r\n },\r\n } as any;\r\n\r\n /**\r\n * If direction = 'vertical', then the height of a typical element. If direction = 'horizontal', then the width of a typical element.\r\n * Ignored if the dynamicSize property is true.\r\n */\r\n itemSize = input<number>(DEFAULT_ITEM_SIZE, { ...this._itemSizeOptions });\r\n\r\n /**\r\n * If true then the items in the list can have different sizes and the itemSize property is ignored.\r\n * If false then the items in the list have a fixed size specified by the itemSize property. The default value is false.\r\n */\r\n dynamicSize = input(DEFAULT_DYNAMIC_SIZE);\r\n\r\n /**\r\n * Determines the direction in which elements are placed. Default value is \"vertical\".\r\n */\r\n direction = input<Direction>(DEFAULT_DIRECTION);\r\n\r\n /**\r\n * Number of elements outside the scope of visibility. Default value is 2.\r\n */\r\n itemsOffset = input<number>(DEFAULT_ITEMS_OFFSET);\r\n\r\n /**\r\n * Snapping method.\r\n * 'default' - Normal group rendering.\r\n * 'advanced' - The group is rendered on a transparent background. List items below the group are not rendered.\r\n */\r\n snappingMethod = input<SnappingMethod>(DEFAULT_SNAPPING_METHOD);\r\n\r\n protected _isSnappingMethodAdvanced: boolean = this.getIsSnappingMethodAdvanced();\r\n get isSnappingMethodAdvanced() { return this._isSnappingMethodAdvanced; }\r\n\r\n protected _isVertical = this.getIsVertical();\r\n\r\n protected _displayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n protected _snapedDisplayComponent: ComponentRef<BaseVirtualListItemComponent> | undefined;\r\n\r\n protected _bounds = signal<ISize | null>(null);\r\n\r\n protected _scrollSize = signal<number>(0);\r\n\r\n protected _resizeObserver: ResizeObserver | null = null;\r\n\r\n protected _resizeSnappedComponentHandler = () => {\r\n const list = this._list(), container = this._container(), snappedComponent = this._snapedDisplayComponent?.instance;\r\n if (list && container && snappedComponent) {\r\n const isVertical = this._isVertical, listBounds = list.nativeElement.getBoundingClientRect(), listElement = list?.nativeElement,\r\n { width: lWidth, height: lHeight } = listElement?.getBoundingClientRect() ?? { width: 0, height: 0 },\r\n { width, height } = this._bounds() ?? { width: 0, height: 0 },\r\n isScrollable = isVertical ? container.nativeElement.scrollHeight > 0 : container.nativeElement.scrollWidth > 0;\r\n\r\n let scrollBarSize = isVertical ? width - lWidth : height - lHeight, isScrollBarOverlap = true, overlapScrollBarSize = 0;\r\n if (scrollBarSize === 0 && isScrollable) {\r\n isScrollBarOverlap = true;\r\n }\r\n\r\n if (isScrollBarOverlap && IS_FIREFOX) {\r\n scrollBarSize = overlapScrollBarSize = FIREFOX_SCROLLBAR_OVERLAP_SIZE;\r\n }\r\n\r\n snappedComponent.element.style.clipPath = `path(\"M 0 0 L 0 ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} 0 Z\")`;\r\n\r\n snappedComponent.regularLength = `${isVertical ? listBounds.width : listBounds.height}${PX}`;\r\n const { width: sWidth, height: sHeight } = snappedComponent.getBounds() ?? { width: 0, height: 0 },\r\n containerElement = container.nativeElement, delta = snappedComponent.item?.measures.delta ?? 0;\r\n\r\n let left: number, right: number, top: number, bottom: number;\r\n if (isVertical) {\r\n left = 0;\r\n right = width - scrollBarSize;\r\n top = sHeight;\r\n bottom = height;\r\n containerElement.style.clipPath = `path(\"M 0 ${top + delta} L 0 ${height} L ${width} ${height} L ${width} 0 L ${right} 0 L ${right} ${top + delta} Z\")`;\r\n } else {\r\n left = sWidth;\r\n right = width;\r\n top = 0;\r\n bottom = height - scrollBarSize;\r\n containerElement.style.clipPath = `path(\"M ${left + delta} 0 L ${left + delta} ${bottom} L 0 ${bottom} L 0 ${height} L ${width} ${height} L ${width} 0 Z\")`;\r\n }\r\n }\r\n };\r\n\r\n protected _resizeSnappedObserver: ResizeObserver | null = null;\r\n\r\n protected _componentsResizeObserver = new ResizeObserver(() => {\r\n this._trackBox.changes();\r\n });\r\n\r\n protected _onResizeHandler = () => {\r\n const bounds = this._container()?.nativeElement?.getBoundingClientRect();\r\n if (bounds) {\r\n this._bounds.set({ width: bounds.width, height: bounds.height });\r\n } else {\r\n this._bounds.set({ width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE });\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n }\r\n\r\n protected _onScrollHandler = (e?: Event) => {\r\n this.clearScrollToRepeatExecutionTimeout();\r\n\r\n const container = this._container()?.nativeElement;\r\n if (container) {\r\n const scrollSize = (this._isVertical ? container.scrollTop : container.scrollLeft),\r\n actualScrollSize = scrollSize;\r\n this._scrollSize.set(actualScrollSize);\r\n }\r\n }\r\n\r\n protected _elementRef = inject(ElementRef<HTMLDivElement>);\r\n\r\n protected _initialized!: WritableSignal<boolean>;\r\n\r\n readonly $initialized!: Observable<boolean>;\r\n\r\n /**\r\n * The name of the property by which tracking is performed\r\n */\r\n trackBy = input<string>(TRACK_BY_PROPERTY_NAME);\r\n\r\n /**\r\n * Base class of the element component\r\n */\r\n protected _itemComponentClass: Component$1<BaseVirtualListItemComponent> = NgVirtualListItemComponent;\r\n\r\n /**\r\n * Base class trackBox\r\n */\r\n protected _trackBoxClass: Component$1<TrackBox> = TrackBox;\r\n\r\n /**\r\n * Dictionary of element sizes by their id\r\n */\r\n protected _trackBox: TrackBox = new this._trackBoxClass(this.trackBy());\r\n\r\n protected _onTrackBoxChangeHandler = (v: number) => {\r\n this._cacheVersion.set(v);\r\n }\r\n\r\n protected _cacheVersion = signal<number>(-1);\r\n\r\n constructor() {\r\n NgVirtualListComponent.__nextId = NgVirtualListComponent.__nextId + 1 === Number.MAX_SAFE_INTEGER\r\n ? 0 : NgVirtualListComponent.__nextId + 1;\r\n this._id = NgVirtualListComponent.__nextId;\r\n\r\n this._initialized = signal<boolean>(false);\r\n this.$initialized = toObservable(this._initialized);\r\n\r\n this._trackBox.displayComponents = this._displayComponents;\r\n\r\n const $trackBy = toObservable(this.trackBy);\r\n\r\n $trackBy.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._trackBox.trackingPropertyName = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $bounds = toObservable(this._bounds).pipe(\r\n filter(b => !!b),\r\n ), $items = toObservable(this.items).pipe(\r\n map(i => !i ? [] : i),\r\n ), $scrollSize = toObservable(this._scrollSize),\r\n $itemSize = toObservable(this.itemSize).pipe(\r\n map(v => v <= 0 ? DEFAULT_ITEM_SIZE : v),\r\n ),\r\n $itemsOffset = toObservable(this.itemsOffset).pipe(\r\n map(v => v < 0 ? DEFAULT_ITEMS_OFFSET : v),\r\n ),\r\n $stickyMap = toObservable(this.stickyMap).pipe(\r\n map(v => !v ? {} : v),\r\n ),\r\n $snap = toObservable(this.snap),\r\n $isVertical = toObservable(this.direction).pipe(\r\n map(v => this.getIsVertical(v || DEFAULT_DIRECTION)),\r\n ),\r\n $dynamicSize = toObservable(this.dynamicSize),\r\n $enabledBufferOptimization = toObservable(this.enabledBufferOptimization),\r\n $snappingMethod = toObservable(this.snappingMethod).pipe(\r\n map(v => this.getIsSnappingMethodAdvanced(v || DEFAULT_SNAPPING_METHOD)),\r\n ),\r\n $cacheVersion = toObservable(this._cacheVersion);\r\n\r\n $isVertical.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._isVertical = v;\r\n const el: HTMLElement = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, v ? CLASS_LIST_HORIZONTAL : CLASS_LIST_VERTICAL);\r\n }),\r\n ).subscribe();\r\n\r\n $snappingMethod.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._isSnappingMethodAdvanced = this._trackBox.isSnappingMethodAdvanced = v;\r\n }),\r\n ).subscribe();\r\n\r\n $dynamicSize.pipe(\r\n takeUntilDestroyed(),\r\n tap(dynamicSize => {\r\n this.listenCacheChangesIfNeed(dynamicSize);\r\n })\r\n ).subscribe();\r\n\r\n combineLatest([this.$initialized, $bounds, $items, $stickyMap, $scrollSize, $itemSize,\r\n $itemsOffset, $snap, $isVertical, $dynamicSize, $enabledBufferOptimization, $cacheVersion,\r\n ]).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(([initialized]) => !!initialized),\r\n switchMap(([,\r\n bounds, items, stickyMap, scrollSize, itemSize,\r\n itemsOffset, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion,\r\n ]) => {\r\n let actualScrollSize = (this._isVertical ? this._container()?.nativeElement.scrollTop ?? 0 : this._container()?.nativeElement.scrollLeft) ?? 0;\r\n const { width, height } = bounds,\r\n opts: IUpdateCollectionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, dynamicSize, isVertical, itemSize,\r\n itemsOffset, scrollSize: actualScrollSize, snap, enabledBufferOptimization,\r\n },\r\n { displayItems, totalSize } = this._trackBox.updateCollection(items, stickyMap, opts);\r\n\r\n this.resetBoundsSize(isVertical, totalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n const container = this._container();\r\n\r\n if (container) {\r\n const delta = this._trackBox.delta;\r\n actualScrollSize = actualScrollSize + delta;\r\n\r\n this._trackBox.clearDelta();\r\n\r\n if (scrollSize !== actualScrollSize) {\r\n const params: ScrollToOptions = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: actualScrollSize,\r\n behavior: BEHAVIOR_INSTANT\r\n };\r\n\r\n container.nativeElement.scrollTo(params);\r\n }\r\n }\r\n\r\n return of(displayItems);\r\n }),\r\n ).subscribe();\r\n\r\n this.setupRenderer();\r\n }\r\n\r\n protected setupRenderer() {\r\n const $itemRenderer = toObservable(this.itemRenderer);\r\n\r\n $itemRenderer.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._itemRenderer.set(v);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n /** @internal */\r\n ngOnInit() {\r\n this.onInit();\r\n }\r\n\r\n protected onInit() {\r\n this._initialized.set(true);\r\n }\r\n\r\n protected listenCacheChangesIfNeed(value: boolean) {\r\n if (value) {\r\n if (!this._trackBox.hasEventListener(TRACK_BOX_CHANGE_EVENT_NAME, this._onTrackBoxChangeHandler)) {\r\n this._trackBox.addEventListener(TRACK_BOX_CHANGE_EVENT_NAME, this._onTrackBoxChangeHandler);\r\n }\r\n } else {\r\n if (this._trackBox.hasEventListener(TRACK_BOX_CHANGE_EVENT_NAME, this._onTrackBoxChangeHandler)) {\r\n this._trackBox.removeEventListener(TRACK_BOX_CHANGE_EVENT_NAME, this._onTrackBoxChangeHandler);\r\n }\r\n }\r\n }\r\n\r\n protected getIsSnappingMethodAdvanced(m?: SnappingMethod) {\r\n const method = m || this.snappingMethod();\r\n return isSnappingMethodAdvenced(method);\r\n }\r\n\r\n protected getIsVertical(d?: Direction) {\r\n const dir = d || this.direction();\r\n return isDirection(dir, Directions.VERTICAL);\r\n }\r\n\r\n protected createDisplayComponentsIfNeed(displayItems: IRenderVirtualListCollection | null) {\r\n if (!displayItems || !this._listContainerRef) {\r\n this._trackBox.setDisplayObjectIndexMapById({});\r\n return;\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced && this.snap()) {\r\n if (!this._snapedDisplayComponent && this._snapContainerRef) {\r\n const comp = this._snapContainerRef.createComponent(this._itemComponentClass);\r\n comp.instance.regular = true;\r\n this._snapedDisplayComponent = comp;\r\n this._trackBox.snapedDisplayComponent = this._snapedDisplayComponent;\r\n\r\n this._resizeSnappedObserver = new ResizeObserver(this._resizeSnappedComponentHandler);\r\n this._resizeSnappedObserver.observe(comp.instance.element);\r\n }\r\n }\r\n\r\n this._trackBox.items = displayItems;\r\n\r\n const _listContainerRef = this._listContainerRef;\r\n\r\n const maxLength = displayItems.length, components = this._displayComponents;\r\n\r\n while (components.length < maxLength) {\r\n if (_listContainerRef) {\r\n const comp = _listContainerRef.createComponent(this._itemComponentClass);\r\n components.push(comp);\r\n\r\n this._componentsResizeObserver.observe(comp.instance.element);\r\n }\r\n }\r\n\r\n this.resetRenderers();\r\n }\r\n\r\n protected updateRegularRenderer() {\r\n this._resizeSnappedComponentHandler();\r\n }\r\n\r\n protected resetRenderers(itemRenderer?: TemplateRef<HTMLElement>) {\r\n const doMap: { [id: number]: number } = {}, components = this._displayComponents;\r\n for (let i = 0, l = components.length; i < l; i++) {\r\n const item = components[i];\r\n if (item) {\r\n const id = item.instance.id;\r\n item.instance.renderer = itemRenderer || this._itemRenderer();\r\n doMap[id] = i;\r\n }\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced && this.snap() && this._snapedDisplayComponent && this._snapContainerRef) {\r\n const comp = this._snapedDisplayComponent;\r\n comp.instance.renderer = itemRenderer || this._itemRenderer();\r\n }\r\n\r\n this._trackBox.setDisplayObjectIndexMapById(doMap);\r\n }\r\n\r\n /**\r\n * Tracking by id\r\n */\r\n protected tracking() {\r\n this._trackBox.track();\r\n }\r\n\r\n protected resetBoundsSize(isVertical: boolean, totalSize: number) {\r\n const l = this._list();\r\n if (l) {\r\n l.nativeElement.style[isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME] = `${totalSize}${PX}`;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the bounds of an element with a given id\r\n */\r\n getItemBounds(id: Id): ISize | undefined {\r\n return this._trackBox.getItemBounds(id);\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given id and returns the value of the scrolled area.\r\n * Behavior accepts the values ​​\"auto\", \"instant\" and \"smooth\".\r\n */\r\n scrollTo(id: Id, behavior: ScrollBehavior = BEHAVIOR_AUTO) {\r\n this.scrollToExecutor(id, behavior);\r\n }\r\n\r\n protected _scrollToRepeatExecutionTimeout: number | undefined;\r\n\r\n protected clearScrollToRepeatExecutionTimeout() {\r\n clearTimeout(this._scrollToRepeatExecutionTimeout);\r\n }\r\n\r\n protected scrollToExecutor(id: Id, behavior: ScrollBehavior, iteration: number = 0, isLastIteration = false) {\r\n const items = this.items();\r\n if (!items || !items.length) {\r\n return;\r\n }\r\n\r\n const dynamicSize = this.dynamicSize(), container = this._container(), itemSize = this.itemSize();\r\n if (container) {\r\n this.clearScrollToRepeatExecutionTimeout();\r\n\r\n if (dynamicSize) {\r\n if (container) {\r\n container.nativeElement.removeEventListener(SCROLL, this._onScrollHandler);\r\n }\r\n\r\n const { width, height } = this._bounds() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n stickyMap = this.stickyMap(), items = this.items(), isVertical = this._isVertical, delta = this._trackBox.delta,\r\n opts: IGetItemPositionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize,\r\n itemsOffset: this.itemsOffset(), scrollSize: (isVertical ? container.nativeElement.scrollTop : container.nativeElement.scrollLeft) + delta,\r\n snap: this.snap(), fromItemId: id, enabledBufferOptimization: this.enabledBufferOptimization(),\r\n },\r\n scrollSize = this._trackBox.getItemPosition(id, stickyMap, opts),\r\n params: ScrollToOptions = { [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior };\r\n\r\n if (scrollSize === -1) {\r\n container.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n return;\r\n }\r\n\r\n this._trackBox.clearDelta();\r\n\r\n if (container) {\r\n const { displayItems, totalSize } = this._trackBox.updateCollection(items, stickyMap, {\r\n ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,\r\n }), delta = this._trackBox.delta;\r\n\r\n this._trackBox.clearDelta();\r\n\r\n let actualScrollSize = scrollSize + delta;\r\n\r\n this.resetBoundsSize(isVertical, totalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n const _scrollSize = this._trackBox.getItemPosition(id, stickyMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });\r\n\r\n if (_scrollSize === -1) {\r\n container.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n return;\r\n }\r\n\r\n const notChanged = actualScrollSize === _scrollSize\r\n\r\n if (!notChanged || iteration < MAX_SCROLL_TO_ITERATIONS) {\r\n this.clearScrollToRepeatExecutionTimeout();\r\n this._scrollToRepeatExecutionTimeout = setTimeout(() => {\r\n this.scrollToExecutor(id, BEHAVIOR_INSTANT, iteration + 1, notChanged);\r\n }) as unknown as number;\r\n } else {\r\n this._scrollSize.set(actualScrollSize);\r\n\r\n container.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n }\r\n }\r\n\r\n container.nativeElement.scrollTo(params);\r\n\r\n this._scrollSize.set(scrollSize);\r\n } else {\r\n const index = items.findIndex(item => item.id === id);\r\n if (index > -1) {\r\n const scrollSize = index * this.itemSize();\r\n const params: ScrollToOptions = { [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior };\r\n container.nativeElement.scrollTo(params);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the desired element with the specified ID.\r\n */\r\n scrollToEnd(behavior: ScrollBehavior = BEHAVIOR_INSTANT) {\r\n const items = this.items(), latItem = items[items.length > 0 ? items.length - 1 : 0];\r\n this.scrollTo(latItem.id, behavior);\r\n }\r\n\r\n protected _onContainerScrollHandler = (e: Event) => {\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n const scrollSize = (this._isVertical ? containerEl.nativeElement.scrollTop : containerEl.nativeElement.scrollLeft);\r\n this._trackBox.deltaDirection = this._scrollSize() > scrollSize ? -1 : this._scrollSize() < scrollSize ? 1 : 0;\r\n\r\n const event = new ScrollEvent({\r\n direction: this._trackBox.scrollDirection, container: containerEl.nativeElement,\r\n list: this._list()!.nativeElement, delta: this._trackBox.delta,\r\n scrollDelta: this._trackBox.scrollDelta, isVertical: this._isVertical,\r\n });\r\n\r\n this.onScroll.emit(event);\r\n }\r\n }\r\n\r\n protected _onContainerScrollEndHandler = (e: Event) => {\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n const scrollSize = (this._isVertical ? containerEl.nativeElement.scrollTop : containerEl.nativeElement.scrollLeft);\r\n this._trackBox.deltaDirection = this._scrollSize() > scrollSize ? -1 : 0;\r\n\r\n const event = new ScrollEvent({\r\n direction: this._trackBox.scrollDirection, container: containerEl.nativeElement,\r\n list: this._list()!.nativeElement, delta: this._trackBox.delta,\r\n scrollDelta: this._trackBox.scrollDelta, isVertical: this._isVertical,\r\n });\r\n\r\n this.onScrollEnd.emit(event);\r\n }\r\n }\r\n\r\n /** @internal */\r\n ngAfterViewInit(): void {\r\n this.afterViewInit();\r\n }\r\n\r\n protected afterViewInit() {\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n // for direction calculation\r\n containerEl.nativeElement.addEventListener(SCROLL, this._onContainerScrollHandler);\r\n containerEl.nativeElement.addEventListener(SCROLL_END, this._onContainerScrollEndHandler);\r\n\r\n containerEl.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n\r\n this._resizeObserver = new ResizeObserver(this._onResizeHandler);\r\n this._resizeObserver.observe(containerEl.nativeElement);\r\n\r\n this._onResizeHandler();\r\n }\r\n }\r\n\r\n /** @internal */\r\n ngOnDestroy(): void {\r\n this.dispose();\r\n }\r\n\r\n protected dispose() {\r\n this.clearScrollToRepeatExecutionTimeout();\r\n\r\n if (this._trackBox) {\r\n this._trackBox.dispose();\r\n }\r\n\r\n if (this._componentsResizeObserver) {\r\n this._componentsResizeObserver.disconnect();\r\n }\r\n\r\n if (this._resizeSnappedObserver) {\r\n this._resizeSnappedObserver.disconnect();\r\n }\r\n\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n containerEl.nativeElement.removeEventListener(SCROLL, this._onScrollHandler);\r\n containerEl.nativeElement.removeEventListener(SCROLL, this._onContainerScrollHandler);\r\n containerEl.nativeElement.removeEventListener(SCROLL_END, this._onContainerScrollEndHandler);\r\n }\r\n\r\n if (this._snapedDisplayComponent) {\r\n this._snapedDisplayComponent.destroy();\r\n }\r\n\r\n if (this._displayComponents) {\r\n while (this._displayComponents.length > 0) {\r\n const comp = this._displayComponents.pop();\r\n comp?.destroy();\r\n }\r\n }\r\n }\r\n}\r\n","@if (snap()) {\r\n<div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n</div>\r\n}\r\n<div #container part=\"scroller\" class=\"ngvl__scroller\">\r\n <ul #list part=\"list\" class=\"ngvl__list\">\r\n <ng-container #renderersContainer></ng-container>\r\n </ul>\r\n</div>","/*\r\n * Public API Surface of ng-virtual-list\r\n */\r\n\r\nexport * from './lib/components/ng-virtual-list-item.component';\r\nexport * from './lib/ng-virtual-list.component';\r\nexport * from './lib/enums';\r\nexport * from './lib/models';\r\nexport * from './lib/types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-virtual-list.mjs","sources":["../../../projects/ng-virtual-list/src/lib/enums/directions.ts","../../../projects/ng-virtual-list/src/lib/enums/snapping-methods.ts","../../../projects/ng-virtual-list/src/lib/const/index.ts","../../../projects/ng-virtual-list/src/lib/models/base-virtual-list-item-component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-virtual-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-virtual-list-item.component.html","../../../projects/ng-virtual-list/src/lib/utils/isDirection.ts","../../../projects/ng-virtual-list/src/lib/utils/debounce.ts","../../../projects/ng-virtual-list/src/lib/utils/toggleClassName.ts","../../../projects/ng-virtual-list/src/lib/utils/tracker.ts","../../../projects/ng-virtual-list/src/lib/utils/eventEmitter.ts","../../../projects/ng-virtual-list/src/lib/utils/cacheMap.ts","../../../projects/ng-virtual-list/src/lib/utils/trackBox.ts","../../../projects/ng-virtual-list/src/lib/utils/scrollEvent.ts","../../../projects/ng-virtual-list/src/lib/utils/snapping-method.ts","../../../projects/ng-virtual-list/src/lib/utils/browser.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.component.html","../../../projects/ng-virtual-list/src/public-api.ts","../../../projects/ng-virtual-list/src/ng-virtual-list.ts"],"sourcesContent":["/**\r\n * Axis of the arrangement of virtual list elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/enums/directions.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum Directions {\r\n /**\r\n * Horizontal axis.\r\n */\r\n HORIZONTAL = 'horizontal',\r\n /**\r\n * Vertical axis.\r\n */\r\n VERTICAL = 'vertical',\r\n}","/**\r\n * Snapping method.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/enums/snapping-method.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SnappingMethods {\r\n /**\r\n * Normal group rendering.\r\n */\r\n NORMAL = 'normal',\r\n /**\r\n * The group is rendered on a transparent background. List items below the group are not rendered.\r\n */\r\n ADVANCED = 'advanced',\r\n}","import { SnappingMethods } from \"../enums\";\r\nimport { Directions } from \"../enums/directions\";\r\n\r\nexport const DEFAULT_ITEM_SIZE = 24;\r\n\r\nexport const DEFAULT_ITEMS_OFFSET = 2;\r\n\r\nexport const DEFAULT_LIST_SIZE = 400;\r\n\r\nexport const DEFAULT_SNAP = false;\r\n\r\nexport const DEFAULT_ENABLED_BUFFER_OPTIMIZATION = false;\r\n\r\nexport const DEFAULT_DYNAMIC_SIZE = false;\r\n\r\nexport const TRACK_BY_PROPERTY_NAME = 'id';\r\n\r\nexport const DEFAULT_DIRECTION = Directions.VERTICAL;\r\n\r\nexport const DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR = 1;\r\n\r\nexport const MAX_SCROLL_TO_ITERATIONS = 5;\r\n\r\nexport const DEFAULT_SNAPPING_METHOD = SnappingMethods.NORMAL;\r\n\r\n// presets\r\n\r\nexport const BEHAVIOR_AUTO = 'auto';\r\n\r\nexport const BEHAVIOR_INSTANT = 'instant';\r\n\r\nexport const BEHAVIOR_SMOOTH = 'smooth';\r\n\r\nexport const DISPLAY_BLOCK = 'block';\r\n\r\nexport const DISPLAY_NONE = 'none';\r\n\r\nexport const OPACITY_0 = '0';\r\n\r\nexport const OPACITY_100 = '100';\r\n\r\nexport const VISIBILITY_VISIBLE = 'visible';\r\n\r\nexport const VISIBILITY_HIDDEN = 'hidden';\r\n\r\nexport const SIZE_100_PERSENT = '100%';\r\n\r\nexport const SIZE_AUTO = 'auto';\r\n\r\nexport const POSITION_ABSOLUTE = 'absolute';\r\n\r\nexport const POSITION_STICKY = 'sticky';\r\n\r\nexport const TRANSLATE_3D = 'translate3d';\r\n\r\nexport const ZEROS_TRANSLATE_3D = `${TRANSLATE_3D}(0,0,0)`;\r\n\r\nexport const HIDDEN_ZINDEX = '-1';\r\n\r\nexport const DEFAULT_ZINDEX = '0';\r\n\r\nexport const TOP_PROP_NAME = 'top';\r\n\r\nexport const LEFT_PROP_NAME = 'left';\r\n\r\nexport const X_PROP_NAME = 'x';\r\n\r\nexport const Y_PROP_NAME = 'y';\r\n\r\nexport const WIDTH_PROP_NAME = 'width';\r\n\r\nexport const HEIGHT_PROP_NAME = 'height';\r\n\r\nexport const PX = 'px';\r\n\r\nexport const SCROLL = 'scroll';\r\n\r\nexport const SCROLL_END = 'scrollend';\r\n\r\nexport const CLASS_LIST_VERTICAL = 'vertical';\r\n\r\nexport const CLASS_LIST_HORIZONTAL = 'horizontal';\r\n","import { TemplateRef, WritableSignal } from '@angular/core';\r\nimport { Id, ISize } from '../types';\r\nimport { IRenderVirtualListItem } from './render-item.model';\r\n\r\n/**\r\n * Virtual List Item Interface\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/base-virtual-list-item-component.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport abstract class BaseVirtualListItemComponent {\r\n abstract get id(): number;\r\n abstract data: WritableSignal<IRenderVirtualListItem | undefined>;\r\n abstract regular: boolean;\r\n abstract set regularLength(v: string)\r\n abstract set item(v: IRenderVirtualListItem | null | undefined);\r\n abstract get item(): IRenderVirtualListItem | null | undefined;\r\n abstract get itemId(): Id | undefined;\r\n abstract itemRenderer: WritableSignal<TemplateRef<any> | undefined>;\r\n abstract set renderer(v: TemplateRef<any> | undefined);\r\n abstract get element(): HTMLElement;\r\n protected abstract update(): void;\r\n public abstract getBounds(): ISize;\r\n public abstract show(): void;\r\n public abstract hide(): void;\r\n}","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, ElementRef, inject, signal, TemplateRef } from '@angular/core';\r\nimport { IRenderVirtualListItem } from '../models/render-item.model';\r\nimport { ISize } from '../types';\r\nimport {\r\n DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, POSITION_ABSOLUTE, POSITION_STICKY, PX, SIZE_100_PERSENT,\r\n SIZE_AUTO, TRANSLATE_3D, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE, ZEROS_TRANSLATE_3D,\r\n} from '../const';\r\nimport { BaseVirtualListItemComponent } from '../models';\r\n\r\n/**\r\n * Virtual list item component\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/ng-virtual-list-item.component.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-virtual-list-item',\r\n imports: [CommonModule],\r\n templateUrl: './ng-virtual-list-item.component.html',\r\n styleUrl: './ng-virtual-list-item.component.scss',\r\n host: {\r\n 'class': 'ngvl__item',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgVirtualListItemComponent extends BaseVirtualListItemComponent {\r\n protected static __nextId: number = 0;\r\n\r\n protected _id!: number;\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n regular: boolean = false;\r\n\r\n data = signal<IRenderVirtualListItem | undefined>(undefined);\r\n protected _data: IRenderVirtualListItem | undefined = undefined;\r\n set item(v: IRenderVirtualListItem | undefined) {\r\n if (this._data === v) {\r\n return;\r\n }\r\n\r\n const data = this._data = v;\r\n\r\n this.update();\r\n\r\n this.data.set(v);\r\n }\r\n\r\n protected _regularLength: string = SIZE_100_PERSENT;\r\n set regularLength(v: string) {\r\n if (this._regularLength === v) {\r\n return;\r\n }\r\n\r\n this._regularLength = v;\r\n\r\n this.update();\r\n }\r\n\r\n get item() {\r\n return this._data;\r\n }\r\n\r\n get itemId() {\r\n return this._data?.id;\r\n }\r\n\r\n itemRenderer = signal<TemplateRef<any> | undefined>(undefined);\r\n\r\n set renderer(v: TemplateRef<any> | undefined) {\r\n this.itemRenderer.set(v);\r\n }\r\n\r\n protected _elementRef: ElementRef<HTMLElement> = inject(ElementRef<HTMLElement>);\r\n get element() {\r\n return this._elementRef.nativeElement;\r\n }\r\n\r\n constructor() {\r\n super();\r\n this._id = NgVirtualListItemComponent.__nextId = NgVirtualListItemComponent.__nextId === Number.MAX_SAFE_INTEGER\r\n ? 0 : NgVirtualListItemComponent.__nextId + 1;\r\n }\r\n\r\n protected update() {\r\n const data = this._data, regular = this.regular, length = this._regularLength;\r\n if (data) {\r\n const styles = this._elementRef.nativeElement.style;\r\n styles.zIndex = data.config.zIndex;\r\n if (data.config.snapped) {\r\n styles.transform = data.config.sticky === 1 ? ZEROS_TRANSLATE_3D : `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX} , 0)`;;\r\n if (!data.config.isSnappingMethodAdvanced) {\r\n styles.position = POSITION_STICKY;\r\n }\r\n } else {\r\n styles.position = POSITION_ABSOLUTE;\r\n if (regular) {\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.delta}${PX}, ${data.config.isVertical ? data.measures.delta : 0}${PX} , 0)`;\r\n } else {\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX} , 0)`;\r\n }\r\n }\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : SIZE_100_PERSENT;\r\n styles.width = data.config.isVertical ? regular ? length : SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n }\r\n }\r\n\r\n getBounds(): ISize {\r\n const el: HTMLElement = this._elementRef.nativeElement,\r\n { width, height } = el.getBoundingClientRect();\r\n return { width, height };\r\n }\r\n\r\n show() {\r\n const styles = this._elementRef.nativeElement.style;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_BLOCK) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_BLOCK;\r\n } else {\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;\r\n }\r\n\r\n hide() {\r\n const styles = this._elementRef.nativeElement.style;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_NONE) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_NONE;\r\n } else {\r\n if (styles.visibility === VISIBILITY_HIDDEN) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_HIDDEN;\r\n }\r\n styles.position = POSITION_ABSOLUTE;\r\n styles.transform = ZEROS_TRANSLATE_3D;\r\n styles.zIndex = HIDDEN_ZINDEX;\r\n }\r\n}\r\n","@let item = data();\r\n@let renderer = itemRenderer();\r\n\r\n@if (item) {\r\n <li #listItem part=\"item\" class=\"ngvl-item__container\" [ngClass]=\"{'snapped': item.config.snapped,\r\n 'snapped-out': item.config.snappedOut}\">\r\n @if (renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\"\r\n [ngTemplateOutletContext]=\"{data: item.data || {}, config: item.config}\" />\r\n }\r\n </li>\r\n}","import { Direction, Directions } from \"../enums\";\r\n\r\nconst HORIZONTAL_ALIASES = [Directions.HORIZONTAL, 'horizontal'],\r\n VERTICAL_ALIASES = [Directions.VERTICAL, 'vertical'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/isDirection.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isDirection = (src: Direction, expected: Direction): boolean => {\r\n if (HORIZONTAL_ALIASES.includes(expected)) {\r\n return HORIZONTAL_ALIASES.includes(src);\r\n }\r\n return VERTICAL_ALIASES.includes(src);\r\n}","/**\r\n * Simple debounce function.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/debounce.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const debounce = (cb: (...args: Array<any>) => void, debounceTime: number = 0) => {\r\n let timeout: any;\r\n const dispose = () => {\r\n if (timeout !== undefined) {\r\n clearTimeout(timeout);\r\n }\r\n }\r\n const execute = (...args: Array<any>) => {\r\n dispose();\r\n\r\n timeout = setTimeout(() => {\r\n cb(...args);\r\n }, debounceTime);\r\n };\r\n return {\r\n /**\r\n * Call handling method\r\n */\r\n execute,\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose,\r\n };\r\n};\r\n","\r\n/**\r\n * Switch css classes\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/toggleClassName.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const toggleClassName = (el: HTMLElement, className: string, removeClassName?: string) => {\r\n if (!el.classList.contains(className)) {\r\n el.classList.add(className);\r\n }\r\n if (removeClassName) {\r\n el.classList.remove(removeClassName);\r\n }\r\n};\r\n","import { ComponentRef } from \"@angular/core\";\r\nimport { BaseVirtualListItemComponent, ScrollDirection } from \"../models\";\r\nimport { Id, ISize } from \"../types\";\r\n\r\ntype TrackingPropertyId = string | number;\r\n\r\nexport interface IVirtualListItemComponent<I = any> {\r\n getBounds(): ISize;\r\n itemId: Id;\r\n id: number;\r\n item: I | null;\r\n show: () => void;\r\n hide: () => void;\r\n}\r\n\r\n/**\r\n * Tracks display items by property\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/tracker.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class Tracker<C extends BaseVirtualListItemComponent = any> {\r\n /**\r\n * display objects dictionary of indexes by id\r\n */\r\n private _displayObjectIndexMapById: { [id: number]: number } = {};\r\n\r\n set displayObjectIndexMapById(v: { [id: number]: number }) {\r\n if (this._displayObjectIndexMapById === v) {\r\n return;\r\n }\r\n\r\n this._displayObjectIndexMapById = v;\r\n }\r\n\r\n get displayObjectIndexMapById() {\r\n return this._displayObjectIndexMapById;\r\n }\r\n\r\n /**\r\n * Dictionary displayItems propertyNameId by items propertyNameId\r\n */\r\n private _trackMap: { [id: TrackingPropertyId]: number } | null = {};\r\n\r\n get trackMap() {\r\n return this._trackMap;\r\n }\r\n\r\n private _trackingPropertyName!: string;\r\n\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = v;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n this._trackingPropertyName = trackingPropertyName;\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(items: Array<any>, components: Array<ComponentRef<C>>, snapedComponent: ComponentRef<C> | null | undefined,\r\n direction: ScrollDirection): void {\r\n if (!items) {\r\n return;\r\n }\r\n\r\n const idPropName = this._trackingPropertyName, untrackedItems = [...components], isDown = direction === 0 || direction === 1;\r\n let isRegularSnapped = false;\r\n\r\n for (let i = isDown ? 0 : items.length - 1, l = isDown ? items.length : 0; isDown ? i < l : i >= l; isDown ? i++ : i--) {\r\n const item = items[i], itemTrackingProperty = item[idPropName];\r\n\r\n if (this._trackMap) {\r\n if (this._trackMap.hasOwnProperty(itemTrackingProperty)) {\r\n const diId = this._trackMap[itemTrackingProperty],\r\n compIndex = this._displayObjectIndexMapById[diId], comp = components[compIndex];\r\n\r\n const compId = comp?.instance?.id;\r\n if (comp !== undefined && compId === diId) {\r\n const indexByUntrackedItems = untrackedItems.findIndex(v => {\r\n return v.instance.id === compId;\r\n });\r\n if (indexByUntrackedItems > -1) {\r\n if (snapedComponent) {\r\n if (item['config']['snapped'] || item['config']['snappedOut']) {\r\n isRegularSnapped = true;\r\n snapedComponent.instance.item = item;\r\n snapedComponent.instance.show();\r\n }\r\n }\r\n comp.instance.item = item;\r\n\r\n if (snapedComponent) {\r\n if (item['config']['snapped'] || item['config']['snappedOut']) {\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.show();\r\n }\r\n untrackedItems.splice(indexByUntrackedItems, 1);\r\n continue;\r\n }\r\n }\r\n delete this._trackMap[itemTrackingProperty];\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n const comp = untrackedItems.shift(), item = items[i];\r\n if (comp) {\r\n if (snapedComponent) {\r\n if (item['config']['snapped'] || item['config']['snappedOut']) {\r\n isRegularSnapped = true;\r\n snapedComponent.instance.item = item;\r\n snapedComponent.instance.show();\r\n }\r\n }\r\n comp.instance.item = item;\r\n if (snapedComponent) {\r\n if (item['config']['snapped'] || item['config']['snappedOut']) {\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.show();\r\n }\r\n\r\n if (this._trackMap) {\r\n this._trackMap[itemTrackingProperty] = comp.instance.id;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (untrackedItems.length) {\r\n for (let i = 0, l = untrackedItems.length; i < l; i++) {\r\n const comp = untrackedItems[i];\r\n comp.instance.hide();\r\n }\r\n }\r\n\r\n if (!isRegularSnapped) {\r\n if (snapedComponent) {\r\n snapedComponent.instance.item = null;\r\n snapedComponent.instance.hide();\r\n }\r\n }\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C): void {\r\n if (!component) {\r\n return;\r\n }\r\n\r\n const propertyIdName = this._trackingPropertyName;\r\n\r\n if (this._trackMap && (component as any)[propertyIdName] !== undefined) {\r\n delete this._trackMap[propertyIdName];\r\n }\r\n }\r\n\r\n dispose() {\r\n this._trackMap = null;\r\n }\r\n}","export type TEventHandler = (...args: Array<any>) => void;\r\n\r\n/**\r\n * Simple event emitter\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/eventEmitter.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class EventEmitter<E = string, H = TEventHandler> {\r\n private _listeners: {\r\n [eventName: string]: Array<TEventHandler>,\r\n } = {};\r\n\r\n protected _disposed: boolean = false;\r\n\r\n constructor() { }\r\n\r\n /**\r\n * Emits the event\r\n */\r\n dispatch(event: E, ...args: Array<any>): void {\r\n const ctx = this;\r\n const listeners = this._listeners[event as string];\r\n if (Array.isArray(listeners)) {\r\n for (let i = 0, l = listeners.length; i < l; i++) {\r\n const listener = listeners[i];\r\n if (listener) {\r\n listener.apply(ctx, args);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Emits the event async\r\n */\r\n dispatchAsync(event: E, ...args: Array<any>): void {\r\n queueMicrotask(() => {\r\n if (this._disposed) {\r\n return;\r\n }\r\n this.dispatch(event, ...args);\r\n });\r\n }\r\n\r\n /**\r\n * Returns true if the event listener is already subscribed.\r\n */\r\n hasEventListener(eventName: E, handler: H): boolean {\r\n const event = eventName as string;\r\n if (this._listeners.hasOwnProperty(event)) {\r\n const listeners = this._listeners[event];\r\n const index = listeners.findIndex(v => v === handler);\r\n if (index > -1) {\r\n return true;\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Add event listener\r\n */\r\n addEventListener(eventName: E, handler: H): void {\r\n const event = eventName as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n this._listeners[event] = [];\r\n }\r\n this._listeners[event].push(handler as TEventHandler);\r\n }\r\n\r\n /**\r\n * Remove event listener\r\n */\r\n removeEventListener(eventName: E, handler: H): void {\r\n const event = eventName as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n return;\r\n }\r\n const listeners = this._listeners[event], index = listeners.findIndex(v => v === handler);\r\n if (index > -1) {\r\n listeners.splice(index, 1);\r\n\r\n if (listeners.length === 0) {\r\n delete this._listeners[event];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove all listeners\r\n */\r\n removeAllListeners() {\r\n const events = Object.keys(this._listeners);\r\n while (events.length > 0) {\r\n const event = events.pop();\r\n if (event) {\r\n const listeners = this._listeners[event];\r\n if (Array.isArray(listeners)) {\r\n while (listeners.length > 0) {\r\n const listener = listeners.pop();\r\n if (listener) {\r\n this.removeEventListener(event as E, listener as H);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose() {\r\n this._disposed = true;\r\n\r\n this.removeAllListeners();\r\n }\r\n}","import { ScrollDirection } from \"../models\";\r\nimport { debounce } from \"./debounce\";\r\nimport { EventEmitter } from \"./eventEmitter\";\r\n\r\nexport class CMap<K = string, V = any> {\r\n private _dict: { [k: string | number]: V } = {};\r\n\r\n constructor(dict?: CMap<K, V>) {\r\n if (dict) {\r\n this._dict = { ...dict._dict };\r\n }\r\n }\r\n\r\n get(key: K) {\r\n const k = String(key);\r\n return this._dict[k];\r\n }\r\n set(key: K, value: V) {\r\n const k = String(key);\r\n this._dict[k] = value;\r\n return this;\r\n }\r\n has(key: K) {\r\n return this._dict.hasOwnProperty(String(key));\r\n }\r\n delete(key: K) {\r\n const k = String(key);\r\n delete this._dict[k];\r\n }\r\n clear() {\r\n this._dict = {};\r\n }\r\n}\r\n\r\nexport interface ICacheMap<I = any, B = any> {\r\n set: (id: I, bounds: B) => CMap<I, B>;\r\n has: (id: I) => boolean;\r\n get: (id: I) => B | undefined;\r\n}\r\n\r\nexport const CACHE_BOX_CHANGE_EVENT_NAME = 'change';\r\n\r\ntype CacheMapEvents = typeof CACHE_BOX_CHANGE_EVENT_NAME;\r\n\r\ntype OnChangeEventListener = (version: number) => void;\r\n\r\ntype CacheMapListeners = OnChangeEventListener;\r\n\r\nconst MAX_SCROLL_DIRECTION_POOL = 50, CLEAR_SCROLL_DIRECTION_TO = 10,\r\n DIR_BACK = '-1', DIR_NONE = '0', DIR_FORWARD = '1';\r\n\r\n/**\r\n * Cache map.\r\n * Emits a change event on each mutation.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/cacheMap.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class CacheMap<I = string | number, B = any, E = CacheMapEvents, L = CacheMapListeners> extends EventEmitter<E, L> implements ICacheMap {\r\n protected _map = new CMap<I, B>();\r\n\r\n protected _snapshot = new CMap<I, B>();\r\n\r\n protected _version: number = 0;\r\n\r\n protected _previousVersion = this._version;\r\n\r\n protected _lifeCircleTimeout: any;\r\n\r\n protected _delta: number = 0;\r\n\r\n get delta() {\r\n return this._delta;\r\n }\r\n\r\n protected _deltaDirection: ScrollDirection = 0;\r\n set deltaDirection(v: ScrollDirection) {\r\n this._deltaDirection = v;\r\n\r\n this._scrollDirection = this.calcScrollDirection(v);\r\n }\r\n get deltaDirection() {\r\n return this._deltaDirection;\r\n }\r\n\r\n private _scrollDirectionCache: Array<ScrollDirection> = [];\r\n private _scrollDirection: ScrollDirection = 0;\r\n get scrollDirection() {\r\n return this._scrollDirection;\r\n }\r\n\r\n get version() {\r\n return this._version;\r\n }\r\n\r\n private _clearScrollDirectionDebounce = debounce(() => {\r\n while (this._scrollDirectionCache.length > CLEAR_SCROLL_DIRECTION_TO) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n }, 10);\r\n\r\n constructor() {\r\n super();\r\n this.lifeCircle();\r\n }\r\n\r\n protected changesDetected() {\r\n return this._version !== this._previousVersion;\r\n }\r\n\r\n protected stopLifeCircle() {\r\n clearTimeout(this._lifeCircleTimeout);\r\n }\r\n\r\n protected nextTick(cb: () => void) {\r\n if (this._disposed) {\r\n return;\r\n }\r\n\r\n this._lifeCircleTimeout = setTimeout(() => {\r\n cb();\r\n });\r\n return this._lifeCircleTimeout;\r\n }\r\n\r\n protected lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n protected lifeCircleDo() {\r\n this._previousVersion = this._version;\r\n\r\n this.nextTick(() => {\r\n this.lifeCircle();\r\n });\r\n }\r\n\r\n clearScrollDirectionCache() {\r\n this._clearScrollDirectionDebounce.execute();\r\n }\r\n\r\n private calcScrollDirection(v: ScrollDirection): ScrollDirection {\r\n while (this._scrollDirectionCache.length >= MAX_SCROLL_DIRECTION_POOL) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n this._scrollDirectionCache.push(v);\r\n const dict: { [x: string]: number } = { [DIR_BACK]: 0, [DIR_NONE]: 0, [DIR_FORWARD]: 0 };\r\n for (let i = 0, l = this._scrollDirectionCache.length, li = l - 1; i < l; i++) {\r\n const dir = String(this._scrollDirectionCache[i]);\r\n dict[dir] += 1;\r\n if (i === li) {\r\n for (let d in dict) {\r\n if (d === String(v)) {\r\n continue;\r\n }\r\n dict[d] -= 1;\r\n }\r\n }\r\n }\r\n\r\n if (dict[DIR_BACK] > dict[DIR_NONE] && dict[DIR_BACK] > dict[DIR_FORWARD]) {\r\n return -1;\r\n } else if (dict[DIR_FORWARD] > dict[DIR_BACK] && dict[DIR_FORWARD] > dict[DIR_NONE]) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n protected bumpVersion() {\r\n if (this.changesDetected()) {\r\n return;\r\n }\r\n const v = this._version === Number.MAX_SAFE_INTEGER ? 0 : this._version + 1;\r\n this._version = v;\r\n }\r\n\r\n protected fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(CACHE_BOX_CHANGE_EVENT_NAME as E, this.version);\r\n }\r\n }\r\n\r\n set(id: I, bounds: B): CMap<I, B> {\r\n if (this._map.has(id)) {\r\n const b: any = this._map.get(id), bb: any = bounds;\r\n if (b.width === bb.width && b.height === bb.height) {\r\n return this._map;\r\n }\r\n return this._map;\r\n }\r\n\r\n const v = this._map.set(id, bounds);\r\n\r\n this.bumpVersion();\r\n\r\n return v;\r\n }\r\n\r\n has(id: I): boolean {\r\n return this._map.has(id);\r\n }\r\n\r\n get(id: I): B | undefined {\r\n return this._map.get(id);\r\n }\r\n\r\n snapshot() {\r\n this._snapshot = new CMap(this._map);\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.stopLifeCircle();\r\n\r\n this._snapshot.clear();\r\n\r\n this._map.clear();\r\n }\r\n}","import { ComponentRef } from \"@angular/core\";\r\nimport { IRenderVirtualListCollection, } from \"../models/render-collection.model\";\r\nimport { IRenderVirtualListItem } from \"../models/render-item.model\";\r\nimport { Id } from \"../types/id\";\r\nimport { CacheMap, CMap } from \"./cacheMap\";\r\nimport { Tracker } from \"./tracker\";\r\nimport { ISize } from \"../types\";\r\nimport { HEIGHT_PROP_NAME, WIDTH_PROP_NAME, X_PROP_NAME, Y_PROP_NAME } from \"../const\";\r\nimport { BaseVirtualListItemComponent, IVirtualListStickyMap } from \"../models\";\r\n\r\nexport const TRACK_BOX_CHANGE_EVENT_NAME = 'change';\r\n\r\nexport interface IMetrics {\r\n delta: number;\r\n normalizedItemWidth: number;\r\n normalizedItemHeight: number;\r\n width: number;\r\n height: number;\r\n dynamicSize: boolean;\r\n itemSize: number;\r\n itemsFromStartToScrollEnd: number;\r\n itemsFromStartToDisplayEnd: number;\r\n itemsOnDisplayWeight: number;\r\n itemsOnDisplayLength: number;\r\n isVertical: boolean;\r\n leftHiddenItemsWeight: number;\r\n leftItemLength: number;\r\n leftItemsWeight: number;\r\n renderItems: number;\r\n rightItemLength: number;\r\n rightItemsWeight: number;\r\n scrollSize: number;\r\n leftSizeOfAddedItems: number;\r\n sizeProperty: typeof HEIGHT_PROP_NAME | typeof WIDTH_PROP_NAME;\r\n snap: boolean;\r\n snippedPos: number;\r\n startIndex: number;\r\n startPosition: number;\r\n totalItemsToDisplayEndWeight: number;\r\n totalLength: number;\r\n totalSize: number;\r\n typicalItemSize: number;\r\n isFromItemIdFound: boolean;\r\n}\r\n\r\nexport interface IRecalculateMetricsOptions<I extends { id: Id }, C extends Array<I>> {\r\n bounds: ISize;\r\n collection: C;\r\n isVertical: boolean;\r\n itemSize: number;\r\n itemsOffset: number;\r\n dynamicSize: boolean;\r\n scrollSize: number;\r\n snap: boolean;\r\n enabledBufferOptimization: boolean;\r\n fromItemId?: Id;\r\n previousTotalSize: number;\r\n crudDetected: boolean;\r\n deletedItemsMap: { [index: number]: ISize; };\r\n}\r\n\r\nexport interface IGetItemPositionOptions<I extends { id: Id }, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport interface IUpdateCollectionOptions<I extends { id: Id }, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'collection' | 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport type CacheMapEvents = typeof TRACK_BOX_CHANGE_EVENT_NAME;\r\n\r\nexport type OnChangeEventListener = (version: number) => void;\r\n\r\nexport type CacheMapListeners = OnChangeEventListener;\r\n\r\nexport enum ItemDisplayMethods {\r\n CREATE,\r\n UPDATE,\r\n DELETE,\r\n NOT_CHANGED,\r\n}\r\n\r\nexport interface IUpdateCollectionReturns {\r\n displayItems: IRenderVirtualListCollection;\r\n totalSize: number;\r\n delta: number;\r\n crudDetected: boolean;\r\n}\r\n\r\n/**\r\n * An object that performs tracking, calculations and caching.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/trackBox.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class TrackBox<C extends BaseVirtualListItemComponent = any>\r\n extends CacheMap<Id, ISize & { method?: ItemDisplayMethods }, CacheMapEvents, CacheMapListeners> {\r\n\r\n protected _tracker!: Tracker<C>;\r\n\r\n protected _items: IRenderVirtualListCollection | null | undefined;\r\n\r\n set items(v: IRenderVirtualListCollection | null | undefined) {\r\n if (this._items === v) {\r\n return;\r\n }\r\n\r\n this._items = v;\r\n }\r\n\r\n protected _displayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set displayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._displayComponents === v) {\r\n return;\r\n }\r\n\r\n this._displayComponents = v;\r\n }\r\n\r\n protected _snapedDisplayComponent: ComponentRef<C> | null | undefined;\r\n\r\n set snapedDisplayComponent(v: ComponentRef<C> | null | undefined) {\r\n if (this._snapedDisplayComponent === v) {\r\n return;\r\n }\r\n\r\n this._snapedDisplayComponent = v;\r\n }\r\n\r\n protected _isSnappingMethodAdvanced: boolean = false;\r\n\r\n set isSnappingMethodAdvanced(v: boolean) {\r\n if (this._isSnappingMethodAdvanced === v) {\r\n return;\r\n }\r\n\r\n this._isSnappingMethodAdvanced = v;\r\n }\r\n\r\n /**\r\n * Set the trackBy property\r\n */\r\n set trackingPropertyName(v: string) {\r\n this._tracker.trackingPropertyName = v;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n super();\r\n\r\n this._tracker = new Tracker(trackingPropertyName);\r\n }\r\n\r\n override set(id: Id, bounds: ISize): CMap<Id, ISize> {\r\n if (this._map.has(id)) {\r\n const b = this._map.get(id);\r\n if (b?.width === bounds.width && b.height === bounds.height) {\r\n return this._map;\r\n }\r\n }\r\n\r\n const v = this._map.set(id, bounds);\r\n\r\n this.bumpVersion();\r\n return v;\r\n }\r\n\r\n protected _previousCollection: Array<{ id: Id; }> | null | undefined;\r\n\r\n protected _deletedItemsMap: { [index: number]: ISize } = {};\r\n\r\n protected _crudDetected = false;\r\n get crudDetected() { return this._crudDetected; }\r\n\r\n protected override fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(TRACK_BOX_CHANGE_EVENT_NAME, this._version);\r\n }\r\n }\r\n\r\n protected _previousTotalSize = 0;\r\n\r\n protected _scrollDelta: number = 0;\r\n get scrollDelta() { return this._scrollDelta; }\r\n\r\n isAdaptiveBuffer = true;\r\n\r\n protected _maxBufferSize = 200;\r\n\r\n protected _maxBufferSizeSequenceLength = 100;\r\n protected _bufferSizeSequence: Array<number> = [];\r\n protected _bufferSize: number = 0;\r\n get bufferSize() { return this._bufferSize; }\r\n\r\n protected _defaultBufferSize: number = 0;\r\n\r\n protected override lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n /**\r\n * Scans the collection for deleted items and flushes the deleted item cache.\r\n */\r\n resetCollection<I extends { id: Id; }, C extends Array<I>>(currentCollection: C | null | undefined, itemSize: number): void {\r\n if (currentCollection !== undefined && currentCollection !== null && currentCollection === this._previousCollection) {\r\n console.warn('Attention! The collection must be immutable.');\r\n return;\r\n }\r\n\r\n this.updateCache(this._previousCollection, currentCollection, itemSize);\r\n\r\n this._previousCollection = currentCollection;\r\n }\r\n\r\n /**\r\n * Update the cache of items from the list\r\n */\r\n protected updateCache<I extends { id: Id; }, C extends Array<I>>(previousCollection: C | null | undefined, currentCollection: C | null | undefined,\r\n itemSize: number): void {\r\n let crudDetected = false;\r\n\r\n if (!currentCollection || currentCollection.length === 0) {\r\n if (previousCollection) {\r\n // deleted\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item.id;\r\n crudDetected = true;\r\n if (this._map.has(id)) {\r\n this._map.delete(id);\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n if (!previousCollection || previousCollection.length === 0) {\r\n if (currentCollection) {\r\n // added\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n crudDetected = true;\r\n const item = currentCollection[i], id = item.id;\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n return;\r\n }\r\n const collectionDict: { [id: Id]: I } = {};\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i];\r\n if (item) {\r\n collectionDict[item.id] = item;\r\n }\r\n }\r\n const notChangedMap: { [id: Id]: I } = {}, deletedMap: { [id: Id]: I } = {}, deletedItemsMap: { [index: number]: ISize } = {}, updatedMap: { [id: Id]: I } = {};\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item.id;\r\n if (item) {\r\n if (collectionDict.hasOwnProperty(id)) {\r\n if (item === collectionDict[id]) {\r\n // not changed\r\n notChangedMap[item.id] = item;\r\n this._map.set(id, { ...(this._map.get(id) || { width: itemSize, height: itemSize }), method: ItemDisplayMethods.NOT_CHANGED });\r\n continue;\r\n } else {\r\n // updated\r\n crudDetected = true;\r\n updatedMap[item.id] = item;\r\n this._map.set(id, { ...(this._map.get(id) || { width: itemSize, height: itemSize }), method: ItemDisplayMethods.UPDATE });\r\n continue;\r\n }\r\n }\r\n\r\n // deleted\r\n crudDetected = true;\r\n deletedMap[item.id] = item;\r\n deletedItemsMap[i] = this._map.get(item.id);\r\n this._map.delete(id);\r\n }\r\n }\r\n\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i], id = item.id;\r\n if (item && !deletedMap.hasOwnProperty(id) && !updatedMap.hasOwnProperty(id) && !notChangedMap.hasOwnProperty(id)) {\r\n // added\r\n crudDetected = true;\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n this._crudDetected = crudDetected;\r\n this._deletedItemsMap = deletedItemsMap;\r\n }\r\n\r\n /**\r\n * Finds the position of a collection element by the given Id\r\n */\r\n getItemPosition<I extends { id: Id }, C extends Array<I>>(id: Id, stickyMap: IVirtualListStickyMap,\r\n options: IGetItemPositionOptions<I, C>): number {\r\n const opt = { fromItemId: id, stickyMap, ...options };\r\n this._defaultBufferSize = opt.itemsOffset;\r\n const { scrollSize, isFromItemIdFound } = this.recalculateMetrics({\r\n ...opt,\r\n dynamicSize: this._crudDetected || opt.dynamicSize,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap: this._deletedItemsMap,\r\n });\r\n return isFromItemIdFound ? scrollSize : -1;\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n updateCollection<I extends { id: Id }, C extends Array<I>>(items: C, stickyMap: IVirtualListStickyMap,\r\n options: IUpdateCollectionOptions<I, C>): IUpdateCollectionReturns {\r\n const opt = { stickyMap, ...options }, crudDetected = this._crudDetected, deletedItemsMap = this._deletedItemsMap;\r\n if (opt.dynamicSize) {\r\n this.cacheElements();\r\n }\r\n this._defaultBufferSize = opt.itemsOffset;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n this._delta += metrics.delta;\r\n\r\n this.updateAdaptiveBufferParams(metrics, items.length);\r\n\r\n this._previousTotalSize = metrics.totalSize;\r\n\r\n this._deletedItemsMap = {};\r\n\r\n this._crudDetected = false;\r\n\r\n if (opt.dynamicSize) {\r\n this.snapshot();\r\n }\r\n\r\n const displayItems = this.generateDisplayCollection(items, stickyMap, { ...metrics, });\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n /**\r\n * Finds the closest element in the collection by scrollSize\r\n */\r\n getNearestItem<I extends { id: Id }, C extends Array<I>>(scrollSize: number, items: C, itemSize: number, isVertical: boolean): I | undefined {\r\n return this.getElementFromStart(scrollSize, items, this._map, itemSize, isVertical);\r\n }\r\n\r\n protected _previousScrollSize = 0;\r\n\r\n protected updateAdaptiveBufferParams(metrics: IMetrics, totalItemsLength: number) {\r\n const scrollSize = metrics.scrollSize + this._delta, delta = Math.abs(this._previousScrollSize - scrollSize);\r\n this._previousScrollSize = scrollSize;\r\n const bufferSize = Math.min(Math.floor(delta / metrics.typicalItemSize) * 5, totalItemsLength),\r\n actualBufferSize = bufferSize < this._defaultBufferSize ? this._defaultBufferSize : bufferSize,\r\n buff = actualBufferSize > this._maxBufferSize ? this._maxBufferSize : actualBufferSize;\r\n\r\n this._bufferSizeSequence.push(buff);\r\n while (this._bufferSizeSequence.length >= this._maxBufferSizeSequenceLength) {\r\n this._bufferSizeSequence.shift();\r\n }\r\n const l = this._bufferSizeSequence.length;\r\n let buffer = 0;\r\n for (let i = 0; i < l; i++) {\r\n buffer += this._bufferSizeSequence[i];\r\n }\r\n this._bufferSize = Math.ceil(buffer / l);\r\n }\r\n\r\n /**\r\n * Calculates the position of an element based on the given scrollSize\r\n */\r\n protected getElementFromStart<I extends { id: Id }, C extends Array<I>>(scrollSize: number, collection: C, map: CMap<Id, ISize>, typicalItemSize: number,\r\n isVertical: boolean): I | undefined {\r\n const sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;\r\n let offset = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const item = collection[i];\r\n let itemSize = 0;\r\n if (map.has(item.id)) {\r\n const bounds = map.get(item.id);\r\n itemSize = bounds ? bounds[sizeProperty] : typicalItemSize;\r\n } else {\r\n itemSize = typicalItemSize;\r\n }\r\n if (offset > scrollSize) {\r\n return item;\r\n }\r\n offset += itemSize;\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Calculates the entry into the overscroll area and returns the number of overscroll elements\r\n */\r\n protected getElementNumToEnd<I extends { id: Id }, C extends Array<I>>(i: number, collection: C, map: CMap<Id, ISize>, typicalItemSize: number,\r\n size: number, isVertical: boolean, indexOffset: number = 0): { num: number, offset: number } {\r\n const sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;\r\n let offset = 0, num = 0;\r\n for (let j = collection.length - indexOffset - 1; j >= i; j--) {\r\n const item = collection[j];\r\n let itemSize = 0;\r\n if (map.has(item.id)) {\r\n const bounds = map.get(item.id);\r\n itemSize = bounds ? bounds[sizeProperty] : typicalItemSize;\r\n } else {\r\n itemSize = typicalItemSize;\r\n }\r\n offset += itemSize;\r\n num++;\r\n if (offset > size) {\r\n return { num: 0, offset };\r\n }\r\n }\r\n return { num, offset };\r\n }\r\n\r\n /**\r\n * Calculates list metrics\r\n */\r\n protected recalculateMetrics<I extends { id: Id }, C extends Array<I>>(options: IRecalculateMetricsOptions<I, C>): IMetrics {\r\n const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize,\r\n itemsOffset, scrollSize, snap, stickyMap, enabledBufferOptimization,\r\n previousTotalSize, crudDetected, deletedItemsMap } = options as IRecalculateMetricsOptions<I, C> & {\r\n stickyMap: IVirtualListStickyMap,\r\n };\r\n\r\n const bufferSize = Math.max(itemsOffset, this._bufferSize);\r\n\r\n const { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME, size = isVertical ? height : width,\r\n totalLength = collection.length, typicalItemSize = itemSize,\r\n w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height,\r\n map = this._map, snapshot = this._snapshot,\r\n checkOverscrollItemsLimit = Math.ceil(size / typicalItemSize),\r\n snippedPos = Math.floor(scrollSize),\r\n leftItemsWeights: Array<number> = [],\r\n isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)\r\n || (typeof fromItemId === 'string' && fromItemId > '-1');\r\n\r\n let leftItemsOffset = 0, rightItemsOffset = 0;\r\n if (enabledBufferOptimization) {\r\n switch (this.scrollDirection) {\r\n case 1: {\r\n leftItemsOffset = 0;\r\n rightItemsOffset = bufferSize;\r\n break;\r\n }\r\n case -1: {\r\n leftItemsOffset = bufferSize;\r\n rightItemsOffset = 0;\r\n break;\r\n }\r\n case 0:\r\n default: {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n }\r\n } else {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n\r\n let itemsFromStartToScrollEnd: number = -1, itemsFromDisplayEndToOffsetEnd = 0, itemsFromStartToDisplayEnd = -1,\r\n leftItemLength = 0, rightItemLength = 0,\r\n leftItemsWeight = 0, rightItemsWeight = 0,\r\n leftHiddenItemsWeight = 0,\r\n totalItemsToDisplayEndWeight = 0,\r\n leftSizeOfAddedItems = 0,\r\n leftSizeOfUpdatedItems = 0,\r\n leftSizeOfDeletedItems = 0,\r\n itemById: I | undefined = undefined,\r\n itemByIdPos: number = 0,\r\n targetDisplayItemIndex: number = -1,\r\n isTargetInOverscroll: boolean = false,\r\n actualScrollSize = itemByIdPos,\r\n totalSize = 0,\r\n startIndex: number,\r\n isFromItemIdFound = false;\r\n\r\n // If the list is dynamic or there are new elements in the collection, then it switches to the long algorithm.\r\n if (dynamicSize) {\r\n let y = 0, stickyCollectionItem: I | undefined = undefined, stickyComponentSize = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const ii = i + 1, collectionItem = collection[i], id = collectionItem.id;\r\n\r\n let componentSize = 0, componentSizeDelta = 0, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const bounds = map.get(id) || { width: typicalItemSize, height: typicalItemSize };\r\n componentSize = bounds[sizeProperty];\r\n itemDisplayMethod = bounds?.method ?? ItemDisplayMethods.UPDATE;\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.UPDATE: {\r\n const snapshotBounds = snapshot.get(id);\r\n const componentSnapshotSize = componentSize - (snapshotBounds ? snapshotBounds[sizeProperty] : typicalItemSize);\r\n componentSizeDelta = componentSnapshotSize;\r\n map.set(id, { ...bounds, method: ItemDisplayMethods.NOT_CHANGED });\r\n break;\r\n }\r\n case ItemDisplayMethods.CREATE: {\r\n componentSizeDelta = typicalItemSize;\r\n map.set(id, { ...bounds, method: ItemDisplayMethods.NOT_CHANGED });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const bounds = deletedItemsMap[i], size = bounds?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n totalSize += componentSize;\r\n\r\n if (isFromId) {\r\n if (itemById === undefined) {\r\n if (id !== fromItemId && stickyMap && stickyMap[id] === 1) {\r\n stickyComponentSize = componentSize;\r\n stickyCollectionItem = collectionItem;\r\n }\r\n\r\n if (id === fromItemId) {\r\n isFromItemIdFound = true;\r\n targetDisplayItemIndex = i;\r\n if (stickyCollectionItem && stickyMap) {\r\n const { num } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical);\r\n if (num > 0) {\r\n isTargetInOverscroll = true;\r\n y -= size - componentSize;\r\n } else {\r\n if (stickyMap && !stickyMap[collectionItem.id] && y >= scrollSize && y < scrollSize + stickyComponentSize) {\r\n const snappedY = scrollSize - stickyComponentSize;\r\n leftHiddenItemsWeight -= (snappedY - y);\r\n y = snappedY;\r\n } else {\r\n y -= stickyComponentSize;\r\n leftHiddenItemsWeight -= stickyComponentSize;\r\n }\r\n }\r\n }\r\n itemById = collectionItem;\r\n itemByIdPos = y;\r\n } else {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n }\r\n } else if (y <= scrollSize - componentSize) {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === undefined || y < itemByIdPos + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n } else if (y <= scrollSize + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n\r\n if (y <= scrollSize - componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfAddedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE: {\r\n leftSizeOfUpdatedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSizeDelta;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n if (i < itemsFromDisplayEndToOffsetEnd) {\r\n rightItemsWeight += componentSize;\r\n }\r\n }\r\n\r\n y += componentSize;\r\n }\r\n\r\n if (isTargetInOverscroll) {\r\n const { num } = this.getElementNumToEnd(\r\n collection.length - (checkOverscrollItemsLimit < 0 ? 0 : collection.length - checkOverscrollItemsLimit),\r\n collection, map, typicalItemSize, size, isVertical, collection.length - (collection.length - (targetDisplayItemIndex + 1)),\r\n );\r\n if (num > 0) {\r\n itemsFromStartToScrollEnd -= num;\r\n }\r\n }\r\n\r\n if (itemsFromStartToScrollEnd <= -1) {\r\n itemsFromStartToScrollEnd = 0;\r\n }\r\n if (itemsFromStartToDisplayEnd <= -1) {\r\n itemsFromStartToDisplayEnd = 0;\r\n }\r\n actualScrollSize = isFromId ? itemByIdPos : scrollSize;\r\n\r\n leftItemsWeights.splice(0, leftItemsWeights.length - leftItemsOffset);\r\n leftItemsWeights.forEach(v => {\r\n leftItemsWeight += v;\r\n });\r\n\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, leftItemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + rightItemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : rightItemsOffset;\r\n\r\n } else\r\n // Buffer optimization does not work on fast linear algorithm\r\n {\r\n if (crudDetected) {\r\n let y = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const collectionItem = collection[i], id = collectionItem.id;\r\n let componentSize = typicalItemSize, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const bounds = map.get(id)!;\r\n itemDisplayMethod = bounds?.method ?? ItemDisplayMethods.UPDATE;\r\n if (itemDisplayMethod === ItemDisplayMethods.CREATE) {\r\n map.set(id, { ...bounds, method: ItemDisplayMethods.NOT_CHANGED });\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const bounds = deletedItemsMap[i], size = bounds?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n if (y < scrollSize - componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfUpdatedItems += componentSize;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE: {\r\n leftSizeOfUpdatedItems += componentSize;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSize;\r\n break;\r\n }\r\n }\r\n }\r\n y += componentSize;\r\n }\r\n }\r\n itemsFromStartToScrollEnd = Math.floor(scrollSize / typicalItemSize);\r\n itemsFromStartToDisplayEnd = Math.ceil((scrollSize + size) / typicalItemSize);\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, bufferSize);\r\n rightItemLength = itemsFromStartToDisplayEnd + bufferSize > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : bufferSize;\r\n leftItemsWeight = leftItemLength * typicalItemSize;\r\n rightItemsWeight = rightItemLength * typicalItemSize;\r\n leftHiddenItemsWeight = itemsFromStartToScrollEnd * typicalItemSize;\r\n totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * typicalItemSize;\r\n totalSize = totalLength * typicalItemSize;\r\n\r\n const k = totalSize !== 0 ? previousTotalSize / totalSize : 0;\r\n actualScrollSize = scrollSize * k;\r\n }\r\n startIndex = Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0);\r\n\r\n const itemsOnDisplayWeight = totalItemsToDisplayEndWeight - leftItemsWeight,\r\n itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd,\r\n startPosition = leftHiddenItemsWeight - leftItemsWeight,\r\n renderItems = itemsOnDisplayLength + leftItemLength + rightItemLength,\r\n delta = leftSizeOfUpdatedItems + leftSizeOfAddedItems - leftSizeOfDeletedItems;\r\n\r\n const metrics: IMetrics = {\r\n delta,\r\n normalizedItemWidth: w,\r\n normalizedItemHeight: h,\r\n width,\r\n height,\r\n dynamicSize,\r\n itemSize,\r\n itemsFromStartToScrollEnd,\r\n itemsFromStartToDisplayEnd,\r\n itemsOnDisplayWeight,\r\n itemsOnDisplayLength,\r\n isVertical,\r\n leftHiddenItemsWeight,\r\n leftItemLength,\r\n leftItemsWeight,\r\n renderItems,\r\n rightItemLength,\r\n rightItemsWeight,\r\n scrollSize: actualScrollSize,\r\n leftSizeOfAddedItems,\r\n sizeProperty,\r\n snap,\r\n snippedPos,\r\n startIndex,\r\n startPosition,\r\n totalItemsToDisplayEndWeight,\r\n totalLength,\r\n totalSize,\r\n typicalItemSize,\r\n isFromItemIdFound,\r\n };\r\n\r\n return metrics;\r\n }\r\n\r\n clearDeltaDirection() {\r\n this.clearScrollDirectionCache();\r\n }\r\n\r\n clearDelta(clearDirectionDetector = false): void {\r\n this._delta = 0;\r\n\r\n if (clearDirectionDetector) {\r\n this.clearScrollDirectionCache();\r\n }\r\n }\r\n\r\n changes(): void {\r\n this.bumpVersion();\r\n }\r\n\r\n protected generateDisplayCollection<I extends { id: Id }, C extends Array<I>>(items: C, stickyMap: IVirtualListStickyMap,\r\n metrics: IMetrics): IRenderVirtualListCollection {\r\n const {\r\n width,\r\n height,\r\n normalizedItemWidth,\r\n normalizedItemHeight,\r\n dynamicSize,\r\n itemsOnDisplayLength,\r\n itemsFromStartToScrollEnd,\r\n isVertical,\r\n renderItems: renderItemsLength,\r\n scrollSize,\r\n sizeProperty,\r\n snap,\r\n snippedPos,\r\n startPosition,\r\n totalLength,\r\n startIndex,\r\n typicalItemSize,\r\n } = metrics,\r\n displayItems: IRenderVirtualListCollection = [];\r\n if (items.length) {\r\n const actualSnippedPosition = snippedPos, isSnappingMethodAdvanced = this.isSnappingMethodAdvanced,\r\n boundsSize = isVertical ? height : width, actualEndSnippedPosition = boundsSize;\r\n let pos = startPosition,\r\n renderItems = renderItemsLength,\r\n stickyItem: IRenderVirtualListItem | undefined, nextSticky: IRenderVirtualListItem | undefined, stickyItemIndex = -1,\r\n stickyItemSize = 0, endStickyItem: IRenderVirtualListItem | undefined, nextEndSticky: IRenderVirtualListItem | undefined,\r\n endStickyItemIndex = -1, endStickyItemSize = 0;\r\n\r\n if (snap) {\r\n for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? itemsFromStartToScrollEnd : 0, totalLength - 1); i >= 0; i--) {\r\n if (!items[i]) {\r\n continue;\r\n }\r\n const id = items[i].id, sticky = stickyMap[id], size = dynamicSize ? this.get(id)?.[sizeProperty] || typicalItemSize : typicalItemSize;\r\n if (sticky === 1) {\r\n const measures = {\r\n x: isVertical ? 0 : actualSnippedPosition,\r\n y: isVertical ? actualSnippedPosition : 0,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n delta: 0,\r\n }, config = {\r\n isVertical,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = items[i];\r\n\r\n stickyItem = { id, measures, data: itemData, config };\r\n stickyItemIndex = i;\r\n stickyItemSize = size;\r\n\r\n displayItems.push(stickyItem);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (snap) {\r\n const startIndex = itemsFromStartToScrollEnd + itemsOnDisplayLength - 1;\r\n for (let i = Math.min(startIndex, totalLength > 0 ? totalLength - 1 : 0), l = totalLength; i < l; i++) {\r\n const id = items[i].id, sticky = stickyMap[id], size = dynamicSize\r\n ? this.get(id)?.[sizeProperty] || typicalItemSize\r\n : typicalItemSize;\r\n if (sticky === 2) {\r\n const w = isVertical ? normalizedItemWidth : size, h = isVertical ? size : normalizedItemHeight, measures = {\r\n x: isVertical ? 0 : actualEndSnippedPosition - w,\r\n y: isVertical ? actualEndSnippedPosition - h : 0,\r\n width: w,\r\n height: h,\r\n delta: 0,\r\n }, config = {\r\n isVertical,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = items[i];\r\n\r\n endStickyItem = { id, measures, data: itemData, config };\r\n endStickyItemIndex = i;\r\n endStickyItemSize = size;\r\n\r\n displayItems.push(endStickyItem);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let i = startIndex;\r\n\r\n while (renderItems > 0) {\r\n if (i >= totalLength) {\r\n break;\r\n }\r\n\r\n const id = items[i].id, size = dynamicSize ? this.get(id)?.[sizeProperty] || typicalItemSize : typicalItemSize;\r\n\r\n if (id !== stickyItem?.id && id !== endStickyItem?.id) {\r\n const snapped = snap && (stickyMap[id] === 1 && pos <= scrollSize || stickyMap[id] === 2 && pos >= scrollSize + boundsSize - size),\r\n measures = {\r\n x: isVertical ? stickyMap[id] === 1 ? 0 : boundsSize - size : pos,\r\n y: isVertical ? pos : stickyMap[id] === 2 ? boundsSize - size : 0,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n delta: 0,\r\n }, config = {\r\n isVertical,\r\n sticky: stickyMap[id],\r\n snap,\r\n snapped: false,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n zIndex: '0',\r\n };\r\n\r\n if (snapped) {\r\n config.zIndex = '2';\r\n }\r\n\r\n const itemData: I = items[i];\r\n\r\n const item: IRenderVirtualListItem = { id, measures, data: itemData, config };\r\n if (!nextSticky && stickyItemIndex < i && stickyMap[id] === 1 && (pos <= scrollSize + size + stickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualSnippedPosition : pos;\r\n item.measures.y = isVertical ? snapped ? actualSnippedPosition : pos : 0;\r\n nextSticky = item;\r\n nextSticky.config.snapped = snapped;\r\n nextSticky.measures.delta = isVertical ? (item.measures.y - scrollSize) : (item.measures.x - scrollSize);\r\n nextSticky.config.zIndex = '3';\r\n } else if (!nextEndSticky && endStickyItemIndex > i && stickyMap[id] === 2 && (pos >= scrollSize + boundsSize - size - endStickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualEndSnippedPosition - size : pos;\r\n item.measures.y = isVertical ? snapped ? actualEndSnippedPosition - size : pos : 0;\r\n nextEndSticky = item;\r\n nextEndSticky.config.zIndex = '3';\r\n nextEndSticky.config.snapped = snapped;\r\n nextEndSticky.measures.delta = isVertical ? (item.measures.y - scrollSize) : (item.measures.x - scrollSize);\r\n }\r\n\r\n displayItems.push(item);\r\n }\r\n\r\n renderItems -= 1;\r\n pos += size;\r\n i++;\r\n }\r\n\r\n const axis = isVertical ? Y_PROP_NAME : X_PROP_NAME;\r\n\r\n if (nextSticky && stickyItem && nextSticky.measures[axis] <= scrollSize + stickyItemSize) {\r\n if (nextSticky.measures[axis] > scrollSize) {\r\n stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItemSize;\r\n stickyItem.config.snapped = nextSticky.config.snapped = false;\r\n stickyItem.config.snappedOut = true;\r\n stickyItem.config.sticky = 1;\r\n stickyItem.measures.delta = isVertical ? stickyItem.measures.y - scrollSize : stickyItem.measures.x - scrollSize;\r\n } else {\r\n nextSticky.config.snapped = true;\r\n nextSticky.measures.delta = isVertical ? nextSticky.measures.y - scrollSize : nextSticky.measures.x - scrollSize;\r\n }\r\n }\r\n\r\n if (nextEndSticky && endStickyItem && nextEndSticky.measures[axis] >= scrollSize + boundsSize - endStickyItemSize - nextEndSticky.measures[sizeProperty]) {\r\n if (nextEndSticky.measures[axis] < scrollSize + boundsSize - endStickyItemSize) {\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n endStickyItem.config.snapped = nextEndSticky.config.snapped = false;\r\n endStickyItem.config.snappedOut = true;\r\n endStickyItem.config.sticky = 2;\r\n endStickyItem.measures.delta = isVertical ? endStickyItem.measures.y - scrollSize : endStickyItem.measures.x - scrollSize;\r\n } else {\r\n nextEndSticky.config.snapped = true;\r\n nextEndSticky.measures.delta = isVertical ? nextEndSticky.measures.y - scrollSize : nextEndSticky.measures.x - scrollSize;\r\n }\r\n }\r\n }\r\n return displayItems;\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(): void {\r\n if (!this._items || !this._displayComponents) {\r\n return;\r\n }\r\n\r\n this._tracker.track(this._items, this._displayComponents, this._snapedDisplayComponent, this.scrollDirection);\r\n }\r\n\r\n setDisplayObjectIndexMapById(v: { [id: number]: number }): void {\r\n this._tracker.displayObjectIndexMapById = v;\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C | undefined) {\r\n this._tracker.untrackComponentByIdProperty(component);\r\n }\r\n\r\n getItemBounds(id: Id): ISize | undefined {\r\n if (this.has(id)) {\r\n return this.get(id);\r\n }\r\n return undefined;\r\n }\r\n\r\n protected cacheElements(): void {\r\n if (!this._displayComponents) {\r\n return;\r\n }\r\n\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const component = this._displayComponents[i], itemId = component.instance.itemId;\r\n if (itemId === undefined) {\r\n continue;\r\n }\r\n const bounds = component.instance.getBounds();\r\n this.set(itemId, bounds);\r\n }\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n if (this._tracker) {\r\n this._tracker.dispose();\r\n }\r\n }\r\n}\r\n","import { IScrollEvent, ScrollDirection } from \"../models\";\r\n\r\ninterface IScrollEventParams {\r\n direction: ScrollDirection;\r\n container: HTMLElement;\r\n list: HTMLElement;\r\n delta: number;\r\n scrollDelta: number;\r\n isVertical: boolean;\r\n}\r\n\r\n/**\r\n * Scroll event.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/scrollEvent.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollEvent implements IScrollEvent {\r\n private _direction: ScrollDirection = 1;\r\n get direction() { return this._direction; }\r\n\r\n private _scrollSize: number = 0;\r\n get scrollSize() { return this._scrollSize; }\r\n\r\n private _scrollWeight: number = 0;\r\n get scrollWeight() { return this._scrollWeight; }\r\n\r\n private _isVertical: boolean = true;\r\n get isVertical() { return this._isVertical; }\r\n\r\n private _listSize: number = 0;\r\n get listSize() { return this._listSize; }\r\n\r\n private _size: number = 0;\r\n get size() { return this._size; }\r\n\r\n private _isStart: boolean = true;\r\n get isStart() { return this._isStart; }\r\n\r\n private _isEnd: boolean = false;\r\n get isEnd() { return this._isEnd; }\r\n\r\n private _delta: number = 0;\r\n get delta() { return this._delta; }\r\n\r\n private _scrollDelta: number = 0;\r\n get scrollDelta() { return this._scrollDelta; }\r\n\r\n constructor(params: IScrollEventParams) {\r\n const { direction, isVertical, container, list, delta, scrollDelta } = params;\r\n this._direction = direction;\r\n this._isVertical = isVertical;\r\n this._scrollSize = isVertical ? container.scrollTop : container.scrollLeft;\r\n this._scrollWeight = isVertical ? container.scrollHeight : container.scrollWidth;\r\n this._listSize = isVertical ? list.offsetHeight : list.offsetWidth;\r\n this._size = isVertical ? container.offsetHeight : container.offsetWidth;\r\n this._isEnd = (this._scrollSize + this._size) === this._scrollWeight;\r\n this._delta = delta;\r\n this._scrollDelta = scrollDelta;\r\n this._isStart = this._scrollSize === 0;\r\n }\r\n}","import { SnappingMethod, SnappingMethods } from \"../enums\";\r\n\r\nconst ADVANCED_PATTERNS: Array<SnappingMethod> = [SnappingMethods.ADVANCED, 'advanced'],\r\n DEFAULT_PATTERN: Array<SnappingMethod> = [SnappingMethods.NORMAL, 'normal'];\r\n\r\nexport const isSnappingMethodAdvenced = (method: SnappingMethod): boolean => {\r\n return ADVANCED_PATTERNS.includes(method);\r\n}\r\n\r\nexport const isSnappingMethodDefault = (method: SnappingMethod): boolean => {\r\n return DEFAULT_PATTERN.includes(method);\r\n}","export const IS_FIREFOX = navigator.userAgent.toLowerCase().includes('firefox');\r\n\r\nexport const FIREFOX_SCROLLBAR_OVERLAP_SIZE = 12;\r\n","import {\r\n AfterViewInit, ChangeDetectionStrategy, Component, ComponentRef, ElementRef, inject, input,\r\n OnDestroy, OnInit, output, signal, TemplateRef, ViewChild, viewChild, ViewContainerRef, ViewEncapsulation,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { combineLatest, distinctUntilChanged, filter, map, Observable, of, switchMap, tap } from 'rxjs';\r\nimport { NgVirtualListItemComponent } from './components/ng-virtual-list-item.component';\r\nimport {\r\n BEHAVIOR_AUTO, BEHAVIOR_INSTANT, CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE,\r\n DEFAULT_ENABLED_BUFFER_OPTIMIZATION, DEFAULT_ITEM_SIZE, DEFAULT_ITEMS_OFFSET, DEFAULT_LIST_SIZE, DEFAULT_SNAP, DEFAULT_SNAPPING_METHOD,\r\n HEIGHT_PROP_NAME, LEFT_PROP_NAME, MAX_SCROLL_TO_ITERATIONS, PX, SCROLL, SCROLL_END, TOP_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n} from './const';\r\nimport { BaseVirtualListItemComponent, Component$1, IScrollEvent, IVirtualListCollection, IVirtualListItem, IVirtualListStickyMap } from './models';\r\nimport { Id, ISize } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { Direction, Directions, SnappingMethod } from './enums';\r\nimport { ScrollEvent, TrackBox, isDirection, toggleClassName } from './utils';\r\nimport { IGetItemPositionOptions, IUpdateCollectionOptions, TRACK_BOX_CHANGE_EVENT_NAME } from './utils/trackBox';\r\nimport { isSnappingMethodAdvenced } from './utils/snapping-method';\r\nimport { FIREFOX_SCROLLBAR_OVERLAP_SIZE, IS_FIREFOX } from './utils/browser';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-virtual-list',\r\n imports: [CommonModule],\r\n templateUrl: './ng-virtual-list.component.html',\r\n styleUrl: './ng-virtual-list.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgVirtualListComponent implements AfterViewInit, OnInit, OnDestroy {\r\n protected static __nextId: number = 0;\r\n\r\n protected _id: number = NgVirtualListComponent.__nextId;\r\n /**\r\n * Readonly. Returns the unique identifier of the component.\r\n */\r\n get id() { return this._id; }\r\n\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n protected _listContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('snapRendererContainer', { read: ViewContainerRef })\r\n protected _snapContainerRef: ViewContainerRef | undefined;\r\n\r\n protected _snappedContainer = viewChild<ElementRef<HTMLDivElement>>('snapped');\r\n\r\n protected _container = viewChild<ElementRef<HTMLDivElement>>('container');\r\n\r\n protected _list = viewChild<ElementRef<HTMLUListElement>>('list');\r\n\r\n /**\r\n * Fires when the list has been scrolled.\r\n */\r\n onScroll = output<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the list has completed scrolling.\r\n */\r\n onScrollEnd = output<IScrollEvent>();\r\n\r\n protected _itemsOptions = {\r\n transform: (v: IVirtualListCollection | undefined) => {\r\n this._trackBox.resetCollection(v, this.itemSize());\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Collection of list items.\r\n */\r\n items = input.required<IVirtualListCollection>({\r\n ...this._itemsOptions,\r\n });\r\n\r\n /**\r\n * Determines whether elements will snap. Default value is \"true\".\r\n */\r\n snap = input<boolean>(DEFAULT_SNAP);\r\n\r\n /**\r\n * Experimental!\r\n * Enables buffer optimization.\r\n * Can only be used if items in the collection are not added or updated. Otherwise, artifacts in the form of twitching of the scroll area are possible.\r\n * Works only if the property dynamic = true\r\n */\r\n enabledBufferOptimization = input<boolean>(DEFAULT_ENABLED_BUFFER_OPTIMIZATION);\r\n\r\n /**\r\n * Rendering element template.\r\n */\r\n itemRenderer = input.required<TemplateRef<any>>();\r\n\r\n protected _itemRenderer = signal<TemplateRef<any> | undefined>(undefined);\r\n\r\n /**\r\n * Dictionary zIndex by id of the list element. If the value is not set or equal to 0,\r\n * then a simple element is displayed, if the value is greater than 0, then the sticky position mode is enabled for the element.\r\n */\r\n stickyMap = input<IVirtualListStickyMap>({});\r\n\r\n protected _itemSizeOptions = {\r\n transform: (v: number | undefined) => {\r\n if (v === undefined) {\r\n return DEFAULT_ITEM_SIZE;\r\n }\r\n const val = Number(v);\r\n return Number.isNaN(val) || val <= 0 ? DEFAULT_ITEM_SIZE : val;\r\n },\r\n } as any;\r\n\r\n /**\r\n * If direction = 'vertical', then the height of a typical element. If direction = 'horizontal', then the width of a typical element.\r\n * Ignored if the dynamicSize property is true.\r\n */\r\n itemSize = input<number>(DEFAULT_ITEM_SIZE, { ...this._itemSizeOptions });\r\n\r\n /**\r\n * If true then the items in the list can have different sizes and the itemSize property is ignored.\r\n * If false then the items in the list have a fixed size specified by the itemSize property. The default value is false.\r\n */\r\n dynamicSize = input(DEFAULT_DYNAMIC_SIZE);\r\n\r\n /**\r\n * Determines the direction in which elements are placed. Default value is \"vertical\".\r\n */\r\n direction = input<Direction>(DEFAULT_DIRECTION);\r\n\r\n /**\r\n * Number of elements outside the scope of visibility. Default value is 2.\r\n */\r\n itemsOffset = input<number>(DEFAULT_ITEMS_OFFSET);\r\n\r\n /**\r\n * Snapping method.\r\n * 'default' - Normal group rendering.\r\n * 'advanced' - The group is rendered on a transparent background. List items below the group are not rendered.\r\n */\r\n snappingMethod = input<SnappingMethod>(DEFAULT_SNAPPING_METHOD);\r\n\r\n protected _isSnappingMethodAdvanced: boolean = this.getIsSnappingMethodAdvanced();\r\n get isSnappingMethodAdvanced() { return this._isSnappingMethodAdvanced; }\r\n\r\n protected _isVertical = this.getIsVertical();\r\n\r\n protected _displayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n protected _snapedDisplayComponent: ComponentRef<BaseVirtualListItemComponent> | undefined;\r\n\r\n protected _bounds = signal<ISize | null>(null);\r\n\r\n protected _scrollSize = signal<number>(0);\r\n\r\n protected _resizeObserver: ResizeObserver | null = null;\r\n\r\n protected _resizeSnappedComponentHandler = () => {\r\n const list = this._list(), container = this._container(), snappedComponent = this._snapedDisplayComponent?.instance;\r\n if (list && container && snappedComponent) {\r\n const isVertical = this._isVertical, listBounds = list.nativeElement.getBoundingClientRect(), listElement = list?.nativeElement,\r\n { width: lWidth, height: lHeight } = listElement?.getBoundingClientRect() ?? { width: 0, height: 0 },\r\n { width, height } = this._bounds() ?? { width: 0, height: 0 },\r\n isScrollable = isVertical ? container.nativeElement.scrollHeight > 0 : container.nativeElement.scrollWidth > 0;\r\n\r\n let scrollBarSize = isVertical ? width - lWidth : height - lHeight, isScrollBarOverlap = true, overlapScrollBarSize = 0;\r\n if (scrollBarSize === 0 && isScrollable) {\r\n isScrollBarOverlap = true;\r\n }\r\n\r\n if (isScrollBarOverlap && IS_FIREFOX) {\r\n scrollBarSize = overlapScrollBarSize = FIREFOX_SCROLLBAR_OVERLAP_SIZE;\r\n }\r\n\r\n snappedComponent.element.style.clipPath = `path(\"M 0 0 L 0 ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} 0 Z\")`;\r\n\r\n snappedComponent.regularLength = `${isVertical ? listBounds.width : listBounds.height}${PX}`;\r\n const { width: sWidth, height: sHeight } = snappedComponent.getBounds() ?? { width: 0, height: 0 },\r\n containerElement = container.nativeElement, delta = snappedComponent.item?.measures.delta ?? 0;\r\n\r\n let left: number, right: number, top: number, bottom: number;\r\n if (isVertical) {\r\n left = 0;\r\n right = width - scrollBarSize;\r\n top = sHeight;\r\n bottom = height;\r\n containerElement.style.clipPath = `path(\"M 0 ${top + delta} L 0 ${height} L ${width} ${height} L ${width} 0 L ${right} 0 L ${right} ${top + delta} Z\")`;\r\n } else {\r\n left = sWidth;\r\n right = width;\r\n top = 0;\r\n bottom = height - scrollBarSize;\r\n containerElement.style.clipPath = `path(\"M ${left + delta} 0 L ${left + delta} ${bottom} L 0 ${bottom} L 0 ${height} L ${width} ${height} L ${width} 0 Z\")`;\r\n }\r\n }\r\n };\r\n\r\n protected _resizeSnappedObserver: ResizeObserver | null = null;\r\n\r\n protected _componentsResizeObserver = new ResizeObserver(() => {\r\n this._trackBox.changes();\r\n });\r\n\r\n protected _onResizeHandler = () => {\r\n const bounds = this._container()?.nativeElement?.getBoundingClientRect();\r\n if (bounds) {\r\n this._bounds.set({ width: bounds.width, height: bounds.height });\r\n } else {\r\n this._bounds.set({ width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE });\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n }\r\n\r\n protected _onScrollHandler = (e?: Event) => {\r\n this.clearScrollToRepeatExecutionTimeout();\r\n\r\n const container = this._container()?.nativeElement;\r\n if (container) {\r\n const scrollSize = (this._isVertical ? container.scrollTop : container.scrollLeft),\r\n actualScrollSize = scrollSize;\r\n this._scrollSize.set(actualScrollSize);\r\n }\r\n }\r\n\r\n protected _elementRef = inject(ElementRef<HTMLDivElement>);\r\n\r\n protected _initialized!: WritableSignal<boolean>;\r\n\r\n readonly $initialized!: Observable<boolean>;\r\n\r\n /**\r\n * The name of the property by which tracking is performed\r\n */\r\n trackBy = input<string>(TRACK_BY_PROPERTY_NAME);\r\n\r\n /**\r\n * Base class of the element component\r\n */\r\n protected _itemComponentClass: Component$1<BaseVirtualListItemComponent> = NgVirtualListItemComponent;\r\n\r\n /**\r\n * Base class trackBox\r\n */\r\n protected _trackBoxClass: Component$1<TrackBox> = TrackBox;\r\n\r\n /**\r\n * Dictionary of element sizes by their id\r\n */\r\n protected _trackBox: TrackBox = new this._trackBoxClass(this.trackBy());\r\n\r\n protected _onTrackBoxChangeHandler = (v: number) => {\r\n this._cacheVersion.set(v);\r\n }\r\n\r\n protected _cacheVersion = signal<number>(-1);\r\n\r\n constructor() {\r\n NgVirtualListComponent.__nextId = NgVirtualListComponent.__nextId + 1 === Number.MAX_SAFE_INTEGER\r\n ? 0 : NgVirtualListComponent.__nextId + 1;\r\n this._id = NgVirtualListComponent.__nextId;\r\n\r\n this._initialized = signal<boolean>(false);\r\n this.$initialized = toObservable(this._initialized);\r\n\r\n this._trackBox.displayComponents = this._displayComponents;\r\n\r\n const $trackBy = toObservable(this.trackBy);\r\n\r\n $trackBy.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._trackBox.trackingPropertyName = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $bounds = toObservable(this._bounds).pipe(\r\n filter(b => !!b),\r\n ), $items = toObservable(this.items).pipe(\r\n map(i => !i ? [] : i),\r\n ), $scrollSize = toObservable(this._scrollSize),\r\n $itemSize = toObservable(this.itemSize).pipe(\r\n map(v => v <= 0 ? DEFAULT_ITEM_SIZE : v),\r\n ),\r\n $itemsOffset = toObservable(this.itemsOffset).pipe(\r\n map(v => v < 0 ? DEFAULT_ITEMS_OFFSET : v),\r\n ),\r\n $stickyMap = toObservable(this.stickyMap).pipe(\r\n map(v => !v ? {} : v),\r\n ),\r\n $snap = toObservable(this.snap),\r\n $isVertical = toObservable(this.direction).pipe(\r\n map(v => this.getIsVertical(v || DEFAULT_DIRECTION)),\r\n ),\r\n $dynamicSize = toObservable(this.dynamicSize),\r\n $enabledBufferOptimization = toObservable(this.enabledBufferOptimization),\r\n $snappingMethod = toObservable(this.snappingMethod).pipe(\r\n map(v => this.getIsSnappingMethodAdvanced(v || DEFAULT_SNAPPING_METHOD)),\r\n ),\r\n $cacheVersion = toObservable(this._cacheVersion);\r\n\r\n $isVertical.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._isVertical = v;\r\n const el: HTMLElement = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, v ? CLASS_LIST_HORIZONTAL : CLASS_LIST_VERTICAL);\r\n }),\r\n ).subscribe();\r\n\r\n $snappingMethod.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._isSnappingMethodAdvanced = this._trackBox.isSnappingMethodAdvanced = v;\r\n }),\r\n ).subscribe();\r\n\r\n $dynamicSize.pipe(\r\n takeUntilDestroyed(),\r\n tap(dynamicSize => {\r\n this.listenCacheChangesIfNeed(dynamicSize);\r\n })\r\n ).subscribe();\r\n\r\n combineLatest([this.$initialized, $bounds, $items, $stickyMap, $scrollSize, $itemSize,\r\n $itemsOffset, $snap, $isVertical, $dynamicSize, $enabledBufferOptimization, $cacheVersion,\r\n ]).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(([initialized]) => !!initialized),\r\n switchMap(([,\r\n bounds, items, stickyMap, scrollSize, itemSize,\r\n itemsOffset, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion,\r\n ]) => {\r\n let actualScrollSize = (this._isVertical ? this._container()?.nativeElement.scrollTop ?? 0 : this._container()?.nativeElement.scrollLeft) ?? 0;\r\n const { width, height } = bounds,\r\n opts: IUpdateCollectionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, dynamicSize, isVertical, itemSize,\r\n itemsOffset, scrollSize: actualScrollSize, snap, enabledBufferOptimization,\r\n },\r\n { displayItems, totalSize } = this._trackBox.updateCollection(items, stickyMap, opts);\r\n\r\n this.resetBoundsSize(isVertical, totalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n const container = this._container();\r\n\r\n if (container) {\r\n const delta = this._trackBox.delta;\r\n actualScrollSize = actualScrollSize + delta;\r\n\r\n this._trackBox.clearDelta();\r\n\r\n if (scrollSize !== actualScrollSize) {\r\n const params: ScrollToOptions = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: actualScrollSize,\r\n behavior: BEHAVIOR_INSTANT\r\n };\r\n\r\n container.nativeElement.scrollTo(params);\r\n }\r\n }\r\n\r\n return of(displayItems);\r\n }),\r\n ).subscribe();\r\n\r\n this.setupRenderer();\r\n }\r\n\r\n protected setupRenderer() {\r\n const $itemRenderer = toObservable(this.itemRenderer);\r\n\r\n $itemRenderer.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._itemRenderer.set(v);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n /** @internal */\r\n ngOnInit() {\r\n this.onInit();\r\n }\r\n\r\n protected onInit() {\r\n this._initialized.set(true);\r\n }\r\n\r\n protected listenCacheChangesIfNeed(value: boolean) {\r\n if (value) {\r\n if (!this._trackBox.hasEventListener(TRACK_BOX_CHANGE_EVENT_NAME, this._onTrackBoxChangeHandler)) {\r\n this._trackBox.addEventListener(TRACK_BOX_CHANGE_EVENT_NAME, this._onTrackBoxChangeHandler);\r\n }\r\n } else {\r\n if (this._trackBox.hasEventListener(TRACK_BOX_CHANGE_EVENT_NAME, this._onTrackBoxChangeHandler)) {\r\n this._trackBox.removeEventListener(TRACK_BOX_CHANGE_EVENT_NAME, this._onTrackBoxChangeHandler);\r\n }\r\n }\r\n }\r\n\r\n protected getIsSnappingMethodAdvanced(m?: SnappingMethod) {\r\n const method = m || this.snappingMethod();\r\n return isSnappingMethodAdvenced(method);\r\n }\r\n\r\n protected getIsVertical(d?: Direction) {\r\n const dir = d || this.direction();\r\n return isDirection(dir, Directions.VERTICAL);\r\n }\r\n\r\n protected createDisplayComponentsIfNeed(displayItems: IRenderVirtualListCollection | null) {\r\n if (!displayItems || !this._listContainerRef) {\r\n this._trackBox.setDisplayObjectIndexMapById({});\r\n return;\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced && this.snap()) {\r\n if (!this._snapedDisplayComponent && this._snapContainerRef) {\r\n const comp = this._snapContainerRef.createComponent(this._itemComponentClass);\r\n comp.instance.regular = true;\r\n this._snapedDisplayComponent = comp;\r\n this._trackBox.snapedDisplayComponent = this._snapedDisplayComponent;\r\n\r\n this._resizeSnappedObserver = new ResizeObserver(this._resizeSnappedComponentHandler);\r\n this._resizeSnappedObserver.observe(comp.instance.element);\r\n }\r\n }\r\n\r\n this._trackBox.items = displayItems;\r\n\r\n const _listContainerRef = this._listContainerRef;\r\n\r\n const maxLength = displayItems.length, components = this._displayComponents;\r\n\r\n while (components.length < maxLength) {\r\n if (_listContainerRef) {\r\n const comp = _listContainerRef.createComponent(this._itemComponentClass);\r\n components.push(comp);\r\n\r\n this._componentsResizeObserver.observe(comp.instance.element);\r\n }\r\n }\r\n\r\n this.resetRenderers();\r\n }\r\n\r\n protected updateRegularRenderer() {\r\n this._resizeSnappedComponentHandler();\r\n }\r\n\r\n protected resetRenderers(itemRenderer?: TemplateRef<HTMLElement>) {\r\n const doMap: { [id: number]: number } = {}, components = this._displayComponents;\r\n for (let i = 0, l = components.length; i < l; i++) {\r\n const item = components[i];\r\n if (item) {\r\n const id = item.instance.id;\r\n item.instance.renderer = itemRenderer || this._itemRenderer();\r\n doMap[id] = i;\r\n }\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced && this.snap() && this._snapedDisplayComponent && this._snapContainerRef) {\r\n const comp = this._snapedDisplayComponent;\r\n comp.instance.renderer = itemRenderer || this._itemRenderer();\r\n }\r\n\r\n this._trackBox.setDisplayObjectIndexMapById(doMap);\r\n }\r\n\r\n /**\r\n * Tracking by id\r\n */\r\n protected tracking() {\r\n this._trackBox.track();\r\n }\r\n\r\n protected resetBoundsSize(isVertical: boolean, totalSize: number) {\r\n const l = this._list();\r\n if (l) {\r\n l.nativeElement.style[isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME] = `${totalSize}${PX}`;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the bounds of an element with a given id\r\n */\r\n getItemBounds(id: Id): ISize | undefined {\r\n return this._trackBox.getItemBounds(id);\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given id and returns the value of the scrolled area.\r\n * Behavior accepts the values ​​\"auto\", \"instant\" and \"smooth\".\r\n */\r\n scrollTo(id: Id, behavior: ScrollBehavior = BEHAVIOR_AUTO) {\r\n this.scrollToExecutor(id, behavior);\r\n }\r\n\r\n protected _scrollToRepeatExecutionTimeout: number | undefined;\r\n\r\n protected clearScrollToRepeatExecutionTimeout() {\r\n clearTimeout(this._scrollToRepeatExecutionTimeout);\r\n }\r\n\r\n protected scrollToExecutor(id: Id, behavior: ScrollBehavior, iteration: number = 0, isLastIteration = false) {\r\n const items = this.items();\r\n if (!items || !items.length) {\r\n return;\r\n }\r\n\r\n const dynamicSize = this.dynamicSize(), container = this._container(), itemSize = this.itemSize();\r\n if (container) {\r\n this.clearScrollToRepeatExecutionTimeout();\r\n\r\n if (dynamicSize) {\r\n if (container) {\r\n container.nativeElement.removeEventListener(SCROLL, this._onScrollHandler);\r\n }\r\n\r\n const { width, height } = this._bounds() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n stickyMap = this.stickyMap(), items = this.items(), isVertical = this._isVertical, delta = this._trackBox.delta,\r\n opts: IGetItemPositionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize,\r\n itemsOffset: this.itemsOffset(), scrollSize: (isVertical ? container.nativeElement.scrollTop : container.nativeElement.scrollLeft) + delta,\r\n snap: this.snap(), fromItemId: id, enabledBufferOptimization: this.enabledBufferOptimization(),\r\n },\r\n scrollSize = this._trackBox.getItemPosition(id, stickyMap, opts),\r\n params: ScrollToOptions = { [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior };\r\n\r\n if (scrollSize === -1) {\r\n container.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n return;\r\n }\r\n\r\n this._trackBox.clearDelta();\r\n\r\n if (container) {\r\n const { displayItems, totalSize } = this._trackBox.updateCollection(items, stickyMap, {\r\n ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,\r\n }), delta = this._trackBox.delta;\r\n\r\n this._trackBox.clearDelta();\r\n\r\n let actualScrollSize = scrollSize + delta;\r\n\r\n this.resetBoundsSize(isVertical, totalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n const _scrollSize = this._trackBox.getItemPosition(id, stickyMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });\r\n\r\n if (_scrollSize === -1) {\r\n container.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n return;\r\n }\r\n\r\n const notChanged = actualScrollSize === _scrollSize\r\n\r\n if (!notChanged || iteration < MAX_SCROLL_TO_ITERATIONS) {\r\n this.clearScrollToRepeatExecutionTimeout();\r\n this._scrollToRepeatExecutionTimeout = setTimeout(() => {\r\n this.scrollToExecutor(id, BEHAVIOR_INSTANT, iteration + 1, notChanged);\r\n }) as unknown as number;\r\n } else {\r\n this._scrollSize.set(actualScrollSize);\r\n\r\n container.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n }\r\n }\r\n\r\n container.nativeElement.scrollTo(params);\r\n\r\n this._scrollSize.set(scrollSize);\r\n } else {\r\n const index = items.findIndex(item => item.id === id);\r\n if (index > -1) {\r\n const scrollSize = index * this.itemSize();\r\n const params: ScrollToOptions = { [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior };\r\n container.nativeElement.scrollTo(params);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the desired element with the specified ID.\r\n */\r\n scrollToEnd(behavior: ScrollBehavior = BEHAVIOR_INSTANT) {\r\n const items = this.items(), latItem = items[items.length > 0 ? items.length - 1 : 0];\r\n this.scrollTo(latItem.id, behavior);\r\n }\r\n\r\n protected _onContainerScrollHandler = (e: Event) => {\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n const scrollSize = (this._isVertical ? containerEl.nativeElement.scrollTop : containerEl.nativeElement.scrollLeft);\r\n this._trackBox.deltaDirection = this._scrollSize() > scrollSize ? -1 : this._scrollSize() < scrollSize ? 1 : 0;\r\n\r\n const event = new ScrollEvent({\r\n direction: this._trackBox.scrollDirection, container: containerEl.nativeElement,\r\n list: this._list()!.nativeElement, delta: this._trackBox.delta,\r\n scrollDelta: this._trackBox.scrollDelta, isVertical: this._isVertical,\r\n });\r\n\r\n this.onScroll.emit(event);\r\n }\r\n }\r\n\r\n protected _onContainerScrollEndHandler = (e: Event) => {\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n const scrollSize = (this._isVertical ? containerEl.nativeElement.scrollTop : containerEl.nativeElement.scrollLeft);\r\n this._trackBox.deltaDirection = this._scrollSize() > scrollSize ? -1 : 0;\r\n\r\n const event = new ScrollEvent({\r\n direction: this._trackBox.scrollDirection, container: containerEl.nativeElement,\r\n list: this._list()!.nativeElement, delta: this._trackBox.delta,\r\n scrollDelta: this._trackBox.scrollDelta, isVertical: this._isVertical,\r\n });\r\n\r\n this.onScrollEnd.emit(event);\r\n }\r\n }\r\n\r\n /** @internal */\r\n ngAfterViewInit(): void {\r\n this.afterViewInit();\r\n }\r\n\r\n protected afterViewInit() {\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n // for direction calculation\r\n containerEl.nativeElement.addEventListener(SCROLL, this._onContainerScrollHandler);\r\n containerEl.nativeElement.addEventListener(SCROLL_END, this._onContainerScrollEndHandler);\r\n\r\n containerEl.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n\r\n this._resizeObserver = new ResizeObserver(this._onResizeHandler);\r\n this._resizeObserver.observe(containerEl.nativeElement);\r\n\r\n this._onResizeHandler();\r\n }\r\n }\r\n\r\n /** @internal */\r\n ngOnDestroy(): void {\r\n this.dispose();\r\n }\r\n\r\n protected dispose() {\r\n this.clearScrollToRepeatExecutionTimeout();\r\n\r\n if (this._trackBox) {\r\n this._trackBox.dispose();\r\n }\r\n\r\n if (this._componentsResizeObserver) {\r\n this._componentsResizeObserver.disconnect();\r\n }\r\n\r\n if (this._resizeSnappedObserver) {\r\n this._resizeSnappedObserver.disconnect();\r\n }\r\n\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n containerEl.nativeElement.removeEventListener(SCROLL, this._onScrollHandler);\r\n containerEl.nativeElement.removeEventListener(SCROLL, this._onContainerScrollHandler);\r\n containerEl.nativeElement.removeEventListener(SCROLL_END, this._onContainerScrollEndHandler);\r\n }\r\n\r\n if (this._snapedDisplayComponent) {\r\n this._snapedDisplayComponent.destroy();\r\n }\r\n\r\n if (this._displayComponents) {\r\n while (this._displayComponents.length > 0) {\r\n const comp = this._displayComponents.pop();\r\n comp?.destroy();\r\n }\r\n }\r\n }\r\n}\r\n","@if (snap()) {\r\n<div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n</div>\r\n}\r\n<div #container part=\"scroller\" class=\"ngvl__scroller\">\r\n <ul #list part=\"list\" class=\"ngvl__list\">\r\n <ng-container #renderersContainer></ng-container>\r\n </ul>\r\n</div>","/*\r\n * Public API Surface of ng-virtual-list\r\n */\r\n\r\nexport * from './lib/components/ng-virtual-list-item.component';\r\nexport * from './lib/ng-virtual-list.component';\r\nexport * from './lib/enums';\r\nexport * from './lib/models';\r\nexport * from './lib/types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -117,6 +117,13 @@ export declare class TrackBox<C extends BaseVirtualListItemComponent = any> exte
117
117
  protected _previousTotalSize: number;
118
118
  protected _scrollDelta: number;
119
119
  get scrollDelta(): number;
120
+ isAdaptiveBuffer: boolean;
121
+ protected _maxBufferSize: number;
122
+ protected _maxBufferSizeSequenceLength: number;
123
+ protected _bufferSizeSequence: Array<number>;
124
+ protected _bufferSize: number;
125
+ get bufferSize(): number;
126
+ protected _defaultBufferSize: number;
120
127
  protected lifeCircle(): void;
121
128
  /**
122
129
  * Scans the collection for deleted items and flushes the deleted item cache.
@@ -148,6 +155,8 @@ export declare class TrackBox<C extends BaseVirtualListItemComponent = any> exte
148
155
  getNearestItem<I extends {
149
156
  id: Id;
150
157
  }, C extends Array<I>>(scrollSize: number, items: C, itemSize: number, isVertical: boolean): I | undefined;
158
+ protected _previousScrollSize: number;
159
+ protected updateAdaptiveBufferParams(metrics: IMetrics, totalItemsLength: number): void;
151
160
  /**
152
161
  * Calculates the position of an element based on the given scrollSize
153
162
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-virtual-list",
3
- "version": "19.3.6",
3
+ "version": "19.3.7-beta-1",
4
4
  "author": {
5
5
  "name": "Evgenii Grebennikov",
6
6
  "email": "djonnyx@gmail.com"