ng-virtual-list 16.0.2 → 16.0.4

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.
Files changed (52) hide show
  1. package/README.md +7 -7
  2. package/esm2022/lib/components/ng-virtual-list-item.component.mjs +2 -2
  3. package/esm2022/lib/const/index.mjs +2 -1
  4. package/esm2022/lib/enums/direction.mjs +1 -1
  5. package/esm2022/lib/enums/directions.mjs +2 -2
  6. package/esm2022/lib/models/collection.model.mjs +1 -1
  7. package/esm2022/lib/models/index.mjs +1 -1
  8. package/esm2022/lib/models/item.model.mjs +1 -1
  9. package/esm2022/lib/models/render-collection.model.mjs +1 -1
  10. package/esm2022/lib/models/render-item-config.model.mjs +1 -1
  11. package/esm2022/lib/models/render-item.model.mjs +1 -1
  12. package/esm2022/lib/models/scroll-direction.model.mjs +2 -0
  13. package/esm2022/lib/models/scroll-event.model.mjs +2 -0
  14. package/esm2022/lib/models/sticky-map.model.mjs +1 -1
  15. package/esm2022/lib/ng-virtual-list.component.mjs +45 -48
  16. package/esm2022/lib/types/id.mjs +1 -1
  17. package/esm2022/lib/types/rect.mjs +1 -1
  18. package/esm2022/lib/types/size.mjs +1 -1
  19. package/esm2022/lib/utils/cacheMap.mjs +43 -2
  20. package/esm2022/lib/utils/debounce.mjs +2 -2
  21. package/esm2022/lib/utils/eventEmitter.mjs +2 -2
  22. package/esm2022/lib/utils/isDirection.mjs +2 -2
  23. package/esm2022/lib/utils/toggleClassName.mjs +2 -2
  24. package/esm2022/lib/utils/trackBox.mjs +56 -22
  25. package/esm2022/lib/utils/tracker.mjs +2 -2
  26. package/fesm2022/ng-virtual-list.mjs +147 -75
  27. package/fesm2022/ng-virtual-list.mjs.map +1 -1
  28. package/lib/components/ng-virtual-list-item.component.d.ts +1 -1
  29. package/lib/const/index.d.ts +1 -0
  30. package/lib/enums/direction.d.ts +1 -1
  31. package/lib/enums/directions.d.ts +1 -1
  32. package/lib/models/collection.model.d.ts +1 -1
  33. package/lib/models/index.d.ts +3 -1
  34. package/lib/models/item.model.d.ts +1 -1
  35. package/lib/models/render-collection.model.d.ts +1 -1
  36. package/lib/models/render-item-config.model.d.ts +1 -1
  37. package/lib/models/render-item.model.d.ts +1 -1
  38. package/lib/models/scroll-direction.model.d.ts +5 -0
  39. package/lib/models/scroll-event.model.d.ts +18 -0
  40. package/lib/models/sticky-map.model.d.ts +1 -1
  41. package/lib/ng-virtual-list.component.d.ts +7 -10
  42. package/lib/types/id.d.ts +1 -1
  43. package/lib/types/rect.d.ts +1 -1
  44. package/lib/types/size.d.ts +1 -1
  45. package/lib/utils/cacheMap.d.ts +11 -1
  46. package/lib/utils/debounce.d.ts +1 -1
  47. package/lib/utils/eventEmitter.d.ts +1 -1
  48. package/lib/utils/isDirection.d.ts +1 -1
  49. package/lib/utils/toggleClassName.d.ts +1 -1
  50. package/lib/utils/trackBox.d.ts +4 -4
  51. package/lib/utils/tracker.d.ts +1 -1
  52. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { IVirtualListItem } from "./item.model";
2
2
  /**
3
3
  * Virtual list elements collection interface
4
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/models/collection.model.ts
4
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/models/collection.model.ts
5
5
  * @author Evgenii Grebennikov
6
6
  * @email djonnyx@gmail.com
7
7
  */
@@ -1,4 +1,6 @@
1
+ import { ScrollDirection } from './scroll-direction.model';
2
+ import { IScrollEvent } from './scroll-event.model';
1
3
  import { IVirtualListItem } from './item.model';
