ng-virtual-list 19.7.5 → 19.7.7
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
|
@@ -600,7 +600,7 @@ Inputs
|
|
|
600
600
|
| maxBufferSize | number? = 100 | Maximum number of elements outside the scope of visibility. Default value is 100. If maxBufferSize is set to be greater than bufferSize, then adaptive buffer mode is enabled. The greater the scroll size, the more elements are allocated for rendering. |
|
|
601
601
|
| itemRenderer | TemplateRef | Rendering element template. |
|
|
602
602
|
| methodForSelecting | [MethodForSelecting](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/enums/method-for-selecting.ts) | Method for selecting list items. Default value is 'none'. 'select' - List items are selected one by one. 'multi-select' - Multiple selection of list items. 'none' - List items are not selectable. |
|
|
603
|
-
| itemConfigMap | [IVirtualListItemConfigMap?](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts) | Sets `sticky` position
|
|
603
|
+
| itemConfigMap | [IVirtualListItemConfigMap?](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts) | Sets `sticky` position and `selectable` for the list item element. If `sticky` position is greater than `0`, then `sticky` position is applied. If the `sticky` value is greater than `0`, then the `sticky` position mode is enabled for the element. `1` - position start, `2` - position end. Default value is `0`. `selectable` determines whether an element can be selected or not. Default value is `true`. |
|
|
604
604
|
| selectByClick | boolean? = true | If `false`, the element is selected using the config.select method passed to the template; if `true`, the element is selected by clicking on it. The default value is `true`. |
|
|
605
605
|
| snap | boolean? = false | Determines whether elements will snap. Default value is "false". |
|
|
606
606
|
| 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. |
|
|
@@ -609,7 +609,6 @@ Inputs
|
|
|
609
609
|
| enabledBufferOptimization | boolean? = true | Experimental! Enables buffer optimization. Can only be used if items in the collection are not added or updated. |
|
|
610
610
|
| trackBy | string? = 'id' | The name of the property by which tracking is performed. |
|
|
611
611
|
| selectedIds | Array<[Id](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/types/id.ts)> \| [Id](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/types/id.ts) \| undefined | Sets the selected items. |
|
|
612
|
-
| collapsedIds | Array<[Id](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/types/id.ts)> \| [Id](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/types/id.ts) \| undefined | Sets the collapsed items. |
|
|
613
612
|
|
|
614
613
|
<br/>
|
|
615
614
|
|
|
@@ -621,7 +620,6 @@ Outputs
|
|
|
621
620
|
| onScroll | ([IScrollEvent](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/scroll-event.model.ts)) => void | Fires when the list has been scrolled. |
|
|
622
621
|
| onScrollEnd | ([IScrollEvent](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/scroll-event.model.ts)) => void | Fires when the list has completed scrolling. |
|
|
623
622
|
| onSelect | Array<[Id](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/types/id.ts)> \| [Id](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/types/id.ts) \| undefined | Fires when an elements are selected. |
|
|
624
|
-
| onCollapse | Array<[Id](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/types/id.ts)> \| [Id](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/types/id.ts) \| undefined | Fires when elements are collapsed. |
|
|
625
623
|
| onViewportChange | [ISize](https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/types/size.ts) | Fires when the viewport size is changed. |
|
|
626
624
|
|
|
627
625
|
|
|
@@ -2236,7 +2236,6 @@ class NgVirtualListComponent {
|
|
|
2236
2236
|
this._service.setSelectedIds(v);
|
|
2237
2237
|
})).subscribe();
|
|
2238
2238
|
}
|
|
2239
|
-
/** @internal */
|
|
2240
2239
|
ngOnInit() {
|
|
2241
2240
|
this.onInit();
|
|
2242
2241
|
}
|
|
@@ -2445,7 +2444,6 @@ class NgVirtualListComponent {
|
|
|
2445
2444
|
this.onScrollEnd.emit(event);
|
|
2446
2445
|
}
|
|
2447
2446
|
};
|
|
2448
|
-
/** @internal */
|
|
2449
2447
|
ngAfterViewInit() {
|
|
2450
2448
|
this.afterViewInit();
|
|
2451
2449
|
}
|
|
@@ -2461,7 +2459,6 @@ class NgVirtualListComponent {
|
|
|
2461
2459
|
this._onResizeHandler();
|
|
2462
2460
|
}
|
|
2463
2461
|
}
|
|
2464
|
-
/** @internal */
|
|
2465
2462
|
ngOnDestroy() {
|
|
2466
2463
|
this.dispose();
|
|
2467
2464
|
}
|
|
@@ -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/methods-for-selecting.ts","../../../projects/ng-virtual-list/src/lib/enums/snapping-methods.ts","../../../projects/ng-virtual-list/src/lib/const/index.ts","../../../projects/ng-virtual-list/src/lib/models/base-virtual-list-item-component.ts","../../../projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.service.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/debounce.ts","../../../projects/ng-virtual-list/src/lib/utils/toggleClassName.ts","../../../projects/ng-virtual-list/src/lib/utils/scrollEvent.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/tracker.ts","../../../projects/ng-virtual-list/src/lib/utils/buffer-interpolation.ts","../../../projects/ng-virtual-list/src/lib/utils/trackBox.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/utils/isDirection.ts","../../../projects/ng-virtual-list/src/lib/utils/isMethodForSelecting.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 * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/enums/methods-for-selecting.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum MethodsForSelecting {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 'none',\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 'select',\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 'multi-select',\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 { MethodsForSelecting, SnappingMethods } from \"../enums\";\r\nimport { Directions } from \"../enums/directions\";\r\n\r\nexport const DEFAULT_ITEM_SIZE = 24;\r\n\r\nexport const DEFAULT_BUFFER_SIZE = 2;\r\n\r\nexport const DEFAULT_MAX_BUFFER_SIZE = 100;\r\n\r\nexport const DEFAULT_LIST_SIZE = 400;\r\n\r\nexport const DEFAULT_SNAP = false;\r\n\r\nexport const DEFAULT_SELECT_BY_CLICK = true;\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\nexport const DEFAULT_SELECT_METHOD = MethodsForSelecting.NONE;\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\r\n// styles\r\n\r\nexport const PART_DEFAULT_ITEM = 'item';\r\n\r\nexport const PART_ITEM_ODD = ' item-odd';\r\n\r\nexport const PART_ITEM_EVEN = ' item-even';\r\n\r\nexport const PART_ITEM_SNAPPED = ' item-snapped';\r\n\r\nexport const PART_ITEM_SELECTED = ' item-selected';\r\n\r\nexport const PART_ITEM_FOCUSED = ' item-focused';\r\n\r\n","import { TemplateRef, WritableSignal } from '@angular/core';\r\nimport { Id, ISize } from '../types';\r\nimport { IRenderVirtualListItem } from './render-item.model';\r\n\r\n/**\r\n * Virtual List Item Interface\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/base-virtual-list-item-component.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport abstract class BaseVirtualListItemComponent {\r\n abstract get id(): number;\r\n abstract data: WritableSignal<IRenderVirtualListItem | undefined>;\r\n abstract regular: boolean;\r\n abstract set regularLength(v: string)\r\n abstract set item(v: IRenderVirtualListItem | null | undefined);\r\n abstract get item(): IRenderVirtualListItem | null | undefined;\r\n abstract get itemId(): Id | undefined;\r\n abstract itemRenderer: WritableSignal<TemplateRef<any> | undefined>;\r\n abstract set renderer(v: TemplateRef<any> | undefined);\r\n abstract get element(): HTMLElement;\r\n public abstract getBounds(): ISize;\r\n public abstract show(): void;\r\n public abstract hide(): void;\r\n}","/**\r\n * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum MethodsForSelectingTypes {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 0,\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 1,\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 2,\r\n}","import { Injectable } from '@angular/core';\r\nimport { Subject, tap } from 'rxjs';\r\nimport { TrackBox } from './utils/trackBox';\r\nimport { IRenderVirtualListItem } from './models';\r\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\r\nimport { Id } from './types';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { MethodsForSelectingTypes } from './enums/method-for-selecting-types';\r\nimport { DEFAULT_SELECT_BY_CLICK } from './const';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListService {\r\n private _nextComponentId: number = 0;\r\n\r\n private _$itemClick = new Subject<IRenderVirtualListItem<any> | undefined>();\r\n $itemClick = this._$itemClick.asObservable();\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | undefined>(undefined);\r\n $selectedIds = this._$selectedIds.asObservable();\r\n\r\n private _$methodOfSelecting = new BehaviorSubject<MethodsForSelectingTypes>(0);\r\n $methodOfSelecting = this._$methodOfSelecting.asObservable();\r\n\r\n set methodOfSelecting(v: MethodsForSelectingTypes) {\r\n this._$methodOfSelecting.next(v);\r\n }\r\n\r\n selectByClick: boolean = DEFAULT_SELECT_BY_CLICK;\r\n\r\n private _trackBox: TrackBox | undefined;\r\n\r\n listElement: HTMLDivElement | null = null;\r\n\r\n constructor() {\r\n this._$methodOfSelecting.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n switch (v) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue();\r\n if (typeof curr !== 'number' && typeof curr !== 'string') {\r\n this._$selectedIds.next(undefined);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n if (!Array.isArray(this._$selectedIds.getValue())) {\r\n this._$selectedIds.next([]);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(undefined);\r\n break;\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n setSelectedIds(ids: Array<Id> | Id | undefined) {\r\n if (JSON.stringify(this._$selectedIds.getValue()) !== JSON.stringify(ids)) {\r\n this._$selectedIds.next(ids);\r\n }\r\n }\r\n\r\n itemClick(data: IRenderVirtualListItem | undefined) {\r\n this._$itemClick.next(data);\r\n if (this.selectByClick) {\r\n this.select(data);\r\n }\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param data \r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n select(data: IRenderVirtualListItem | undefined, selected: boolean | undefined = undefined) {\r\n if (data && data.config.selectable) {\r\n switch (this._$methodOfSelecting.getValue()) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue() as (Id | undefined);\r\n if (selected === undefined) {\r\n this._$selectedIds.next(curr !== data?.id ? data?.id : undefined);\r\n } else {\r\n this._$selectedIds.next(selected ? data?.id : undefined);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const curr = [...(this._$selectedIds.getValue() || []) as Array<Id>], index = curr.indexOf(data.id);\r\n if (selected === undefined) {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, data.id]);\r\n }\r\n } else if (selected) {\r\n if (index > -1) {\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, data.id]);\r\n }\r\n } else {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next(curr);\r\n }\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(undefined);\r\n }\r\n }\r\n }\r\n }\r\n\r\n initialize(trackBox: TrackBox) {\r\n this._trackBox = trackBox;\r\n }\r\n\r\n generateComponentId() {\r\n return this._nextComponentId = this._nextComponentId === Number.MAX_SAFE_INTEGER\r\n ? 0 : this._nextComponentId + 1;\r\n }\r\n}\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 { Id, IRect, ISize } from '../types';\r\nimport {\r\n DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PART_DEFAULT_ITEM, PART_ITEM_EVEN, PART_ITEM_FOCUSED, PART_ITEM_ODD,\r\n PART_ITEM_SELECTED, PART_ITEM_SNAPPED, POSITION_ABSOLUTE, POSITION_STICKY, PX, SIZE_100_PERSENT, SIZE_AUTO, TRANSLATE_3D,\r\n VISIBILITY_HIDDEN, VISIBILITY_VISIBLE, ZEROS_TRANSLATE_3D,\r\n} from '../const';\r\nimport { BaseVirtualListItemComponent } from '../models/base-virtual-list-item-component';\r\nimport { NgVirtualListService } from '../ng-virtual-list.service';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { map, tap, combineLatest, fromEvent } from 'rxjs';\r\nimport { MethodsForSelectingTypes } from '../enums/method-for-selecting-types';\r\nimport { IRenderVirtualListItemConfig } from '../models/render-item-config.model';\r\n\r\ninterface IItemConfig extends IRenderVirtualListItemConfig {\r\n /**\r\n * \r\n */\r\n focus: boolean;\r\n /**\r\n * Determines whether the element is selected or not.\r\n */\r\n selected: boolean;\r\n /**\r\n * Selects a list item\r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n select: (selected: boolean | undefined) => void;\r\n}\r\n\r\nconst ATTR_AREA_SELECTED = 'area-selected', TABINDEX = 'index',\r\n KEY_SPACE = \" \", KEY_ARR_LEFT = \"ArrowLeft\", KEY_ARR_UP = \"ArrowUp\", KEY_ARR_RIGHT = \"ArrowRight\", KEY_ARR_DOWN = \"ArrowDown\";\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 'role': 'listitem',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgVirtualListItemComponent extends BaseVirtualListItemComponent {\r\n private _id!: number;\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n protected _service = inject(NgVirtualListService);\r\n\r\n private _isSelected: boolean = false;\r\n config = signal<IItemConfig>({} as IItemConfig);\r\n\r\n measures = signal<IRect & {\r\n /**\r\n * Delta is calculated for Snapping Method.ADVANCED\r\n */\r\n delta: number;\r\n } | undefined>(undefined);\r\n\r\n focus = signal<boolean>(false);\r\n\r\n private _part = PART_DEFAULT_ITEM;\r\n get part() { return this._part; }\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 this._data = v;\r\n\r\n this.updatePartStr(v, this._isSelected);\r\n\r\n this.updateConfig(v);\r\n\r\n this.updateMeasures(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 private _selectHandler = (data: IRenderVirtualListItem<any> | undefined) =>\r\n /**\r\n * Selects a list item\r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n (selected: boolean | undefined = undefined) => {\r\n this._service.select(data, selected);\r\n };\r\n\r\n constructor() {\r\n super();\r\n this._id = this._service.generateComponentId();\r\n\r\n const $data = toObservable(this.data);\r\n\r\n fromEvent(this.element, 'focusin').pipe(\r\n takeUntilDestroyed(),\r\n tap(e => {\r\n this.focus.set(true);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updatePartStr(this._data, this._isSelected);\r\n }),\r\n ).subscribe(),\r\n\r\n fromEvent(this.element, 'focusout').pipe(\r\n takeUntilDestroyed(),\r\n tap(e => {\r\n this.focus.set(false);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updatePartStr(this._data, this._isSelected);\r\n }),\r\n ).subscribe(),\r\n\r\n fromEvent<KeyboardEvent>(this.element, 'keydown').pipe(\r\n takeUntilDestroyed(),\r\n tap(e => {\r\n switch (e.key) {\r\n case KEY_SPACE: {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this._service.select(this._data);\r\n break;\r\n }\r\n case KEY_ARR_LEFT:\r\n if (!this.config().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusPrev();\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this.config().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusPrev();\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this.config().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusNext();\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this.config().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusNext();\r\n }\r\n break;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, this._service.$methodOfSelecting, this._service.$selectedIds]).pipe(\r\n takeUntilDestroyed(),\r\n map(([, m, ids]) => ({ method: m, ids })),\r\n tap(({ method, ids }) => {\r\n switch (method) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const id = ids as Id | undefined, isSelected = id === this.itemId;\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this._isSelected = isSelected;\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const actualIds = ids as Array<Id>, isSelected = this.itemId !== undefined && actualIds && actualIds.includes(this.itemId);\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this._isSelected = isSelected;\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this.element.removeAttribute(ATTR_AREA_SELECTED);\r\n this._isSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n this.updatePartStr(this._data, this._isSelected);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updateMeasures(this._data);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private focusNext() {\r\n const tabIndex = this.config()?.tabIndex ?? 0;\r\n if (this._service.listElement && tabIndex > 0) {\r\n const el = this._service.listElement.querySelector<HTMLDivElement>(`[${TABINDEX}=\"${tabIndex + 1}\"]`);\r\n if (el) {\r\n el.focus();\r\n }\r\n }\r\n }\r\n\r\n private focusPrev() {\r\n const tabIndex = this.config()?.tabIndex ?? 0;\r\n if (this._service.listElement && tabIndex > 1) {\r\n const el = this._service.listElement.querySelector<HTMLDivElement>(`[${TABINDEX}=\"${tabIndex - 1}\"]`);\r\n if (el) {\r\n el.focus();\r\n }\r\n }\r\n }\r\n\r\n private updateMeasures(v: IRenderVirtualListItem<any> | undefined) {\r\n this.measures.set(v?.measures ? { ...v.measures } : undefined)\r\n }\r\n\r\n private updateConfig(v: IRenderVirtualListItem<any> | undefined) {\r\n this.config.set({ ...v?.config || {} as IItemConfig, selected: this._isSelected, select: this._selectHandler(v), focus: this.focus() });\r\n }\r\n\r\n private 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 private updatePartStr(v: IRenderVirtualListItem | undefined, isSelected: boolean) {\r\n let odd = false;\r\n if (v?.index !== undefined) {\r\n odd = v.index % 2 === 0;\r\n }\r\n\r\n let part = PART_DEFAULT_ITEM;\r\n part += odd ? PART_ITEM_ODD : PART_ITEM_EVEN;\r\n if (v ? v.config.snapped : false) {\r\n part += PART_ITEM_SNAPPED;\r\n }\r\n if (isSelected) {\r\n part += PART_ITEM_SELECTED;\r\n }\r\n if (this.focus()) {\r\n part += PART_ITEM_FOCUSED;\r\n }\r\n this._part = part;\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 onClickHandler() {\r\n this._service.itemClick(this._data);\r\n }\r\n}\r\n","@let item = data();\r\n@let _config = config();\r\n@let _measures = measures();\r\n@let renderer = itemRenderer();\r\n\r\n@if (item) {\r\n <div #listItem [part]=\"part\" [attr.index]=\"item.config.tabIndex\" tabindex=\"1\" class=\"ngvl-item__container\"\r\n [ngClass]=\"{'snapped': item.config.snapped, 'snapped-out': item.config.snappedOut, 'focus': focus()}\" (click)=\"onClickHandler()\">\r\n @if (renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\"\r\n [ngTemplateOutletContext]=\"{data: item.data, measures: _measures, config: _config}\" />\r\n }\r\n </div>\r\n}","/**\r\n * Simple debounce function.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/debounce.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const debounce = (cb: (...args: Array<any>) => void, debounceTime: number = 0) => {\r\n let timeout: any;\r\n const dispose = () => {\r\n if (timeout !== undefined) {\r\n clearTimeout(timeout);\r\n }\r\n }\r\n const execute = (...args: Array<any>) => {\r\n dispose();\r\n\r\n timeout = setTimeout(() => {\r\n cb(...args);\r\n }, debounceTime);\r\n };\r\n return {\r\n /**\r\n * Call handling method\r\n */\r\n execute,\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose,\r\n };\r\n};\r\n","\r\n/**\r\n * Switch css classes\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/toggleClassName.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const toggleClassName = (el: HTMLElement, className: string, removeClassName?: string) => {\r\n if (!el.classList.contains(className)) {\r\n el.classList.add(className);\r\n }\r\n if (removeClassName) {\r\n el.classList.remove(removeClassName);\r\n }\r\n};\r\n","import { 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}","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 { ScrollDirection } from \"../models\";\r\nimport { Id, ISize } from \"../types\";\r\nimport { BaseVirtualListItemComponent } from \"../models/base-virtual-list-item-component\";\r\nimport { CMap } from \"./cacheMap\";\r\n\r\ntype TrackingPropertyId = string | number;\r\n\r\nexport interface IVirtualListItemComponent<I = any> {\r\n getBounds(): ISize;\r\n itemId: Id;\r\n id: number;\r\n item: I | null;\r\n show: () => void;\r\n hide: () => void;\r\n}\r\n\r\n/**\r\n * Tracks display items by property\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/tracker.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class Tracker<C extends BaseVirtualListItemComponent = any> {\r\n /**\r\n * display objects dictionary of indexes by id\r\n */\r\n protected _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 protected _trackMap = new CMap<TrackingPropertyId, number>();\r\n\r\n get trackMap() {\r\n return this._trackMap;\r\n }\r\n\r\n protected _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], newTrackItems: Array<ComponentRef<C>> = [], 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.has(itemTrackingProperty)) {\r\n const diId = this._trackMap.get(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 this._trackMap.delete(itemTrackingProperty);\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n newTrackItems.push(item);\r\n }\r\n }\r\n\r\n for (let i = 0, l = newTrackItems.length; i < l; i++) {\r\n const item = newTrackItems[i], itemTrackingProperty = (item as any)[idPropName];\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.set(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 this._trackMap.delete(propertyIdName);\r\n }\r\n }\r\n\r\n dispose() {\r\n if (this._trackMap) {\r\n this._trackMap.clear();\r\n }\r\n }\r\n}","const DEFAULT_EXTRA = {\r\n extremumThreshold: 2,\r\n bufferSize: 10,\r\n};\r\n\r\nexport interface IExtraOptions {\r\n extremumThreshold?: number;\r\n bufferSize?: number;\r\n}\r\n\r\nexport const bufferInterpolation = (currentBufferValue: number, array: Array<number>, value: number, extra?: IExtraOptions) => {\r\n const {\r\n extremumThreshold = DEFAULT_EXTRA.extremumThreshold,\r\n bufferSize = DEFAULT_EXTRA.bufferSize,\r\n } = extra ?? DEFAULT_EXTRA;\r\n\r\n if (currentBufferValue < value) {\r\n let i = 0;\r\n while (i < extremumThreshold) {\r\n array.push(value);\r\n i++;\r\n }\r\n } else {\r\n array.push(value);\r\n }\r\n\r\n while (array.length >= bufferSize) {\r\n array.shift();\r\n }\r\n\r\n const l = array.length;\r\n let buffer = 0;\r\n\r\n for (let i = 0; i < l; i++) {\r\n buffer += array[i];\r\n }\r\n\r\n return Math.ceil(buffer / l);\r\n};\r\n","import { ComponentRef } from \"@angular/core\";\r\nimport { IRenderVirtualListCollection, } from \"../models/render-collection.model\";\r\nimport { IRenderVirtualListItem } from \"../models/render-item.model\";\r\nimport { Id } from \"../types/id\";\r\nimport { CacheMap, CMap } from \"./cacheMap\";\r\nimport { Tracker } from \"./tracker\";\r\nimport { ISize } from \"../types\";\r\nimport { HEIGHT_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME, X_PROP_NAME, Y_PROP_NAME } from \"../const\";\r\nimport { IVirtualListItemConfigMap } from \"../models\";\r\nimport { bufferInterpolation } from \"./buffer-interpolation\";\r\nimport { BaseVirtualListItemComponent } from \"../models/base-virtual-list-item-component\";\r\n\r\nexport const TRACK_BOX_CHANGE_EVENT_NAME = 'change';\r\n\r\nexport interface IMetrics {\r\n delta: number;\r\n normalizedItemWidth: number;\r\n normalizedItemHeight: number;\r\n width: number;\r\n height: number;\r\n dynamicSize: boolean;\r\n itemSize: number;\r\n itemsFromStartToScrollEnd: number;\r\n itemsFromStartToDisplayEnd: number;\r\n itemsOnDisplayWeight: number;\r\n itemsOnDisplayLength: number;\r\n isVertical: boolean;\r\n leftHiddenItemsWeight: number;\r\n leftItemLength: number;\r\n leftItemsWeight: number;\r\n renderItems: number;\r\n rightItemLength: number;\r\n rightItemsWeight: number;\r\n scrollSize: number;\r\n leftSizeOfAddedItems: number;\r\n sizeProperty: typeof HEIGHT_PROP_NAME | typeof WIDTH_PROP_NAME;\r\n snap: boolean;\r\n snippedPos: number;\r\n startIndex: number;\r\n startPosition: number;\r\n totalItemsToDisplayEndWeight: number;\r\n totalLength: number;\r\n totalSize: number;\r\n typicalItemSize: number;\r\n isFromItemIdFound: boolean;\r\n}\r\n\r\nexport interface IRecalculateMetricsOptions<I extends { id: Id }, C extends Array<I>> {\r\n bounds: ISize;\r\n collection: C;\r\n isVertical: boolean;\r\n itemSize: number;\r\n bufferSize: number;\r\n maxBufferSize: number;\r\n dynamicSize: boolean;\r\n scrollSize: number;\r\n snap: boolean;\r\n enabledBufferOptimization: boolean;\r\n fromItemId?: Id;\r\n previousTotalSize: number;\r\n crudDetected: boolean;\r\n deletedItemsMap: { [index: number]: ISize; };\r\n}\r\n\r\nexport interface IGetItemPositionOptions<I extends { id: Id }, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport interface IUpdateCollectionOptions<I extends { id: Id }, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'collection' | 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport type CacheMapEvents = typeof TRACK_BOX_CHANGE_EVENT_NAME;\r\n\r\nexport type OnChangeEventListener = (version: number) => void;\r\n\r\nexport type CacheMapListeners = OnChangeEventListener;\r\n\r\nexport enum ItemDisplayMethods {\r\n CREATE,\r\n UPDATE,\r\n DELETE,\r\n NOT_CHANGED,\r\n}\r\n\r\nexport interface IUpdateCollectionReturns {\r\n displayItems: IRenderVirtualListCollection;\r\n totalSize: number;\r\n delta: number;\r\n crudDetected: boolean;\r\n}\r\n\r\nconst DEFAULT_BUFFER_EXTREMUM_THRESHOLD = 15,\r\n DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH = 30,\r\n DEFAULT_RESET_BUFFER_SIZE_TIMEOUT = 10000;\r\n\r\n/**\r\n * An object that performs tracking, calculations and caching.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/trackBox.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class TrackBox<C extends BaseVirtualListItemComponent = any>\r\n extends CacheMap<Id, ISize & { method?: ItemDisplayMethods }, CacheMapEvents, CacheMapListeners> {\r\n\r\n protected _tracker!: Tracker<C>;\r\n\r\n protected _items: IRenderVirtualListCollection | null | undefined;\r\n\r\n set items(v: IRenderVirtualListCollection | null | undefined) {\r\n if (this._items === v) {\r\n return;\r\n }\r\n\r\n this._items = v;\r\n }\r\n\r\n protected _displayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set displayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._displayComponents === v) {\r\n return;\r\n }\r\n\r\n this._displayComponents = v;\r\n }\r\n\r\n protected _snapedDisplayComponent: ComponentRef<C> | null | undefined;\r\n\r\n set snapedDisplayComponent(v: ComponentRef<C> | null | undefined) {\r\n if (this._snapedDisplayComponent === v) {\r\n return;\r\n }\r\n\r\n this._snapedDisplayComponent = v;\r\n }\r\n\r\n protected _isSnappingMethodAdvanced: boolean = false;\r\n\r\n set isSnappingMethodAdvanced(v: boolean) {\r\n if (this._isSnappingMethodAdvanced === v) {\r\n return;\r\n }\r\n\r\n this._isSnappingMethodAdvanced = v;\r\n }\r\n\r\n /**\r\n * Set the trackBy property\r\n */\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = this._tracker.trackingPropertyName = v;\r\n }\r\n\r\n protected _trackingPropertyName: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n constructor(trackingPropertyName: string) {\r\n super();\r\n\r\n this._trackingPropertyName = trackingPropertyName;\r\n\r\n this.initialize();\r\n }\r\n\r\n protected initialize() {\r\n this._tracker = new Tracker(this._trackingPropertyName);\r\n }\r\n\r\n override set(id: Id, bounds: ISize): CMap<Id, ISize> {\r\n if (this._map.has(id)) {\r\n const b = this._map.get(id);\r\n if (b?.width === bounds.width && b.height === bounds.height) {\r\n return this._map;\r\n }\r\n }\r\n\r\n const v = this._map.set(id, bounds);\r\n\r\n this.bumpVersion();\r\n return v;\r\n }\r\n\r\n protected _previousCollection: Array<{ id: Id; }> | null | undefined;\r\n\r\n protected _deletedItemsMap: { [index: number]: ISize } = {};\r\n\r\n protected _crudDetected = false;\r\n get crudDetected() { return this._crudDetected; }\r\n\r\n protected override fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(TRACK_BOX_CHANGE_EVENT_NAME, this._version);\r\n }\r\n }\r\n\r\n protected _previousTotalSize = 0;\r\n\r\n protected _scrollDelta: number = 0;\r\n get scrollDelta() { return this._scrollDelta; }\r\n\r\n isAdaptiveBuffer = true;\r\n\r\n protected _bufferSequenceExtraThreshold = DEFAULT_BUFFER_EXTREMUM_THRESHOLD;\r\n\r\n protected _maxBufferSequenceLength = DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH;\r\n\r\n protected _bufferSizeSequence: Array<number> = [];\r\n\r\n protected _bufferSize: number = 0;\r\n get bufferSize() { return this._bufferSize; }\r\n\r\n protected _defaultBufferSize: number = 0;\r\n\r\n protected _maxBufferSize: number = this._defaultBufferSize;\r\n\r\n protected _resetBufferSizeTimeout: number = DEFAULT_RESET_BUFFER_SIZE_TIMEOUT;\r\n\r\n protected _resetBufferSizeTimer: number | undefined;\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, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IGetItemPositionOptions<I, C>): number {\r\n const opt = { fromItemId: id, itemConfigMap, ...options };\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const { scrollSize, isFromItemIdFound } = this.recalculateMetrics({\r\n ...opt,\r\n dynamicSize: this._crudDetected || opt.dynamicSize,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap: this._deletedItemsMap,\r\n });\r\n return isFromItemIdFound ? scrollSize : -1;\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n updateCollection<I extends { id: Id }, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IUpdateCollectionOptions<I, C>): IUpdateCollectionReturns {\r\n const opt = { itemConfigMap, ...options }, crudDetected = this._crudDetected, deletedItemsMap = this._deletedItemsMap;\r\n if (opt.dynamicSize) {\r\n this.cacheElements();\r\n }\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n this._delta += metrics.delta;\r\n\r\n this.updateAdaptiveBufferParams(metrics, items.length);\r\n\r\n this._previousTotalSize = metrics.totalSize;\r\n\r\n this._deletedItemsMap = {};\r\n\r\n this._crudDetected = false;\r\n\r\n if (opt.dynamicSize) {\r\n this.snapshot();\r\n }\r\n\r\n const displayItems = this.generateDisplayCollection(items, itemConfigMap, { ...metrics, });\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n /**\r\n * Finds the closest element in the collection by scrollSize\r\n */\r\n getNearestItem<I extends { id: Id }, C extends Array<I>>(scrollSize: number, items: C, itemSize: number, isVertical: boolean): I | undefined {\r\n return this.getElementFromStart(scrollSize, items, this._map, itemSize, isVertical);\r\n }\r\n\r\n protected _previousScrollSize = 0;\r\n\r\n protected updateAdaptiveBufferParams(metrics: IMetrics, totalItemsLength: number) {\r\n this.disposeClearBufferSizeTimer();\r\n\r\n const scrollSize = metrics.scrollSize + this._delta, delta = Math.abs(this._previousScrollSize - scrollSize);\r\n this._previousScrollSize = scrollSize;\r\n const bufferRawSize = Math.min(Math.floor(delta / metrics.typicalItemSize) * 5, totalItemsLength),\r\n minBufferSize = bufferRawSize < this._defaultBufferSize ? this._defaultBufferSize : bufferRawSize,\r\n bufferValue = minBufferSize > this._maxBufferSize ? this._maxBufferSize : minBufferSize;\r\n\r\n this._bufferSize = bufferInterpolation(this._bufferSize, this._bufferSizeSequence, bufferValue, {\r\n extremumThreshold: this._bufferSequenceExtraThreshold,\r\n bufferSize: this._maxBufferSequenceLength,\r\n });\r\n\r\n this.startResetBufferSizeTimer();\r\n }\r\n\r\n protected startResetBufferSizeTimer() {\r\n this._resetBufferSizeTimer = setTimeout(() => {\r\n this._bufferSize = this._defaultBufferSize;\r\n this._bufferSizeSequence = [];\r\n }, this._resetBufferSizeTimeout) as unknown as number;\r\n }\r\n\r\n protected disposeClearBufferSizeTimer() {\r\n clearTimeout(this._resetBufferSizeTimer);\r\n }\r\n\r\n /**\r\n * Calculates the position of an element based on the given scrollSize\r\n */\r\n protected getElementFromStart<I extends { id: Id }, C extends Array<I>>(scrollSize: number, collection: C, map: CMap<Id, ISize>, typicalItemSize: number,\r\n isVertical: boolean): I | undefined {\r\n const sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;\r\n let offset = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const item = collection[i];\r\n let itemSize = 0;\r\n if (map.has(item.id)) {\r\n const bounds = map.get(item.id);\r\n itemSize = bounds ? bounds[sizeProperty] : typicalItemSize;\r\n } else {\r\n itemSize = typicalItemSize;\r\n }\r\n if (offset > scrollSize) {\r\n return item;\r\n }\r\n offset += itemSize;\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Calculates the entry into the overscroll area and returns the number of overscroll elements\r\n */\r\n protected getElementNumToEnd<I extends { id: Id }, C extends Array<I>>(i: number, collection: C, map: CMap<Id, ISize>, typicalItemSize: number,\r\n size: number, isVertical: boolean, indexOffset: number = 0): { num: number, offset: number } {\r\n const sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;\r\n let offset = 0, num = 0;\r\n for (let j = collection.length - indexOffset - 1; j >= i; j--) {\r\n const item = collection[j];\r\n let itemSize = 0;\r\n if (map.has(item.id)) {\r\n const bounds = map.get(item.id);\r\n itemSize = bounds ? bounds[sizeProperty] : typicalItemSize;\r\n } else {\r\n itemSize = typicalItemSize;\r\n }\r\n offset += itemSize;\r\n num++;\r\n if (offset > size) {\r\n return { num: 0, offset };\r\n }\r\n }\r\n return { num, offset };\r\n }\r\n\r\n /**\r\n * Calculates list metrics\r\n */\r\n protected recalculateMetrics<I extends { id: Id }, C extends Array<I>>(options: IRecalculateMetricsOptions<I, C>): IMetrics {\r\n const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize,\r\n bufferSize: minBufferSize, scrollSize, snap, itemConfigMap, enabledBufferOptimization,\r\n previousTotalSize, crudDetected, deletedItemsMap } = options as IRecalculateMetricsOptions<I, C> & {\r\n itemConfigMap: IVirtualListItemConfigMap,\r\n };\r\n\r\n const bufferSize = Math.max(minBufferSize, this._bufferSize),\r\n { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME,\r\n size = isVertical ? height : width, totalLength = collection.length, typicalItemSize = itemSize,\r\n w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height,\r\n map = this._map, snapshot = this._snapshot, checkOverscrollItemsLimit = Math.ceil(size / typicalItemSize),\r\n snippedPos = Math.floor(scrollSize), leftItemsWeights: Array<number> = [],\r\n isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)\r\n || (typeof fromItemId === 'string' && fromItemId > '-1');\r\n\r\n let leftItemsOffset = 0, rightItemsOffset = 0;\r\n if (enabledBufferOptimization) {\r\n switch (this.scrollDirection) {\r\n case 1: {\r\n leftItemsOffset = 0;\r\n rightItemsOffset = bufferSize;\r\n break;\r\n }\r\n case -1: {\r\n leftItemsOffset = bufferSize;\r\n rightItemsOffset = 0;\r\n break;\r\n }\r\n case 0:\r\n default: {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n }\r\n } else {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n\r\n let itemsFromStartToScrollEnd: number = -1, itemsFromDisplayEndToOffsetEnd = 0, itemsFromStartToDisplayEnd = -1,\r\n leftItemLength = 0, rightItemLength = 0,\r\n leftItemsWeight = 0, rightItemsWeight = 0,\r\n leftHiddenItemsWeight = 0,\r\n totalItemsToDisplayEndWeight = 0,\r\n leftSizeOfAddedItems = 0,\r\n leftSizeOfUpdatedItems = 0,\r\n leftSizeOfDeletedItems = 0,\r\n itemById: I | undefined = undefined,\r\n itemByIdPos: number = 0,\r\n targetDisplayItemIndex: number = -1,\r\n isTargetInOverscroll: boolean = false,\r\n actualScrollSize = itemByIdPos,\r\n totalSize = 0,\r\n startIndex: number,\r\n isFromItemIdFound = false;\r\n\r\n // If the list is dynamic or there are new elements in the collection, then it switches to the long algorithm.\r\n if (dynamicSize) {\r\n let y = 0, stickyCollectionItem: I | undefined = undefined, stickyComponentSize = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const ii = i + 1, collectionItem = collection[i], id = collectionItem.id;\r\n\r\n let componentSize = 0, componentSizeDelta = 0, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const bounds = map.get(id) || { width: typicalItemSize, height: typicalItemSize };\r\n componentSize = bounds[sizeProperty];\r\n itemDisplayMethod = bounds?.method ?? ItemDisplayMethods.UPDATE;\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.UPDATE: {\r\n const snapshotBounds = snapshot.get(id);\r\n const componentSnapshotSize = componentSize - (snapshotBounds ? snapshotBounds[sizeProperty] : typicalItemSize);\r\n componentSizeDelta = componentSnapshotSize;\r\n map.set(id, { ...bounds, method: ItemDisplayMethods.NOT_CHANGED });\r\n break;\r\n }\r\n case ItemDisplayMethods.CREATE: {\r\n componentSizeDelta = typicalItemSize;\r\n map.set(id, { ...bounds, method: ItemDisplayMethods.NOT_CHANGED });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const bounds = deletedItemsMap[i], size = bounds?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n totalSize += componentSize;\r\n\r\n if (isFromId) {\r\n if (itemById === undefined) {\r\n if (id !== fromItemId && itemConfigMap && itemConfigMap[id]?.sticky === 1) {\r\n stickyComponentSize = componentSize;\r\n stickyCollectionItem = collectionItem;\r\n }\r\n\r\n if (id === fromItemId) {\r\n isFromItemIdFound = true;\r\n targetDisplayItemIndex = i;\r\n if (stickyCollectionItem && itemConfigMap) {\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 (itemConfigMap && !itemConfigMap[collectionItem.id] && y >= scrollSize && y < scrollSize + stickyComponentSize) {\r\n const snappedY = scrollSize - stickyComponentSize;\r\n leftHiddenItemsWeight -= (snappedY - y);\r\n y = snappedY;\r\n } else {\r\n y -= stickyComponentSize;\r\n leftHiddenItemsWeight -= stickyComponentSize;\r\n }\r\n }\r\n }\r\n itemById = collectionItem;\r\n itemByIdPos = y;\r\n } else {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n }\r\n } else if (y <= scrollSize - componentSize) {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === undefined || y < itemByIdPos + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n } else if (y <= scrollSize + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n\r\n if (y <= scrollSize - componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfAddedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE: {\r\n leftSizeOfUpdatedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSizeDelta;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n if (i < itemsFromDisplayEndToOffsetEnd) {\r\n rightItemsWeight += componentSize;\r\n }\r\n }\r\n\r\n y += componentSize;\r\n }\r\n\r\n if (isTargetInOverscroll) {\r\n const { num } = this.getElementNumToEnd(\r\n collection.length - (checkOverscrollItemsLimit < 0 ? 0 : collection.length - checkOverscrollItemsLimit),\r\n collection, map, typicalItemSize, size, isVertical, collection.length - (collection.length - (targetDisplayItemIndex + 1)),\r\n );\r\n if (num > 0) {\r\n itemsFromStartToScrollEnd -= num;\r\n }\r\n }\r\n\r\n if (itemsFromStartToScrollEnd <= -1) {\r\n itemsFromStartToScrollEnd = 0;\r\n }\r\n if (itemsFromStartToDisplayEnd <= -1) {\r\n itemsFromStartToDisplayEnd = 0;\r\n }\r\n actualScrollSize = isFromId ? itemByIdPos : scrollSize;\r\n\r\n leftItemsWeights.splice(0, leftItemsWeights.length - leftItemsOffset);\r\n leftItemsWeights.forEach(v => {\r\n leftItemsWeight += v;\r\n });\r\n\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, leftItemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + rightItemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : rightItemsOffset;\r\n\r\n } else\r\n // Buffer optimization does not work on fast linear algorithm\r\n {\r\n if (crudDetected) {\r\n let y = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const collectionItem = collection[i], id = collectionItem.id;\r\n let componentSize = typicalItemSize, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const bounds = map.get(id)!;\r\n itemDisplayMethod = bounds?.method ?? ItemDisplayMethods.UPDATE;\r\n if (itemDisplayMethod === ItemDisplayMethods.CREATE) {\r\n map.set(id, { ...bounds, method: ItemDisplayMethods.NOT_CHANGED });\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const bounds = deletedItemsMap[i], size = bounds?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n if (y < scrollSize - componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfUpdatedItems += componentSize;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE: {\r\n leftSizeOfUpdatedItems += componentSize;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSize;\r\n break;\r\n }\r\n }\r\n }\r\n y += componentSize;\r\n }\r\n }\r\n itemsFromStartToScrollEnd = Math.floor(scrollSize / typicalItemSize);\r\n itemsFromStartToDisplayEnd = Math.ceil((scrollSize + size) / typicalItemSize);\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, bufferSize);\r\n rightItemLength = itemsFromStartToDisplayEnd + bufferSize > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : bufferSize;\r\n leftItemsWeight = leftItemLength * typicalItemSize;\r\n rightItemsWeight = rightItemLength * typicalItemSize;\r\n leftHiddenItemsWeight = itemsFromStartToScrollEnd * typicalItemSize;\r\n totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * typicalItemSize;\r\n totalSize = totalLength * typicalItemSize;\r\n\r\n const k = totalSize !== 0 ? previousTotalSize / totalSize : 0;\r\n actualScrollSize = scrollSize * k;\r\n }\r\n startIndex = Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0);\r\n\r\n const itemsOnDisplayWeight = totalItemsToDisplayEndWeight - leftItemsWeight,\r\n itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd,\r\n startPosition = leftHiddenItemsWeight - leftItemsWeight,\r\n renderItems = itemsOnDisplayLength + leftItemLength + rightItemLength,\r\n delta = leftSizeOfUpdatedItems + leftSizeOfAddedItems - leftSizeOfDeletedItems;\r\n\r\n const metrics: IMetrics = {\r\n delta,\r\n normalizedItemWidth: w,\r\n normalizedItemHeight: h,\r\n width,\r\n height,\r\n dynamicSize,\r\n itemSize,\r\n itemsFromStartToScrollEnd,\r\n itemsFromStartToDisplayEnd,\r\n itemsOnDisplayWeight,\r\n itemsOnDisplayLength,\r\n isVertical,\r\n leftHiddenItemsWeight,\r\n leftItemLength,\r\n leftItemsWeight,\r\n renderItems,\r\n rightItemLength,\r\n rightItemsWeight,\r\n scrollSize: actualScrollSize,\r\n leftSizeOfAddedItems,\r\n sizeProperty,\r\n snap,\r\n snippedPos,\r\n startIndex,\r\n startPosition,\r\n totalItemsToDisplayEndWeight,\r\n totalLength,\r\n totalSize,\r\n typicalItemSize,\r\n isFromItemIdFound,\r\n };\r\n\r\n return metrics;\r\n }\r\n\r\n clearDeltaDirection() {\r\n this.clearScrollDirectionCache();\r\n }\r\n\r\n clearDelta(clearDirectionDetector = false): void {\r\n this._delta = 0;\r\n\r\n if (clearDirectionDetector) {\r\n this.clearScrollDirectionCache();\r\n }\r\n }\r\n\r\n changes(): void {\r\n this.bumpVersion();\r\n }\r\n\r\n protected generateDisplayCollection<I extends { id: Id }, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\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, count = 1;\r\n\r\n if (snap) {\r\n for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? itemsFromStartToScrollEnd : 0, totalLength - 1); i >= 0; i--) {\r\n if (!items[i]) {\r\n continue;\r\n }\r\n const id = items[i].id, sticky = itemConfigMap[id]?.sticky ?? 0, selectable = itemConfigMap[id]?.selectable ?? true,\r\n size = dynamicSize ? this.get(id)?.[sizeProperty] || typicalItemSize : typicalItemSize;\r\n if (sticky === 1) {\r\n const isOdd = i % 2 != 0,\r\n 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 odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n selectable,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = items[i];\r\n\r\n stickyItem = { index: i, id, measures, data: itemData, config };\r\n stickyItemIndex = i;\r\n stickyItemSize = size;\r\n\r\n displayItems.push(stickyItem);\r\n\r\n count++;\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 if (!items[i]) {\r\n continue;\r\n }\r\n const id = items[i].id, sticky = itemConfigMap[id]?.sticky ?? 0, selectable = itemConfigMap[id]?.selectable ?? true,\r\n size = dynamicSize\r\n ? this.get(id)?.[sizeProperty] || typicalItemSize\r\n : typicalItemSize;\r\n if (sticky === 2) {\r\n const isOdd = i % 2 != 0,\r\n 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 odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n selectable,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = items[i];\r\n\r\n endStickyItem = { index: i, id, measures, data: itemData, config };\r\n endStickyItemIndex = i;\r\n endStickyItemSize = size;\r\n\r\n displayItems.push(endStickyItem);\r\n\r\n count++;\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 if (!items[i]) {\r\n continue;\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 isOdd = i % 2 != 0,\r\n sticky = itemConfigMap[id]?.sticky ?? 0, selectable = itemConfigMap[id]?.selectable ?? true,\r\n snapped = snap && (sticky === 1 && pos <= scrollSize || sticky === 2 && pos >= scrollSize + boundsSize - size),\r\n measures = {\r\n x: isVertical ? sticky === 1 ? 0 : boundsSize - size : pos,\r\n y: isVertical ? pos : sticky === 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 odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n selectable,\r\n sticky: sticky,\r\n snap,\r\n snapped: false,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\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 = { index: i, id, measures, data: itemData, config };\r\n if (!nextSticky && stickyItemIndex < i && sticky === 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 && sticky === 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 count++;\r\n }\r\n\r\n renderItems -= 1;\r\n pos += size;\r\n i++;\r\n }\r\n\r\n const axis = isVertical ? Y_PROP_NAME : X_PROP_NAME;\r\n\r\n if (nextSticky && stickyItem && nextSticky.measures[axis] <= scrollSize + stickyItemSize) {\r\n if (nextSticky.measures[axis] > scrollSize) {\r\n stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItemSize;\r\n stickyItem.config.snapped = nextSticky.config.snapped = false;\r\n stickyItem.config.snappedOut = true;\r\n stickyItem.config.sticky = 1;\r\n stickyItem.measures.delta = isVertical ? stickyItem.measures.y - scrollSize : stickyItem.measures.x - scrollSize;\r\n } else {\r\n nextSticky.config.snapped = true;\r\n nextSticky.measures.delta = isVertical ? nextSticky.measures.y - scrollSize : nextSticky.measures.x - scrollSize;\r\n }\r\n }\r\n\r\n if (nextEndSticky && endStickyItem && nextEndSticky.measures[axis] >= scrollSize + boundsSize - endStickyItemSize - nextEndSticky.measures[sizeProperty]) {\r\n if (nextEndSticky.measures[axis] < scrollSize + boundsSize - endStickyItemSize) {\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n endStickyItem.config.snapped = nextEndSticky.config.snapped = false;\r\n endStickyItem.config.snappedOut = true;\r\n endStickyItem.config.sticky = 2;\r\n endStickyItem.measures.delta = isVertical ? endStickyItem.measures.y - scrollSize : endStickyItem.measures.x - scrollSize;\r\n } else {\r\n nextEndSticky.config.snapped = true;\r\n nextEndSticky.measures.delta = isVertical ? nextEndSticky.measures.y - scrollSize : nextEndSticky.measures.x - scrollSize;\r\n }\r\n }\r\n }\r\n return displayItems;\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(): void {\r\n if (!this._items || !this._displayComponents) {\r\n return;\r\n }\r\n\r\n this._tracker.track(this._items, this._displayComponents, this._snapedDisplayComponent, this.scrollDirection);\r\n }\r\n\r\n setDisplayObjectIndexMapById(v: { [id: number]: number }): void {\r\n this._tracker.displayObjectIndexMapById = v;\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C | undefined) {\r\n this._tracker.untrackComponentByIdProperty(component);\r\n }\r\n\r\n getItemBounds(id: Id): ISize | undefined {\r\n if (this.has(id)) {\r\n return this.get(id);\r\n }\r\n return undefined;\r\n }\r\n\r\n protected cacheElements(): void {\r\n if (!this._displayComponents) {\r\n return;\r\n }\r\n\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const component = this._displayComponents[i], itemId = component.instance.itemId;\r\n if (itemId === undefined) {\r\n continue;\r\n }\r\n const bounds = component.instance.getBounds();\r\n this.set(itemId, bounds);\r\n }\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.disposeClearBufferSizeTimer();\r\n\r\n if (this._tracker) {\r\n this._tracker.dispose();\r\n }\r\n }\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 { 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}","import { MethodForSelecting, MethodsForSelecting } from \"../enums\";\r\n\r\nconst NONE_ALIASES = [MethodsForSelecting.NONE, 'none'],\r\n SELECT_ALIASES = [MethodsForSelecting.SELECT, 'select'],\r\n MULTI_SELECT_ALIASES = [MethodsForSelecting.MULTI_SELECT, 'multi-select'];\r\n\r\n/**\r\n * Defines the method for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/isMethodForSelecting.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isMethodForSelecting = (src: MethodForSelecting, expected: MethodForSelecting): boolean => {\r\n if (NONE_ALIASES.includes(expected)) {\r\n return NONE_ALIASES.includes(src);\r\n } else if (SELECT_ALIASES.includes(expected)) {\r\n return SELECT_ALIASES.includes(src);\r\n }\r\n return MULTI_SELECT_ALIASES.includes(src);\r\n}\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_BUFFER_SIZE, DEFAULT_LIST_SIZE, DEFAULT_SNAP, DEFAULT_SNAPPING_METHOD,\r\n HEIGHT_PROP_NAME, LEFT_PROP_NAME, MAX_SCROLL_TO_ITERATIONS, PX, SCROLL, SCROLL_END, TOP_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n DEFAULT_MAX_BUFFER_SIZE,\r\n DEFAULT_SELECT_METHOD,\r\n DEFAULT_SELECT_BY_CLICK,\r\n} from './const';\r\nimport { IRenderVirtualListItem, IScrollEvent, IVirtualListCollection, IVirtualListItem, IVirtualListItemConfigMap } from './models';\r\nimport { Id, ISize } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { Direction, Directions, MethodForSelecting, MethodsForSelecting, SnappingMethod } from './enums';\r\nimport { ScrollEvent, toggleClassName } from './utils';\r\nimport { IGetItemPositionOptions, IUpdateCollectionOptions, TRACK_BOX_CHANGE_EVENT_NAME, TrackBox } from './utils/trackBox';\r\nimport { isSnappingMethodAdvenced } from './utils/snapping-method';\r\nimport { FIREFOX_SCROLLBAR_OVERLAP_SIZE, IS_FIREFOX } from './utils/browser';\r\nimport { BaseVirtualListItemComponent } from './models/base-virtual-list-item-component';\r\nimport { Component$1 } from './models/component.model';\r\nimport { isDirection } from './utils/isDirection';\r\nimport { NgVirtualListService } from './ng-virtual-list.service';\r\nimport { isMethodForSelecting } from './utils/isMethodForSelecting';\r\nimport { MethodsForSelectingTypes } from './enums/method-for-selecting-types';\r\n\r\nconst ROLE_LIST = 'list',\r\n ROLE_LIST_BOX = 'listbox';\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 providers: [NgVirtualListService],\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 private _service = inject(NgVirtualListService);\r\n\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('snapRendererContainer', { read: ViewContainerRef })\r\n private _snapContainerRef: ViewContainerRef | undefined;\r\n\r\n private _snappedContainer = viewChild<ElementRef<HTMLDivElement>>('snapped');\r\n\r\n private _container = viewChild<ElementRef<HTMLDivElement>>('container');\r\n\r\n private _list = viewChild<ElementRef<HTMLDivElement>>('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 /**\r\n * Fires when the viewport size is changed.\r\n */\r\n onViewportChange = output<ISize>();\r\n\r\n /**\r\n * Fires when an element is clicked.\r\n */\r\n onItemClick = output<IRenderVirtualListItem<any> | undefined>();\r\n\r\n /**\r\n * Fires when an elements are selected.\r\n */\r\n onSelect = output<Array<Id> | Id | undefined>();\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 * Sets the selected items.\r\n */\r\n selectedIds = input<Array<Id> | Id | undefined>(undefined);\r\n\r\n /**\r\n * If false, the element is selected using the config.select method passed to the template; \r\n * if true, the element is selected by clicking on it. The default value is true.\r\n */\r\n selectByClick = input<boolean>(DEFAULT_SELECT_BY_CLICK);\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 private _itemRenderer = signal<TemplateRef<any> | undefined>(undefined);\r\n\r\n /**\r\n * @deprecated\r\n * Use `itemConfigMap` instead.\r\n */\r\n stickyMap = input();\r\n\r\n /**\r\n * Sets sticky position and selectable for the list item element. If sticky position is greater than 0, then sticky position is applied. \r\n * If the sticky value is greater than `0`, then the sticky position mode is enabled for the element. `1` - position start, `2` - position end. Default value is `0`.\r\n * selectable determines whether an element can be selected or not. Default value is `true`.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n itemConfigMap = input<IVirtualListItemConfigMap>({});\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 private _itemOffsetTransform = {\r\n transform: (v: number | undefined) => {\r\n throw Error('\"itemOffset\" parameter is deprecated. Use \"bufferSize\" and \"maxBufferSize\".');\r\n }\r\n } as any;\r\n\r\n /**\r\n * Number of elements outside the scope of visibility. Default value is 2.\r\n * @deprecated \"itemOffset\" parameter is deprecated. Use \"bufferSize\" and \"maxBufferSize\".\r\n */\r\n itemsOffset = input<number>(DEFAULT_BUFFER_SIZE, { ...this._itemOffsetTransform });\r\n\r\n /**\r\n * Number of elements outside the scope of visibility. Default value is 2.\r\n */\r\n bufferSize = input<number>(DEFAULT_BUFFER_SIZE);\r\n\r\n private _maxBufferSizeTransform = {\r\n transform: (v: number | undefined) => {\r\n const bufferSize = this.bufferSize();\r\n if (v === undefined || v <= bufferSize) {\r\n return bufferSize;\r\n }\r\n return v;\r\n }\r\n } as any;\r\n\r\n /**\r\n * Maximum number of elements outside the scope of visibility. Default value is 100.\r\n * If maxBufferSize is set to be greater than bufferSize, then adaptive buffer mode is enabled.\r\n * The greater the scroll size, the more elements are allocated for rendering.\r\n */\r\n maxBufferSize = input<number>(DEFAULT_MAX_BUFFER_SIZE, { ...this._maxBufferSizeTransform });\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 /**\r\n * Method for selecting list items. Default value is 'none'.\r\n * 'select' - List items are selected one by one.\r\n * 'multi-select' - Multiple selection of list items.\r\n * 'none' - List items are not selectable.\r\n */\r\n methodForSelecting = input<MethodForSelecting>(DEFAULT_SELECT_METHOD);\r\n\r\n private _isNotSelecting = this.getIsNotSelecting();\r\n get isNotSelecting() { return this._isNotSelecting; }\r\n\r\n private _isSingleSelecting = this.getIsSingleSelecting();\r\n get isSingleSelecting() { return this._isSingleSelecting; }\r\n\r\n private _isMultiSelecting = this.getIsMultiSelecting();\r\n get isMultiSelecting() { return this._isMultiSelecting; }\r\n\r\n private _isSnappingMethodAdvanced: boolean = this.getIsSnappingMethodAdvanced();\r\n get isSnappingMethodAdvanced() { return this._isSnappingMethodAdvanced; }\r\n\r\n private _isVertical = this.getIsVertical();\r\n\r\n get orientation() {\r\n return this._isVertical ? Directions.VERTICAL : Directions.HORIZONTAL;\r\n }\r\n\r\n private _displayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _snapedDisplayComponent: ComponentRef<BaseVirtualListItemComponent> | undefined;\r\n\r\n private _bounds = signal<ISize | null>(null);\r\n\r\n private _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 * Base class of the element component\r\n */\r\n private _itemComponentClass: Component$1<BaseVirtualListItemComponent> = NgVirtualListItemComponent;\r\n\r\n /**\r\n * Base class trackBox\r\n */\r\n private _trackBoxClass: Component$1<TrackBox> = TrackBox;\r\n\r\n /**\r\n * Dictionary of element sizes by their id\r\n */\r\n private _trackBox: TrackBox = new this._trackBoxClass(this.trackBy());\r\n\r\n private _onTrackBoxChangeHandler = (v: number) => {\r\n this._cacheVersion.set(v);\r\n }\r\n\r\n private _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._service.initialize(this._trackBox);\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 toObservable(this._list).pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._service.listElement = v.nativeElement;\r\n }),\r\n ).subscribe();\r\n\r\n const $trackBy = toObservable(this.trackBy),\r\n $selectByClick = toObservable(this.selectByClick);\r\n\r\n $selectByClick.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.selectByClick = v;\r\n }),\r\n ).subscribe();\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 $bufferSize = toObservable(this.bufferSize).pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $maxBufferSize = toObservable(this.maxBufferSize).pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $itemConfigMap = toObservable(this.itemConfigMap).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 $methodForSelecting = toObservable(this.methodForSelecting),\r\n $selectedIds = toObservable(this.selectedIds),\r\n $cacheVersion = toObservable(this._cacheVersion);\r\n\r\n $isVertical.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._isVertical = v;\r\n const el: HTMLElement = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, v ? CLASS_LIST_HORIZONTAL : CLASS_LIST_VERTICAL);\r\n }),\r\n ).subscribe();\r\n\r\n $snappingMethod.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._isSnappingMethodAdvanced = this._trackBox.isSnappingMethodAdvanced = v;\r\n }),\r\n ).subscribe();\r\n\r\n $methodForSelecting.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n const el = this._list()?.nativeElement;\r\n if (this.getIsMultiSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isMultiSelecting = true;\r\n this._isNotSelecting = this._isSingleSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.MULTI_SELECT;\r\n } else if (this.getIsSingleSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelecting = true;\r\n this._isNotSelecting = this._isMultiSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.SELECT;\r\n } else if (this.getIsNotSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isNotSelecting = true;\r\n this._isSingleSelecting = this._isMultiSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.NONE;\r\n }\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, $itemConfigMap, $scrollSize, $itemSize,\r\n $bufferSize, $maxBufferSize, $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, itemConfigMap, scrollSize, itemSize,\r\n bufferSize, maxBufferSize, 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 bufferSize, maxBufferSize, scrollSize: actualScrollSize, snap, enabledBufferOptimization,\r\n },\r\n { displayItems, totalSize } = this._trackBox.updateCollection(items, itemConfigMap, 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 const $itemRenderer = toObservable(this.itemRenderer);\r\n\r\n $itemRenderer.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._itemRenderer.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n $bounds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(value => {\r\n this.onViewportChange.emit(value);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$itemClick.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this.onItemClick.emit(v);\r\n }),\r\n ).subscribe();\r\n\r\n let isSelectedIdsFirstEmit = 0;\r\n\r\n this._service.$selectedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (this.isSingleSelecting || (this.isMultiSelecting && isSelectedIdsFirstEmit >= 2)) {\r\n const curr = this.selectedIds();\r\n if ((this.isSingleSelecting && JSON.stringify(v) !== JSON.stringify(curr)) || (isSelectedIdsFirstEmit === 2 && JSON.stringify(v) !== JSON.stringify(curr)) || isSelectedIdsFirstEmit > 2) {\r\n this.onSelect.emit(v);\r\n }\r\n }\r\n if (isSelectedIdsFirstEmit < 3) {\r\n isSelectedIdsFirstEmit++;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $selectedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.setSelectedIds(v);\r\n }),\r\n ).subscribe();\r\n\r\n }\r\n\r\n /** @internal */\r\n ngOnInit() {\r\n this.onInit();\r\n }\r\n\r\n private onInit() {\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 getIsNotSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.NONE);\r\n }\r\n\r\n private getIsSingleSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.SELECT);\r\n }\r\n\r\n private getIsMultiSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.MULTI_SELECT);\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(this._itemComponentClass);\r\n comp.instance.regular = true;\r\n this._snapedDisplayComponent = comp;\r\n this._trackBox.snapedDisplayComponent = this._snapedDisplayComponent;\r\n\r\n this._resizeSnappedObserver = new ResizeObserver(this._resizeSnappedComponentHandler);\r\n this._resizeSnappedObserver.observe(comp.instance.element);\r\n }\r\n }\r\n\r\n this._trackBox.items = displayItems;\r\n\r\n const _listContainerRef = this._listContainerRef;\r\n\r\n const maxLength = displayItems.length, components = this._displayComponents;\r\n\r\n while (components.length < maxLength) {\r\n if (_listContainerRef) {\r\n const comp = _listContainerRef.createComponent(this._itemComponentClass);\r\n components.push(comp);\r\n\r\n this._componentsResizeObserver.observe(comp.instance.element);\r\n }\r\n }\r\n\r\n this.resetRenderers();\r\n }\r\n\r\n 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 private 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: number | undefined;\r\n\r\n private clearScrollToRepeatExecutionTimeout() {\r\n clearTimeout(this._scrollToRepeatExecutionTimeout);\r\n }\r\n\r\n private 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 itemConfigMap = this.itemConfigMap(), 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 bufferSize: this.bufferSize(), maxBufferSize: this.maxBufferSize(),\r\n 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, itemConfigMap, opts),\r\n params: ScrollToOptions = { [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior };\r\n\r\n if (scrollSize === -1) {\r\n container.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n return;\r\n }\r\n\r\n this._trackBox.clearDelta();\r\n\r\n if (container) {\r\n const { displayItems, totalSize } = this._trackBox.updateCollection(items, itemConfigMap, {\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, itemConfigMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });\r\n\r\n if (_scrollSize === -1) {\r\n container.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n return;\r\n }\r\n\r\n const notChanged = actualScrollSize === _scrollSize\r\n\r\n if (!notChanged || iteration < MAX_SCROLL_TO_ITERATIONS) {\r\n this.clearScrollToRepeatExecutionTimeout();\r\n this._scrollToRepeatExecutionTimeout = setTimeout(() => {\r\n this.scrollToExecutor(id, BEHAVIOR_INSTANT, iteration + 1, notChanged);\r\n }) as unknown as number;\r\n } else {\r\n this._scrollSize.set(actualScrollSize);\r\n\r\n container.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n }\r\n }\r\n\r\n container.nativeElement.scrollTo(params);\r\n\r\n this._scrollSize.set(scrollSize);\r\n } else {\r\n const index = items.findIndex(item => item.id === id);\r\n if (index > -1) {\r\n const scrollSize = index * this.itemSize();\r\n const params: ScrollToOptions = { [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior };\r\n container.nativeElement.scrollTo(params);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the desired element with the specified ID.\r\n */\r\n scrollToEnd(behavior: ScrollBehavior = BEHAVIOR_INSTANT) {\r\n const items = this.items(), latItem = items[items.length > 0 ? items.length - 1 : 0];\r\n this.scrollTo(latItem.id, behavior);\r\n }\r\n\r\n 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 this.afterViewInit();\r\n }\r\n\r\n private afterViewInit() {\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n // for direction calculation\r\n containerEl.nativeElement.addEventListener(SCROLL, this._onContainerScrollHandler);\r\n containerEl.nativeElement.addEventListener(SCROLL_END, this._onContainerScrollEndHandler);\r\n\r\n containerEl.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n\r\n this._resizeObserver = new ResizeObserver(this._onResizeHandler);\r\n this._resizeObserver.observe(containerEl.nativeElement);\r\n\r\n this._onResizeHandler();\r\n }\r\n }\r\n\r\n /** @internal */\r\n ngOnDestroy(): void {\r\n this.dispose();\r\n }\r\n\r\n private dispose() {\r\n this.clearScrollToRepeatExecutionTimeout();\r\n\r\n if (this._trackBox) {\r\n this._trackBox.dispose();\r\n }\r\n\r\n if (this._componentsResizeObserver) {\r\n this._componentsResizeObserver.disconnect();\r\n }\r\n\r\n if (this._resizeSnappedObserver) {\r\n this._resizeSnappedObserver.disconnect();\r\n }\r\n\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n containerEl.nativeElement.removeEventListener(SCROLL, this._onScrollHandler);\r\n containerEl.nativeElement.removeEventListener(SCROLL, this._onContainerScrollHandler);\r\n containerEl.nativeElement.removeEventListener(SCROLL_END, this._onContainerScrollEndHandler);\r\n }\r\n\r\n if (this._snapedDisplayComponent) {\r\n this._snapedDisplayComponent.destroy();\r\n }\r\n\r\n if (this._displayComponents) {\r\n while (this._displayComponents.length > 0) {\r\n const comp = this._displayComponents.pop();\r\n comp?.destroy();\r\n }\r\n }\r\n }\r\n}\r\n","@if (snap()) {\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n}\r\n<div #container part=\"scroller\" class=\"ngvl__scroller\">\r\n <div [attr.aria-orientation]=\"orientation\" #list part=\"list\" class=\"ngvl__list\">\r\n <ng-container #renderersContainer></ng-container>\r\n </div>\r\n</div>","/*\r\n * Public API Surface of ng-virtual-list\r\n */\r\n\r\nexport * from './lib/components/ng-virtual-list-item.component';\r\nexport * from './lib/ng-virtual-list.component';\r\nexport * from './lib/enums';\r\nexport * from './lib/models';\r\nexport * from './lib/types';\r\nexport * from './lib/utils';\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/methods-for-selecting.ts","../../../projects/ng-virtual-list/src/lib/enums/snapping-methods.ts","../../../projects/ng-virtual-list/src/lib/const/index.ts","../../../projects/ng-virtual-list/src/lib/models/base-virtual-list-item-component.ts","../../../projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.service.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/debounce.ts","../../../projects/ng-virtual-list/src/lib/utils/toggleClassName.ts","../../../projects/ng-virtual-list/src/lib/utils/scrollEvent.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/tracker.ts","../../../projects/ng-virtual-list/src/lib/utils/buffer-interpolation.ts","../../../projects/ng-virtual-list/src/lib/utils/trackBox.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/utils/isDirection.ts","../../../projects/ng-virtual-list/src/lib/utils/isMethodForSelecting.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 * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/enums/methods-for-selecting.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum MethodsForSelecting {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 'none',\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 'select',\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 'multi-select',\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 { MethodsForSelecting, SnappingMethods } from \"../enums\";\r\nimport { Directions } from \"../enums/directions\";\r\n\r\nexport const DEFAULT_ITEM_SIZE = 24;\r\n\r\nexport const DEFAULT_BUFFER_SIZE = 2;\r\n\r\nexport const DEFAULT_MAX_BUFFER_SIZE = 100;\r\n\r\nexport const DEFAULT_LIST_SIZE = 400;\r\n\r\nexport const DEFAULT_SNAP = false;\r\n\r\nexport const DEFAULT_SELECT_BY_CLICK = true;\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\nexport const DEFAULT_SELECT_METHOD = MethodsForSelecting.NONE;\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\r\n// styles\r\n\r\nexport const PART_DEFAULT_ITEM = 'item';\r\n\r\nexport const PART_ITEM_ODD = ' item-odd';\r\n\r\nexport const PART_ITEM_EVEN = ' item-even';\r\n\r\nexport const PART_ITEM_SNAPPED = ' item-snapped';\r\n\r\nexport const PART_ITEM_SELECTED = ' item-selected';\r\n\r\nexport const PART_ITEM_FOCUSED = ' item-focused';\r\n\r\n","import { TemplateRef, WritableSignal } from '@angular/core';\r\nimport { Id, ISize } from '../types';\r\nimport { IRenderVirtualListItem } from './render-item.model';\r\n\r\n/**\r\n * Virtual List Item Interface\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/base-virtual-list-item-component.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport abstract class BaseVirtualListItemComponent {\r\n abstract get id(): number;\r\n abstract data: WritableSignal<IRenderVirtualListItem | undefined>;\r\n abstract regular: boolean;\r\n abstract set regularLength(v: string)\r\n abstract set item(v: IRenderVirtualListItem | null | undefined);\r\n abstract get item(): IRenderVirtualListItem | null | undefined;\r\n abstract get itemId(): Id | undefined;\r\n abstract itemRenderer: WritableSignal<TemplateRef<any> | undefined>;\r\n abstract set renderer(v: TemplateRef<any> | undefined);\r\n abstract get element(): HTMLElement;\r\n public abstract getBounds(): ISize;\r\n public abstract show(): void;\r\n public abstract hide(): void;\r\n}","/**\r\n * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum MethodsForSelectingTypes {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 0,\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 1,\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 2,\r\n}","import { Injectable } from '@angular/core';\r\nimport { Subject, tap } from 'rxjs';\r\nimport { TrackBox } from './utils/trackBox';\r\nimport { IRenderVirtualListItem } from './models';\r\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\r\nimport { Id } from './types';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { MethodsForSelectingTypes } from './enums/method-for-selecting-types';\r\nimport { DEFAULT_SELECT_BY_CLICK } from './const';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListService {\r\n private _nextComponentId: number = 0;\r\n\r\n private _$itemClick = new Subject<IRenderVirtualListItem<any> | undefined>();\r\n $itemClick = this._$itemClick.asObservable();\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | undefined>(undefined);\r\n $selectedIds = this._$selectedIds.asObservable();\r\n\r\n private _$methodOfSelecting = new BehaviorSubject<MethodsForSelectingTypes>(0);\r\n $methodOfSelecting = this._$methodOfSelecting.asObservable();\r\n\r\n set methodOfSelecting(v: MethodsForSelectingTypes) {\r\n this._$methodOfSelecting.next(v);\r\n }\r\n\r\n selectByClick: boolean = DEFAULT_SELECT_BY_CLICK;\r\n\r\n private _trackBox: TrackBox | undefined;\r\n\r\n listElement: HTMLDivElement | null = null;\r\n\r\n constructor() {\r\n this._$methodOfSelecting.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n switch (v) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue();\r\n if (typeof curr !== 'number' && typeof curr !== 'string') {\r\n this._$selectedIds.next(undefined);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n if (!Array.isArray(this._$selectedIds.getValue())) {\r\n this._$selectedIds.next([]);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(undefined);\r\n break;\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n setSelectedIds(ids: Array<Id> | Id | undefined) {\r\n if (JSON.stringify(this._$selectedIds.getValue()) !== JSON.stringify(ids)) {\r\n this._$selectedIds.next(ids);\r\n }\r\n }\r\n\r\n itemClick(data: IRenderVirtualListItem | undefined) {\r\n this._$itemClick.next(data);\r\n if (this.selectByClick) {\r\n this.select(data);\r\n }\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param data \r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n select(data: IRenderVirtualListItem | undefined, selected: boolean | undefined = undefined) {\r\n if (data && data.config.selectable) {\r\n switch (this._$methodOfSelecting.getValue()) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue() as (Id | undefined);\r\n if (selected === undefined) {\r\n this._$selectedIds.next(curr !== data?.id ? data?.id : undefined);\r\n } else {\r\n this._$selectedIds.next(selected ? data?.id : undefined);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const curr = [...(this._$selectedIds.getValue() || []) as Array<Id>], index = curr.indexOf(data.id);\r\n if (selected === undefined) {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, data.id]);\r\n }\r\n } else if (selected) {\r\n if (index > -1) {\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, data.id]);\r\n }\r\n } else {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next(curr);\r\n }\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(undefined);\r\n }\r\n }\r\n }\r\n }\r\n\r\n initialize(trackBox: TrackBox) {\r\n this._trackBox = trackBox;\r\n }\r\n\r\n generateComponentId() {\r\n return this._nextComponentId = this._nextComponentId === Number.MAX_SAFE_INTEGER\r\n ? 0 : this._nextComponentId + 1;\r\n }\r\n}\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 { Id, IRect, ISize } from '../types';\r\nimport {\r\n DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PART_DEFAULT_ITEM, PART_ITEM_EVEN, PART_ITEM_FOCUSED, PART_ITEM_ODD,\r\n PART_ITEM_SELECTED, PART_ITEM_SNAPPED, POSITION_ABSOLUTE, POSITION_STICKY, PX, SIZE_100_PERSENT, SIZE_AUTO, TRANSLATE_3D,\r\n VISIBILITY_HIDDEN, VISIBILITY_VISIBLE, ZEROS_TRANSLATE_3D,\r\n} from '../const';\r\nimport { BaseVirtualListItemComponent } from '../models/base-virtual-list-item-component';\r\nimport { NgVirtualListService } from '../ng-virtual-list.service';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { map, tap, combineLatest, fromEvent } from 'rxjs';\r\nimport { MethodsForSelectingTypes } from '../enums/method-for-selecting-types';\r\nimport { IRenderVirtualListItemConfig } from '../models/render-item-config.model';\r\n\r\ninterface IItemConfig extends IRenderVirtualListItemConfig {\r\n /**\r\n * \r\n */\r\n focus: boolean;\r\n /**\r\n * Determines whether the element is selected or not.\r\n */\r\n selected: boolean;\r\n /**\r\n * Selects a list item\r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n select: (selected: boolean | undefined) => void;\r\n}\r\n\r\nconst ATTR_AREA_SELECTED = 'area-selected', TABINDEX = 'index',\r\n KEY_SPACE = \" \", KEY_ARR_LEFT = \"ArrowLeft\", KEY_ARR_UP = \"ArrowUp\", KEY_ARR_RIGHT = \"ArrowRight\", KEY_ARR_DOWN = \"ArrowDown\";\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 'role': 'listitem',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgVirtualListItemComponent extends BaseVirtualListItemComponent {\r\n private _id!: number;\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n protected _service = inject(NgVirtualListService);\r\n\r\n private _isSelected: boolean = false;\r\n config = signal<IItemConfig>({} as IItemConfig);\r\n\r\n measures = signal<IRect & {\r\n /**\r\n * Delta is calculated for Snapping Method.ADVANCED\r\n */\r\n delta: number;\r\n } | undefined>(undefined);\r\n\r\n focus = signal<boolean>(false);\r\n\r\n private _part = PART_DEFAULT_ITEM;\r\n get part() { return this._part; }\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 this._data = v;\r\n\r\n this.updatePartStr(v, this._isSelected);\r\n\r\n this.updateConfig(v);\r\n\r\n this.updateMeasures(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 private _selectHandler = (data: IRenderVirtualListItem<any> | undefined) =>\r\n /**\r\n * Selects a list item\r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n (selected: boolean | undefined = undefined) => {\r\n this._service.select(data, selected);\r\n };\r\n\r\n constructor() {\r\n super();\r\n this._id = this._service.generateComponentId();\r\n\r\n const $data = toObservable(this.data);\r\n\r\n fromEvent(this.element, 'focusin').pipe(\r\n takeUntilDestroyed(),\r\n tap(e => {\r\n this.focus.set(true);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updatePartStr(this._data, this._isSelected);\r\n }),\r\n ).subscribe(),\r\n\r\n fromEvent(this.element, 'focusout').pipe(\r\n takeUntilDestroyed(),\r\n tap(e => {\r\n this.focus.set(false);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updatePartStr(this._data, this._isSelected);\r\n }),\r\n ).subscribe(),\r\n\r\n fromEvent<KeyboardEvent>(this.element, 'keydown').pipe(\r\n takeUntilDestroyed(),\r\n tap(e => {\r\n switch (e.key) {\r\n case KEY_SPACE: {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this._service.select(this._data);\r\n break;\r\n }\r\n case KEY_ARR_LEFT:\r\n if (!this.config().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusPrev();\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this.config().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusPrev();\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this.config().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusNext();\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this.config().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusNext();\r\n }\r\n break;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, this._service.$methodOfSelecting, this._service.$selectedIds]).pipe(\r\n takeUntilDestroyed(),\r\n map(([, m, ids]) => ({ method: m, ids })),\r\n tap(({ method, ids }) => {\r\n switch (method) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const id = ids as Id | undefined, isSelected = id === this.itemId;\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this._isSelected = isSelected;\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const actualIds = ids as Array<Id>, isSelected = this.itemId !== undefined && actualIds && actualIds.includes(this.itemId);\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this._isSelected = isSelected;\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this.element.removeAttribute(ATTR_AREA_SELECTED);\r\n this._isSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n this.updatePartStr(this._data, this._isSelected);\r\n\r\n this.updateConfig(this._data);\r\n\r\n this.updateMeasures(this._data);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private focusNext() {\r\n const tabIndex = this.config()?.tabIndex ?? 0;\r\n if (this._service.listElement && tabIndex > 0) {\r\n const el = this._service.listElement.querySelector<HTMLDivElement>(`[${TABINDEX}=\"${tabIndex + 1}\"]`);\r\n if (el) {\r\n el.focus();\r\n }\r\n }\r\n }\r\n\r\n private focusPrev() {\r\n const tabIndex = this.config()?.tabIndex ?? 0;\r\n if (this._service.listElement && tabIndex > 1) {\r\n const el = this._service.listElement.querySelector<HTMLDivElement>(`[${TABINDEX}=\"${tabIndex - 1}\"]`);\r\n if (el) {\r\n el.focus();\r\n }\r\n }\r\n }\r\n\r\n private updateMeasures(v: IRenderVirtualListItem<any> | undefined) {\r\n this.measures.set(v?.measures ? { ...v.measures } : undefined)\r\n }\r\n\r\n private updateConfig(v: IRenderVirtualListItem<any> | undefined) {\r\n this.config.set({ ...v?.config || {} as IItemConfig, selected: this._isSelected, select: this._selectHandler(v), focus: this.focus() });\r\n }\r\n\r\n private 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 private updatePartStr(v: IRenderVirtualListItem | undefined, isSelected: boolean) {\r\n let odd = false;\r\n if (v?.index !== undefined) {\r\n odd = v.index % 2 === 0;\r\n }\r\n\r\n let part = PART_DEFAULT_ITEM;\r\n part += odd ? PART_ITEM_ODD : PART_ITEM_EVEN;\r\n if (v ? v.config.snapped : false) {\r\n part += PART_ITEM_SNAPPED;\r\n }\r\n if (isSelected) {\r\n part += PART_ITEM_SELECTED;\r\n }\r\n if (this.focus()) {\r\n part += PART_ITEM_FOCUSED;\r\n }\r\n this._part = part;\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 onClickHandler() {\r\n this._service.itemClick(this._data);\r\n }\r\n}\r\n","@let item = data();\r\n@let _config = config();\r\n@let _measures = measures();\r\n@let renderer = itemRenderer();\r\n\r\n@if (item) {\r\n <div #listItem [part]=\"part\" [attr.index]=\"item.config.tabIndex\" tabindex=\"1\" class=\"ngvl-item__container\"\r\n [ngClass]=\"{'snapped': item.config.snapped, 'snapped-out': item.config.snappedOut, 'focus': focus()}\" (click)=\"onClickHandler()\">\r\n @if (renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\"\r\n [ngTemplateOutletContext]=\"{data: item.data, measures: _measures, config: _config}\" />\r\n }\r\n </div>\r\n}","/**\r\n * Simple debounce function.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/debounce.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const debounce = (cb: (...args: Array<any>) => void, debounceTime: number = 0) => {\r\n let timeout: any;\r\n const dispose = () => {\r\n if (timeout !== undefined) {\r\n clearTimeout(timeout);\r\n }\r\n }\r\n const execute = (...args: Array<any>) => {\r\n dispose();\r\n\r\n timeout = setTimeout(() => {\r\n cb(...args);\r\n }, debounceTime);\r\n };\r\n return {\r\n /**\r\n * Call handling method\r\n */\r\n execute,\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose,\r\n };\r\n};\r\n","\r\n/**\r\n * Switch css classes\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/toggleClassName.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const toggleClassName = (el: HTMLElement, className: string, removeClassName?: string) => {\r\n if (!el.classList.contains(className)) {\r\n el.classList.add(className);\r\n }\r\n if (removeClassName) {\r\n el.classList.remove(removeClassName);\r\n }\r\n};\r\n","import { 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}","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 { ScrollDirection } from \"../models\";\r\nimport { Id, ISize } from \"../types\";\r\nimport { BaseVirtualListItemComponent } from \"../models/base-virtual-list-item-component\";\r\nimport { CMap } from \"./cacheMap\";\r\n\r\ntype TrackingPropertyId = string | number;\r\n\r\nexport interface IVirtualListItemComponent<I = any> {\r\n getBounds(): ISize;\r\n itemId: Id;\r\n id: number;\r\n item: I | null;\r\n show: () => void;\r\n hide: () => void;\r\n}\r\n\r\n/**\r\n * Tracks display items by property\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/tracker.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class Tracker<C extends BaseVirtualListItemComponent = any> {\r\n /**\r\n * display objects dictionary of indexes by id\r\n */\r\n protected _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 protected _trackMap = new CMap<TrackingPropertyId, number>();\r\n\r\n get trackMap() {\r\n return this._trackMap;\r\n }\r\n\r\n protected _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], newTrackItems: Array<ComponentRef<C>> = [], 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.has(itemTrackingProperty)) {\r\n const diId = this._trackMap.get(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 this._trackMap.delete(itemTrackingProperty);\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n newTrackItems.push(item);\r\n }\r\n }\r\n\r\n for (let i = 0, l = newTrackItems.length; i < l; i++) {\r\n const item = newTrackItems[i], itemTrackingProperty = (item as any)[idPropName];\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.set(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 this._trackMap.delete(propertyIdName);\r\n }\r\n }\r\n\r\n dispose() {\r\n if (this._trackMap) {\r\n this._trackMap.clear();\r\n }\r\n }\r\n}","const DEFAULT_EXTRA = {\r\n extremumThreshold: 2,\r\n bufferSize: 10,\r\n};\r\n\r\nexport interface IExtraOptions {\r\n extremumThreshold?: number;\r\n bufferSize?: number;\r\n}\r\n\r\nexport const bufferInterpolation = (currentBufferValue: number, array: Array<number>, value: number, extra?: IExtraOptions) => {\r\n const {\r\n extremumThreshold = DEFAULT_EXTRA.extremumThreshold,\r\n bufferSize = DEFAULT_EXTRA.bufferSize,\r\n } = extra ?? DEFAULT_EXTRA;\r\n\r\n if (currentBufferValue < value) {\r\n let i = 0;\r\n while (i < extremumThreshold) {\r\n array.push(value);\r\n i++;\r\n }\r\n } else {\r\n array.push(value);\r\n }\r\n\r\n while (array.length >= bufferSize) {\r\n array.shift();\r\n }\r\n\r\n const l = array.length;\r\n let buffer = 0;\r\n\r\n for (let i = 0; i < l; i++) {\r\n buffer += array[i];\r\n }\r\n\r\n return Math.ceil(buffer / l);\r\n};\r\n","import { ComponentRef } from \"@angular/core\";\r\nimport { IRenderVirtualListCollection, } from \"../models/render-collection.model\";\r\nimport { IRenderVirtualListItem } from \"../models/render-item.model\";\r\nimport { Id } from \"../types/id\";\r\nimport { CacheMap, CMap } from \"./cacheMap\";\r\nimport { Tracker } from \"./tracker\";\r\nimport { ISize } from \"../types\";\r\nimport { HEIGHT_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME, X_PROP_NAME, Y_PROP_NAME } from \"../const\";\r\nimport { IVirtualListItemConfigMap } from \"../models\";\r\nimport { bufferInterpolation } from \"./buffer-interpolation\";\r\nimport { BaseVirtualListItemComponent } from \"../models/base-virtual-list-item-component\";\r\n\r\nexport const TRACK_BOX_CHANGE_EVENT_NAME = 'change';\r\n\r\nexport interface IMetrics {\r\n delta: number;\r\n normalizedItemWidth: number;\r\n normalizedItemHeight: number;\r\n width: number;\r\n height: number;\r\n dynamicSize: boolean;\r\n itemSize: number;\r\n itemsFromStartToScrollEnd: number;\r\n itemsFromStartToDisplayEnd: number;\r\n itemsOnDisplayWeight: number;\r\n itemsOnDisplayLength: number;\r\n isVertical: boolean;\r\n leftHiddenItemsWeight: number;\r\n leftItemLength: number;\r\n leftItemsWeight: number;\r\n renderItems: number;\r\n rightItemLength: number;\r\n rightItemsWeight: number;\r\n scrollSize: number;\r\n leftSizeOfAddedItems: number;\r\n sizeProperty: typeof HEIGHT_PROP_NAME | typeof WIDTH_PROP_NAME;\r\n snap: boolean;\r\n snippedPos: number;\r\n startIndex: number;\r\n startPosition: number;\r\n totalItemsToDisplayEndWeight: number;\r\n totalLength: number;\r\n totalSize: number;\r\n typicalItemSize: number;\r\n isFromItemIdFound: boolean;\r\n}\r\n\r\nexport interface IRecalculateMetricsOptions<I extends { id: Id }, C extends Array<I>> {\r\n bounds: ISize;\r\n collection: C;\r\n isVertical: boolean;\r\n itemSize: number;\r\n bufferSize: number;\r\n maxBufferSize: number;\r\n dynamicSize: boolean;\r\n scrollSize: number;\r\n snap: boolean;\r\n enabledBufferOptimization: boolean;\r\n fromItemId?: Id;\r\n previousTotalSize: number;\r\n crudDetected: boolean;\r\n deletedItemsMap: { [index: number]: ISize; };\r\n}\r\n\r\nexport interface IGetItemPositionOptions<I extends { id: Id }, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport interface IUpdateCollectionOptions<I extends { id: Id }, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'collection' | 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport type CacheMapEvents = typeof TRACK_BOX_CHANGE_EVENT_NAME;\r\n\r\nexport type OnChangeEventListener = (version: number) => void;\r\n\r\nexport type CacheMapListeners = OnChangeEventListener;\r\n\r\nexport enum ItemDisplayMethods {\r\n CREATE,\r\n UPDATE,\r\n DELETE,\r\n NOT_CHANGED,\r\n}\r\n\r\nexport interface IUpdateCollectionReturns {\r\n displayItems: IRenderVirtualListCollection;\r\n totalSize: number;\r\n delta: number;\r\n crudDetected: boolean;\r\n}\r\n\r\nconst DEFAULT_BUFFER_EXTREMUM_THRESHOLD = 15,\r\n DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH = 30,\r\n DEFAULT_RESET_BUFFER_SIZE_TIMEOUT = 10000;\r\n\r\n/**\r\n * An object that performs tracking, calculations and caching.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/trackBox.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class TrackBox<C extends BaseVirtualListItemComponent = any>\r\n extends CacheMap<Id, ISize & { method?: ItemDisplayMethods }, CacheMapEvents, CacheMapListeners> {\r\n\r\n protected _tracker!: Tracker<C>;\r\n\r\n protected _items: IRenderVirtualListCollection | null | undefined;\r\n\r\n set items(v: IRenderVirtualListCollection | null | undefined) {\r\n if (this._items === v) {\r\n return;\r\n }\r\n\r\n this._items = v;\r\n }\r\n\r\n protected _displayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set displayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._displayComponents === v) {\r\n return;\r\n }\r\n\r\n this._displayComponents = v;\r\n }\r\n\r\n protected _snapedDisplayComponent: ComponentRef<C> | null | undefined;\r\n\r\n set snapedDisplayComponent(v: ComponentRef<C> | null | undefined) {\r\n if (this._snapedDisplayComponent === v) {\r\n return;\r\n }\r\n\r\n this._snapedDisplayComponent = v;\r\n }\r\n\r\n protected _isSnappingMethodAdvanced: boolean = false;\r\n\r\n set isSnappingMethodAdvanced(v: boolean) {\r\n if (this._isSnappingMethodAdvanced === v) {\r\n return;\r\n }\r\n\r\n this._isSnappingMethodAdvanced = v;\r\n }\r\n\r\n /**\r\n * Set the trackBy property\r\n */\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = this._tracker.trackingPropertyName = v;\r\n }\r\n\r\n protected _trackingPropertyName: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n constructor(trackingPropertyName: string) {\r\n super();\r\n\r\n this._trackingPropertyName = trackingPropertyName;\r\n\r\n this.initialize();\r\n }\r\n\r\n protected initialize() {\r\n this._tracker = new Tracker(this._trackingPropertyName);\r\n }\r\n\r\n override set(id: Id, bounds: ISize): CMap<Id, ISize> {\r\n if (this._map.has(id)) {\r\n const b = this._map.get(id);\r\n if (b?.width === bounds.width && b.height === bounds.height) {\r\n return this._map;\r\n }\r\n }\r\n\r\n const v = this._map.set(id, bounds);\r\n\r\n this.bumpVersion();\r\n return v;\r\n }\r\n\r\n protected _previousCollection: Array<{ id: Id; }> | null | undefined;\r\n\r\n protected _deletedItemsMap: { [index: number]: ISize } = {};\r\n\r\n protected _crudDetected = false;\r\n get crudDetected() { return this._crudDetected; }\r\n\r\n protected override fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(TRACK_BOX_CHANGE_EVENT_NAME, this._version);\r\n }\r\n }\r\n\r\n protected _previousTotalSize = 0;\r\n\r\n protected _scrollDelta: number = 0;\r\n get scrollDelta() { return this._scrollDelta; }\r\n\r\n isAdaptiveBuffer = true;\r\n\r\n protected _bufferSequenceExtraThreshold = DEFAULT_BUFFER_EXTREMUM_THRESHOLD;\r\n\r\n protected _maxBufferSequenceLength = DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH;\r\n\r\n protected _bufferSizeSequence: Array<number> = [];\r\n\r\n protected _bufferSize: number = 0;\r\n get bufferSize() { return this._bufferSize; }\r\n\r\n protected _defaultBufferSize: number = 0;\r\n\r\n protected _maxBufferSize: number = this._defaultBufferSize;\r\n\r\n protected _resetBufferSizeTimeout: number = DEFAULT_RESET_BUFFER_SIZE_TIMEOUT;\r\n\r\n protected _resetBufferSizeTimer: number | undefined;\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, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IGetItemPositionOptions<I, C>): number {\r\n const opt = { fromItemId: id, itemConfigMap, ...options };\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const { scrollSize, isFromItemIdFound } = this.recalculateMetrics({\r\n ...opt,\r\n dynamicSize: this._crudDetected || opt.dynamicSize,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap: this._deletedItemsMap,\r\n });\r\n return isFromItemIdFound ? scrollSize : -1;\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n updateCollection<I extends { id: Id }, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IUpdateCollectionOptions<I, C>): IUpdateCollectionReturns {\r\n const opt = { itemConfigMap, ...options }, crudDetected = this._crudDetected, deletedItemsMap = this._deletedItemsMap;\r\n if (opt.dynamicSize) {\r\n this.cacheElements();\r\n }\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n this._delta += metrics.delta;\r\n\r\n this.updateAdaptiveBufferParams(metrics, items.length);\r\n\r\n this._previousTotalSize = metrics.totalSize;\r\n\r\n this._deletedItemsMap = {};\r\n\r\n this._crudDetected = false;\r\n\r\n if (opt.dynamicSize) {\r\n this.snapshot();\r\n }\r\n\r\n const displayItems = this.generateDisplayCollection(items, itemConfigMap, { ...metrics, });\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n /**\r\n * Finds the closest element in the collection by scrollSize\r\n */\r\n getNearestItem<I extends { id: Id }, C extends Array<I>>(scrollSize: number, items: C, itemSize: number, isVertical: boolean): I | undefined {\r\n return this.getElementFromStart(scrollSize, items, this._map, itemSize, isVertical);\r\n }\r\n\r\n protected _previousScrollSize = 0;\r\n\r\n protected updateAdaptiveBufferParams(metrics: IMetrics, totalItemsLength: number) {\r\n this.disposeClearBufferSizeTimer();\r\n\r\n const scrollSize = metrics.scrollSize + this._delta, delta = Math.abs(this._previousScrollSize - scrollSize);\r\n this._previousScrollSize = scrollSize;\r\n const bufferRawSize = Math.min(Math.floor(delta / metrics.typicalItemSize) * 5, totalItemsLength),\r\n minBufferSize = bufferRawSize < this._defaultBufferSize ? this._defaultBufferSize : bufferRawSize,\r\n bufferValue = minBufferSize > this._maxBufferSize ? this._maxBufferSize : minBufferSize;\r\n\r\n this._bufferSize = bufferInterpolation(this._bufferSize, this._bufferSizeSequence, bufferValue, {\r\n extremumThreshold: this._bufferSequenceExtraThreshold,\r\n bufferSize: this._maxBufferSequenceLength,\r\n });\r\n\r\n this.startResetBufferSizeTimer();\r\n }\r\n\r\n protected startResetBufferSizeTimer() {\r\n this._resetBufferSizeTimer = setTimeout(() => {\r\n this._bufferSize = this._defaultBufferSize;\r\n this._bufferSizeSequence = [];\r\n }, this._resetBufferSizeTimeout) as unknown as number;\r\n }\r\n\r\n protected disposeClearBufferSizeTimer() {\r\n clearTimeout(this._resetBufferSizeTimer);\r\n }\r\n\r\n /**\r\n * Calculates the position of an element based on the given scrollSize\r\n */\r\n protected getElementFromStart<I extends { id: Id }, C extends Array<I>>(scrollSize: number, collection: C, map: CMap<Id, ISize>, typicalItemSize: number,\r\n isVertical: boolean): I | undefined {\r\n const sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;\r\n let offset = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const item = collection[i];\r\n let itemSize = 0;\r\n if (map.has(item.id)) {\r\n const bounds = map.get(item.id);\r\n itemSize = bounds ? bounds[sizeProperty] : typicalItemSize;\r\n } else {\r\n itemSize = typicalItemSize;\r\n }\r\n if (offset > scrollSize) {\r\n return item;\r\n }\r\n offset += itemSize;\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Calculates the entry into the overscroll area and returns the number of overscroll elements\r\n */\r\n protected getElementNumToEnd<I extends { id: Id }, C extends Array<I>>(i: number, collection: C, map: CMap<Id, ISize>, typicalItemSize: number,\r\n size: number, isVertical: boolean, indexOffset: number = 0): { num: number, offset: number } {\r\n const sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;\r\n let offset = 0, num = 0;\r\n for (let j = collection.length - indexOffset - 1; j >= i; j--) {\r\n const item = collection[j];\r\n let itemSize = 0;\r\n if (map.has(item.id)) {\r\n const bounds = map.get(item.id);\r\n itemSize = bounds ? bounds[sizeProperty] : typicalItemSize;\r\n } else {\r\n itemSize = typicalItemSize;\r\n }\r\n offset += itemSize;\r\n num++;\r\n if (offset > size) {\r\n return { num: 0, offset };\r\n }\r\n }\r\n return { num, offset };\r\n }\r\n\r\n /**\r\n * Calculates list metrics\r\n */\r\n protected recalculateMetrics<I extends { id: Id }, C extends Array<I>>(options: IRecalculateMetricsOptions<I, C>): IMetrics {\r\n const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize,\r\n bufferSize: minBufferSize, scrollSize, snap, itemConfigMap, enabledBufferOptimization,\r\n previousTotalSize, crudDetected, deletedItemsMap } = options as IRecalculateMetricsOptions<I, C> & {\r\n itemConfigMap: IVirtualListItemConfigMap,\r\n };\r\n\r\n const bufferSize = Math.max(minBufferSize, this._bufferSize),\r\n { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME,\r\n size = isVertical ? height : width, totalLength = collection.length, typicalItemSize = itemSize,\r\n w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height,\r\n map = this._map, snapshot = this._snapshot, checkOverscrollItemsLimit = Math.ceil(size / typicalItemSize),\r\n snippedPos = Math.floor(scrollSize), leftItemsWeights: Array<number> = [],\r\n isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)\r\n || (typeof fromItemId === 'string' && fromItemId > '-1');\r\n\r\n let leftItemsOffset = 0, rightItemsOffset = 0;\r\n if (enabledBufferOptimization) {\r\n switch (this.scrollDirection) {\r\n case 1: {\r\n leftItemsOffset = 0;\r\n rightItemsOffset = bufferSize;\r\n break;\r\n }\r\n case -1: {\r\n leftItemsOffset = bufferSize;\r\n rightItemsOffset = 0;\r\n break;\r\n }\r\n case 0:\r\n default: {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n }\r\n } else {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n\r\n let itemsFromStartToScrollEnd: number = -1, itemsFromDisplayEndToOffsetEnd = 0, itemsFromStartToDisplayEnd = -1,\r\n leftItemLength = 0, rightItemLength = 0,\r\n leftItemsWeight = 0, rightItemsWeight = 0,\r\n leftHiddenItemsWeight = 0,\r\n totalItemsToDisplayEndWeight = 0,\r\n leftSizeOfAddedItems = 0,\r\n leftSizeOfUpdatedItems = 0,\r\n leftSizeOfDeletedItems = 0,\r\n itemById: I | undefined = undefined,\r\n itemByIdPos: number = 0,\r\n targetDisplayItemIndex: number = -1,\r\n isTargetInOverscroll: boolean = false,\r\n actualScrollSize = itemByIdPos,\r\n totalSize = 0,\r\n startIndex: number,\r\n isFromItemIdFound = false;\r\n\r\n // If the list is dynamic or there are new elements in the collection, then it switches to the long algorithm.\r\n if (dynamicSize) {\r\n let y = 0, stickyCollectionItem: I | undefined = undefined, stickyComponentSize = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const ii = i + 1, collectionItem = collection[i], id = collectionItem.id;\r\n\r\n let componentSize = 0, componentSizeDelta = 0, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const bounds = map.get(id) || { width: typicalItemSize, height: typicalItemSize };\r\n componentSize = bounds[sizeProperty];\r\n itemDisplayMethod = bounds?.method ?? ItemDisplayMethods.UPDATE;\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.UPDATE: {\r\n const snapshotBounds = snapshot.get(id);\r\n const componentSnapshotSize = componentSize - (snapshotBounds ? snapshotBounds[sizeProperty] : typicalItemSize);\r\n componentSizeDelta = componentSnapshotSize;\r\n map.set(id, { ...bounds, method: ItemDisplayMethods.NOT_CHANGED });\r\n break;\r\n }\r\n case ItemDisplayMethods.CREATE: {\r\n componentSizeDelta = typicalItemSize;\r\n map.set(id, { ...bounds, method: ItemDisplayMethods.NOT_CHANGED });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const bounds = deletedItemsMap[i], size = bounds?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n totalSize += componentSize;\r\n\r\n if (isFromId) {\r\n if (itemById === undefined) {\r\n if (id !== fromItemId && itemConfigMap && itemConfigMap[id]?.sticky === 1) {\r\n stickyComponentSize = componentSize;\r\n stickyCollectionItem = collectionItem;\r\n }\r\n\r\n if (id === fromItemId) {\r\n isFromItemIdFound = true;\r\n targetDisplayItemIndex = i;\r\n if (stickyCollectionItem && itemConfigMap) {\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 (itemConfigMap && !itemConfigMap[collectionItem.id] && y >= scrollSize && y < scrollSize + stickyComponentSize) {\r\n const snappedY = scrollSize - stickyComponentSize;\r\n leftHiddenItemsWeight -= (snappedY - y);\r\n y = snappedY;\r\n } else {\r\n y -= stickyComponentSize;\r\n leftHiddenItemsWeight -= stickyComponentSize;\r\n }\r\n }\r\n }\r\n itemById = collectionItem;\r\n itemByIdPos = y;\r\n } else {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n }\r\n } else if (y <= scrollSize - componentSize) {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === undefined || y < itemByIdPos + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n } else if (y <= scrollSize + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n\r\n if (y <= scrollSize - componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfAddedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE: {\r\n leftSizeOfUpdatedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSizeDelta;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n if (i < itemsFromDisplayEndToOffsetEnd) {\r\n rightItemsWeight += componentSize;\r\n }\r\n }\r\n\r\n y += componentSize;\r\n }\r\n\r\n if (isTargetInOverscroll) {\r\n const { num } = this.getElementNumToEnd(\r\n collection.length - (checkOverscrollItemsLimit < 0 ? 0 : collection.length - checkOverscrollItemsLimit),\r\n collection, map, typicalItemSize, size, isVertical, collection.length - (collection.length - (targetDisplayItemIndex + 1)),\r\n );\r\n if (num > 0) {\r\n itemsFromStartToScrollEnd -= num;\r\n }\r\n }\r\n\r\n if (itemsFromStartToScrollEnd <= -1) {\r\n itemsFromStartToScrollEnd = 0;\r\n }\r\n if (itemsFromStartToDisplayEnd <= -1) {\r\n itemsFromStartToDisplayEnd = 0;\r\n }\r\n actualScrollSize = isFromId ? itemByIdPos : scrollSize;\r\n\r\n leftItemsWeights.splice(0, leftItemsWeights.length - leftItemsOffset);\r\n leftItemsWeights.forEach(v => {\r\n leftItemsWeight += v;\r\n });\r\n\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, leftItemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + rightItemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : rightItemsOffset;\r\n\r\n } else\r\n // Buffer optimization does not work on fast linear algorithm\r\n {\r\n if (crudDetected) {\r\n let y = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const collectionItem = collection[i], id = collectionItem.id;\r\n let componentSize = typicalItemSize, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const bounds = map.get(id)!;\r\n itemDisplayMethod = bounds?.method ?? ItemDisplayMethods.UPDATE;\r\n if (itemDisplayMethod === ItemDisplayMethods.CREATE) {\r\n map.set(id, { ...bounds, method: ItemDisplayMethods.NOT_CHANGED });\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const bounds = deletedItemsMap[i], size = bounds?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n if (y < scrollSize - componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfUpdatedItems += componentSize;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE: {\r\n leftSizeOfUpdatedItems += componentSize;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSize;\r\n break;\r\n }\r\n }\r\n }\r\n y += componentSize;\r\n }\r\n }\r\n itemsFromStartToScrollEnd = Math.floor(scrollSize / typicalItemSize);\r\n itemsFromStartToDisplayEnd = Math.ceil((scrollSize + size) / typicalItemSize);\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, bufferSize);\r\n rightItemLength = itemsFromStartToDisplayEnd + bufferSize > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : bufferSize;\r\n leftItemsWeight = leftItemLength * typicalItemSize;\r\n rightItemsWeight = rightItemLength * typicalItemSize;\r\n leftHiddenItemsWeight = itemsFromStartToScrollEnd * typicalItemSize;\r\n totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * typicalItemSize;\r\n totalSize = totalLength * typicalItemSize;\r\n\r\n const k = totalSize !== 0 ? previousTotalSize / totalSize : 0;\r\n actualScrollSize = scrollSize * k;\r\n }\r\n startIndex = Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0);\r\n\r\n const itemsOnDisplayWeight = totalItemsToDisplayEndWeight - leftItemsWeight,\r\n itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd,\r\n startPosition = leftHiddenItemsWeight - leftItemsWeight,\r\n renderItems = itemsOnDisplayLength + leftItemLength + rightItemLength,\r\n delta = leftSizeOfUpdatedItems + leftSizeOfAddedItems - leftSizeOfDeletedItems;\r\n\r\n const metrics: IMetrics = {\r\n delta,\r\n normalizedItemWidth: w,\r\n normalizedItemHeight: h,\r\n width,\r\n height,\r\n dynamicSize,\r\n itemSize,\r\n itemsFromStartToScrollEnd,\r\n itemsFromStartToDisplayEnd,\r\n itemsOnDisplayWeight,\r\n itemsOnDisplayLength,\r\n isVertical,\r\n leftHiddenItemsWeight,\r\n leftItemLength,\r\n leftItemsWeight,\r\n renderItems,\r\n rightItemLength,\r\n rightItemsWeight,\r\n scrollSize: actualScrollSize,\r\n leftSizeOfAddedItems,\r\n sizeProperty,\r\n snap,\r\n snippedPos,\r\n startIndex,\r\n startPosition,\r\n totalItemsToDisplayEndWeight,\r\n totalLength,\r\n totalSize,\r\n typicalItemSize,\r\n isFromItemIdFound,\r\n };\r\n\r\n return metrics;\r\n }\r\n\r\n clearDeltaDirection() {\r\n this.clearScrollDirectionCache();\r\n }\r\n\r\n clearDelta(clearDirectionDetector = false): void {\r\n this._delta = 0;\r\n\r\n if (clearDirectionDetector) {\r\n this.clearScrollDirectionCache();\r\n }\r\n }\r\n\r\n changes(): void {\r\n this.bumpVersion();\r\n }\r\n\r\n protected generateDisplayCollection<I extends { id: Id }, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\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, count = 1;\r\n\r\n if (snap) {\r\n for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? itemsFromStartToScrollEnd : 0, totalLength - 1); i >= 0; i--) {\r\n if (!items[i]) {\r\n continue;\r\n }\r\n const id = items[i].id, sticky = itemConfigMap[id]?.sticky ?? 0, selectable = itemConfigMap[id]?.selectable ?? true,\r\n size = dynamicSize ? this.get(id)?.[sizeProperty] || typicalItemSize : typicalItemSize;\r\n if (sticky === 1) {\r\n const isOdd = i % 2 != 0,\r\n 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 odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n selectable,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = items[i];\r\n\r\n stickyItem = { index: i, id, measures, data: itemData, config };\r\n stickyItemIndex = i;\r\n stickyItemSize = size;\r\n\r\n displayItems.push(stickyItem);\r\n\r\n count++;\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 if (!items[i]) {\r\n continue;\r\n }\r\n const id = items[i].id, sticky = itemConfigMap[id]?.sticky ?? 0, selectable = itemConfigMap[id]?.selectable ?? true,\r\n size = dynamicSize\r\n ? this.get(id)?.[sizeProperty] || typicalItemSize\r\n : typicalItemSize;\r\n if (sticky === 2) {\r\n const isOdd = i % 2 != 0,\r\n 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 odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n selectable,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = items[i];\r\n\r\n endStickyItem = { index: i, id, measures, data: itemData, config };\r\n endStickyItemIndex = i;\r\n endStickyItemSize = size;\r\n\r\n displayItems.push(endStickyItem);\r\n\r\n count++;\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 if (!items[i]) {\r\n continue;\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 isOdd = i % 2 != 0,\r\n sticky = itemConfigMap[id]?.sticky ?? 0, selectable = itemConfigMap[id]?.selectable ?? true,\r\n snapped = snap && (sticky === 1 && pos <= scrollSize || sticky === 2 && pos >= scrollSize + boundsSize - size),\r\n measures = {\r\n x: isVertical ? sticky === 1 ? 0 : boundsSize - size : pos,\r\n y: isVertical ? pos : sticky === 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 odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n selectable,\r\n sticky: sticky,\r\n snap,\r\n snapped: false,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\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 = { index: i, id, measures, data: itemData, config };\r\n if (!nextSticky && stickyItemIndex < i && sticky === 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 && sticky === 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 count++;\r\n }\r\n\r\n renderItems -= 1;\r\n pos += size;\r\n i++;\r\n }\r\n\r\n const axis = isVertical ? Y_PROP_NAME : X_PROP_NAME;\r\n\r\n if (nextSticky && stickyItem && nextSticky.measures[axis] <= scrollSize + stickyItemSize) {\r\n if (nextSticky.measures[axis] > scrollSize) {\r\n stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItemSize;\r\n stickyItem.config.snapped = nextSticky.config.snapped = false;\r\n stickyItem.config.snappedOut = true;\r\n stickyItem.config.sticky = 1;\r\n stickyItem.measures.delta = isVertical ? stickyItem.measures.y - scrollSize : stickyItem.measures.x - scrollSize;\r\n } else {\r\n nextSticky.config.snapped = true;\r\n nextSticky.measures.delta = isVertical ? nextSticky.measures.y - scrollSize : nextSticky.measures.x - scrollSize;\r\n }\r\n }\r\n\r\n if (nextEndSticky && endStickyItem && nextEndSticky.measures[axis] >= scrollSize + boundsSize - endStickyItemSize - nextEndSticky.measures[sizeProperty]) {\r\n if (nextEndSticky.measures[axis] < scrollSize + boundsSize - endStickyItemSize) {\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n endStickyItem.config.snapped = nextEndSticky.config.snapped = false;\r\n endStickyItem.config.snappedOut = true;\r\n endStickyItem.config.sticky = 2;\r\n endStickyItem.measures.delta = isVertical ? endStickyItem.measures.y - scrollSize : endStickyItem.measures.x - scrollSize;\r\n } else {\r\n nextEndSticky.config.snapped = true;\r\n nextEndSticky.measures.delta = isVertical ? nextEndSticky.measures.y - scrollSize : nextEndSticky.measures.x - scrollSize;\r\n }\r\n }\r\n }\r\n return displayItems;\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(): void {\r\n if (!this._items || !this._displayComponents) {\r\n return;\r\n }\r\n\r\n this._tracker.track(this._items, this._displayComponents, this._snapedDisplayComponent, this.scrollDirection);\r\n }\r\n\r\n setDisplayObjectIndexMapById(v: { [id: number]: number }): void {\r\n this._tracker.displayObjectIndexMapById = v;\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C | undefined) {\r\n this._tracker.untrackComponentByIdProperty(component);\r\n }\r\n\r\n getItemBounds(id: Id): ISize | undefined {\r\n if (this.has(id)) {\r\n return this.get(id);\r\n }\r\n return undefined;\r\n }\r\n\r\n protected cacheElements(): void {\r\n if (!this._displayComponents) {\r\n return;\r\n }\r\n\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const component = this._displayComponents[i], itemId = component.instance.itemId;\r\n if (itemId === undefined) {\r\n continue;\r\n }\r\n const bounds = component.instance.getBounds();\r\n this.set(itemId, bounds);\r\n }\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.disposeClearBufferSizeTimer();\r\n\r\n if (this._tracker) {\r\n this._tracker.dispose();\r\n }\r\n }\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 { 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}","import { MethodForSelecting, MethodsForSelecting } from \"../enums\";\r\n\r\nconst NONE_ALIASES = [MethodsForSelecting.NONE, 'none'],\r\n SELECT_ALIASES = [MethodsForSelecting.SELECT, 'select'],\r\n MULTI_SELECT_ALIASES = [MethodsForSelecting.MULTI_SELECT, 'multi-select'];\r\n\r\n/**\r\n * Defines the method for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/isMethodForSelecting.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isMethodForSelecting = (src: MethodForSelecting, expected: MethodForSelecting): boolean => {\r\n if (NONE_ALIASES.includes(expected)) {\r\n return NONE_ALIASES.includes(src);\r\n } else if (SELECT_ALIASES.includes(expected)) {\r\n return SELECT_ALIASES.includes(src);\r\n }\r\n return MULTI_SELECT_ALIASES.includes(src);\r\n}\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_BUFFER_SIZE, DEFAULT_LIST_SIZE, DEFAULT_SNAP, DEFAULT_SNAPPING_METHOD,\r\n HEIGHT_PROP_NAME, LEFT_PROP_NAME, MAX_SCROLL_TO_ITERATIONS, PX, SCROLL, SCROLL_END, TOP_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n DEFAULT_MAX_BUFFER_SIZE,\r\n DEFAULT_SELECT_METHOD,\r\n DEFAULT_SELECT_BY_CLICK,\r\n} from './const';\r\nimport { IRenderVirtualListItem, IScrollEvent, IVirtualListCollection, IVirtualListItem, IVirtualListItemConfigMap } from './models';\r\nimport { Id, ISize } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { Direction, Directions, MethodForSelecting, MethodsForSelecting, SnappingMethod } from './enums';\r\nimport { ScrollEvent, toggleClassName } from './utils';\r\nimport { IGetItemPositionOptions, IUpdateCollectionOptions, TRACK_BOX_CHANGE_EVENT_NAME, TrackBox } from './utils/trackBox';\r\nimport { isSnappingMethodAdvenced } from './utils/snapping-method';\r\nimport { FIREFOX_SCROLLBAR_OVERLAP_SIZE, IS_FIREFOX } from './utils/browser';\r\nimport { BaseVirtualListItemComponent } from './models/base-virtual-list-item-component';\r\nimport { Component$1 } from './models/component.model';\r\nimport { isDirection } from './utils/isDirection';\r\nimport { NgVirtualListService } from './ng-virtual-list.service';\r\nimport { isMethodForSelecting } from './utils/isMethodForSelecting';\r\nimport { MethodsForSelectingTypes } from './enums/method-for-selecting-types';\r\n\r\nconst ROLE_LIST = 'list',\r\n ROLE_LIST_BOX = 'listbox';\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 providers: [NgVirtualListService],\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 private _service = inject(NgVirtualListService);\r\n\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('snapRendererContainer', { read: ViewContainerRef })\r\n private _snapContainerRef: ViewContainerRef | undefined;\r\n\r\n private _snappedContainer = viewChild<ElementRef<HTMLDivElement>>('snapped');\r\n\r\n private _container = viewChild<ElementRef<HTMLDivElement>>('container');\r\n\r\n private _list = viewChild<ElementRef<HTMLDivElement>>('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 /**\r\n * Fires when the viewport size is changed.\r\n */\r\n onViewportChange = output<ISize>();\r\n\r\n /**\r\n * Fires when an element is clicked.\r\n */\r\n onItemClick = output<IRenderVirtualListItem<any> | undefined>();\r\n\r\n /**\r\n * Fires when an elements are selected.\r\n */\r\n onSelect = output<Array<Id> | Id | undefined>();\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 * Sets the selected items.\r\n */\r\n selectedIds = input<Array<Id> | Id | undefined>(undefined);\r\n\r\n /**\r\n * If false, the element is selected using the config.select method passed to the template; \r\n * if true, the element is selected by clicking on it. The default value is true.\r\n */\r\n selectByClick = input<boolean>(DEFAULT_SELECT_BY_CLICK);\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 private _itemRenderer = signal<TemplateRef<any> | undefined>(undefined);\r\n\r\n /**\r\n * @deprecated\r\n * Use `itemConfigMap` instead.\r\n */\r\n stickyMap = input();\r\n\r\n /**\r\n * Sets sticky position and selectable for the list item element. If sticky position is greater than 0, then sticky position is applied. \r\n * If the sticky value is greater than `0`, then the sticky position mode is enabled for the element. `1` - position start, `2` - position end. Default value is `0`.\r\n * selectable determines whether an element can be selected or not. Default value is `true`.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n itemConfigMap = input<IVirtualListItemConfigMap>({});\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 private _itemOffsetTransform = {\r\n transform: (v: number | undefined) => {\r\n throw Error('\"itemOffset\" parameter is deprecated. Use \"bufferSize\" and \"maxBufferSize\".');\r\n }\r\n } as any;\r\n\r\n /**\r\n * Number of elements outside the scope of visibility. Default value is 2.\r\n * @deprecated \"itemOffset\" parameter is deprecated. Use \"bufferSize\" and \"maxBufferSize\".\r\n */\r\n itemsOffset = input<number>(DEFAULT_BUFFER_SIZE, { ...this._itemOffsetTransform });\r\n\r\n /**\r\n * Number of elements outside the scope of visibility. Default value is 2.\r\n */\r\n bufferSize = input<number>(DEFAULT_BUFFER_SIZE);\r\n\r\n private _maxBufferSizeTransform = {\r\n transform: (v: number | undefined) => {\r\n const bufferSize = this.bufferSize();\r\n if (v === undefined || v <= bufferSize) {\r\n return bufferSize;\r\n }\r\n return v;\r\n }\r\n } as any;\r\n\r\n /**\r\n * Maximum number of elements outside the scope of visibility. Default value is 100.\r\n * If maxBufferSize is set to be greater than bufferSize, then adaptive buffer mode is enabled.\r\n * The greater the scroll size, the more elements are allocated for rendering.\r\n */\r\n maxBufferSize = input<number>(DEFAULT_MAX_BUFFER_SIZE, { ...this._maxBufferSizeTransform });\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 /**\r\n * Method for selecting list items. Default value is 'none'.\r\n * 'select' - List items are selected one by one.\r\n * 'multi-select' - Multiple selection of list items.\r\n * 'none' - List items are not selectable.\r\n */\r\n methodForSelecting = input<MethodForSelecting>(DEFAULT_SELECT_METHOD);\r\n\r\n private _isNotSelecting = this.getIsNotSelecting();\r\n get isNotSelecting() { return this._isNotSelecting; }\r\n\r\n private _isSingleSelecting = this.getIsSingleSelecting();\r\n get isSingleSelecting() { return this._isSingleSelecting; }\r\n\r\n private _isMultiSelecting = this.getIsMultiSelecting();\r\n get isMultiSelecting() { return this._isMultiSelecting; }\r\n\r\n private _isSnappingMethodAdvanced: boolean = this.getIsSnappingMethodAdvanced();\r\n get isSnappingMethodAdvanced() { return this._isSnappingMethodAdvanced; }\r\n\r\n private _isVertical = this.getIsVertical();\r\n\r\n get orientation() {\r\n return this._isVertical ? Directions.VERTICAL : Directions.HORIZONTAL;\r\n }\r\n\r\n private _displayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _snapedDisplayComponent: ComponentRef<BaseVirtualListItemComponent> | undefined;\r\n\r\n private _bounds = signal<ISize | null>(null);\r\n\r\n private _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 * Base class of the element component\r\n */\r\n private _itemComponentClass: Component$1<BaseVirtualListItemComponent> = NgVirtualListItemComponent;\r\n\r\n /**\r\n * Base class trackBox\r\n */\r\n private _trackBoxClass: Component$1<TrackBox> = TrackBox;\r\n\r\n /**\r\n * Dictionary of element sizes by their id\r\n */\r\n private _trackBox: TrackBox = new this._trackBoxClass(this.trackBy());\r\n\r\n private _onTrackBoxChangeHandler = (v: number) => {\r\n this._cacheVersion.set(v);\r\n }\r\n\r\n private _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._service.initialize(this._trackBox);\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 toObservable(this._list).pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._service.listElement = v.nativeElement;\r\n }),\r\n ).subscribe();\r\n\r\n const $trackBy = toObservable(this.trackBy),\r\n $selectByClick = toObservable(this.selectByClick);\r\n\r\n $selectByClick.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.selectByClick = v;\r\n }),\r\n ).subscribe();\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 $bufferSize = toObservable(this.bufferSize).pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $maxBufferSize = toObservable(this.maxBufferSize).pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $itemConfigMap = toObservable(this.itemConfigMap).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 $methodForSelecting = toObservable(this.methodForSelecting),\r\n $selectedIds = toObservable(this.selectedIds),\r\n $cacheVersion = toObservable(this._cacheVersion);\r\n\r\n $isVertical.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._isVertical = v;\r\n const el: HTMLElement = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, v ? CLASS_LIST_HORIZONTAL : CLASS_LIST_VERTICAL);\r\n }),\r\n ).subscribe();\r\n\r\n $snappingMethod.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._isSnappingMethodAdvanced = this._trackBox.isSnappingMethodAdvanced = v;\r\n }),\r\n ).subscribe();\r\n\r\n $methodForSelecting.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n const el = this._list()?.nativeElement;\r\n if (this.getIsMultiSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isMultiSelecting = true;\r\n this._isNotSelecting = this._isSingleSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.MULTI_SELECT;\r\n } else if (this.getIsSingleSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelecting = true;\r\n this._isNotSelecting = this._isMultiSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.SELECT;\r\n } else if (this.getIsNotSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isNotSelecting = true;\r\n this._isSingleSelecting = this._isMultiSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.NONE;\r\n }\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, $itemConfigMap, $scrollSize, $itemSize,\r\n $bufferSize, $maxBufferSize, $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, itemConfigMap, scrollSize, itemSize,\r\n bufferSize, maxBufferSize, 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 bufferSize, maxBufferSize, scrollSize: actualScrollSize, snap, enabledBufferOptimization,\r\n },\r\n { displayItems, totalSize } = this._trackBox.updateCollection(items, itemConfigMap, 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 const $itemRenderer = toObservable(this.itemRenderer);\r\n\r\n $itemRenderer.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._itemRenderer.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n $bounds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(value => {\r\n this.onViewportChange.emit(value);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$itemClick.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this.onItemClick.emit(v);\r\n }),\r\n ).subscribe();\r\n\r\n let isSelectedIdsFirstEmit = 0;\r\n\r\n this._service.$selectedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (this.isSingleSelecting || (this.isMultiSelecting && isSelectedIdsFirstEmit >= 2)) {\r\n const curr = this.selectedIds();\r\n if ((this.isSingleSelecting && JSON.stringify(v) !== JSON.stringify(curr)) || (isSelectedIdsFirstEmit === 2 && JSON.stringify(v) !== JSON.stringify(curr)) || isSelectedIdsFirstEmit > 2) {\r\n this.onSelect.emit(v);\r\n }\r\n }\r\n if (isSelectedIdsFirstEmit < 3) {\r\n isSelectedIdsFirstEmit++;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $selectedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.setSelectedIds(v);\r\n }),\r\n ).subscribe();\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.onInit();\r\n }\r\n\r\n private onInit() {\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 getIsNotSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.NONE);\r\n }\r\n\r\n private getIsSingleSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.SELECT);\r\n }\r\n\r\n private getIsMultiSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.MULTI_SELECT);\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(this._itemComponentClass);\r\n comp.instance.regular = true;\r\n this._snapedDisplayComponent = comp;\r\n this._trackBox.snapedDisplayComponent = this._snapedDisplayComponent;\r\n\r\n this._resizeSnappedObserver = new ResizeObserver(this._resizeSnappedComponentHandler);\r\n this._resizeSnappedObserver.observe(comp.instance.element);\r\n }\r\n }\r\n\r\n this._trackBox.items = displayItems;\r\n\r\n const _listContainerRef = this._listContainerRef;\r\n\r\n const maxLength = displayItems.length, components = this._displayComponents;\r\n\r\n while (components.length < maxLength) {\r\n if (_listContainerRef) {\r\n const comp = _listContainerRef.createComponent(this._itemComponentClass);\r\n components.push(comp);\r\n\r\n this._componentsResizeObserver.observe(comp.instance.element);\r\n }\r\n }\r\n\r\n this.resetRenderers();\r\n }\r\n\r\n 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 private 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: number | undefined;\r\n\r\n private clearScrollToRepeatExecutionTimeout() {\r\n clearTimeout(this._scrollToRepeatExecutionTimeout);\r\n }\r\n\r\n private 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 itemConfigMap = this.itemConfigMap(), 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 bufferSize: this.bufferSize(), maxBufferSize: this.maxBufferSize(),\r\n 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, itemConfigMap, opts),\r\n params: ScrollToOptions = { [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior };\r\n\r\n if (scrollSize === -1) {\r\n container.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n return;\r\n }\r\n\r\n this._trackBox.clearDelta();\r\n\r\n if (container) {\r\n const { displayItems, totalSize } = this._trackBox.updateCollection(items, itemConfigMap, {\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, itemConfigMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });\r\n\r\n if (_scrollSize === -1) {\r\n container.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n return;\r\n }\r\n\r\n const notChanged = actualScrollSize === _scrollSize\r\n\r\n if (!notChanged || iteration < MAX_SCROLL_TO_ITERATIONS) {\r\n this.clearScrollToRepeatExecutionTimeout();\r\n this._scrollToRepeatExecutionTimeout = setTimeout(() => {\r\n this.scrollToExecutor(id, BEHAVIOR_INSTANT, iteration + 1, notChanged);\r\n }) as unknown as number;\r\n } else {\r\n this._scrollSize.set(actualScrollSize);\r\n\r\n container.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n }\r\n }\r\n\r\n container.nativeElement.scrollTo(params);\r\n\r\n this._scrollSize.set(scrollSize);\r\n } else {\r\n const index = items.findIndex(item => item.id === id);\r\n if (index > -1) {\r\n const scrollSize = index * this.itemSize();\r\n const params: ScrollToOptions = { [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior };\r\n container.nativeElement.scrollTo(params);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the desired element with the specified ID.\r\n */\r\n scrollToEnd(behavior: ScrollBehavior = BEHAVIOR_INSTANT) {\r\n const items = this.items(), latItem = items[items.length > 0 ? items.length - 1 : 0];\r\n this.scrollTo(latItem.id, behavior);\r\n }\r\n\r\n 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 ngAfterViewInit(): void {\r\n this.afterViewInit();\r\n }\r\n\r\n private afterViewInit() {\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n // for direction calculation\r\n containerEl.nativeElement.addEventListener(SCROLL, this._onContainerScrollHandler);\r\n containerEl.nativeElement.addEventListener(SCROLL_END, this._onContainerScrollEndHandler);\r\n\r\n containerEl.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n\r\n this._resizeObserver = new ResizeObserver(this._onResizeHandler);\r\n this._resizeObserver.observe(containerEl.nativeElement);\r\n\r\n this._onResizeHandler();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.dispose();\r\n }\r\n\r\n private dispose() {\r\n this.clearScrollToRepeatExecutionTimeout();\r\n\r\n if (this._trackBox) {\r\n this._trackBox.dispose();\r\n }\r\n\r\n if (this._componentsResizeObserver) {\r\n this._componentsResizeObserver.disconnect();\r\n }\r\n\r\n if (this._resizeSnappedObserver) {\r\n this._resizeSnappedObserver.disconnect();\r\n }\r\n\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n\r\n const containerEl = this._container();\r\n if (containerEl) {\r\n containerEl.nativeElement.removeEventListener(SCROLL, this._onScrollHandler);\r\n containerEl.nativeElement.removeEventListener(SCROLL, this._onContainerScrollHandler);\r\n containerEl.nativeElement.removeEventListener(SCROLL_END, this._onContainerScrollEndHandler);\r\n }\r\n\r\n if (this._snapedDisplayComponent) {\r\n this._snapedDisplayComponent.destroy();\r\n }\r\n\r\n if (this._displayComponents) {\r\n while (this._displayComponents.length > 0) {\r\n const comp = this._displayComponents.pop();\r\n comp?.destroy();\r\n }\r\n }\r\n }\r\n}\r\n","@if (snap()) {\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n}\r\n<div #container part=\"scroller\" class=\"ngvl__scroller\">\r\n <div [attr.aria-orientation]=\"orientation\" #list part=\"list\" class=\"ngvl__list\">\r\n <ng-container #renderersContainer></ng-container>\r\n </div>\r\n</div>","/*\r\n * Public API Surface of ng-virtual-list\r\n */\r\n\r\nexport * from './lib/components/ng-virtual-list-item.component';\r\nexport * from './lib/ng-virtual-list.component';\r\nexport * from './lib/enums';\r\nexport * from './lib/models';\r\nexport * from './lib/types';\r\nexport * from './lib/utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -176,6 +176,7 @@ export declare class NgVirtualListComponent implements AfterViewInit, OnInit, On
|
|
|
176
176
|
private _onTrackBoxChangeHandler;
|
|
177
177
|
private _cacheVersion;
|
|
178
178
|
constructor();
|
|
179
|
+
ngOnInit(): void;
|
|
179
180
|
private onInit;
|
|
180
181
|
private listenCacheChangesIfNeed;
|
|
181
182
|
private getIsSnappingMethodAdvanced;
|
|
@@ -209,7 +210,9 @@ export declare class NgVirtualListComponent implements AfterViewInit, OnInit, On
|
|
|
209
210
|
scrollToEnd(behavior?: ScrollBehavior): void;
|
|
210
211
|
private _onContainerScrollHandler;
|
|
211
212
|
private _onContainerScrollEndHandler;
|
|
213
|
+
ngAfterViewInit(): void;
|
|
212
214
|
private afterViewInit;
|
|
215
|
+
ngOnDestroy(): void;
|
|
213
216
|
private dispose;
|
|
214
217
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgVirtualListComponent, never>;
|
|
215
218
|
static ɵcmp: i0.ɵɵComponentDeclaration<NgVirtualListComponent, "ng-virtual-list", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "selectedIds": { "alias": "selectedIds"; "required": false; "isSignal": true; }; "selectByClick": { "alias": "selectByClick"; "required": false; "isSignal": true; }; "snap": { "alias": "snap"; "required": false; "isSignal": true; }; "enabledBufferOptimization": { "alias": "enabledBufferOptimization"; "required": false; "isSignal": true; }; "itemRenderer": { "alias": "itemRenderer"; "required": true; "isSignal": true; }; "stickyMap": { "alias": "stickyMap"; "required": false; "isSignal": true; }; "itemConfigMap": { "alias": "itemConfigMap"; "required": false; "isSignal": true; }; "itemSize": { "alias": "itemSize"; "required": false; "isSignal": true; }; "dynamicSize": { "alias": "dynamicSize"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "itemsOffset": { "alias": "itemsOffset"; "required": false; "isSignal": true; }; "bufferSize": { "alias": "bufferSize"; "required": false; "isSignal": true; }; "maxBufferSize": { "alias": "maxBufferSize"; "required": false; "isSignal": true; }; "snappingMethod": { "alias": "snappingMethod"; "required": false; "isSignal": true; }; "methodForSelecting": { "alias": "methodForSelecting"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; }, { "onScroll": "onScroll"; "onScrollEnd": "onScrollEnd"; "onViewportChange": "onViewportChange"; "onItemClick": "onItemClick"; "onSelect": "onSelect"; }, never, never, true, never>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ng-virtual-list",
|
|
3
|
-
"version": "19.7.
|
|
3
|
+
"version": "19.7.7",
|
|
4
4
|
"author": {
|
|
5
5
|
"name": "Evgenii Grebennikov",
|
|
6
6
|
"email": "djonnyx@gmail.com"
|
|
@@ -17,7 +17,13 @@
|
|
|
17
17
|
"grouped",
|
|
18
18
|
"scroll",
|
|
19
19
|
"scrolling",
|
|
20
|
-
"scroller"
|
|
20
|
+
"scroller",
|
|
21
|
+
"select",
|
|
22
|
+
"multiselect",
|
|
23
|
+
"multi-select",
|
|
24
|
+
"multi",
|
|
25
|
+
"collapsable",
|
|
26
|
+
"expandable"
|
|
21
27
|
],
|
|
22
28
|
"peerDependencies": {
|
|
23
29
|
"@angular/common": "^19.2.0",
|