ng-virtual-list 0.4.10 → 0.4.12

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
@@ -1,4 +1,3 @@
1
-
2
1
  # NgVirtualList
3
2
  Fast, optimized rendering of extremely large numbers of list items
4
3
 
@@ -20,7 +19,7 @@ npm i ng-virtual-list
20
19
 
21
20
  Template:
22
21
  ```html
23
- <ng-virtual-list class="list" direction="hotizontal" [items]="horizontalItems" [itemsOffset]="10"
22
+ <ng-virtual-list class="list" direction="hotizontal" [items]="horizontalItems" [itemsOffset]="50"
24
23
  [itemRenderer]="hotizontalItemRenderer" [itemSize]="64"></ng-virtual-list>
25
24
 
26
25
  <ng-template #hotizontalItemRenderer let-data="data">
@@ -59,7 +58,7 @@ export class AppComponent {
59
58
  Template:
60
59
  ```html
61
60
  <ng-virtual-list class="list" direction="hotizontal" [items]="horizontalGroupItems" [itemRenderer]="horizontalGroupItemRenderer"
62
- [itemsOffset]="10" [stickyMap]="horizontalGroupItemsStickyMap" [itemSize]="80"></ng-virtual-list>
61
+ [itemsOffset]="50" [stickyMap]="horizontalGroupItemsStickyMap" [itemSize]="54"></ng-virtual-list>
63
62
 
64
63
  <ng-template #horizontalGroupItemRenderer let-data="data">