2
4
  import { IVirtualListStickyMap } from './sticky-map.model';
3
5
  import { IVirtualListCollection } from './collection.model';
4
- export type { IVirtualListItem, IVirtualListStickyMap, IVirtualListCollection, };
6
+ export type { ScrollDirection, IScrollEvent, IVirtualListItem, IVirtualListStickyMap, IVirtualListCollection, };
@@ -1,7 +1,7 @@
1
1
  import { Id } from "../types/id";
2
2
  /**
3
3
  * Virtual list element model
4
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/models/item.model.ts
4
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/models/item.model.ts
5
5
  * @author Evgenii Grebennikov
6
6
  * @email djonnyx@gmail.com
7
7
  */
@@ -1,7 +1,7 @@
1
1
  import { IRenderVirtualListItem } from "./render-item.model";
2
2
  /**
3
3
  * Virtual list screen elements collection interface
4
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/models/render-collection.model.ts
4
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/models/render-collection.model.ts
5
5
  * @author Evgenii Grebennikov
6
6
  * @email djonnyx@gmail.com
7
7
  */
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Object with configuration parameters for IRenderVirtualListItem
3
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/models/render-item-config.model.ts
3
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/models/render-item-config.model.ts
4
4
  * @author Evgenii Grebennikov
5
5
  * @email djonnyx@gmail.com
6
6
  *
@@ -4,7 +4,7 @@ import { IVirtualListItem } from "./item.model";
4
4
  import { IRenderVirtualListItemConfig } from "./render-item-config.model";
5
5
  /**
6
6
  * List screen element model
7
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/models/render-item.model.ts
7
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/models/render-item.model.ts
8
8
  * @author Evgenii Grebennikov
9
9
  * @email djonnyx@gmail.com
10
10
  */
@@ -0,0 +1,5 @@
1
+ /**
2
+ * A value of -1 indicates the direction is up or left (if the list direction is horizontal).
3
+ * A value of 1 indicates the direction is down or right (if the list direction is horizontal).
4
+ */
5
+ export type ScrollDirection = -1 | 1;
@@ -0,0 +1,18 @@
1
+ import { ScrollDirection } from "./scroll-direction.model";
2
+ /**
3
+ * Interface IScrollEvent.
4
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/models/scroll-event.model.ts
5
+ * @author Evgenii Grebennikov
6
+ * @email djonnyx@gmail.com
7
+ */
8
+ export interface IScrollEvent {
9
+ /**
10
+ * Scroll area offset
11
+ */
12
+ scrollSize: number;
13
+ /**
14
+ * A value of -1 indicates the direction is up or left (if the list direction is horizontal).
15
+ * A value of 1 indicates the direction is down or right (if the list direction is horizontal).
16
+ */
17
+ direction: ScrollDirection;
18
+ }
@@ -1,6 +1,6 @@
1
1
  /**
2
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.
3
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/models/sticky-map.model.ts
3
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/models/sticky-map.model.ts
4
4
  * @author Evgenii Grebennikov
5
5
  * @email djonnyx@gmail.com
6
6
  */
