ng-virtual-list 19.2.12 → 19.3.0

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.
package/README.md CHANGED
@@ -455,7 +455,7 @@ Inputs
455
455
  | itemSize | number? = 24 | If direction = 'vertical', then the height of a typical element. If direction = 'horizontal', then the width of a typical element. Ignored if the dynamicSize property is true. |
456
456
  | itemsOffset | number? = 2 | Number of elements outside the scope of visibility. Default value is 2. |
457
457
  | itemRenderer | TemplateRef | Rendering element template. |
458
- | stickyMap | [IVirtualListStickyMap?](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/sticky-map.model.ts) | Dictionary zIndex by id of the list element. If the value is not set or equal to 0, then a simple element is displayed, if the value is greater than 0, then the sticky position mode is enabled for the element. |
458
+ | stickyMap | [IVirtualListStickyMap?](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/sticky-map.model.ts) | Dictionary zIndex by id of the list element. If the value is not set or equal to 0, then a simple element is displayed, if the value is greater than 0, then the sticky position mode is enabled for the element. 1 - position start, 2 - position end. |
459
459
  | snap | boolean? = false | Determines whether elements will snap. Default value is "false". |
460
460
  | snappingMethod | [SnappingMethod? = 'normal'](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/enums/snapping-method.ts) | Snapping method. 'normal' - Normal group rendering. 'advanced' - The group is rendered on a transparent background. List items below the group are not rendered. |
461
461
  | direction | [Direction? = 'vertical'](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/enums/direction.ts) | Determines the direction in which elements are placed. Default value is "vertical". |