65
64
  @if (data) {
@@ -116,7 +115,7 @@ export class AppComponent {
116
115
 
117
116
  Template:
118
117
  ```html
119
- <ng-virtual-list class="list simple" [items]="items" [itemsOffset]="10" [itemRenderer]="itemRenderer"
118
+ <ng-virtual-list class="list simple" [items]="items" [itemsOffset]="50" [itemRenderer]="itemRenderer"
120
119
  [itemSize]="40"></ng-virtual-list>
121
120
 
122
121
  <ng-template #itemRenderer let-data="data">
@@ -157,7 +156,7 @@ export class AppComponent {
157
156
 
158
157
  Template:
159
158
  ```html
160
- <ng-virtual-list class="list simple" [items]="groupItems" [itemsOffset]="10" [itemRenderer]="groupItemRenderer"
159
+ <ng-virtual-list class="list simple" [items]="groupItems" [itemsOffset]="50" [itemRenderer]="groupItemRenderer"
161
160
  [stickyMap]="groupItemsStickyMap" [itemSize]="40" [snap]="false"></ng-virtual-list>
162
161
 
163
162
  <ng-template #groupItemRenderer let-data="data">
@@ -184,7 +183,7 @@ Template:
184
183
 
185
184
  Template (with snapping):
186
185
  ```html
187
- <ng-virtual-list class="list simple" [items]="groupItems" [itemsOffset]="10" [itemRenderer]="groupItemRenderer"
186
+ <ng-virtual-list class="list simple" [items]="groupItems" [itemsOffset]="50" [itemRenderer]="groupItemRenderer"
188
187
  [stickyMap]="groupItemsStickyMap" [itemSize]="40" [snap]="true"></ng-virtual-list>
189
188
 
190
189
  <ng-template #groupItemRenderer let-data="data">
@@ -249,7 +248,7 @@ Template
249
248
  <button class="scroll-to__button" (click)="onButtonScrollToIdClickHandler($event)">Scroll</button>
250
249
  </div>
251
250
 
252
- <ng-virtual-list #virtualList class="list" [items]="items" [itemRenderer]="itemRenderer" [itemsOffset]="10"
251
+ <ng-virtual-list #virtualList class="list" [items]="items" [itemRenderer]="itemRenderer" [itemsOffset]="50"
253
252
  [itemSize]="40"></ng-virtual-list>
254
253
 
255
254
  <ng-template #itemRenderer let-data="data">
@@ -386,4 +385,4 @@ Methods
386
385
 
387
386
  | Method | Type | Description |
388
387
  |--|--|--|
389
- | scrollTo | (id: [Id](https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/types/id.ts), behavior: ScrollBehavior = 'auto') => number | The method scrolls the list to the element with the given id and returns the value of the scrolled area. Behavior accepts the values ​​"auto", "instant" and "smooth". |
388
+ | scrollTo | (id: [Id](https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/types/id.ts), behavior: ScrollBehavior = 'auto') => number | The method scrolls the list to the element with the given id and returns the value of the scrolled area. Behavior accepts the values ​​"auto", "instant" and "smooth". |
@@ -12,8 +12,18 @@ import { filter, tap, map, combineLatest, distinctUntilChanged, switchMap, of }
12
12
  * @email djonnyx@gmail.com
13
13
  */
14
14
  class NgVirtualListItemComponent {
15
+ static __nextId = 0;
16
+ _id;
17
+ get id() {
18
+ return this._id;
19
+ }
15
20
  data = signal(undefined);
21
+ _data = undefined;
16
22
  set item(v) {
23
+ if (this._data === v) {
24
+ return;
25
+ }
26
+ this._data = v;
17
27
  this.data.set(v);
18
28
  }
19
29
  itemRenderer = signal(undefined);
@@ -22,10 +32,19 @@ class NgVirtualListItemComponent {
22
32
  }
23
33
  _elementRef = inject((ElementRef));
24
34
  constructor() {
35
+ this._id = NgVirtualListItemComponent.__nextId = NgVirtualListItemComponent.__nextId === Number.MAX_SAFE_INTEGER
36
+ ? 0 : NgVirtualListItemComponent.__nextId + 1;
25
37
  toObservable(this.data).pipe(takeUntilDestroyed(), filter(data => !!data), tap(data => {
26
38
  const styles = this._elementRef.nativeElement.style;
27
39
  styles.zIndex = data.config.sticky;
28
- styles.transform = `translate3d(${data.config.isVertical ? 0 : data.measures.x}px, ${data.config.isVertical ? data.measures.y : 0}px , 0)`;
40
+ if (data.config.snapped) {
41
+ styles.transform = 'translate3d(0,0,0)';
42
+ styles.position = 'sticky';
43
+ }
44
+ else {
45
+ styles.position = 'absolute';
46
+ styles.transform = `translate3d(${data.config.isVertical ? 0 : data.measures.x}px, ${data.config.isVertical ? data.measures.y : 0}px , 0)`;
47
+ }
29
48
  styles.height = data.config.isVertical ? `${data.measures.height}px` : '100%';
30
49
  styles.width = data.config.isVertical ? '100%' : `${data.measures.width}px`;
31
50
  })).subscribe();
@@ -45,13 +64,13 @@ class NgVirtualListItemComponent {
45
64
  styles.visibility = 'hidden';
46
65
  }
47
66
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NgVirtualListItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: NgVirtualListItemComponent, isStandalone: true, selector: "ng-virtual-list-item", host: { classAttribute: "ngvl__item" }, ngImport: i0, template: "@let item = data();\r\n@let renderer = itemRenderer();\r\n\r\n@if (item) {\r\n<li #listItem part=\"item\" class=\"ngvl-item__container\">\r\n @if (renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\" [ngTemplateOutletContext]=\"{data: item.data || {}}\" />\r\n }\r\n</li>\r\n}", styles: [":host{position:absolute;left:0;top:0;width:100%;height:100%;box-sizing:border-box}.ngvl-item__container{margin:0;padding:0;overflow:hidden;background-color:#fff;width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
67
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: NgVirtualListItemComponent, isStandalone: true, selector: "ng-virtual-list-item", host: { classAttribute: "ngvl__item" }, ngImport: i0, template: "@let item = data();\r\n@let renderer = itemRenderer();\r\n\r\n@if (item) {\r\n<li #listItem part=\"item\" class=\"ngvl-item__container\">\r\n @if (renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\" [ngTemplateOutletContext]=\"{data: item.data || {}}\" />\r\n }\r\n</li>\r\n}", styles: [":host{position:absolute;left:0;top:0;width:100%;height:100%;box-sizing:border-box;overflow:hidden}.ngvl-item__container{margin:0;padding:0;overflow:hidden;background-color:#fff;width:inherit;height:inherit}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
49
68
  }
50
69
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NgVirtualListItemComponent, decorators: [{
51
70
  type: Component,
52
71
  args: [{ selector: 'ng-virtual-list-item', imports: [CommonModule], host: {
53
72
  'class': 'ngvl__item',
54
- }, changeDetection: ChangeDetectionStrategy.OnPush, template: "@let item = data();\r\n@let renderer = itemRenderer();\r\n\r\n@if (item) {\r\n<li #listItem part=\"item\" class=\"ngvl-item__container\">\r\n @if (renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\" [ngTemplateOutletContext]=\"{data: item.data || {}}\" />\r\n }\r\n</li>\r\n}", styles: [":host{position:absolute;left:0;top:0;width:100%;height:100%;box-sizing:border-box}.ngvl-item__container{margin:0;padding:0;overflow:hidden;background-color:#fff;width:100%;height:100%}\n"] }]
73
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "@let item = data();\r\n@let renderer = itemRenderer();\r\n\r\n@if (item) {\r\n<li #listItem part=\"item\" class=\"ngvl-item__container\">\r\n @if (renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\" [ngTemplateOutletContext]=\"{data: item.data || {}}\" />\r\n }\r\n</li>\r\n}", styles: [":host{position:absolute;left:0;top:0;width:100%;height:100%;box-sizing:border-box;overflow:hidden}.ngvl-item__container{margin:0;padding:0;overflow:hidden;background-color:#fff;width:inherit;height:inherit}\n"] }]
55
74
  }], ctorParameters: () => [] });
56
75
 
57
76
  var Directions;
@@ -159,7 +178,7 @@ class NgVirtualListComponent {
159
178
  _onScrollEndHandler = (e) => {
160
179
  const target = e.target, s = this.itemSize(), itemSize = s < 0 ? DEFAULT_ITEM_SIZE : s, snapToItem = this.snapToItem(), scrollSize = this._isVertical ? target.scrollTop : target.scrollLeft, scrollItems = Math.round(scrollSize / itemSize), actualScrollSize = snapToItem ? scrollItems * itemSize : scrollSize;
161
180
  if (target.scrollTop !== actualScrollSize) {
162
- const container = target, params = { [this._isVertical ? 'top' : 'left']: actualScrollSize, behavior: 'smooth' };
181
+ const container = target, params = { [this._isVertical ? 'top' : 'left']: actualScrollSize, behavior: 'instant' };
163
182
  container.scroll(params);
164
183
  }
165
184
  this.onScrollEnd.emit(e);
@@ -178,7 +197,7 @@ class NgVirtualListComponent {
178
197
  }));
179
198
  combineLatest([$bounds, $items, $stickyMap, $scrollSize, $itemSize, $itemsOffset, $snap, $isVertical]).pipe(takeUntilDestroyed(), distinctUntilChanged(), switchMap(([bounds, items, stickyMap, scrollSize, itemSize, itemsOffset, snap, isVertical]) => {
180
199
  const { width, height } = bounds, size = isVertical ? height : width;
181
- const itemsFromStartToScrollEnd = Math.floor(scrollSize / itemSize), itemsFromStartToDisplayEnd = Math.ceil((scrollSize + size) / itemSize), leftHiddenItemsWeight = itemsFromStartToScrollEnd * itemSize, totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * itemSize, totalItems = items.length, totalSize = totalItems * itemSize, itemsOnDisplay = totalItemsToDisplayEndWeight - leftHiddenItemsWeight;
200
+ const itemsFromStartToScrollEnd = Math.ceil(scrollSize / itemSize), itemsFromStartToDisplayEnd = Math.ceil((scrollSize + size) / itemSize), leftHiddenItemsWeight = itemsFromStartToScrollEnd * itemSize, totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * itemSize, totalItems = items.length, totalSize = totalItems * itemSize, itemsOnDisplay = totalItemsToDisplayEndWeight - leftHiddenItemsWeight;
182
201
  return of({
183
202
  items, stickyMap, itemsOffset, width, height, isVertical, scrollSize, itemsFromStartToScrollEnd,
184
203
  itemsFromStartToDisplayEnd, itemsOnDisplay, leftHiddenItemsWeight, itemSize, totalSize, snap,
@@ -202,6 +221,7 @@ class NgVirtualListComponent {
202
221
  isVertical,
203
222
  sticky,
204
223
  snap,
224
+ snapped: true,
205
225
  };
206
226
  const itemData = items[i];
207
227
  stickyItem = { id, measures, data: itemData, config };
@@ -216,32 +236,44 @@ class NgVirtualListComponent {
216
236
  if (i >= totalItems) {
217
237
  break;
218
238
  }
219
- const id = items[i].id, snaped = snap && stickyMap[id] > 0 && pos <= scrollSize, measures = {
220
- x: isVertical ? 0 : snaped ? snippedPos : pos,
221
- y: isVertical ? snaped ? snippedPos : pos : 0,
222
- width: w,
223
- height: h,
224
- }, config = {
225
- isVertical,
226
- sticky: stickyMap[id],
227
- snap,
228
- };
229
- const itemData = items[i];
230
- const item = { id, measures, data: itemData, config };
231
- if (!nextSticky && stickyItemIndex < i && snap && stickyMap[id] > 0) {
232
- nextSticky = item;
239
+ const id = items[i].id;
240
+ if (id !== stickyItem?.id) {
241
+ const snaped = snap && stickyMap[id] > 0 && pos <= scrollSize, measures = {
242
+ x: isVertical ? 0 : pos,
243
+ y: isVertical ? pos : 0,
244
+ width: w,
245
+ height: h,
246
+ }, config = {
247
+ isVertical,
248
+ sticky: stickyMap[id],
249
+ snap,
250
+ snapped: false,
251
+ };
252
+ const itemData = items[i];
253
+ const item = { id, measures, data: itemData, config };
254
+ if (!nextSticky && stickyItemIndex < i && snap && stickyMap[id] > 0 && pos <= scrollSize + itemSize) {
255
+ item.measures.x = isVertical ? 0 : snaped ? snippedPos : pos;
256
+ item.measures.y = isVertical ? snaped ? snippedPos : pos : 0;
257
+ nextSticky = item;
258
+ }
259
+ displayItems.push(item);
260
+ // for dynamic item size
261
+ // this._sizeCacheMap.set(id, measures);
233
262
  }
234
- displayItems.push(item);
235
- // for dynamic item size
236
- // this._sizeCacheMap.set(id, measures);
237
263
  renderWeight -= itemSize;
238
264
  pos += itemSize;
239
265
  i++;
240
266
  }
241
267
  const axis = isVertical ? 'y' : 'x';
242
268
  if (nextSticky && stickyItem && nextSticky.measures[axis] <= scrollSize + itemSize) {
243
- stickyItem.measures[axis] = nextSticky.measures[axis] - itemSize;
244
- stickyItem.config.sticky = 1;
269
+ if (nextSticky.measures[axis] > scrollSize) {
270
+ stickyItem.measures[axis] = nextSticky.measures[axis] - itemSize;
271
+ stickyItem.config.snapped = nextSticky.config.snapped = false;
272
+ stickyItem.config.sticky = 1;
273
+ }
274
+ else {
275
+ nextSticky.config.snapped = true;
276
+ }
245
277
  }
246
278
  }
247
279
  this._displayItems.set(displayItems);
@@ -250,9 +282,12 @@ class NgVirtualListComponent {
250
282
  l.nativeElement.style[isVertical ? 'height' : 'width'] = `${totalSize}px`;
251
283
  }
252
284
  })).subscribe();
285
+ toObservable(this.itemRenderer).pipe(takeUntilDestroyed(), distinctUntilChanged(), tap(itemRenderer => {
286
+ this.resetRenderers(itemRenderer);
287
+ }));
253
288
  toObservable(this._displayItems).pipe(takeUntilDestroyed(), distinctUntilChanged(), tap(displayItems => {
254
289
  this.createDisplayComponentsIfNeed(displayItems);
255
- this.refresh(displayItems);
290
+ this.tracking(displayItems);
256
291
  })).subscribe();
257
292
  }
258
293
  getIsVertical(d) {
@@ -261,6 +296,7 @@ class NgVirtualListComponent {
261
296
  }
262
297
  createDisplayComponentsIfNeed(displayItems) {
263
298
  if (!displayItems || !this._listContainerRef) {
299
+ this._doMap = {};
264
300
  return;
265
301
  }
266
302
  const _listContainerRef = this._listContainerRef;
@@ -270,27 +306,66 @@ class NgVirtualListComponent {
270
306
  this._displayComponents.push(comp);
271
307
  }
272
308
  }
273
- const maxLength = displayItems.length + DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR + this.itemsOffset();
274
- if (this._displayComponents.length > maxLength) {
275
- while (this._displayComponents.length > maxLength) {
276
- const comp = this._displayComponents.pop();
277
- comp?.destroy();
278
- }
279
- for (let i = displayItems.length, l = this._displayComponents.length; i < l; i++) {
280
- const comp = this._displayComponents[i];
281
- comp.instance.hide();
309
+ const maxLength = displayItems.length;
310
+ while (this._displayComponents.length > maxLength) {
311
+ const comp = this._displayComponents.pop();
312
+ comp?.destroy();
313
+ const id = comp?.instance.item?.id;
314
+ if (id !== undefined) {
315
+ delete this._trackMap[id];
282
316
  }
283
317
  }
318
+ this.resetRenderers();
284
319
  }
285
- refresh(displayItems) {
320
+ resetRenderers(itemRenderer) {
321
+ const doMap = {};
322
+ for (let i = 0, l = this._displayComponents.length; i < l; i++) {
323
+ const item = this._displayComponents[i];
324
+ item.instance.renderer = itemRenderer || this.itemRenderer();
325
+ doMap[item.instance.id] = i;
326
+ }
327
+ this._doMap = doMap;
328
+ }
329
+ /**
330
+ * Dictionary displayItems id by IRenderVirtualListItem.id
331
+ */
332
+ _trackMap = {};
333
+ /**
334
+ * displayItems dictionary of indexes by id
335
+ */
336
+ _doMap = {};
337
+ /**
338
+ * tracking by id
339
+ */
340
+ tracking(displayItems) {
286
341
  if (!displayItems) {
287
342
  return;
288
343
  }
344
+ const untrackedItems = [...this._displayComponents];
289
345
  for (let i = 0, l = displayItems.length; i < l; i++) {
290
- const el = this._displayComponents[i];
291
- el.instance.item = displayItems[i];
292
- el.instance.renderer = this.itemRenderer();
293
- el.instance.showIfNeed();
346
+ const item = displayItems[i], doId = this._trackMap[item.id];
347
+ if (this._trackMap.hasOwnProperty(item.id)) {
348
+ const lastIndex = this._doMap[doId], el = this._displayComponents[lastIndex], elId = el?.instance.id;
349
+ if (el && elId === doId) {
350
+ const indexByUntrackedItems = untrackedItems.findIndex(v => v.instance.id === elId);
351
+ if (indexByUntrackedItems > -1) {
352
+ el.instance.item = item;
353
+ untrackedItems.splice(indexByUntrackedItems, 1);
354
+ continue;
355
+ }
356
+ }
357
+ delete this._trackMap[item.id];
358
+ }
359
+ if (untrackedItems.length > 0) {
360
+ const el = untrackedItems.shift(), item = displayItems[i];
361
+ if (el) {
362
+ el.instance.item = item;
363
+ this._trackMap[item.id] = el.instance.id;
364
+ }
365
+ }
366
+ }
367
+ if (untrackedItems.length) {
368
+ throw Error('tracking by id caused an error');
294
369
  }
295
370
  }
296
371
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ng-virtual-list.mjs","sources":["../../../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/enums/directions.ts","../../../projects/ng-virtual-list/src/lib/const/index.ts","../../../projects/ng-virtual-list/src/lib/utils/isDirection.ts","../../../projects/ng-virtual-list/src/lib/utils/toggleClassName.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":["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 { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { filter, tap } from 'rxjs';\r\n\r\n/**\r\n * Virtual list item component\r\n * @homepage https://github.com/DjonnyX/ng-virtual-list/tree/main/projects/ng-virtual-list\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 data = signal<IRenderVirtualListItem | undefined>(undefined);\r\n\r\n set item(v: IRenderVirtualListItem | undefined) {\r\n this.data.set(v);\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 = inject(ElementRef<HTMLElement>);\r\n\r\n constructor() {\r\n toObservable(this.data).pipe(\r\n takeUntilDestroyed(),\r\n filter(data => !!data),\r\n tap(data => {\r\n const styles = this._elementRef.nativeElement.style;\r\n styles.zIndex = data.config.sticky;\r\n styles.transform = `translate3d(${data.config.isVertical ? 0 : data.measures.x}px, ${data.config.isVertical ? data.measures.y : 0}px , 0)`;\r\n styles.height = data.config.isVertical ? `${data.measures.height}px` : '100%';\r\n styles.width = data.config.isVertical ? '100%' : `${data.measures.width}px`;\r\n })\r\n ).subscribe();\r\n }\r\n\r\n showIfNeed() {\r\n const styles = this._elementRef.nativeElement.style;\r\n if (styles.visibility === 'visible') {\r\n return;\r\n }\r\n\r\n styles.visibility = 'visible';\r\n }\r\n\r\n hide() {\r\n const styles = this._elementRef.nativeElement.style;\r\n if (styles.visibility === 'hidden') {\r\n return;\r\n }\r\n\r\n styles.visibility = 'hidden';\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\">\r\n @if (renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\" [ngTemplateOutletContext]=\"{data: item.data || {}}\" />\r\n }\r\n</li>\r\n}","export enum Directions {\r\n HORIZONTAL = 'horizontal',\r\n VERTICAL = 'vertical',\r\n}","import { 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_SNAP_TO_ITEM = false;\r\n\r\nexport const DEFAULT_DIRECTION = Directions.VERTICAL;\r\n\r\nexport const DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR = 1;\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\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}","export 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 {\r\n AfterViewInit, ChangeDetectionStrategy, Component, ComponentRef, ElementRef, inject, input,\r\n OnDestroy, output, signal, TemplateRef, ViewChild, viewChild, ViewContainerRef, ViewEncapsulation,\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, of, switchMap, tap } from 'rxjs';\r\nimport { NgVirtualListItemComponent } from './components/ng-virtual-list-item.component';\r\nimport {\r\n DEFAULT_DIRECTION, DEFAULT_ITEM_SIZE, DEFAULT_ITEMS_OFFSET, DEFAULT_SNAP, DEFAULT_SNAP_TO_ITEM,\r\n DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR,\r\n} from './const';\r\nimport { IVirtualListCollection, IVirtualListItem, IVirtualListStickyMap } from './models';\r\nimport { Id, /*IRect*/ } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { IRenderVirtualListItem } from './models/render-item.model';\r\nimport { Direction, Directions } from './enums';\r\nimport { isDirection, toggleClassName } from './utils';\r\n\r\n/**\r\n * Virtual list component\r\n * @homepage https://github.com/DjonnyX/ng-virtual-list/tree/main/projects/ng-virtual-list\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, 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 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<Event | undefined>();\r\n\r\n /**\r\n * Fires when the list has completed scrolling.\r\n */\r\n onScrollEnd = output<Event | undefined>();\r\n\r\n /**\r\n * Collection of list items.\r\n */\r\n items = input.required<IVirtualListCollection>();\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 * Determines whether scroll positions will be snapped to the element. Default value is \"false\".\r\n */\r\n snapToItem = input<boolean>(DEFAULT_SNAP_TO_ITEM);\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 /**\r\n * If direction = 'vertical', then the height of a typical element. If direction = 'horizontal', then the width of a typical element.\r\n */\r\n itemSize = input(DEFAULT_ITEM_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 private _isVertical = this.getIsVertical();\r\n\r\n protected _displayItems = signal<IRenderVirtualListCollection | null>(null);\r\n\r\n protected _displayComponents: Array<ComponentRef<NgVirtualListItemComponent>> = [];\r\n\r\n protected _bounds = signal<DOMRect | 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 _onResizeHandler = () => {\r\n this._bounds.set(this._container()?.nativeElement?.getBoundingClientRect() ?? null);\r\n }\r\n\r\n private _onScrollHandler = (e: Event) => {\r\n const target = e.target as HTMLDivElement,\r\n scrollSize = this._isVertical ? target.scrollTop : target.scrollLeft;\r\n\r\n this._scrollSize.set(scrollSize);\r\n\r\n this.onScroll.emit(e);\r\n }\r\n\r\n private _onScrollEndHandler = (e: Event) => {\r\n const target = e.target as HTMLDivElement, s = this.itemSize(), itemSize = s < 0 ? DEFAULT_ITEM_SIZE : s,\r\n snapToItem = this.snapToItem(), scrollSize = this._isVertical ? target.scrollTop : target.scrollLeft,\r\n scrollItems = Math.round(scrollSize / itemSize), actualScrollSize = snapToItem ? scrollItems * itemSize : scrollSize;\r\n\r\n if (target.scrollTop !== actualScrollSize) {\r\n const container = target, params: ScrollToOptions = { [this._isVertical ? 'top' : 'left']: actualScrollSize, behavior: 'smooth' };\r\n\r\n container.scroll(params);\r\n }\r\n\r\n this.onScrollEnd.emit(e);\r\n }\r\n\r\n private _elementRef = inject(ElementRef<HTMLDivElement>);\r\n\r\n // for dynamic item size\r\n // private _sizeCacheMap = new Map<Id, IRect>();\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 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 tap(v => {\r\n this._isVertical = v;\r\n const el: HTMLElement = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? 'vertical' : 'horizontal', true);\r\n }),\r\n );\r\n\r\n combineLatest([$bounds, $items, $stickyMap, $scrollSize, $itemSize, $itemsOffset, $snap, $isVertical]).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(([bounds, items, stickyMap, scrollSize, itemSize, itemsOffset, snap, isVertical]) => {\r\n const { width, height } = bounds, size = isVertical ? height : width;\r\n const itemsFromStartToScrollEnd = Math.floor(scrollSize / itemSize),\r\n itemsFromStartToDisplayEnd = Math.ceil((scrollSize + size) / itemSize),\r\n leftHiddenItemsWeight = itemsFromStartToScrollEnd * itemSize,\r\n totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * itemSize,\r\n totalItems = items.length,\r\n totalSize = totalItems * itemSize,\r\n itemsOnDisplay = totalItemsToDisplayEndWeight - leftHiddenItemsWeight;\r\n return of({\r\n items, stickyMap, itemsOffset, width, height, isVertical, scrollSize, itemsFromStartToScrollEnd,\r\n itemsFromStartToDisplayEnd, itemsOnDisplay, leftHiddenItemsWeight, itemSize, totalSize, snap,\r\n });\r\n }),\r\n tap(({\r\n items, stickyMap, itemsOffset, width, height, isVertical, scrollSize, itemsFromStartToScrollEnd, itemsFromStartToDisplayEnd,\r\n itemsOnDisplay, leftHiddenItemsWeight, itemSize, totalSize, snap,\r\n }) => {\r\n const displayItems: IRenderVirtualListCollection = [];\r\n if (items.length) {\r\n const w = isVertical ? width : itemSize, h = isVertical ? itemSize : height, totalItems = items.length,\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, itemsOffset),\r\n rightItemLength = itemsFromStartToDisplayEnd + itemsOffset > totalItems\r\n ? totalItems - itemsFromStartToDisplayEnd : itemsOffset,\r\n leftItemsWeight = leftItemLength * itemSize, rightItemsWeight = rightItemLength * itemSize,\r\n startIndex = itemsFromStartToScrollEnd - leftItemLength, snippedPos = Math.floor(scrollSize);\r\n let pos = leftHiddenItemsWeight - leftItemsWeight,\r\n renderWeight = itemsOnDisplay + leftItemsWeight + rightItemsWeight,\r\n stickyItem: IRenderVirtualListItem | undefined, nextSticky: IRenderVirtualListItem | undefined, stickyItemIndex = -1;\r\n\r\n if (snap) {\r\n for (let i = itemsFromStartToScrollEnd - 1; i >= 0; i--) {\r\n const id = items[i].id, sticky = stickyMap[id];\r\n if (sticky > 0) {\r\n const measures = {\r\n x: isVertical ? 0 : snippedPos,\r\n y: isVertical ? snippedPos : 0,\r\n width: w,\r\n height: h,\r\n }, config = {\r\n isVertical,\r\n sticky,\r\n snap,\r\n };\r\n\r\n const itemData: IVirtualListItem = items[i];\r\n\r\n stickyItem = { id, measures, data: itemData, config };\r\n stickyItemIndex = i;\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 (renderWeight > 0) {\r\n if (i >= totalItems) {\r\n break;\r\n }\r\n\r\n const id = items[i].id,\r\n snaped = snap && stickyMap[id] > 0 && pos <= scrollSize,\r\n measures = {\r\n x: isVertical ? 0 : snaped ? snippedPos : pos,\r\n y: isVertical ? snaped ? snippedPos : pos : 0,\r\n width: w,\r\n height: h,\r\n }, config = {\r\n isVertical,\r\n sticky: stickyMap[id],\r\n snap,\r\n };\r\n\r\n const itemData: IVirtualListItem = items[i];\r\n\r\n const item: IRenderVirtualListItem = { id, measures, data: itemData, config };\r\n if (!nextSticky && stickyItemIndex < i && snap && stickyMap[id] > 0) {\r\n nextSticky = item;\r\n }\r\n\r\n displayItems.push(item);\r\n\r\n // for dynamic item size\r\n // this._sizeCacheMap.set(id, measures);\r\n\r\n renderWeight -= itemSize;\r\n pos += itemSize;\r\n i++;\r\n }\r\n\r\n const axis = isVertical ? 'y' : 'x';\r\n\r\n if (nextSticky && stickyItem && nextSticky.measures[axis] <= scrollSize + itemSize) {\r\n stickyItem.measures[axis] = nextSticky.measures[axis] - itemSize;\r\n stickyItem.config.sticky = 1;\r\n }\r\n }\r\n\r\n this._displayItems.set(displayItems);\r\n\r\n const l = this._list();\r\n if (l) {\r\n l.nativeElement.style[isVertical ? 'height' : 'width'] = `${totalSize}px`;\r\n }\r\n })\r\n ).subscribe();\r\n\r\n toObservable(this._displayItems).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(displayItems => {\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n this.refresh(displayItems);\r\n }),\r\n ).subscribe();\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 return;\r\n }\r\n const _listContainerRef = this._listContainerRef;\r\n\r\n while (this._displayComponents.length < displayItems.length) {\r\n if (_listContainerRef) {\r\n const comp = _listContainerRef.createComponent(NgVirtualListItemComponent);\r\n this._displayComponents.push(comp);\r\n }\r\n }\r\n\r\n const maxLength = displayItems.length + DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR + this.itemsOffset();\r\n if (this._displayComponents.length > maxLength) {\r\n while (this._displayComponents.length > maxLength) {\r\n const comp = this._displayComponents.pop();\r\n comp?.destroy();\r\n }\r\n for (let i = displayItems.length, l = this._displayComponents.length; i < l; i++) {\r\n const comp = this._displayComponents[i];\r\n comp.instance.hide();\r\n }\r\n }\r\n }\r\n\r\n protected refresh(displayItems: IRenderVirtualListCollection | null) {\r\n if (!displayItems) {\r\n return;\r\n }\r\n\r\n for (let i = 0, l = displayItems.length; i < l; i++) {\r\n const el = this._displayComponents[i];\r\n el.instance.item = displayItems[i];\r\n el.instance.renderer = this.itemRenderer();\r\n el.instance.showIfNeed();\r\n }\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 = 'auto') {\r\n const items = this.items();\r\n if (!items || !items.length) {\r\n return;\r\n }\r\n\r\n const index = items.findIndex(item => item.id === id), scrollSize = index * this.itemSize(), container = this._container();\r\n if (container) {\r\n const params: ScrollToOptions = { [this._isVertical ? 'top' : 'left']: scrollSize, behavior };\r\n container.nativeElement.scroll(params);\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n containerEl.nativeElement.addEventListener('scroll', this._onScrollHandler);\r\n containerEl.nativeElement.addEventListener('scrollend', this._onScrollEndHandler);\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 ngOnDestroy(): void {\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n containerEl.nativeElement.removeEventListener('scroll', this._onScrollHandler);\r\n containerEl.nativeElement.removeEventListener('scrollend', this._onScrollEndHandler);\r\n\r\n if (this._resizeObserver) {\r\n this._resizeObserver.unobserve(containerEl.nativeElement);\r\n }\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","<div #container part=\"scroller\" class=\"ngvl__container\">\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/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/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/enums/directions.ts","../../../projects/ng-virtual-list/src/lib/const/index.ts","../../../projects/ng-virtual-list/src/lib/utils/isDirection.ts","../../../projects/ng-virtual-list/src/lib/utils/toggleClassName.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":["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 { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { filter, tap } from 'rxjs';\r\n\r\n/**\r\n * Virtual list item component\r\n * @homepage https://github.com/DjonnyX/ng-virtual-list/tree/main/projects/ng-virtual-list\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 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 this._data = v;\r\n this.data.set(v);\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 = inject(ElementRef<HTMLElement>);\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 toObservable(this.data).pipe(\r\n takeUntilDestroyed(),\r\n filter(data => !!data),\r\n tap(data => {\r\n const styles = this._elementRef.nativeElement.style;\r\n styles.zIndex = data.config.sticky;\r\n if (data.config.snapped) {\r\n styles.transform = 'translate3d(0,0,0)';\r\n styles.position = 'sticky';\r\n } else {\r\n styles.position = 'absolute';\r\n styles.transform = `translate3d(${data.config.isVertical ? 0 : data.measures.x}px, ${data.config.isVertical ? data.measures.y : 0}px , 0)`;\r\n }\r\n styles.height = data.config.isVertical ? `${data.measures.height}px` : '100%';\r\n styles.width = data.config.isVertical ? '100%' : `${data.measures.width}px`;\r\n })\r\n ).subscribe();\r\n }\r\n\r\n showIfNeed() {\r\n const styles = this._elementRef.nativeElement.style;\r\n if (styles.visibility === 'visible') {\r\n return;\r\n }\r\n\r\n styles.visibility = 'visible';\r\n }\r\n\r\n hide() {\r\n const styles = this._elementRef.nativeElement.style;\r\n if (styles.visibility === 'hidden') {\r\n return;\r\n }\r\n\r\n styles.visibility = 'hidden';\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\">\r\n @if (renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\" [ngTemplateOutletContext]=\"{data: item.data || {}}\" />\r\n }\r\n</li>\r\n}","export enum Directions {\r\n HORIZONTAL = 'horizontal',\r\n VERTICAL = 'vertical',\r\n}","import { 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_SNAP_TO_ITEM = false;\r\n\r\nexport const DEFAULT_DIRECTION = Directions.VERTICAL;\r\n\r\nexport const DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR = 1;\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\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}","export 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 {\r\n AfterViewInit, ChangeDetectionStrategy, Component, ComponentRef, ElementRef, inject, input,\r\n OnDestroy, output, signal, TemplateRef, ViewChild, viewChild, ViewContainerRef, ViewEncapsulation,\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, of, switchMap, tap } from 'rxjs';\r\nimport { NgVirtualListItemComponent } from './components/ng-virtual-list-item.component';\r\nimport {\r\n DEFAULT_DIRECTION, DEFAULT_ITEM_SIZE, DEFAULT_ITEMS_OFFSET, DEFAULT_SNAP, DEFAULT_SNAP_TO_ITEM,\r\n DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR,\r\n} from './const';\r\nimport { IVirtualListCollection, IVirtualListItem, IVirtualListStickyMap } from './models';\r\nimport { Id, /*IRect*/ } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { IRenderVirtualListItem } from './models/render-item.model';\r\nimport { Direction, Directions } from './enums';\r\nimport { isDirection, toggleClassName } from './utils';\r\n\r\n/**\r\n * Virtual list component\r\n * @homepage https://github.com/DjonnyX/ng-virtual-list/tree/main/projects/ng-virtual-list\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, 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 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<Event | undefined>();\r\n\r\n /**\r\n * Fires when the list has completed scrolling.\r\n */\r\n onScrollEnd = output<Event | undefined>();\r\n\r\n /**\r\n * Collection of list items.\r\n */\r\n items = input.required<IVirtualListCollection>();\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 * Determines whether scroll positions will be snapped to the element. Default value is \"false\".\r\n */\r\n snapToItem = input<boolean>(DEFAULT_SNAP_TO_ITEM);\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 /**\r\n * If direction = 'vertical', then the height of a typical element. If direction = 'horizontal', then the width of a typical element.\r\n */\r\n itemSize = input(DEFAULT_ITEM_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 private _isVertical = this.getIsVertical();\r\n\r\n protected _displayItems = signal<IRenderVirtualListCollection | null>(null);\r\n\r\n protected _displayComponents: Array<ComponentRef<NgVirtualListItemComponent>> = [];\r\n\r\n protected _bounds = signal<DOMRect | 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 _onResizeHandler = () => {\r\n this._bounds.set(this._container()?.nativeElement?.getBoundingClientRect() ?? null);\r\n }\r\n\r\n private _onScrollHandler = (e: Event) => {\r\n const target = e.target as HTMLDivElement,\r\n scrollSize = this._isVertical ? target.scrollTop : target.scrollLeft;\r\n\r\n this._scrollSize.set(scrollSize);\r\n\r\n this.onScroll.emit(e);\r\n }\r\n\r\n private _onScrollEndHandler = (e: Event) => {\r\n const target = e.target as HTMLDivElement, s = this.itemSize(), itemSize = s < 0 ? DEFAULT_ITEM_SIZE : s,\r\n snapToItem = this.snapToItem(), scrollSize = this._isVertical ? target.scrollTop : target.scrollLeft,\r\n scrollItems = Math.round(scrollSize / itemSize), actualScrollSize = snapToItem ? scrollItems * itemSize : scrollSize;\r\n\r\n if (target.scrollTop !== actualScrollSize) {\r\n const container = target, params: ScrollToOptions = { [this._isVertical ? 'top' : 'left']: actualScrollSize, behavior: 'instant' };\r\n\r\n container.scroll(params);\r\n }\r\n\r\n this.onScrollEnd.emit(e);\r\n }\r\n\r\n private _elementRef = inject(ElementRef<HTMLDivElement>);\r\n\r\n // for dynamic item size\r\n // private _sizeCacheMap = new Map<Id, IRect>();\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 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 tap(v => {\r\n this._isVertical = v;\r\n const el: HTMLElement = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? 'vertical' : 'horizontal', true);\r\n }),\r\n );\r\n\r\n combineLatest([$bounds, $items, $stickyMap, $scrollSize, $itemSize, $itemsOffset, $snap, $isVertical]).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(([bounds, items, stickyMap, scrollSize, itemSize, itemsOffset, snap, isVertical]) => {\r\n const { width, height } = bounds, size = isVertical ? height : width;\r\n const itemsFromStartToScrollEnd = Math.ceil(scrollSize / itemSize),\r\n itemsFromStartToDisplayEnd = Math.ceil((scrollSize + size) / itemSize),\r\n leftHiddenItemsWeight = itemsFromStartToScrollEnd * itemSize,\r\n totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * itemSize,\r\n totalItems = items.length,\r\n totalSize = totalItems * itemSize,\r\n itemsOnDisplay = totalItemsToDisplayEndWeight - leftHiddenItemsWeight;\r\n return of({\r\n items, stickyMap, itemsOffset, width, height, isVertical, scrollSize, itemsFromStartToScrollEnd,\r\n itemsFromStartToDisplayEnd, itemsOnDisplay, leftHiddenItemsWeight, itemSize, totalSize, snap,\r\n });\r\n }),\r\n tap(({\r\n items, stickyMap, itemsOffset, width, height, isVertical, scrollSize, itemsFromStartToScrollEnd, itemsFromStartToDisplayEnd,\r\n itemsOnDisplay, leftHiddenItemsWeight, itemSize, totalSize, snap,\r\n }) => {\r\n const displayItems: IRenderVirtualListCollection = [];\r\n if (items.length) {\r\n const w = isVertical ? width : itemSize, h = isVertical ? itemSize : height, totalItems = items.length,\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, itemsOffset),\r\n rightItemLength = itemsFromStartToDisplayEnd + itemsOffset > totalItems\r\n ? totalItems - itemsFromStartToDisplayEnd : itemsOffset,\r\n leftItemsWeight = leftItemLength * itemSize, rightItemsWeight = rightItemLength * itemSize,\r\n startIndex = itemsFromStartToScrollEnd - leftItemLength, snippedPos = Math.floor(scrollSize);\r\n let pos = leftHiddenItemsWeight - leftItemsWeight,\r\n renderWeight = itemsOnDisplay + leftItemsWeight + rightItemsWeight,\r\n stickyItem: IRenderVirtualListItem | undefined, nextSticky: IRenderVirtualListItem | undefined, stickyItemIndex = -1;\r\n\r\n if (snap) {\r\n for (let i = itemsFromStartToScrollEnd - 1; i >= 0; i--) {\r\n const id = items[i].id, sticky = stickyMap[id];\r\n if (sticky > 0) {\r\n const measures = {\r\n x: isVertical ? 0 : snippedPos,\r\n y: isVertical ? snippedPos : 0,\r\n width: w,\r\n height: h,\r\n }, config = {\r\n isVertical,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n };\r\n\r\n const itemData: IVirtualListItem = items[i];\r\n\r\n stickyItem = { id, measures, data: itemData, config };\r\n stickyItemIndex = i;\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 (renderWeight > 0) {\r\n if (i >= totalItems) {\r\n break;\r\n }\r\n\r\n const id = items[i].id;\r\n\r\n if (id !== stickyItem?.id) {\r\n const snaped = snap && stickyMap[id] > 0 && pos <= scrollSize,\r\n measures = {\r\n x: isVertical ? 0 : pos,\r\n y: isVertical ? pos : 0,\r\n width: w,\r\n height: h,\r\n }, config = {\r\n isVertical,\r\n sticky: stickyMap[id],\r\n snap,\r\n snapped: false,\r\n };\r\n\r\n const itemData: IVirtualListItem = items[i];\r\n\r\n const item: IRenderVirtualListItem = { id, measures, data: itemData, config };\r\n if (!nextSticky && stickyItemIndex < i && snap && stickyMap[id] > 0 && pos <= scrollSize + itemSize) {\r\n item.measures.x = isVertical ? 0 : snaped ? snippedPos : pos;\r\n item.measures.y = isVertical ? snaped ? snippedPos : pos : 0;\r\n nextSticky = item;\r\n }\r\n\r\n displayItems.push(item);\r\n\r\n // for dynamic item size\r\n // this._sizeCacheMap.set(id, measures);\r\n }\r\n renderWeight -= itemSize;\r\n pos += itemSize;\r\n i++;\r\n }\r\n\r\n const axis = isVertical ? 'y' : 'x';\r\n\r\n if (nextSticky && stickyItem && nextSticky.measures[axis] <= scrollSize + itemSize) {\r\n if (nextSticky.measures[axis] > scrollSize) {\r\n stickyItem.measures[axis] = nextSticky.measures[axis] - itemSize;\r\n stickyItem.config.snapped = nextSticky.config.snapped = false;\r\n stickyItem.config.sticky = 1;\r\n } else {\r\n nextSticky.config.snapped = true;\r\n }\r\n }\r\n }\r\n\r\n this._displayItems.set(displayItems);\r\n\r\n const l = this._list();\r\n if (l) {\r\n l.nativeElement.style[isVertical ? 'height' : 'width'] = `${totalSize}px`;\r\n }\r\n })\r\n ).subscribe();\r\n\r\n toObservable(this.itemRenderer).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(itemRenderer => {\r\n this.resetRenderers(itemRenderer);\r\n })\r\n )\r\n\r\n toObservable(this._displayItems).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(displayItems => {\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n this.tracking(displayItems);\r\n }),\r\n ).subscribe();\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._doMap = {};\r\n return;\r\n }\r\n const _listContainerRef = this._listContainerRef;\r\n\r\n while (this._displayComponents.length < displayItems.length) {\r\n if (_listContainerRef) {\r\n const comp = _listContainerRef.createComponent(NgVirtualListItemComponent);\r\n this._displayComponents.push(comp);\r\n }\r\n }\r\n\r\n const maxLength = displayItems.length;\r\n while (this._displayComponents.length > maxLength) {\r\n const comp = this._displayComponents.pop();\r\n comp?.destroy();\r\n const id = comp?.instance.item?.id;\r\n if (id !== undefined) {\r\n delete this._trackMap[id];\r\n }\r\n }\r\n\r\n this.resetRenderers();\r\n }\r\n\r\n private resetRenderers(itemRenderer?: TemplateRef<any>) {\r\n const doMap: { [id: number]: number } = {};\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const item = this._displayComponents[i];\r\n item.instance.renderer = itemRenderer || this.itemRenderer();\r\n doMap[item.instance.id] = i;\r\n }\r\n\r\n this._doMap = doMap;\r\n }\r\n\r\n /**\r\n * Dictionary displayItems id by IRenderVirtualListItem.id\r\n */\r\n private _trackMap: { [id: Id]: number } = {};\r\n\r\n /**\r\n * displayItems dictionary of indexes by id\r\n */\r\n private _doMap: { [id: number]: number } = {};\r\n\r\n /**\r\n * tracking by id\r\n */\r\n protected tracking(displayItems: IRenderVirtualListCollection | null) {\r\n if (!displayItems) {\r\n return;\r\n }\r\n\r\n const untrackedItems = [...this._displayComponents];\r\n\r\n for (let i = 0, l = displayItems.length; i < l; i++) {\r\n const item = displayItems[i], doId = this._trackMap[item.id];\r\n if (this._trackMap.hasOwnProperty(item.id)) {\r\n const lastIndex = this._doMap[doId], el = this._displayComponents[lastIndex],\r\n elId = el?.instance.id;\r\n if (el && elId === doId) {\r\n const indexByUntrackedItems = untrackedItems.findIndex(v => v.instance.id === elId);\r\n if (indexByUntrackedItems > -1) {\r\n el.instance.item = item;\r\n untrackedItems.splice(indexByUntrackedItems, 1);\r\n continue;\r\n }\r\n }\r\n delete this._trackMap[item.id];\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n const el = untrackedItems.shift(), item = displayItems[i];\r\n if (el) {\r\n el.instance.item = item;\r\n this._trackMap[item.id] = el.instance.id;\r\n }\r\n }\r\n }\r\n\r\n if (untrackedItems.length) {\r\n throw Error('tracking by id caused an error')\r\n }\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 = 'auto') {\r\n const items = this.items();\r\n if (!items || !items.length) {\r\n return;\r\n }\r\n\r\n const index = items.findIndex(item => item.id === id), scrollSize = index * this.itemSize(), container = this._container();\r\n if (container) {\r\n const params: ScrollToOptions = { [this._isVertical ? 'top' : 'left']: scrollSize, behavior };\r\n container.nativeElement.scroll(params);\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n containerEl.nativeElement.addEventListener('scroll', this._onScrollHandler);\r\n containerEl.nativeElement.addEventListener('scrollend', this._onScrollEndHandler);\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 ngOnDestroy(): void {\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n containerEl.nativeElement.removeEventListener('scroll', this._onScrollHandler);\r\n containerEl.nativeElement.removeEventListener('scrollend', this._onScrollEndHandler);\r\n\r\n if (this._resizeObserver) {\r\n this._resizeObserver.unobserve(containerEl.nativeElement);\r\n }\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","<div #container part=\"scroller\" class=\"ngvl__container\">\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/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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"}
@@ -8,7 +8,11 @@ import * as i0 from "@angular/core";
8
8
  * @email djonnyx@gmail.com
9
9
  */
10
10
  export declare class NgVirtualListItemComponent {
11
+ private static __nextId;
12
+ private _id;
13
+ get id(): number;
11
14
  data: import("@angular/core").WritableSignal<IRenderVirtualListItem | undefined>;
15
+ private _data;
12
16
  set item(v: IRenderVirtualListItem | undefined);
13
17
  itemRenderer: import("@angular/core").WritableSignal<TemplateRef<any> | undefined>;
14
18
  set renderer(v: TemplateRef<any> | undefined);
@@ -1,5 +1,6 @@
1
1
  export interface IRenderVirtualListItemConfig {
2
2
  sticky: number;
3
3
  snap: boolean;
4
+ snapped: boolean;
4
5
  isVertical: boolean;
5
6
  }
@@ -75,7 +75,19 @@ export declare class NgVirtualListComponent implements AfterViewInit, OnDestroy
75
75
  constructor();
76
76
  private getIsVertical;
77
77
  private createDisplayComponentsIfNeed;
78
- protected refresh(displayItems: IRenderVirtualListCollection | null): void;
78
+ private resetRenderers;
79
+ /**
80
+ * Dictionary displayItems id by IRenderVirtualListItem.id
81
+ */
82
+ private _trackMap;
83
+ /**
84
+ * displayItems dictionary of indexes by id
85
+ */
86
+ private _doMap;
87
+ /**
88
+ * tracking by id
89
+ */
90
+ protected tracking(displayItems: IRenderVirtualListCollection | null): void;
79
91
  /**
80
92
  * The method scrolls the list to the element with the given id and returns the value of the scrolled area.
81
93
  * Behavior accepts the values ​​"auto", "instant" and "smooth".
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-virtual-list",
3
- "version": "0.4.10",
3
+ "version": "0.4.12",
4
4
  "author": {
5
5
  "name": "Evgenii Grebennikov",
6
6
  "email": "djonnyx@gmail.com"