@@ -1,7 +1,7 @@
1
1
  import { AfterViewInit, ChangeDetectorRef, ComponentRef, ElementRef, EventEmitter, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';
2
2
  import { BehaviorSubject, Observable } from 'rxjs';
3
3
  import { NgVirtualListItemComponent } from './components/ng-virtual-list-item.component';
4
- import { IVirtualListCollection, IVirtualListStickyMap } from './models';
4
+ import { IScrollEvent, IVirtualListCollection, IVirtualListStickyMap } from './models';
5
5
  import { Id } from './types';
6
6
  import { Direction } from './enums';
7
7
  import * as i0 from "@angular/core";
@@ -9,7 +9,7 @@ import * as i0 from "@angular/core";
9
9
  * Virtual list component.
10
10
  * Maximum performance for extremely large lists.
11
11
  * It is based on algorithms for virtualization of screen objects.
12
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts
12
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts
13
13
  * @author Evgenii Grebennikov
14
14
  * @email djonnyx@gmail.com
15
15
  */
@@ -28,11 +28,11 @@ export declare class NgVirtualListComponent implements AfterViewInit, OnDestroy
28
28
  /**
29
29
  * Fires when the list has been scrolled.
30
30
  */
31
- onScroll: EventEmitter<number>;
31
+ onScroll: EventEmitter<IScrollEvent>;
32
32
  /**
33
33
  * Fires when the list has completed scrolling.
34
34
  */
35
- onScrollEnd: EventEmitter<number>;
35
+ onScrollEnd: EventEmitter<IScrollEvent>;
36
36
  private _$items;
37
37
  readonly $items: Observable<IVirtualListCollection | undefined>;
38
38
  /**
@@ -100,18 +100,12 @@ export declare class NgVirtualListComponent implements AfterViewInit, OnDestroy
100
100
  */
101
101
  set itemsOffset(v: number);
102
102
  get itemsOffset(): number;
103
- private _scrollToTimeout;
104
103
  private _isVertical;
105
104
  protected _displayComponents: Array<ComponentRef<NgVirtualListItemComponent>>;
106
105
  protected _$bounds: BehaviorSubject<DOMRect | null>;
107
106
  protected _$scrollSize: BehaviorSubject<number>;
108
107
  private _resizeObserver;
109
- /**
110
- * only dynamic
111
- */
112
- private _$scrolledItemId;
113
108
  private _onResizeHandler;
114
- private _scrollDirection;
115
109
  private _onScrollHandler;
116
110
  private scrollImmediately;
117
111
  private _scrollImmediatelyHandler;
@@ -142,6 +136,9 @@ export declare class NgVirtualListComponent implements AfterViewInit, OnDestroy
142
136
  * Behavior accepts the values ​​"auto", "instant" and "smooth".
143
137
  */
144
138
  scrollTo(id: Id, behavior?: ScrollBehavior): void;
139
+ private _scrollToRepeatExecutionTimeout;
140
+ private clearScrollToRepeatExecutionTimeout;
141
+ protected scrollToExecutor(id: Id, behavior: ScrollBehavior, iteration?: number): void;
145
142
  scrollToEnd(behavior?: ScrollBehavior): void;
146
143
  ngAfterViewInit(): void;
147
144
  ngOnDestroy(): void;
package/lib/types/id.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Identifier type
3
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/types/id.ts
3
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/id.ts
4
4
  * @author Evgenii Grebennikov
5
5
  * @email djonnyx@gmail.com
6
6
  */
@@ -1,7 +1,7 @@
1
1
  import { ISize } from "./size";
2
2
  /**
3
3
  * Rectangular area interface
4
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/types/rect.ts
4
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/rect.ts
5
5
  * @author Evgenii Grebennikov
6
6
  * @email djonnyx@gmail.com
7
7
  */
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Area area Interface
3
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/types/size.ts
3
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/types/size.ts
4
4
  * @author Evgenii Grebennikov
5
5
  * @email djonnyx@gmail.com
6
6
  */
@@ -1,3 +1,4 @@
1
+ import { ScrollDirection } from "../models";
1
2
  import { EventEmitter } from "./eventEmitter";
2
3
  export interface ICacheMap<I = any, B = any> {
3
4
  set: (id: I, bounds: B) => Map<I, B>;
@@ -11,7 +12,7 @@ type CacheMapListeners = OnChangeEventListener;
11
12
  /**
12
13
  * Cache map.
13
14
  * Emits a change event on each mutation.
14
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/utils/cacheMap.ts
15
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/cacheMap.ts
15
16
  * @author Evgenii Grebennikov
16
17
  * @email djonnyx@gmail.com
17
18
  */
@@ -21,8 +22,17 @@ export declare class CacheMap<I = string | number, B = any, E = CacheMapEvents,
21
22
  protected _previouseFullHeigh: number;
22
23
  protected _delta: number;
23
24
  get delta(): number;
25
+ protected _deltaDirection: ScrollDirection;
26
+ set deltaDirection(v: ScrollDirection);
27
+ get deltaDirection(): ScrollDirection;
28
+ private _scrollDirectionCache;
29
+ private _scrollDirection;
30
+ get scrollDirection(): ScrollDirection;
24
31
  get version(): number;
32
+ private _clearScrollDirectionDebounce;
25
33
  constructor();
34
+ clearScrollDirectionCache(): void;
35
+ private calcScrollDirection;
26
36
  protected bumpVersion(): void;
27
37
  protected fireChange(): void;
28
38
  set(id: I, bounds: B): Map<I, B>;
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Simple debounce function.
3
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/utils/debounce.ts
3
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/debounce.ts
4
4
  * @author Evgenii Grebennikov
5
5
  * @email djonnyx@gmail.com
6
6
  */
@@ -1,7 +1,7 @@
1
1
  export type TEventHandler = (...args: Array<any>) => void;
2
2
  /**
3
3
  * Simple event emitter
4
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/utils/eventEmitter.ts
4
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/eventEmitter.ts
5
5
  * @author Evgenii Grebennikov
6
6
  * @email djonnyx@gmail.com
7
7
  */
@@ -1,7 +1,7 @@
1
1
  import { Direction } from "../enums";
2
2
  /**
3
3
  * Determines the axis membership of a virtual list
4
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/utils/isDirection.ts
4
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/isDirection.ts
5
5
  * @author Evgenii Grebennikov
6
6
  * @email djonnyx@gmail.com
7
7
  */
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Switch css classes
3
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/utils/toggleClassName.ts
3
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/toggleClassName.ts
4
4
  * @author Evgenii Grebennikov
5
5
  * @email djonnyx@gmail.com
6
6
  */
@@ -40,7 +40,6 @@ export interface IMetrics {
40
40
  totalSize: number;
41
41
  typicalItemSize: number;
42
42
  }
43
- export type ScrollDirection = -1 | 0 | 1;
44
43
  export interface IRecalculateMetricsOptions<I extends {
45
44
  id: Id;
46
45
  }, C extends Array<I>> {
@@ -53,14 +52,13 @@ export interface IRecalculateMetricsOptions<I extends {
53
52
  scrollSize: number;
54
53
  snap: boolean;
55
54
  fromItemId?: Id;
56
- scrollDirection?: ScrollDirection;
57
55
  }
58
56
  type CacheMapEvents = typeof TRACK_BOX_CHANGE_EVENT_NAME;
59
57
  type OnChangeEventListener = (version: number) => void;
60
58
  type CacheMapListeners = OnChangeEventListener;
61
59
  /**
62
60
  * An object that performs tracking, calculations and caching.
63
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/utils/trackBox.ts
61
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/trackBox.ts
64
62
  * @author Evgenii Grebennikov
65
63
  * @email djonnyx@gmail.com
66
64
  */
@@ -85,13 +83,15 @@ export declare class TrackBox extends CacheMap<Id, IRect, CacheMapEvents, CacheM
85
83
  totalSize: number;
86
84
  delta: number;
87
85
  };
86
+ private getElementNumToEnd;
88
87
  /**
89
88
  * Calculates list metrics
90
89
  */
91
90
  protected recalculateMetrics<I extends {
92
91
  id: Id;
93
92
  }, C extends Array<I>>(options: IRecalculateMetricsOptions<I, C>): IMetrics;
94
- clearDelta(): void;
93
+ clearDeltaDirection(): void;
94
+ clearDelta(clearDirectionDetector?: boolean): void;
95
95
  protected generateDisplayCollection<I extends {
96
96
  id: Id;
97
97
  }, C extends Array<I>>(items: C, stickyMap: IVirtualListStickyMap, metrics: IMetrics): IRenderVirtualListCollection;
@@ -1,7 +1,7 @@
1
1
  import { ComponentRef } from "@angular/core";
2
2
  /**
3
3
  * Tracks display items by property
4
- * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/utils/tracker.ts
4
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/tracker.ts
5
5
  * @author Evgenii Grebennikov
6
6
  * @email djonnyx@gmail.com
7
7
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-virtual-list",
3
- "version": "16.0.2",
3
+ "version": "16.0.4",
4
4
  "author": {
5
5
  "name": "Evgenii Grebennikov",
6
6
  "email": "djonnyx@gmail.com"