@@ -135,9 +135,10 @@ class NgVirtualListItemComponent {
135
135
  const data = this._data, regular = this.regular, length = this._regularLength;
136
136
  if (data) {
137
137
  const styles = this._elementRef.nativeElement.style;
138
- styles.zIndex = String(data.config.sticky);
138
+ styles.zIndex = data.config.zIndex;
139
139
  if (data.config.snapped) {
140
- styles.transform = ZEROS_TRANSLATE_3D;
140
+ 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)`;
141
+ ;
141
142
  if (!data.config.isSnappingMethodAdvanced) {
142
143
  styles.position = POSITION_STICKY;
143
144
  }
@@ -173,7 +174,7 @@ class NgVirtualListItemComponent {
173
174
  }
174
175
  styles.visibility = VISIBILITY_VISIBLE;
175
176
  }
176
- styles.zIndex = String(this._data?.config?.sticky ?? DEFAULT_ZINDEX);
177
+ styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;
177
178
  }
178
179
  hide() {
179
180
  const styles = this._elementRef.nativeElement.style;
@@ -325,7 +326,17 @@ class Tracker {
325
326
  }
326
327
  }
327
328
  comp.instance.item = item;
328
- comp.instance.show();
329
+ if (snapedComponent) {
330
+ if (item['config']['snapped'] || item['config']['snappedOut']) {
331
+ comp.instance.hide();
332
+ }
333
+ else {
334
+ comp.instance.show();
335
+ }
336
+ }
337
+ else {
338
+ comp.instance.show();
339
+ }
329
340
  untrackedItems.splice(indexByUntrackedItems, 1);
330
341
  continue;
331
342
  }
@@ -344,7 +355,17 @@ class Tracker {
344
355
  }
345
356
  }
346
357
  comp.instance.item = item;
347
- comp.instance.show();
358
+ if (snapedComponent) {
359
+ if (item['config']['snapped'] || item['config']['snappedOut']) {
360
+ comp.instance.hide();
361
+ }
362
+ else {
363
+ comp.instance.show();
364
+ }
365
+ }
366
+ else {
367
+ comp.instance.show();
368
+ }
348
369
  if (this._trackMap) {
349
370
  this._trackMap[itemTrackingProperty] = comp.instance.id;
350
371
  }
@@ -962,7 +983,7 @@ class TrackBox extends CacheMap {
962
983
  }
963
984
  }
964
985
  if (deletedItemsMap.hasOwnProperty(i)) {
965
- const bounds = deletedItemsMap[i], size = bounds[sizeProperty] ?? typicalItemSize;
986
+ const bounds = deletedItemsMap[i], size = bounds?.[sizeProperty] ?? typicalItemSize;
966
987
  if (y < scrollSize - size) {
967
988
  leftSizeOfDeletedItems += size;
968
989
  }
@@ -970,7 +991,7 @@ class TrackBox extends CacheMap {
970
991
  totalSize += componentSize;
971
992
  if (isFromId) {
972
993
  if (itemById === undefined) {
973
- if (id !== fromItemId && stickyMap && stickyMap[id] > 0) {
994
+ if (id !== fromItemId && stickyMap && stickyMap[id] === 1) {
974
995
  stickyComponentSize = componentSize;
975
996
  stickyCollectionItem = collectionItem;
976
997
  }
@@ -1166,19 +1187,19 @@ class TrackBox extends CacheMap {
1166
1187
  this.bumpVersion();
1167
1188
  }
1168
1189
  generateDisplayCollection(items, stickyMap, metrics) {
1169
- const { normalizedItemWidth, normalizedItemHeight, dynamicSize, itemsFromStartToScrollEnd, isVertical, renderItems: renderItemsLength, scrollSize, sizeProperty, snap, snippedPos, startPosition, totalLength, startIndex, typicalItemSize, } = metrics, displayItems = [];
1190
+ const { width, height, normalizedItemWidth, normalizedItemHeight, dynamicSize, itemsOnDisplayLength, itemsFromStartToScrollEnd, isVertical, renderItems: renderItemsLength, scrollSize, sizeProperty, snap, snippedPos, startPosition, totalLength, startIndex, typicalItemSize, } = metrics, displayItems = [];
1170
1191
  if (items.length) {
1171
- const actualSnippedPosition = snippedPos, isSnappingMethodAdvanced = this.isSnappingMethodAdvanced;
1172
- let pos = startPosition, renderItems = renderItemsLength, stickyItem, nextSticky, stickyItemIndex = -1, stickyItemSize = 0;
1192
+ const actualSnippedPosition = snippedPos, isSnappingMethodAdvanced = this.isSnappingMethodAdvanced, boundsSize = isVertical ? height : width, actualEndSnippedPosition = boundsSize;
1193
+ let pos = startPosition, renderItems = renderItemsLength, stickyItem, nextSticky, stickyItemIndex = -1, stickyItemSize = 0, endStickyItem, nextEndSticky, endStickyItemIndex = -1, endStickyItemSize = 0;
1173
1194
  if (snap) {
1174
1195
  for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? itemsFromStartToScrollEnd : 0, totalLength - 1); i >= 0; i--) {
1175
1196
  const id = items[i].id, sticky = stickyMap[id], size = dynamicSize ? this.get(id)?.[sizeProperty] || typicalItemSize : typicalItemSize;
1176
- if (sticky > 0) {
1197
+ if (sticky === 1) {
1177
1198
  const measures = {
1178
1199
  x: isVertical ? 0 : actualSnippedPosition,
1179
1200
  y: isVertical ? actualSnippedPosition : 0,
1180
- width: normalizedItemWidth,
1181
- height: normalizedItemHeight,
1201
+ width: isVertical ? normalizedItemWidth : size,
1202
+ height: isVertical ? size : normalizedItemHeight,
1182
1203
  delta: 0,
1183
1204
  }, config = {
1184
1205
  isVertical,
@@ -1188,6 +1209,7 @@ class TrackBox extends CacheMap {
1188
1209
  snappedOut: false,
1189
1210
  dynamic: dynamicSize,
1190
1211
  isSnappingMethodAdvanced,
1212
+ zIndex: '1',
1191
1213
  };
1192
1214
  const itemData = items[i];
1193
1215
  stickyItem = { id, measures, data: itemData, config };
@@ -1198,18 +1220,50 @@ class TrackBox extends CacheMap {
1198
1220
  }
1199
1221
  }
1200
1222
  }
1223
+ if (snap) {
1224
+ const startIndex = itemsFromStartToScrollEnd + itemsOnDisplayLength - 1;
1225
+ for (let i = Math.min(startIndex, totalLength > 0 ? totalLength - 1 : 0), l = totalLength; i < l; i++) {
1226
+ const id = items[i].id, sticky = stickyMap[id], size = dynamicSize
1227
+ ? this.get(id)?.[sizeProperty] || typicalItemSize
1228
+ : typicalItemSize;
1229
+ if (sticky === 2) {
1230
+ const w = isVertical ? normalizedItemWidth : size, h = isVertical ? size : normalizedItemHeight, measures = {
1231
+ x: isVertical ? 0 : actualEndSnippedPosition - w,
1232
+ y: isVertical ? actualEndSnippedPosition - h : 0,
1233
+ width: w,
1234
+ height: h,
1235
+ delta: 0,
1236
+ }, config = {
1237
+ isVertical,
1238
+ sticky,
1239
+ snap,
1240
+ snapped: true,
1241
+ snappedOut: false,
1242
+ dynamic: dynamicSize,
1243
+ isSnappingMethodAdvanced,
1244
+ zIndex: '1',
1245
+ };
1246
+ const itemData = items[i];
1247
+ endStickyItem = { id, measures, data: itemData, config };
1248
+ endStickyItemIndex = i;
1249
+ endStickyItemSize = size;
1250
+ displayItems.push(endStickyItem);
1251
+ break;
1252
+ }
1253
+ }
1254
+ }
1201
1255
  let i = startIndex;
1202
1256
  while (renderItems > 0) {
1203
1257
  if (i >= totalLength) {
1204
1258
  break;
1205
1259
  }
1206
1260
  const id = items[i].id, size = dynamicSize ? this.get(id)?.[sizeProperty] || typicalItemSize : typicalItemSize;
1207
- if (id !== stickyItem?.id) {
1208
- const snapped = snap && stickyMap[id] > 0 && pos <= scrollSize, measures = {
1209
- x: isVertical ? 0 : pos,
1210
- y: isVertical ? pos : 0,
1211
- width: normalizedItemWidth,
1212
- height: normalizedItemHeight,
1261
+ if (id !== stickyItem?.id && id !== endStickyItem?.id) {
1262
+ const snapped = snap && (stickyMap[id] === 1 && pos <= scrollSize || stickyMap[id] === 2 && pos >= scrollSize + boundsSize - size), measures = {
1263
+ x: isVertical ? stickyMap[id] === 1 ? 0 : boundsSize - size : pos,
1264
+ y: isVertical ? pos : stickyMap[id] === 2 ? boundsSize - size : 0,
1265
+ width: isVertical ? normalizedItemWidth : size,
1266
+ height: isVertical ? size : normalizedItemHeight,
1213
1267
  delta: 0,
1214
1268
  }, config = {
1215
1269
  isVertical,
@@ -1219,15 +1273,28 @@ class TrackBox extends CacheMap {
1219
1273
  snappedOut: false,
1220
1274
  dynamic: dynamicSize,
1221
1275
  isSnappingMethodAdvanced,
1276
+ zIndex: '0',
1222
1277
  };
1278
+ if (snapped) {
1279
+ config.zIndex = '2';
1280
+ }
1223
1281
  const itemData = items[i];
1224
1282
  const item = { id, measures, data: itemData, config };
1225
- if (!nextSticky && stickyItemIndex < i && stickyMap[id] > 0 && pos <= scrollSize + size + stickyItemSize) {
1283
+ if (!nextSticky && stickyItemIndex < i && stickyMap[id] === 1 && (pos <= scrollSize + size + stickyItemSize)) {
1226
1284
  item.measures.x = isVertical ? 0 : snapped ? actualSnippedPosition : pos;
1227
1285
  item.measures.y = isVertical ? snapped ? actualSnippedPosition : pos : 0;
1228
1286
  nextSticky = item;
1229
1287
  nextSticky.config.snapped = snapped;
1230
- nextSticky.measures.delta = isVertical ? item.measures.y - scrollSize : item.measures.x - scrollSize;
1288
+ nextSticky.measures.delta = isVertical ? (item.measures.y - scrollSize) : (item.measures.x - scrollSize);
1289
+ nextSticky.config.zIndex = '3';
1290
+ }
1291
+ else if (!nextEndSticky && endStickyItemIndex > i && stickyMap[id] === 2 && (pos >= scrollSize + boundsSize - size - endStickyItemSize)) {
1292
+ item.measures.x = isVertical ? 0 : snapped ? actualEndSnippedPosition - size : pos;
1293
+ item.measures.y = isVertical ? snapped ? actualEndSnippedPosition - size : pos : 0;
1294
+ nextEndSticky = item;
1295
+ nextEndSticky.config.zIndex = '3';
1296
+ nextEndSticky.config.snapped = snapped;
1297
+ nextEndSticky.measures.delta = isVertical ? (item.measures.y - scrollSize) : (item.measures.x - scrollSize);
1231
1298
  }
1232
1299
  displayItems.push(item);
1233
1300
  }
@@ -1249,6 +1316,19 @@ class TrackBox extends CacheMap {
1249
1316
  nextSticky.measures.delta = isVertical ? nextSticky.measures.y - scrollSize : nextSticky.measures.x - scrollSize;
1250
1317
  }
1251
1318
  }
1319
+ if (nextEndSticky && endStickyItem && nextEndSticky.measures[axis] >= scrollSize + boundsSize - endStickyItemSize - nextEndSticky.measures[sizeProperty]) {
1320
+ if (nextEndSticky.measures[axis] < scrollSize + boundsSize - endStickyItemSize) {
1321
+ endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];
1322
+ endStickyItem.config.snapped = nextEndSticky.config.snapped = false;
1323
+ endStickyItem.config.snappedOut = true;
1324
+ endStickyItem.config.sticky = 2;
1325
+ endStickyItem.measures.delta = isVertical ? endStickyItem.measures.y - scrollSize : endStickyItem.measures.x - scrollSize;
1326
+ }
1327
+ else {
1328
+ nextEndSticky.config.snapped = true;
1329
+ nextEndSticky.measures.delta = isVertical ? nextEndSticky.measures.y - scrollSize : nextEndSticky.measures.x - scrollSize;
1330
+ }
1331
+ }
1252
1332
  }
1253
1333
  return displayItems;
1254
1334
  }
@@ -1441,6 +1521,7 @@ class NgVirtualListComponent {
1441
1521
  */
1442
1522
  snappingMethod = input(DEFAULT_SNAPPING_METHOD);
1443
1523
  _isSnappingMethodAdvanced = this.getIsSnappingMethodAdvanced();
1524
+ get isSnappingMethodAdvanced() { return this._isSnappingMethodAdvanced; }
1444
1525
  _isVertical = this.getIsVertical();
1445
1526
  _displayComponents = [];
1446
1527
  _snapedDisplayComponent;
@@ -1800,11 +1881,11 @@ class NgVirtualListComponent {
1800
1881
  }
1801
1882
  }
1802
1883
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NgVirtualListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1803
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: NgVirtualListComponent, isStandalone: true, selector: "ng-virtual-list", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, snap: { classPropertyName: "snap", publicName: "snap", isSignal: true, isRequired: false, transformFunction: null }, enabledBufferOptimization: { classPropertyName: "enabledBufferOptimization", publicName: "enabledBufferOptimization", isSignal: true, isRequired: false, transformFunction: null }, itemRenderer: { classPropertyName: "itemRenderer", publicName: "itemRenderer", isSignal: true, isRequired: true, transformFunction: null }, stickyMap: { classPropertyName: "stickyMap", publicName: "stickyMap", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, dynamicSize: { classPropertyName: "dynamicSize", publicName: "dynamicSize", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, itemsOffset: { classPropertyName: "itemsOffset", publicName: "itemsOffset", isSignal: true, isRequired: false, transformFunction: null }, snappingMethod: { classPropertyName: "snappingMethod", publicName: "snappingMethod", isSignal: true, isRequired: false, transformFunction: null }, trackBy: { classPropertyName: "trackBy", publicName: "trackBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onScroll: "onScroll", onScrollEnd: "onScrollEnd" }, viewQueries: [{ propertyName: "_snappedContainer", first: true, predicate: ["snapped"], descendants: true, isSignal: true }, { propertyName: "_container", first: true, predicate: ["container"], descendants: true, isSignal: true }, { propertyName: "_list", first: true, predicate: ["list"], descendants: true, isSignal: true }, { propertyName: "_listContainerRef", first: true, predicate: ["renderersContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_snapContainerRef", first: true, predicate: ["snapRendererContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "@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>", styles: [":host{position:relative;display:block;width:400px;overflow:hidden}:host(.horizontal){height:48px}:host(.vertical){height:320px}.ngvl__scroller{overflow:auto;width:100%;height:100%}.ngvl__list-snapper{pointer-events:none;position:absolute;list-style:none;left:0;top:0;z-index:1}.ngvl__list{position:relative;list-style:none;padding:0;margin:0;width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom });
1884
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: NgVirtualListComponent, isStandalone: true, selector: "ng-virtual-list", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, snap: { classPropertyName: "snap", publicName: "snap", isSignal: true, isRequired: false, transformFunction: null }, enabledBufferOptimization: { classPropertyName: "enabledBufferOptimization", publicName: "enabledBufferOptimization", isSignal: true, isRequired: false, transformFunction: null }, itemRenderer: { classPropertyName: "itemRenderer", publicName: "itemRenderer", isSignal: true, isRequired: true, transformFunction: null }, stickyMap: { classPropertyName: "stickyMap", publicName: "stickyMap", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, dynamicSize: { classPropertyName: "dynamicSize", publicName: "dynamicSize", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, itemsOffset: { classPropertyName: "itemsOffset", publicName: "itemsOffset", isSignal: true, isRequired: false, transformFunction: null }, snappingMethod: { classPropertyName: "snappingMethod", publicName: "snappingMethod", isSignal: true, isRequired: false, transformFunction: null }, trackBy: { classPropertyName: "trackBy", publicName: "trackBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onScroll: "onScroll", onScrollEnd: "onScrollEnd" }, viewQueries: [{ propertyName: "_snappedContainer", first: true, predicate: ["snapped"], descendants: true, isSignal: true }, { propertyName: "_container", first: true, predicate: ["container"], descendants: true, isSignal: true }, { propertyName: "_list", first: true, predicate: ["list"], descendants: true, isSignal: true }, { propertyName: "_listContainerRef", first: true, predicate: ["renderersContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_snapContainerRef", first: true, predicate: ["snapRendererContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "@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>", styles: [":host{position:relative;display:block;width:400px;overflow:hidden}:host(.horizontal){height:48px}:host(.horizontal) .ngvl__list{display:inline-flex}:host(.horizontal) .ngvl__scroller{overflow:auto hidden}:host(.vertical) .ngvl__scroller{overflow:hidden auto}:host(.vertical){height:320px}.ngvl__scroller{overflow:auto;width:100%;height:100%}.ngvl__list-snapper{pointer-events:none;position:absolute;list-style:none;left:0;top:0;z-index:1}.ngvl__list{position:relative;list-style:none;padding:0;margin:0;width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom });
1804
1885
  }
1805
1886
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NgVirtualListComponent, decorators: [{
1806
1887
  type: Component,
1807
- args: [{ selector: 'ng-virtual-list', imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.ShadowDom, template: "@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>", styles: [":host{position:relative;display:block;width:400px;overflow:hidden}:host(.horizontal){height:48px}:host(.vertical){height:320px}.ngvl__scroller{overflow:auto;width:100%;height:100%}.ngvl__list-snapper{pointer-events:none;position:absolute;list-style:none;left:0;top:0;z-index:1}.ngvl__list{position:relative;list-style:none;padding:0;margin:0;width:100%;height:100%}\n"] }]
1888
+ args: [{ selector: 'ng-virtual-list', imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.ShadowDom, template: "@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>", styles: [":host{position:relative;display:block;width:400px;overflow:hidden}:host(.horizontal){height:48px}:host(.horizontal) .ngvl__list{display:inline-flex}:host(.horizontal) .ngvl__scroller{overflow:auto hidden}:host(.vertical) .ngvl__scroller{overflow:hidden auto}:host(.vertical){height:320px}.ngvl__scroller{overflow:auto;width:100%;height:100%}.ngvl__list-snapper{pointer-events:none;position:absolute;list-style:none;left:0;top:0;z-index:1}.ngvl__list{position:relative;list-style:none;padding:0;margin:0;width:100%;height:100%}\n"] }]
1808
1889
  }], ctorParameters: () => [], propDecorators: { _listContainerRef: [{
1809
1890
  type: ViewChild,
1810
1891
  args: ['renderersContainer', { read: ViewContainerRef }]
@@ -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/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 { 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\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 {\r\n private static __nextId: number = 0;\r\n\r\n private _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 private _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 private _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 private _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 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 = String(data.config.sticky);\r\n if (data.config.snapped) {\r\n styles.transform = ZEROS_TRANSLATE_3D;\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 = String(this._data?.config?.sticky ?? 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, remove = false) => {\r\n if (!el.classList.contains(className)) {\r\n el.classList.add(className);\r\n } else if (remove) {\r\n el.classList.remove(className);\r\n }\r\n};\r\n","import { ComponentRef } from \"@angular/core\";\r\nimport { ScrollDirection } from \"../models\";\r\n\r\ntype TrackingPropertyId = string | number;\r\n\r\ninterface IVirtualListItemComponent<I = any> {\r\n id: number;\r\n item: I;\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<I = any, C extends IVirtualListItemComponent = 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 comp.instance.show();\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 comp.instance.show();\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 { NgVirtualListItemComponent } from \"../components/ng-virtual-list-item.component\";\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 { 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}\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\ntype CacheMapEvents = typeof TRACK_BOX_CHANGE_EVENT_NAME;\r\n\r\ntype OnChangeEventListener = (version: number) => void;\r\n\r\ntype CacheMapListeners = OnChangeEventListener;\r\n\r\nenum ItemDisplayMethods {\r\n CREATE,\r\n UPDATE,\r\n DELETE,\r\n NOT_CHANGED,\r\n}\r\n\r\ninterface 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 extends CacheMap<Id, ISize & { method?: ItemDisplayMethods }, CacheMapEvents, CacheMapListeners> {\r\n protected _tracker!: Tracker<IRenderVirtualListItem, NgVirtualListItemComponent>;\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<NgVirtualListItemComponent>> | null | undefined;\r\n\r\n set displayComponents(v: Array<ComponentRef<NgVirtualListItemComponent>> | 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<NgVirtualListItemComponent> | null | undefined;\r\n\r\n set snapedDisplayComponent(v: ComponentRef<NgVirtualListItemComponent> | 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 private _previousCollection: Array<{ id: Id; }> | null | undefined;\r\n\r\n private _deletedItemsMap: { [index: number]: ISize } = {};\r\n\r\n private _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 private _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 } = 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 scrollSize;\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 private 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 private 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;\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] > 0) {\r\n stickyComponentSize = componentSize;\r\n stickyCollectionItem = collectionItem;\r\n }\r\n\r\n if (id === fromItemId) {\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 };\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 normalizedItemWidth,\r\n normalizedItemHeight,\r\n dynamicSize,\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 let pos = startPosition,\r\n renderItems = renderItemsLength,\r\n stickyItem: IRenderVirtualListItem | undefined, nextSticky: IRenderVirtualListItem | undefined, stickyItemIndex = -1,\r\n stickyItemSize = 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 const id = items[i].id, sticky = stickyMap[id], size = dynamicSize ? this.get(id)?.[sizeProperty] || typicalItemSize : typicalItemSize;\r\n if (sticky > 0) {\r\n const measures = {\r\n x: isVertical ? 0 : actualSnippedPosition,\r\n y: isVertical ? actualSnippedPosition : 0,\r\n width: normalizedItemWidth,\r\n height: 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 };\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 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) {\r\n const snapped = snap && stickyMap[id] > 0 && pos <= scrollSize,\r\n measures = {\r\n x: isVertical ? 0 : pos,\r\n y: isVertical ? pos : 0,\r\n width: normalizedItemWidth,\r\n height: 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 };\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] > 0 && 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 }\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 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?: NgVirtualListItemComponent | 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, HEIGHT_PROP_NAME, LEFT_PROP_NAME,\r\n MAX_SCROLL_TO_ITERATIONS, PX, SCROLL, SCROLL_END, TOP_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n} from './const';\r\nimport { 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 private static __nextId: number = 0;\r\n\r\n private _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 private _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 /**\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 private _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\r\n protected _isVertical = this.getIsVertical();\r\n\r\n protected _displayComponents: Array<ComponentRef<NgVirtualListItemComponent>> = [];\r\n\r\n protected _snapedDisplayComponent: ComponentRef<NgVirtualListItemComponent> | undefined;\r\n\r\n protected _bounds = signal<ISize | null>(null);\r\n\r\n protected _scrollSize = signal<number>(0);\r\n\r\n private _resizeObserver: ResizeObserver | null = null;\r\n\r\n private _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 private _resizeSnappedObserver: ResizeObserver | null = null;\r\n\r\n private _componentsResizeObserver = new ResizeObserver(() => {\r\n this._trackBox.changes();\r\n });\r\n\r\n private _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 private _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 private _elementRef = inject(ElementRef<HTMLDivElement>);\r\n\r\n private _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 * Dictionary of element sizes by their id\r\n */\r\n private _trackBox = new TrackBox(this.trackBy());\r\n\r\n private _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, true);\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 combineLatest([this.$initialized, toObservable(this.itemRenderer)]).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(([initialized]) => !!initialized),\r\n tap(([, itemRenderer]) => {\r\n this.resetRenderers(itemRenderer);\r\n })\r\n );\r\n }\r\n\r\n /** @internal */\r\n ngOnInit() {\r\n this._initialized.set(true);\r\n }\r\n\r\n private 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 private getIsSnappingMethodAdvanced(m?: SnappingMethod) {\r\n const method = m || this.snappingMethod();\r\n return isSnappingMethodAdvenced(method);\r\n }\r\n\r\n private getIsVertical(d?: Direction) {\r\n const dir = d || this.direction();\r\n return isDirection(dir, Directions.VERTICAL);\r\n }\r\n\r\n private 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(NgVirtualListItemComponent);\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(NgVirtualListItemComponent);\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 private updateRegularRenderer() {\r\n this._resizeSnappedComponentHandler();\r\n }\r\n\r\n private 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 private 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 private _scrollToRepeatExecutionTimeout: any;\r\n\r\n private 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 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 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 });\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), 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 * 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 private _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 private _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 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.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/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/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 { 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\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 {\r\n private static __nextId: number = 0;\r\n\r\n private _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 private _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 private _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 private _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 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, remove = false) => {\r\n if (!el.classList.contains(className)) {\r\n el.classList.add(className);\r\n } else if (remove) {\r\n el.classList.remove(className);\r\n }\r\n};\r\n","import { ComponentRef } from \"@angular/core\";\r\nimport { ScrollDirection } from \"../models\";\r\n\r\ntype TrackingPropertyId = string | number;\r\n\r\ninterface IVirtualListItemComponent<I = any> {\r\n id: number;\r\n item: I;\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<I = any, C extends IVirtualListItemComponent = 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 { NgVirtualListItemComponent } from \"../components/ng-virtual-list-item.component\";\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 { 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}\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\ntype CacheMapEvents = typeof TRACK_BOX_CHANGE_EVENT_NAME;\r\n\r\ntype OnChangeEventListener = (version: number) => void;\r\n\r\ntype CacheMapListeners = OnChangeEventListener;\r\n\r\nenum ItemDisplayMethods {\r\n CREATE,\r\n UPDATE,\r\n DELETE,\r\n NOT_CHANGED,\r\n}\r\n\r\ninterface 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 extends CacheMap<Id, ISize & { method?: ItemDisplayMethods }, CacheMapEvents, CacheMapListeners> {\r\n protected _tracker!: Tracker<IRenderVirtualListItem, NgVirtualListItemComponent>;\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<NgVirtualListItemComponent>> | null | undefined;\r\n\r\n set displayComponents(v: Array<ComponentRef<NgVirtualListItemComponent>> | 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<NgVirtualListItemComponent> | null | undefined;\r\n\r\n set snapedDisplayComponent(v: ComponentRef<NgVirtualListItemComponent> | 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 private _previousCollection: Array<{ id: Id; }> | null | undefined;\r\n\r\n private _deletedItemsMap: { [index: number]: ISize } = {};\r\n\r\n private _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 private _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 } = 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 scrollSize;\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 private 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 private 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;\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 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 };\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 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?: NgVirtualListItemComponent | 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, HEIGHT_PROP_NAME, LEFT_PROP_NAME,\r\n MAX_SCROLL_TO_ITERATIONS, PX, SCROLL, SCROLL_END, TOP_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n} from './const';\r\nimport { 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 private static __nextId: number = 0;\r\n\r\n private _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 private _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 /**\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 private _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<NgVirtualListItemComponent>> = [];\r\n\r\n protected _snapedDisplayComponent: ComponentRef<NgVirtualListItemComponent> | undefined;\r\n\r\n protected _bounds = signal<ISize | null>(null);\r\n\r\n protected _scrollSize = signal<number>(0);\r\n\r\n private _resizeObserver: ResizeObserver | null = null;\r\n\r\n private _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 private _resizeSnappedObserver: ResizeObserver | null = null;\r\n\r\n private _componentsResizeObserver = new ResizeObserver(() => {\r\n this._trackBox.changes();\r\n });\r\n\r\n private _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 private _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 private _elementRef = inject(ElementRef<HTMLDivElement>);\r\n\r\n private _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 * Dictionary of element sizes by their id\r\n */\r\n private _trackBox = new TrackBox(this.trackBy());\r\n\r\n private _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, true);\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 combineLatest([this.$initialized, toObservable(this.itemRenderer)]).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(([initialized]) => !!initialized),\r\n tap(([, itemRenderer]) => {\r\n this.resetRenderers(itemRenderer);\r\n })\r\n );\r\n }\r\n\r\n /** @internal */\r\n ngOnInit() {\r\n this._initialized.set(true);\r\n }\r\n\r\n private 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 private getIsSnappingMethodAdvanced(m?: SnappingMethod) {\r\n const method = m || this.snappingMethod();\r\n return isSnappingMethodAdvenced(method);\r\n }\r\n\r\n private getIsVertical(d?: Direction) {\r\n const dir = d || this.direction();\r\n return isDirection(dir, Directions.VERTICAL);\r\n }\r\n\r\n private 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(NgVirtualListItemComponent);\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(NgVirtualListItemComponent);\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 private updateRegularRenderer() {\r\n this._resizeSnappedComponentHandler();\r\n }\r\n\r\n private 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 private 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 private _scrollToRepeatExecutionTimeout: any;\r\n\r\n private 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 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 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 });\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), 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 * 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 private _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 private _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 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.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/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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"}
@@ -34,4 +34,8 @@ export interface IRenderVirtualListItemConfig {
34
34
  * Returns true if the snapping method is advanced
35
35
  */
36
36
  isSnappingMethodAdvanced: boolean;
37
+ /**
38
+ * z-index
39
+ */
40
+ zIndex: string;
37
41
  }
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Dictionary zIndex by id of the list element. If the value is not set or equal to 0, then a simple element is displayed, if the value is greater than 0, then the sticky position mode is enabled for the element.
2
+ * Dictionary zIndex by id of the list element. If the value is not set or equal to 0, then a simple element is displayed,
3
+ * if the value is greater than 0, then the sticky position mode is enabled for the element. 1 - position start, 2 - position end.
3
4
  * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/sticky-map.model.ts
4
5
  * @author Evgenii Grebennikov
5
6
  * @email djonnyx@gmail.com
@@ -7,6 +8,7 @@
7
8
  export interface IVirtualListStickyMap {
8
9
  /**
9
10
  * Sets zIndex for the element ID. If zIndex is greater than 0, then sticky position is applied.
11
+ * 1 - position start, 2 - position end.
10
12
  */
11
- [id: string]: number;
13
+ [id: string]: 0 | 1 | 2;
12
14
  }
@@ -84,6 +84,7 @@ export declare class NgVirtualListComponent implements AfterViewInit, OnInit, On
84
84
  */
85
85
  snappingMethod: import("@angular/core").InputSignal<SnappingMethod>;
86
86
  protected _isSnappingMethodAdvanced: boolean;
87
+ get isSnappingMethodAdvanced(): boolean;
87
88
  protected _isVertical: boolean;
88
89
  protected _displayComponents: Array<ComponentRef<NgVirtualListItemComponent>>;
89
90
  protected _snapedDisplayComponent: ComponentRef<NgVirtualListItemComponent> | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-virtual-list",
3
- "version": "19.2.12",
3
+ "version": "19.3.0",
4
4
  "author": {
5
5
  "name": "Evgenii Grebennikov",
6
6
  "email": "djonnyx@gmail.com"