ng-virtual-list 0.7.2 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +44 -71
  2. package/esm2020/lib/components/ng-virtual-list-item.component.mjs +80 -0
  3. package/esm2020/lib/const/index.mjs +34 -0
  4. package/esm2020/lib/enums/direction.mjs +2 -0
  5. package/esm2020/lib/enums/directions.mjs +18 -0
  6. package/esm2020/lib/enums/index.mjs +3 -0
  7. package/esm2020/lib/models/collection.model.mjs +3 -0
  8. package/esm2020/lib/models/index.mjs +2 -0
  9. package/esm2020/lib/models/item.model.mjs +3 -0
  10. package/esm2020/lib/models/render-collection.model.mjs +3 -0
  11. package/esm2020/lib/models/render-item-config.model.mjs +2 -0
  12. package/esm2020/lib/models/render-item.model.mjs +3 -0
  13. package/esm2020/lib/models/sticky-map.model.mjs +2 -0
  14. package/esm2020/lib/ng-virtual-list.component.mjs +510 -0
  15. package/esm2020/lib/ng-virtual-list.module.mjs +20 -0
  16. package/esm2020/lib/types/id.mjs +2 -0
  17. package/esm2020/lib/types/index.mjs +2 -0
  18. package/esm2020/lib/types/rect.mjs +2 -0
  19. package/esm2020/lib/types/size.mjs +2 -0
  20. package/esm2020/lib/utils/cacheMap.mjs +52 -0
  21. package/esm2020/lib/utils/debounce.mjs +31 -0
  22. package/esm2020/lib/utils/disposableComponent.mjs +29 -0
  23. package/esm2020/lib/utils/eventEmitter.mjs +106 -0
  24. package/esm2020/lib/utils/index.mjs +8 -0
  25. package/esm2020/lib/utils/isDirection.mjs +15 -0
  26. package/esm2020/lib/utils/toggleClassName.mjs +15 -0
  27. package/esm2020/lib/utils/trackBox.mjs +352 -0
  28. package/esm2020/lib/utils/tracker.mjs +108 -0
  29. package/esm2020/ng-virtual-list.mjs +5 -0
  30. package/esm2020/public-api.mjs +8 -0
  31. package/fesm2015/ng-virtual-list.mjs +1360 -0
  32. package/fesm2015/ng-virtual-list.mjs.map +1 -0
  33. package/fesm2020/ng-virtual-list.mjs +1359 -0
  34. package/fesm2020/ng-virtual-list.mjs.map +1 -0
  35. package/index.d.ts +5 -5
  36. package/lib/components/ng-virtual-list-item.component.d.ts +28 -35
  37. package/lib/const/index.d.ts +32 -31
  38. package/lib/enums/direction.d.ts +8 -2
  39. package/lib/enums/directions.d.ts +16 -4
  40. package/lib/enums/index.d.ts +4 -4
  41. package/lib/models/collection.model.d.ts +9 -3
  42. package/lib/models/index.d.ts +4 -4
  43. package/lib/models/item.model.d.ts +14 -5
  44. package/lib/models/render-collection.model.d.ts +9 -3
  45. package/lib/models/render-item-config.model.d.ts +33 -7
  46. package/lib/models/render-item.model.d.ts +28 -10
  47. package/lib/models/sticky-map.model.d.ts +12 -6
  48. package/lib/ng-virtual-list.component.d.ts +151 -110
  49. package/lib/ng-virtual-list.module.d.ts +9 -0
  50. package/lib/types/id.d.ts +7 -1
  51. package/lib/types/index.d.ts +4 -4
  52. package/lib/types/rect.d.ts +17 -5
  53. package/lib/types/size.d.ts +16 -4
  54. package/lib/utils/cacheMap.d.ts +34 -31
  55. package/lib/utils/debounce.d.ts +16 -10
  56. package/lib/utils/disposableComponent.d.ts +15 -0
  57. package/lib/utils/eventEmitter.d.ts +40 -37
  58. package/lib/utils/index.d.ts +7 -6
  59. package/lib/utils/isDirection.d.ts +8 -2
  60. package/lib/utils/toggleClassName.d.ts +7 -1
  61. package/lib/utils/trackBox.d.ts +113 -73
  62. package/lib/utils/tracker.d.ts +38 -38
  63. package/package.json +18 -6
  64. package/public-api.d.ts +4 -3
  65. package/fesm2022/ng-virtual-list.mjs +0 -942
  66. package/fesm2022/ng-virtual-list.mjs.map +0 -1
@@ -0,0 +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/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-virtual-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-virtual-list-item.component.html","../../../projects/ng-virtual-list/src/lib/utils/isDirection.ts","../../../projects/ng-virtual-list/src/lib/utils/debounce.ts","../../../projects/ng-virtual-list/src/lib/utils/toggleClassName.ts","../../../projects/ng-virtual-list/src/lib/utils/tracker.ts","../../../projects/ng-virtual-list/src/lib/utils/eventEmitter.ts","../../../projects/ng-virtual-list/src/lib/utils/cacheMap.ts","../../../projects/ng-virtual-list/src/lib/utils/trackBox.ts","../../../projects/ng-virtual-list/src/lib/utils/disposableComponent.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/lib/ng-virtual-list.module.ts","../../../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/main/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}","import { Directions } from \"../enums/directions\";\r\n\r\nexport const DEFAULT_ITEM_SIZE = 24;\r\n\r\nexport const DEFAULT_ITEMS_OFFSET = 2;\r\n\r\nexport const DEFAULT_LIST_SIZE = 400;\r\n\r\nexport const DEFAULT_SNAP = false;\r\n\r\nexport const DEFAULT_SNAP_TO_ITEM = false;\r\n\r\nexport const DEFAULT_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\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 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 TOP_PROP_NAME = 'top';\r\n\r\nexport const LEFT_PROP_NAME = 'left';\r\n\r\nexport const X_PROP_NAME = 'x';\r\n\r\nexport const Y_PROP_NAME = 'y';\r\n\r\nexport const WIDTH_PROP_NAME = 'width';\r\n\r\nexport const HEIGHT_PROP_NAME = 'height';\r\n\r\nexport const PX = 'px';\r\n\r\nexport const SCROLL = 'scroll';\r\n\r\nexport const SCROLL_END = 'scrollend';\r\n\r\nexport const CLASS_LIST_VERTICAL = 'vertical';\r\n\r\nexport const CLASS_LIST_HORIZONTAL = 'horizontal';\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, TemplateRef } from '@angular/core';\r\nimport { IRenderVirtualListItem } from '../models/render-item.model';\r\nimport { IRect } from '../types';\r\nimport {\r\n POSITION_ABSOLUTE, POSITION_STICKY, PX, SIZE_100_PERSENT, SIZE_AUTO, TRANSLATE_3D, VISIBILITY_HIDDEN,\r\n VISIBILITY_VISIBLE, ZEROS_TRANSLATE_3D,\r\n} from '../const';\r\n\r\n/**\r\n * Virtual list item component\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/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 templateUrl: './ng-virtual-list-item.component.html',\r\n styleUrls: ['./ng-virtual-list-item.component.scss'],\r\n host: {\r\n 'class': 'ngvl__item',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgVirtualListItemComponent {\r\n private static __nextId: number = 0;\r\n\r\n private _id!: number;\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n data: IRenderVirtualListItem | undefined;\r\n\r\n set item(v: IRenderVirtualListItem | undefined) {\r\n if (this.data === v) {\r\n return;\r\n }\r\n\r\n const data = this.data = v;\r\n\r\n if (data) {\r\n const styles = this._elementRef.nativeElement.style;\r\n styles.zIndex = String(data.config.sticky);\r\n if (data.config.snapped) {\r\n styles.transform = ZEROS_TRANSLATE_3D;\r\n styles.position = POSITION_STICKY;\r\n } else {\r\n styles.position = POSITION_ABSOLUTE;\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 styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : SIZE_100_PERSENT;\r\n styles.width = data.config.isVertical ? SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n }\r\n\r\n this._cdr.detectChanges();\r\n }\r\n\r\n get itemId() {\r\n return this.data?.id;\r\n }\r\n\r\n itemRenderer: TemplateRef<any> | undefined;\r\n\r\n set renderer(v: TemplateRef<any> | undefined) {\r\n if (this.itemRenderer === v) {\r\n return;\r\n }\r\n\r\n this.itemRenderer = v;\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n constructor(private _cdr: ChangeDetectorRef, private _elementRef: ElementRef<HTMLElement>) {\r\n this._id = NgVirtualListItemComponent.__nextId = NgVirtualListItemComponent.__nextId === Number.MAX_SAFE_INTEGER\r\n ? 0 : NgVirtualListItemComponent.__nextId + 1;\r\n }\r\n\r\n getBounds(): IRect {\r\n const el: HTMLElement = this._elementRef.nativeElement,\r\n { width, height, left, top } = el.getBoundingClientRect();\r\n return { width, height, x: left, y: top };\r\n }\r\n\r\n showIfNeed() {\r\n const styles = this._elementRef.nativeElement.style;\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n\r\n hide() {\r\n const styles = this._elementRef.nativeElement.style;\r\n if (styles.visibility === VISIBILITY_HIDDEN) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_HIDDEN;\r\n }\r\n}\r\n","<ng-container *ngIf=\"data\">\r\n <li #listItem part=\"item\" class=\"ngvl-item__container\" [ngClass]=\"{'snapped': data.config.snapped,\r\n 'snapped-out': data.config.snappedOut}\">\r\n <ng-container *ngIf=\"itemRenderer\">\r\n <ng-container [ngTemplateOutlet]=\"itemRenderer\"\r\n [ngTemplateOutletContext]=\"{data: data.data || {}, config: data.config}\"></ng-container>\r\n </ng-container>\r\n </li>\r\n</ng-container>","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/main/projects/ng-virtual-list/src/lib/utils/isDirection.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isDirection = (src: Direction, expected: Direction): boolean => {\r\n if (HORIZONTAL_ALIASES.includes(expected)) {\r\n return HORIZONTAL_ALIASES.includes(src);\r\n }\r\n return VERTICAL_ALIASES.includes(src);\r\n}","/**\r\n * Simple debounce function.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/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/main/projects/ng-virtual-list/src/lib/utils/toggleClassName.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const toggleClassName = (el: HTMLElement, className: string, remove = false) => {\r\n if (!el.classList.contains(className)) {\r\n el.classList.add(className);\r\n } else if (remove) {\r\n el.classList.remove(className);\r\n }\r\n};\r\n","import { ComponentRef } from \"@angular/core\";\r\n\r\ntype TrackingPropertyId = string | number;\r\n\r\n/**\r\n * Tracks display items by property\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/utils/tracker.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class Tracker<I = any, C = { [prop: string]: any; }> {\r\n /**\r\n * display objects dictionary of indexes by id\r\n */\r\n private _displayObjectIndexMapById: { [id: number]: number } = {};\r\n\r\n set displayObjectIndexMapById(v: { [id: number]: number }) {\r\n if (this._displayObjectIndexMapById === v) {\r\n return;\r\n }\r\n\r\n this._displayObjectIndexMapById = v;\r\n }\r\n\r\n get displayObjectIndexMapById() {\r\n return this._displayObjectIndexMapById;\r\n }\r\n\r\n /**\r\n * Dictionary displayItems propertyNameId by items propertyNameId\r\n */\r\n private _trackMap: { [id: TrackingPropertyId]: number } | null = {};\r\n\r\n get trackMap() {\r\n return this._trackMap;\r\n }\r\n\r\n private _trackingPropertyName!: string;\r\n\r\n 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<any>>,\r\n afterComponentSetup?: (component: C, item: I) => void): void {\r\n if (!items) {\r\n return;\r\n }\r\n\r\n const idPropName = this._trackingPropertyName, untrackedItems = [...components];\r\n\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], itemTrackingProperty = item[idPropName];\r\n\r\n if (this._trackMap) {\r\n const diId = this._trackMap[itemTrackingProperty];\r\n if (this._trackMap.hasOwnProperty(itemTrackingProperty)) {\r\n const lastIndex = this._displayObjectIndexMapById[diId], el = components[lastIndex];\r\n\r\n this._checkComponentProperty(el?.instance);\r\n\r\n const elId = el?.instance?.[itemTrackingProperty];\r\n if (el && elId === diId) {\r\n const indexByUntrackedItems = untrackedItems.findIndex(v => {\r\n this._checkComponentProperty(v.instance);\r\n\r\n return v.instance[itemTrackingProperty] === elId;\r\n });\r\n if (indexByUntrackedItems > -1) {\r\n el.instance.item = item;\r\n\r\n if (afterComponentSetup !== undefined) {\r\n afterComponentSetup(el.instance, item);\r\n }\r\n\r\n untrackedItems.splice(indexByUntrackedItems, 1);\r\n continue;\r\n }\r\n }\r\n delete this._trackMap[itemTrackingProperty];\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n const el = untrackedItems.shift(), item = items[i];\r\n if (el) {\r\n el.instance.item = item;\r\n\r\n if (this._trackMap) {\r\n this._checkComponentProperty(el.instance);\r\n\r\n this._trackMap[itemTrackingProperty] = el.instance[itemTrackingProperty];\r\n }\r\n\r\n if (afterComponentSetup !== undefined) {\r\n afterComponentSetup(el.instance, item);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (untrackedItems.length) {\r\n throw Error('Tracking by id caused an error.')\r\n }\r\n }\r\n\r\n 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 this._checkComponentProperty(component);\r\n\r\n if (this._trackMap && (component as any)[propertyIdName] !== undefined) {\r\n delete this._trackMap[propertyIdName];\r\n }\r\n }\r\n\r\n private _checkComponentProperty(component?: C): void {\r\n if (!component) {\r\n return;\r\n }\r\n\r\n const propertyIdName = this._trackingPropertyName;\r\n\r\n try {\r\n (component as any)[propertyIdName];\r\n } catch (err) {\r\n throw Error(`Property ${propertyIdName} does not exist.`);\r\n }\r\n }\r\n\r\n dispose() {\r\n this._trackMap = null;\r\n }\r\n}","export type TEventHandler = (...args: Array<any>) => void;\r\n\r\n/**\r\n * Simple event emitter\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/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 extends string = any, H extends TEventHandler = any> {\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 { EventEmitter, TEventHandler } from \"./eventEmitter\";\r\n\r\nexport interface ICacheMap<I = any, B = any> {\r\n set: (id: I, bounds: B) => Map<I, B>;\r\n has: (id: I) => boolean;\r\n get: (id: I) => B | undefined;\r\n forEach: (callbackfn: (value: B, key: I, map: Map<I, B>) => void, thisArg?: any) => void;\r\n}\r\n\r\ntype CacheMapEvents = 'change';\r\n\r\ntype OnChangeEventListener = (version: number) => void;\r\n\r\ntype CacheMapListeners = OnChangeEventListener;\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/main/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 extends string = CacheMapEvents, L extends TEventHandler = CacheMapListeners>\r\n extends EventEmitter<E, L> implements ICacheMap {\r\n protected _map = new Map<I, B>();\r\n\r\n protected _version: number = 0;\r\n\r\n protected _previouseFullHeigh: number = 0;\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 get version() {\r\n return this._version;\r\n }\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n protected bumpVersion() {\r\n this._version = this._version === Number.MAX_SAFE_INTEGER ? 0 : this._version + 1;\r\n }\r\n\r\n protected fireChange() {\r\n this.dispatch('change' as E, this.version);\r\n }\r\n\r\n set(id: I, bounds: B): Map<I, B> {\r\n if (this._map.has(id) && JSON.stringify(this._map.get(id)) === JSON.stringify(bounds)) {\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 this.fireChange();\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 forEach(callbackfn: (value: B, key: I, map: Map<I, B>) => void, thisArg?: any): void {\r\n return this._map.forEach(callbackfn, thisArg);\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this._map.clear();\r\n }\r\n}","import { ComponentRef } from \"@angular/core\";\r\nimport { NgVirtualListItemComponent } from \"../components/ng-virtual-list-item.component\";\r\nimport { IVirtualListCollection } from \"../models/collection.model\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { IRenderVirtualListItem } from \"../models/render-item.model\";\r\nimport { Id } from \"../types/id\";\r\nimport { IRect } from \"../types/rect\";\r\nimport { CacheMap } from \"./cacheMap\";\r\nimport { Tracker } from \"./tracker\";\r\nimport { ISize } from \"../types\";\r\nimport { debounce } from \"./debounce\";\r\nimport { HEIGHT_PROP_NAME, WIDTH_PROP_NAME, X_PROP_NAME, Y_PROP_NAME } from \"../const\";\r\nimport { IVirtualListStickyMap } from \"../models\";\r\n\r\nexport const TRACK_BOX_CHANGE_EVENT_NAME = 'change';\r\n\r\nexport interface IMetrics {\r\n delta: number;\r\n normalizedItemWidth: number;\r\n normalizedItemHeight: number;\r\n width: number;\r\n height: number;\r\n dynamicSize: boolean;\r\n itemSize: number;\r\n itemsFromStartToScrollEnd: number;\r\n itemsFromStartToDisplayEnd: number;\r\n itemsOnDisplay: 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 sizeProperty: typeof HEIGHT_PROP_NAME | typeof WIDTH_PROP_NAME;\r\n snap: boolean;\r\n snippedPos: number;\r\n startIndex: number;\r\n startPosition: number;\r\n totalItemsToDisplayEndWeight: number;\r\n totalLength: number;\r\n totalSize: number;\r\n typicalItemSize: number;\r\n}\r\n\r\nexport type ScrollDirection = -1 | 0 | 1;\r\n\r\nexport interface IRecalculateMetricsOptions<I extends { id: Id }, C extends Array<I>> {\r\n bounds: ISize;\r\n collection: C;\r\n isVertical: boolean;\r\n itemSize: number;\r\n itemsOffset: number;\r\n dynamicSize: boolean;\r\n scrollSize: number;\r\n snap: boolean;\r\n fromItemId?: Id;\r\n scrollDirection?: ScrollDirection;\r\n}\r\n\r\ntype CacheMapEvents = typeof TRACK_BOX_CHANGE_EVENT_NAME;\r\n\r\ntype OnChangeEventListener = (version: number) => void;\r\n\r\ntype CacheMapListeners = OnChangeEventListener;\r\n\r\n/**\r\n * An object that performs tracking, calculations and caching.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/utils/trackBox.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class TrackBox extends CacheMap<Id, IRect, CacheMapEvents, CacheMapListeners> {\r\n protected _tracker!: Tracker<IRenderVirtualListItem, NgVirtualListItemComponent>;\r\n\r\n protected _items: IRenderVirtualListCollection | null | undefined;\r\n\r\n set items(v: IRenderVirtualListCollection | null | undefined) {\r\n if (this._items === v) {\r\n return;\r\n }\r\n\r\n this._items = v;\r\n }\r\n\r\n protected _displayComponents: Array<ComponentRef<NgVirtualListItemComponent>> | null | undefined;\r\n\r\n set displayComponents(v: Array<ComponentRef<NgVirtualListItemComponent>> | null | undefined) {\r\n if (this._displayComponents === v) {\r\n return;\r\n }\r\n\r\n this._displayComponents = v;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n super();\r\n\r\n this._tracker = new Tracker(trackingPropertyName);\r\n }\r\n\r\n override set(id: Id, bounds: IRect): Map<Id, IRect> {\r\n if (this._map.has(id) && JSON.stringify(this._map.get(id)) === JSON.stringify(bounds)) {\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 this.fireChange();\r\n\r\n return v;\r\n }\r\n\r\n private _fireChanges = (version: number) => {\r\n this.dispatch(TRACK_BOX_CHANGE_EVENT_NAME, version);\r\n };\r\n\r\n private _debounceChanges = debounce(this._fireChanges, 0);\r\n\r\n protected override fireChange() {\r\n this._debounceChanges.execute(this._version);\r\n }\r\n\r\n getItemPosition<I extends { id: Id }, C extends Array<I>>(id: Id, stickyMap: IVirtualListStickyMap, options: IRecalculateMetricsOptions<I, C>): number {\r\n const opt = { fromItemId: id, stickyMap, scrollDirection: undefined, ...options };\r\n const { scrollSize } = this.recalculateMetrics(opt);\r\n return scrollSize;\r\n }\r\n\r\n updateCollection<I extends { id: Id }, C extends Array<I>>(items: C, stickyMap: IVirtualListStickyMap,\r\n options: Omit<IRecalculateMetricsOptions<I, C>, 'collection'>): { displayItems: IRenderVirtualListCollection; totalSize: number; delta: number; } {\r\n const opt = { stickyMap, scrollDirection: undefined, ...options };\r\n this.cacheElements();\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n });\r\n\r\n const displayItems = this.generateDisplayCollection(items, stickyMap, metrics);\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta };\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 { scrollDirection = 0, fromItemId, bounds, collection, dynamicSize, isVertical, itemSize,\r\n itemsOffset, scrollSize, snap, stickyMap } = options as IRecalculateMetricsOptions<I, C> & {\r\n stickyMap: IVirtualListStickyMap,\r\n };\r\n\r\n const { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME, size = isVertical ? height : width,\r\n totalLength = collection.length, typicalItemSize = itemSize,\r\n w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height,\r\n totalSize = dynamicSize ? this.getBoundsFromCache(collection, typicalItemSize, isVertical) : totalLength * typicalItemSize,\r\n snippedPos = Math.floor(scrollSize),\r\n leftItemsWeights: Array<number> = [],\r\n isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)\r\n || (typeof fromItemId === 'string' && fromItemId > '-1');\r\n\r\n let 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 itemById: I | undefined = undefined,\r\n itemByIdPos: number = 0,\r\n lastDisplayItemId: Id | undefined = undefined,\r\n actualScrollSize = itemByIdPos,\r\n fullHeight = 0,\r\n startIndex;\r\n\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], map = this._map;\r\n\r\n let componentSize = 0;\r\n if (map.has(collectionItem.id)) {\r\n const bounds = map.get(collectionItem.id);\r\n componentSize = bounds ? bounds[sizeProperty] : typicalItemSize;\r\n } else {\r\n componentSize = typicalItemSize;\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === undefined) {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n\r\n if (stickyMap && stickyMap[collectionItem.id] > 0) {\r\n stickyComponentSize = componentSize;\r\n stickyCollectionItem = collectionItem;\r\n }\r\n\r\n if (collectionItem.id === fromItemId) {\r\n itemById = collectionItem;\r\n itemByIdPos = y;\r\n if (stickyCollectionItem && stickyMap && stickyMap[stickyCollectionItem.id] > 0) {\r\n itemByIdPos = itemByIdPos - stickyComponentSize;\r\n }\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 (!lastDisplayItemId) {\r\n if (itemById === undefined || y < itemByIdPos + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + itemsOffset;\r\n }\r\n }\r\n } else if (y < scrollSize + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + itemsOffset;\r\n } else if (i < itemsFromDisplayEndToOffsetEnd) {\r\n rightItemsWeight += componentSize;\r\n }\r\n\r\n y += componentSize;\r\n }\r\n fullHeight = y;\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 - itemsOffset);\r\n leftItemsWeights.forEach(v => {\r\n leftItemsWeight += v;\r\n });\r\n\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, itemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + itemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : itemsOffset;\r\n } else {\r\n itemsFromStartToScrollEnd = Math.floor(scrollSize / typicalItemSize);\r\n itemsFromStartToDisplayEnd = Math.ceil((scrollSize + size) / typicalItemSize);\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, itemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + itemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : itemsOffset;\r\n leftItemsWeight = leftItemLength * typicalItemSize;\r\n rightItemsWeight = rightItemLength * typicalItemSize,\r\n leftHiddenItemsWeight = itemsFromStartToScrollEnd * typicalItemSize,\r\n totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * typicalItemSize;\r\n actualScrollSize = scrollSize,\r\n fullHeight = totalLength * typicalItemSize;\r\n }\r\n startIndex = Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0);\r\n\r\n const itemsOnDisplay = totalItemsToDisplayEndWeight - leftHiddenItemsWeight,\r\n itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd,\r\n startPosition = leftHiddenItemsWeight - leftItemsWeight,\r\n renderItems = itemsOnDisplayLength + leftItemLength + rightItemLength,\r\n delta = fullHeight - this._previouseFullHeigh;\r\n\r\n if (scrollDirection === -1) {\r\n this._delta += delta;\r\n }\r\n\r\n const metrics: IMetrics = {\r\n delta: this._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 itemsOnDisplay,\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 sizeProperty,\r\n snap,\r\n snippedPos,\r\n startIndex,\r\n startPosition,\r\n totalItemsToDisplayEndWeight,\r\n totalLength,\r\n totalSize,\r\n typicalItemSize,\r\n };\r\n\r\n if (scrollDirection !== 0) {\r\n this._previouseFullHeigh = fullHeight;\r\n }\r\n\r\n return metrics;\r\n }\r\n\r\n clearDelta(): void {\r\n this._delta = 0;\r\n }\r\n\r\n protected generateDisplayCollection<I extends { id: Id }, C extends Array<I>>(items: C, stickyMap: IVirtualListStickyMap,\r\n metrics: IMetrics): IRenderVirtualListCollection {\r\n const {\r\n // delta,\r\n normalizedItemWidth,\r\n normalizedItemHeight,\r\n // width,\r\n // height,\r\n dynamicSize,\r\n // itemSize,\r\n itemsFromStartToScrollEnd,\r\n // itemsFromStartToDisplayEnd,\r\n // itemsOnDisplay,\r\n // itemsOnDisplayLength,\r\n isVertical,\r\n // leftHiddenItemsWeight,\r\n // leftItemLength,\r\n // leftItemsWeight,\r\n renderItems: renderItemsLength,\r\n // rightItemLength,\r\n // rightItemsWeight,\r\n scrollSize,\r\n sizeProperty,\r\n snap,\r\n snippedPos,\r\n startPosition,\r\n // totalItemsToDisplayEndWeight,\r\n totalLength,\r\n // totalSize,\r\n startIndex,\r\n typicalItemSize,\r\n } = metrics,\r\n displayItems: IRenderVirtualListCollection = [];\r\n if (items.length) {\r\n const actualSnippedPosition = snippedPos;\r\n let pos = startPosition,\r\n renderItems = renderItemsLength,\r\n stickyItem: IRenderVirtualListItem | undefined, nextSticky: IRenderVirtualListItem | undefined, stickyItemIndex = -1,\r\n stickyItemSize = 0;\r\n\r\n if (snap) {\r\n for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? itemsFromStartToScrollEnd : 0, totalLength - 1); i >= 0; i--) {\r\n const id = items[i].id, sticky = stickyMap[id], size = dynamicSize ? this.get(id)?.[sizeProperty] || typicalItemSize : typicalItemSize;\r\n stickyItemSize = size;\r\n if (sticky > 0) {\r\n const measures = {\r\n x: isVertical ? 0 : actualSnippedPosition,\r\n y: isVertical ? actualSnippedPosition : 0,\r\n width: normalizedItemWidth,\r\n height: normalizedItemHeight,\r\n }, config = {\r\n isVertical,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n };\r\n\r\n const itemData: I = items[i];\r\n\r\n stickyItem = { id, measures, data: itemData, config };\r\n stickyItemIndex = i;\r\n\r\n displayItems.push(stickyItem);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let i = startIndex;\r\n\r\n while (renderItems > 0) {\r\n if (i >= totalLength) {\r\n break;\r\n }\r\n\r\n const id = items[i].id, size = dynamicSize ? this.get(id)?.[sizeProperty] || typicalItemSize : typicalItemSize;\r\n\r\n if (id !== stickyItem?.id) {\r\n const snapped = snap && stickyMap[id] > 0 && pos <= scrollSize,\r\n measures = {\r\n x: isVertical ? 0 : pos,\r\n y: isVertical ? pos : 0,\r\n width: normalizedItemWidth,\r\n height: normalizedItemHeight,\r\n }, config = {\r\n isVertical,\r\n sticky: stickyMap[id],\r\n snap,\r\n snapped: false,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n };\r\n\r\n const itemData: I = items[i];\r\n\r\n const item: IRenderVirtualListItem = { id, measures, data: itemData, config };\r\n if (!nextSticky && stickyItemIndex < i && snap && stickyMap[id] > 0 && pos <= scrollSize + size) {\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 }\r\n displayItems.push(item);\r\n }\r\n\r\n renderItems -= 1;\r\n pos += size;\r\n i++;\r\n }\r\n\r\n const axis = isVertical ? Y_PROP_NAME : X_PROP_NAME;\r\n\r\n if (nextSticky && stickyItem && nextSticky.measures[axis] <= scrollSize + stickyItemSize) {\r\n if (nextSticky.measures[axis] > scrollSize) {\r\n stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItemSize;\r\n stickyItem.config.snapped = nextSticky.config.snapped = false;\r\n stickyItem.config.snappedOut = true;\r\n stickyItem.config.sticky = 1;\r\n } else {\r\n nextSticky.config.snapped = true;\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);\r\n }\r\n\r\n setDisplayObjectIndexMapById(v: { [id: number]: number }): void {\r\n this._tracker.displayObjectIndexMapById = v;\r\n }\r\n\r\n untrackComponentByIdProperty(component?: NgVirtualListItemComponent | undefined) {\r\n this._tracker.untrackComponentByIdProperty(component);\r\n }\r\n\r\n 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 /**\r\n * Returns calculated bounds from cache\r\n */\r\n private getBoundsFromCache(items: IVirtualListCollection, typicalItemSize: number, isVertical: boolean) {\r\n const sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME, map = this._map;\r\n let size: number = 0;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i];\r\n if (map.has(item.id)) {\r\n const bounds = map.get(item.id);\r\n size += bounds ? bounds[sizeProperty] : typicalItemSize;\r\n } else {\r\n size += typicalItemSize;\r\n }\r\n }\r\n return size;\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n if (this._debounceChanges) {\r\n this._debounceChanges.dispose();\r\n }\r\n\r\n if (this._tracker) {\r\n this._tracker.dispose();\r\n }\r\n }\r\n}\r\n","import { Component, OnDestroy } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\n\r\n/**\r\n * Base disposable component\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/utils/disposableComponent.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n template: ``,\r\n})\r\nexport class DisposableComponent implements OnDestroy {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n ngOnDestroy(): void {\r\n if (this._$unsubscribe) {\r\n this._$unsubscribe.next();\r\n this._$unsubscribe.complete();\r\n }\r\n }\r\n}","import {\r\n AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentRef, ElementRef, EventEmitter,\r\n Input, OnDestroy, Output, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, map, Observable, of, switchMap, takeUntil, 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, DEFAULT_ITEM_SIZE,\r\n DEFAULT_ITEMS_OFFSET, DEFAULT_SNAP, DEFAULT_SNAP_TO_ITEM, HEIGHT_PROP_NAME, LEFT_PROP_NAME, PX, SCROLL, SCROLL_END, TOP_PROP_NAME,\r\n TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n} from './const';\r\nimport { IVirtualListCollection, IVirtualListItem, IVirtualListStickyMap } from './models';\r\nimport { Id } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { Direction, Directions } from './enums';\r\nimport { DisposableComponent, TrackBox, isDirection, toggleClassName } from './utils';\r\nimport { IRecalculateMetricsOptions, ScrollDirection, TRACK_BOX_CHANGE_EVENT_NAME } from './utils/trackBox';\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/main/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 templateUrl: './ng-virtual-list.component.html',\r\n styleUrls: ['./ng-virtual-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgVirtualListComponent extends DisposableComponent implements AfterViewInit, OnDestroy {\r\n private static __nextId: number = 0;\r\n\r\n private _id: number = NgVirtualListComponent.__nextId;\r\n /**\r\n * Readonly. Returns the unique identifier of the component.\r\n */\r\n get id() { return this._id; }\r\n\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n protected _listContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('container', { read: ElementRef<HTMLDivElement> })\r\n protected _container: ElementRef<HTMLDivElement> | undefined;\r\n\r\n @ViewChild('list', { read: ElementRef<HTMLDivElement> })\r\n protected _list: ElementRef<HTMLUListElement> | undefined;\r\n\r\n /**\r\n * Fires when the list has been scrolled.\r\n */\r\n @Output()\r\n onScroll = new EventEmitter<number>();\r\n\r\n /**\r\n * Fires when the list has completed scrolling.\r\n */\r\n @Output()\r\n onScrollEnd = new EventEmitter<number>();\r\n\r\n private _$items = new BehaviorSubject<IVirtualListCollection | undefined>(undefined);\r\n readonly $items = this._$items.asObservable();\r\n\r\n /**\r\n * Collection of list items.\r\n */\r\n @Input()\r\n set items(v: IVirtualListCollection) {\r\n if (this._$items.getValue() === v) {\r\n return;\r\n }\r\n\r\n this._$items.next(v);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get items() { return this._$items.getValue() as IVirtualListCollection; }\r\n\r\n private _$snap = new BehaviorSubject<boolean>(DEFAULT_SNAP);\r\n readonly $snap = this._$snap.asObservable();\r\n\r\n /**\r\n * Determines whether elements will snap. Default value is \"true\".\r\n */\r\n @Input()\r\n set snap(v: boolean) {\r\n if (this._$snap.getValue() === v) {\r\n return;\r\n }\r\n\r\n this._$snap.next(v);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get snap() { return this._$snap.getValue(); }\r\n\r\n private _$snapToItem = new BehaviorSubject<boolean>(DEFAULT_SNAP_TO_ITEM);\r\n readonly $snapToItem = this._$snapToItem.asObservable();\r\n\r\n /**\r\n * Determines whether scroll positions will be snapped to the element. Default value is \"false\".\r\n */\r\n @Input()\r\n set snapToItem(v: boolean) {\r\n if (this._$snapToItem.getValue() === v) {\r\n return;\r\n }\r\n\r\n this._$snapToItem.next(v);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get snapToItem() { return this._$snapToItem.getValue(); }\r\n\r\n private _$itemRenderer = new BehaviorSubject<TemplateRef<any> | undefined>(undefined);\r\n readonly $itemRenderer = this._$itemRenderer.asObservable();\r\n /**\r\n * Rendering element template.\r\n */\r\n @Input()\r\n set itemRenderer(v: TemplateRef<any>) {\r\n if (this._$itemRenderer.getValue() === v) {\r\n return;\r\n }\r\n\r\n this._$itemRenderer.next(v);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get itemRenderer() { return this._$itemRenderer.getValue() as TemplateRef<any>; }\r\n\r\n private _$stickyMap = new BehaviorSubject<IVirtualListStickyMap>({});\r\n readonly $stickyMap = this._$stickyMap.asObservable();\r\n\r\n /**\r\n * Dictionary zIndex by id of the list element. If the value is not set or equal to 0,\r\n * then a simple element is displayed, if the value is greater than 0, then the sticky position mode is enabled for the element.\r\n */\r\n @Input()\r\n set stickyMap(v: IVirtualListStickyMap) {\r\n if (this._$stickyMap.getValue() === v) {\r\n return;\r\n }\r\n\r\n this._$stickyMap.next(v);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get stickyMap() { return this._$stickyMap.getValue(); }\r\n\r\n private _itemSizeOptions = (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\r\n private _$itemSize = new BehaviorSubject<number>(DEFAULT_ITEM_SIZE);\r\n readonly $itemSize = this._$itemSize.asObservable();\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 @Input()\r\n set itemSize(v: number) {\r\n if (this._$itemSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n this._$itemSize.next(this._itemSizeOptions(v));\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get itemSize() { return this._$itemSize.getValue(); }\r\n\r\n private _$dynamicSize = new BehaviorSubject<boolean>(DEFAULT_DYNAMIC_SIZE);\r\n readonly $dynamicSize = this._$dynamicSize.asObservable();\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 @Input()\r\n set dynamicSize(v: boolean) {\r\n if (this._$dynamicSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n this._$dynamicSize.next(v);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get dynamicSize() { return this._$dynamicSize.getValue(); }\r\n\r\n private _$direction = new BehaviorSubject<Direction>(DEFAULT_DIRECTION);\r\n readonly $direction = this._$direction.asObservable();\r\n\r\n /**\r\n * Determines the direction in which elements are placed. Default value is \"vertical\".\r\n */\r\n @Input()\r\n set direction(v: Direction) {\r\n if (this._$direction.getValue() === v) {\r\n return;\r\n }\r\n\r\n this._$direction.next(v);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get direction() { return this._$direction.getValue(); }\r\n\r\n private _$itemsOffset = new BehaviorSubject<number>(DEFAULT_ITEMS_OFFSET);\r\n readonly $itemsOffset = this._$itemsOffset.asObservable();\r\n\r\n /**\r\n * Number of elements outside the scope of visibility. Default value is 2.\r\n */\r\n @Input()\r\n set itemsOffset(v: number) {\r\n if (this._$itemsOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n this._$itemsOffset.next(v);\r\n };\r\n get itemsOffset() { return this._$itemsOffset.getValue(); }\r\n\r\n private _scrollToTimeout: any;\r\n\r\n private _isVertical = this.getIsVertical();\r\n\r\n protected _displayComponents: Array<ComponentRef<NgVirtualListItemComponent>> = [];\r\n\r\n protected _$bounds = new BehaviorSubject<DOMRect | null>(null);\r\n\r\n protected _$scrollSize = new BehaviorSubject<number>(0);\r\n\r\n private _resizeObserver: ResizeObserver | null = null;\r\n\r\n /**\r\n * only dynamic\r\n */\r\n private _$scrolledItemId = new BehaviorSubject<Id | undefined>(undefined);\r\n\r\n private _onResizeHandler = () => {\r\n this._$bounds.next(this._container?.nativeElement?.getBoundingClientRect() ?? null);\r\n }\r\n\r\n private _scrollDirection: ScrollDirection = 0;\r\n\r\n private _onScrollHandler = (e?: Event) => {\r\n this._$scrolledItemId.next(undefined);\r\n\r\n const container = this._container?.nativeElement;\r\n if (container) {\r\n const dynamicSize = this.dynamicSize, delta = this._trackBox.delta, scrollSize = (this._isVertical ? container.scrollTop : container.scrollLeft),\r\n previouseScrollSize = this._$scrollSize.getValue();\r\n let actualScrollSize = scrollSize;\r\n\r\n this._scrollDirection = previouseScrollSize > scrollSize ? -1 : 1;\r\n\r\n if (dynamicSize && delta !== 0) {\r\n actualScrollSize = scrollSize + delta;\r\n const params: ScrollToOptions = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: actualScrollSize,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior\r\n };\r\n\r\n const container = this._container;\r\n if (container) {\r\n this.scrollImmediately(container, params);\r\n\r\n this._trackBox.clearDelta();\r\n }\r\n }\r\n\r\n this._$scrollSize.next(actualScrollSize);\r\n\r\n this.onScroll.emit(actualScrollSize);\r\n }\r\n }\r\n\r\n private scrollImmediately(container: ElementRef<HTMLDivElement>, params: ScrollOptions) {\r\n this.clearScrollImmediately();\r\n\r\n container.nativeElement.removeEventListener(SCROLL_END, this._onScrollEndHandler);\r\n const handler = () => {\r\n if (container) {\r\n container.nativeElement.removeEventListener(SCROLL_END, handler);\r\n\r\n container.nativeElement.scroll(params);\r\n\r\n container.nativeElement.addEventListener(SCROLL_END, this._onScrollEndHandler);\r\n }\r\n }\r\n container.nativeElement.addEventListener(SCROLL_END, handler);\r\n\r\n container.nativeElement.scroll(params);\r\n\r\n this._scrollImmediatelyHandler = handler;\r\n }\r\n\r\n private _scrollImmediatelyHandler: ((...args: Array<any>) => void) | undefined = undefined;\r\n\r\n private clearScrollImmediately() {\r\n if (this._scrollImmediatelyHandler === undefined) {\r\n return;\r\n }\r\n\r\n const container = this._container;\r\n if (container) {\r\n container.nativeElement.removeEventListener(SCROLL_END, this._scrollImmediatelyHandler);\r\n }\r\n }\r\n\r\n private _onScrollEndHandler = (e?: Event, fireEvent: boolean = true) => {\r\n const container = this._container;\r\n if (container) {\r\n const itemSize = this.itemSize, snapToItem = this.snapToItem, dynamicSize = this.dynamicSize, delta = this._trackBox.delta,\r\n scrollSize = (this._isVertical ? container.nativeElement.scrollTop : container.nativeElement.scrollLeft);\r\n let actualScrollSize = scrollSize;\r\n if (dynamicSize && delta !== 0) {\r\n actualScrollSize = scrollSize + delta;\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 as ScrollBehavior\r\n };\r\n\r\n this._trackBox.clearDelta();\r\n\r\n this._$scrollSize.next(actualScrollSize);\r\n\r\n container.nativeElement.scroll(params);\r\n return;\r\n }\r\n } else {\r\n const scrollItems = Math.round(scrollSize / itemSize);\r\n actualScrollSize = snapToItem ? scrollItems * itemSize : scrollSize;\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 as ScrollBehavior\r\n };\r\n\r\n container.nativeElement.scroll(params);\r\n }\r\n }\r\n\r\n this._$scrollSize.next(actualScrollSize);\r\n\r\n if (fireEvent) {\r\n this.onScrollEnd.emit(actualScrollSize);\r\n }\r\n }\r\n }\r\n\r\n private _$initialized = new BehaviorSubject<boolean>(false);\r\n\r\n readonly $initialized: Observable<boolean>;\r\n\r\n /**\r\n * Dictionary of element sizes by their id\r\n */\r\n private _trackBox = new TrackBox(TRACK_BY_PROPERTY_NAME);\r\n\r\n private _onTrackBoxChangeHandler = (v: number) => {\r\n this._$cacheVersion.next(v);\r\n }\r\n\r\n private _$cacheVersion = new BehaviorSubject<number>(-1);\r\n get $cacheVersion() { return this._$cacheVersion.asObservable(); }\r\n\r\n constructor(\r\n private _cdr: ChangeDetectorRef,\r\n private _elementRef: ElementRef<HTMLDivElement>\r\n ) {\r\n super();\r\n\r\n NgVirtualListComponent.__nextId = NgVirtualListComponent.__nextId + 1 === Number.MAX_SAFE_INTEGER\r\n ? 0 : NgVirtualListComponent.__nextId + 1;\r\n this._id = NgVirtualListComponent.__nextId;\r\n\r\n this._$initialized = new BehaviorSubject<boolean>(false);\r\n this.$initialized = this._$initialized.asObservable();\r\n\r\n this._trackBox.displayComponents = this._displayComponents;\r\n\r\n const $bounds = this._$bounds.asObservable().pipe(\r\n filter(b => !!b),\r\n ), $items = this.$items.pipe(\r\n map(i => !i ? [] : i),\r\n ), $scrollSize = this._$scrollSize.asObservable(),\r\n $itemSize = this.$itemSize.pipe(\r\n map(v => v <= 0 ? DEFAULT_ITEM_SIZE : v),\r\n ),\r\n $itemsOffset = this.$itemsOffset.pipe(\r\n map(v => v < 0 ? DEFAULT_ITEMS_OFFSET : v),\r\n ),\r\n $stickyMap = this.$stickyMap.pipe(\r\n map(v => !v ? {} : v),\r\n ),\r\n $snap = this.$snap,\r\n $isVertical = this.$direction.pipe(\r\n map(v => this.getIsVertical(v || DEFAULT_DIRECTION)),\r\n ),\r\n $dynamicSize = this.$dynamicSize,\r\n $cacheVersion = this.$cacheVersion,\r\n $scrolledItemId = this._$scrolledItemId.asObservable();\r\n\r\n $isVertical.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(v => {\r\n this._isVertical = v;\r\n const el: HTMLElement = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, true);\r\n }),\r\n ).subscribe();\r\n\r\n $dynamicSize.pipe(\r\n takeUntil(this._$unsubscribe),\r\n tap(dynamicSize => {\r\n this.listenCacheChangesIfNeed(dynamicSize);\r\n })\r\n ).subscribe();\r\n\r\n combineLatest([this.$initialized, $scrolledItemId, $bounds, $items, $stickyMap, $scrollSize, $itemSize,\r\n $itemsOffset, $snap, $isVertical, $dynamicSize, $cacheVersion,\r\n ]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n filter(([initialized]) => !!initialized),\r\n switchMap(([, scrolledItemId,\r\n bounds, items, stickyMap, scrollSize, itemSize,\r\n itemsOffset, snap, isVertical, dynamicSize, cacheVersion,\r\n ]) => {\r\n const { width, height } = bounds as DOMRect;\r\n let actualScrollSize = scrollSize;\r\n const opts: IRecalculateMetricsOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, collection: items, dynamicSize, isVertical, itemSize,\r\n itemsOffset, scrollSize: scrollSize, snap, fromItemId: scrolledItemId,\r\n };\r\n if (dynamicSize && scrolledItemId !== undefined) {\r\n const scrollSize = this._trackBox.getItemPosition(scrolledItemId, stickyMap, { ...opts, scrollSize: actualScrollSize });\r\n actualScrollSize = scrollSize;\r\n\r\n this._$scrollSize.next(actualScrollSize);\r\n }\r\n\r\n const scrollDirection = this._scrollDirection,\r\n { displayItems, totalSize } = this._trackBox.updateCollection(items, stickyMap, {\r\n ...opts, scrollSize: actualScrollSize, scrollDirection\r\n });\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 (dynamicSize && scrolledItemId !== undefined) {\r\n const container = this._container;\r\n if (container) {\r\n const params: ScrollToOptions = { [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior: BEHAVIOR_AUTO };\r\n\r\n this.scrollImmediately(container, params);\r\n }\r\n }\r\n\r\n return of(displayItems);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$initialized, this.$itemRenderer]).pipe(\r\n takeUntil(this._$unsubscribe),\r\n distinctUntilChanged(),\r\n filter(([initialized]) => !!initialized),\r\n tap(([, itemRenderer]) => {\r\n this.resetRenderers(itemRenderer);\r\n })\r\n )\r\n }\r\n\r\n ngOnInit() {\r\n this._$initialized.next(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 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 this._trackBox.items = displayItems;\r\n\r\n const _listContainerRef = this._listContainerRef;\r\n\r\n while (this._displayComponents.length < displayItems.length) {\r\n if (_listContainerRef) {\r\n const comp = _listContainerRef.createComponent(NgVirtualListItemComponent);\r\n this._displayComponents.push(comp);\r\n }\r\n }\r\n\r\n const maxLength = displayItems.length;\r\n while (this._displayComponents.length > maxLength) {\r\n const comp = this._displayComponents.pop();\r\n comp?.destroy();\r\n const id = comp?.instance.item?.id;\r\n if (id !== undefined) {\r\n this._trackBox.untrackComponentByIdProperty(comp?.instance);\r\n }\r\n }\r\n\r\n this.resetRenderers();\r\n }\r\n\r\n private resetRenderers(itemRenderer?: TemplateRef<any>) {\r\n const doMap: { [id: number]: number } = {};\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const item = this._displayComponents[i];\r\n item.instance.renderer = itemRenderer || this.itemRenderer;\r\n doMap[item.instance.id] = i;\r\n }\r\n\r\n this._trackBox.setDisplayObjectIndexMapById(doMap);\r\n }\r\n\r\n /**\r\n * Tracking by id\r\n */\r\n protected tracking() {\r\n this._trackBox.track();\r\n }\r\n\r\n private resetBoundsSize(isVertical: boolean, totalSize: number) {\r\n const l = this._list;\r\n if (l) {\r\n l.nativeElement.style[isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME] = `${totalSize}${PX}`;\r\n }\r\n }\r\n\r\n /**\r\n * 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 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 if (dynamicSize) {\r\n if (container) {\r\n container.nativeElement.removeEventListener(SCROLL, this._onScrollHandler);\r\n container.nativeElement.removeEventListener(SCROLL_END, this._onScrollEndHandler);\r\n }\r\n\r\n const { width, height } = this._$bounds.getValue() || { width: 0, height: 0 },\r\n stickyMap = this.stickyMap, items = this.items,\r\n opts: IRecalculateMetricsOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize,\r\n itemsOffset: this.itemsOffset, scrollSize: this._isVertical ? container.nativeElement.scrollTop : container.nativeElement.scrollLeft,\r\n snap: this.snap, fromItemId: id,\r\n },\r\n scrollSize = this._trackBox.getItemPosition(id, stickyMap, opts),\r\n params: ScrollToOptions = { [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior };\r\n\r\n this._$scrolledItemId.next(id);\r\n\r\n this._$scrollSize.next(scrollSize);\r\n\r\n if (container) {\r\n const handler = () => {\r\n if (container) {\r\n container.nativeElement.removeEventListener(SCROLL_END, handler);\r\n clearTimeout(this._scrollToTimeout);\r\n this._scrollToTimeout = setTimeout(() => {\r\n container.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n container.nativeElement.addEventListener(SCROLL_END, this._onScrollEndHandler);\r\n }, 100);\r\n\r\n this.listenCacheChangesIfNeed(dynamicSize);\r\n\r\n this.onScroll.emit(scrollSize);\r\n }\r\n }\r\n container.nativeElement.addEventListener(SCROLL_END, handler);\r\n }\r\n\r\n container.nativeElement.scroll(params);\r\n } else {\r\n const index = items.findIndex(item => item.id === id), scrollSize = index * this.itemSize;\r\n const params: ScrollToOptions = { [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior };\r\n container.nativeElement.scroll(params);\r\n }\r\n }\r\n }\r\n\r\n scrollToEnd(behavior: ScrollBehavior = BEHAVIOR_INSTANT as ScrollBehavior) {\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 ngAfterViewInit(): void {\r\n const containerEl = this._container;\r\n if (containerEl) {\r\n containerEl.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n containerEl.nativeElement.addEventListener(SCROLL_END, this._onScrollEndHandler);\r\n\r\n this._resizeObserver = new ResizeObserver(this._onResizeHandler);\r\n this._resizeObserver.observe(containerEl.nativeElement);\r\n\r\n this._onResizeHandler();\r\n }\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n\r\n if (this._scrollToTimeout) {\r\n clearTimeout(this._scrollToTimeout);\r\n }\r\n\r\n if (this._trackBox) {\r\n this._trackBox.dispose();\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_END, this._onScrollEndHandler);\r\n\r\n if (this._resizeObserver) {\r\n this._resizeObserver.unobserve(containerEl.nativeElement);\r\n }\r\n }\r\n\r\n if (this._displayComponents) {\r\n while (this._displayComponents.length > 0) {\r\n const comp = this._displayComponents.pop();\r\n comp?.destroy();\r\n }\r\n }\r\n }\r\n}\r\n","<div #container part=\"scroller\" class=\"ngvl__container\">\r\n <ul #list part=\"list\" class=\"ngvl__list\">\r\n <ng-container #renderersContainer></ng-container>\r\n </ul>\r\n</div>","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgVirtualListComponent } from './ng-virtual-list.component';\r\nimport { NgVirtualListItemComponent } from './components/ng-virtual-list-item.component';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListComponent, NgVirtualListItemComponent],\r\n exports: [NgVirtualListComponent],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgVirtualListModule { }\r\n","/*\r\n * Public API Surface of ng-virtual-list\r\n */\r\n\r\nexport * from './lib/ng-virtual-list.module';\r\nexport * from './lib/ng-virtual-list.component';\r\nexport * from './lib/models';\r\nexport * from './lib/types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["EventEmitter"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- /// <amd-module name="ng-virtual-list" />
5
- export * from './public-api';
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="ng-virtual-list" />
5
+ export * from './public-api';
@@ -1,35 +1,28 @@
1
- import { TemplateRef } from '@angular/core';
2
- import { IRenderVirtualListItem } from '../models/render-item.model';
3
- import { IRect } from '../types';
4
- import * as i0 from "@angular/core";
5
- /**
6
- * Virtual list item component
7
- * @homepage https://github.com/DjonnyX/ng-virtual-list/tree/main/projects/ng-virtual-list
8
- * @author Evgenii Grebennikov
9
- * @email djonnyx@gmail.com
10
- */
11
- export declare class NgVirtualListItemComponent {
12
- private static __nextId;
13
- private _id;
14
- get id(): number;
15
- get config(): {
16
- sticky?: number | undefined;
17
- snap?: boolean | undefined;
18
- snapped?: boolean | undefined;
19
- isVertical?: boolean | undefined;
20
- dynamic?: boolean | undefined;
21
- };
22
- data: import("@angular/core").WritableSignal<IRenderVirtualListItem | undefined>;
23
- private _data;
24
- set item(v: IRenderVirtualListItem | undefined);
25
- get itemId(): import("ng-virtual-list").Id | undefined;
26
- itemRenderer: import("@angular/core").WritableSignal<TemplateRef<any> | undefined>;
27
- set renderer(v: TemplateRef<any> | undefined);
28
- private _elementRef;
29
- constructor();
30
- getBounds(): IRect;
31
- showIfNeed(): void;
32
- hide(): void;
33
- static ɵfac: i0.ɵɵFactoryDeclaration<NgVirtualListItemComponent, never>;
34
- static ɵcmp: i0.ɵɵComponentDeclaration<NgVirtualListItemComponent, "ng-virtual-list-item", never, {}, {}, never, never, true, never>;
35
- }
1
+ import { ChangeDetectorRef, ElementRef, TemplateRef } from '@angular/core';
2
+ import { IRenderVirtualListItem } from '../models/render-item.model';
3
+ import { IRect } from '../types';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Virtual list item component
7
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/components/ng-virtual-list-item.component.ts
8
+ * @author Evgenii Grebennikov
9
+ * @email djonnyx@gmail.com
10
+ */
11
+ export declare class NgVirtualListItemComponent {
12
+ private _cdr;
13
+ private _elementRef;
14
+ private static __nextId;
15
+ private _id;
16
+ get id(): number;
17
+ data: IRenderVirtualListItem | undefined;
18
+ set item(v: IRenderVirtualListItem | undefined);
19
+ get itemId(): import("../types").Id | undefined;
20
+ itemRenderer: TemplateRef<any> | undefined;
21
+ set renderer(v: TemplateRef<any> | undefined);
22
+ constructor(_cdr: ChangeDetectorRef, _elementRef: ElementRef<HTMLElement>);
23
+ getBounds(): IRect;
24
+ showIfNeed(): void;
25
+ hide(): void;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgVirtualListItemComponent, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgVirtualListItemComponent, "ng-virtual-list-item", never, {}, {}, never, never, false>;
28
+ }
@@ -1,31 +1,32 @@
1
- import { Directions } from "../enums/directions";
2
- export declare const DEFAULT_ITEM_SIZE = 24;
3
- export declare const DEFAULT_ITEMS_OFFSET = 2;
4
- export declare const DEFAULT_LIST_SIZE = 400;
5
- export declare const DEFAULT_SNAP = false;
6
- export declare const DEFAULT_SNAP_TO_ITEM = false;
7
- export declare const DEFAULT_DYNAMIC_SIZE = false;
8
- export declare const TRACK_BY_PROPERTY_NAME = "id";
9
- export declare const DEFAULT_DIRECTION = Directions.VERTICAL;
10
- export declare const DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR = 1;
11
- export declare const BEHAVIOR_INSTANT = "instant";
12
- export declare const BEHAVIOR_AUTO = "auto";
13
- export declare const VISIBILITY_VISIBLE = "visible";
14
- export declare const VISIBILITY_HIDDEN = "hidden";
15
- export declare const SIZE_100_PERSENT = "100%";
16
- export declare const SIZE_AUTO = "auto";
17
- export declare const POSITION_ABSOLUTE = "absolute";
18
- export declare const POSITION_STICKY = "sticky";
19
- export declare const TRANSLATE_3D = "translate3d";
20
- export declare const ZEROS_TRANSLATE_3D = "translate3d(0,0,0)";
21
- export declare const TOP_PROP_NAME = "top";
22
- export declare const LEFT_PROP_NAME = "left";
23
- export declare const X_PROP_NAME = "x";
24
- export declare const Y_PROP_NAME = "y";
25
- export declare const WIDTH_PROP_NAME = "width";
26
- export declare const HEIGHT_PROP_NAME = "height";
27
- export declare const PX = "px";
28
- export declare const SCROLL = "scroll";
29
- export declare const SCROLL_END = "scrollend";
30
- export declare const CLASS_LIST_VERTICAL = "vertical";
31
- export declare const CLASS_LIST_HORIZONTAL = "horizontal";
1
+ import { Directions } from "../enums/directions";
2
+ export declare const DEFAULT_ITEM_SIZE = 24;
3
+ export declare const DEFAULT_ITEMS_OFFSET = 2;
4
+ export declare const DEFAULT_LIST_SIZE = 400;
5
+ export declare const DEFAULT_SNAP = false;
6
+ export declare const DEFAULT_SNAP_TO_ITEM = false;
7
+ export declare const DEFAULT_DYNAMIC_SIZE = false;
8
+ export declare const TRACK_BY_PROPERTY_NAME = "id";
9
+ export declare const DEFAULT_DIRECTION = Directions.VERTICAL;
10
+ export declare const DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR = 1;
11
+ export declare const BEHAVIOR_AUTO = "auto";
12
+ export declare const BEHAVIOR_INSTANT = "instant";
13
+ export declare const BEHAVIOR_SMOOTH = "smooth";
14
+ export declare const VISIBILITY_VISIBLE = "visible";
15
+ export declare const VISIBILITY_HIDDEN = "hidden";
16
+ export declare const SIZE_100_PERSENT = "100%";
17
+ export declare const SIZE_AUTO = "auto";
18
+ export declare const POSITION_ABSOLUTE = "absolute";
19
+ export declare const POSITION_STICKY = "sticky";
20
+ export declare const TRANSLATE_3D = "translate3d";
21
+ export declare const ZEROS_TRANSLATE_3D: string;
22
+ export declare const TOP_PROP_NAME = "top";
23
+ export declare const LEFT_PROP_NAME = "left";
24
+ export declare const X_PROP_NAME = "x";
25
+ export declare const Y_PROP_NAME = "y";
26
+ export declare const WIDTH_PROP_NAME = "width";
27
+ export declare const HEIGHT_PROP_NAME = "height";
28
+ export declare const PX = "px";
29
+ export declare const SCROLL = "scroll";
30
+ export declare const SCROLL_END = "scrollend";
31
+ export declare const CLASS_LIST_VERTICAL = "vertical";
32
+ export declare const CLASS_LIST_HORIZONTAL = "horizontal";
@@ -1,2 +1,8 @@
1
- import { Directions } from "./directions";
2
- export type Direction = Directions | 'hotizontal' | 'vertical';
1
+ import { Directions } from "./directions";
2
+ /**
3
+ * Axis of the arrangement of virtual list elements.
4
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/enums/direction.ts
5
+ * @author Evgenii Grebennikov
6
+ * @email djonnyx@gmail.com
7
+ */
8
+ export declare type Direction = Directions | 'hotizontal' | 'vertical';
@@ -1,4 +1,16 @@
1
- export declare enum Directions {
2
- HORIZONTAL = "horizontal",
3
- VERTICAL = "vertical"
4
- }
1
+ /**
2
+ * Axis of the arrangement of virtual list elements.
3
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/enums/directions.ts
4
+ * @author Evgenii Grebennikov
5
+ * @email djonnyx@gmail.com
6
+ */
7
+ export declare enum Directions {
8
+ /**
9
+ * Horizontal axis.
10
+ */
11
+ HORIZONTAL = "horizontal",
12
+ /**
13
+ * Vertical axis.
14
+ */
15
+ VERTICAL = "vertical"
16
+ }
@@ -1,4 +1,4 @@
1
- import { Directions } from "./directions";
2
- import { Direction } from "./direction";
3
- export { Directions };
4
- export type { Direction };
1
+ import { Directions } from "./directions";
2
+ import { Direction } from "./direction";
3
+ export { Directions };
4
+ export type { Direction };
@@ -1,3 +1,9 @@
1
- import { IVirtualListItem } from "./item.model";
2
- export interface IVirtualListCollection extends Array<IVirtualListItem> {
3
- }
1
+ import { IVirtualListItem } from "./item.model";
2
+ /**
3
+ * Virtual list elements collection interface
4
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/models/collection.model.ts
5
+ * @author Evgenii Grebennikov
6
+ * @email djonnyx@gmail.com
7
+ */
8
+ export interface IVirtualListCollection extends Array<IVirtualListItem> {
9
+ }
@@ -1,4 +1,4 @@
1
- import { IVirtualListItem } from './item.model';
2
- import { IVirtualListStickyMap } from './sticky-map.model';
3
- import { IVirtualListCollection } from './collection.model';
4
- export type { IVirtualListItem, IVirtualListStickyMap, IVirtualListCollection, };
1
+ import { IVirtualListItem } from './item.model';
2
+ import { IVirtualListStickyMap } from './sticky-map.model';
3
+ import { IVirtualListCollection } from './collection.model';
4
+ export type { IVirtualListItem, IVirtualListStickyMap, IVirtualListCollection, };
@@ -1,5 +1,14 @@
1
- import { Id } from "../types/id";
2
- export interface IVirtualListItem {
3
- id: Id;
4
- [x: string]: any;
5
- }
1
+ import { Id } from "../types/id";
2
+ /**
3
+ * Virtual list element model
4
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/models/item.model.ts
5
+ * @author Evgenii Grebennikov
6
+ * @email djonnyx@gmail.com
7
+ */
8
+ export interface IVirtualListItem {
9
+ /**
10
+ * Unique identifier of the element.
11
+ */
12
+ id: Id;
13
+ [x: string]: any;
14
+ }
@@ -1,3 +1,9 @@
1
- import { IRenderVirtualListItem } from "./render-item.model";
2
- export interface IRenderVirtualListCollection extends Array<IRenderVirtualListItem> {
3
- }
1
+ import { IRenderVirtualListItem } from "./render-item.model";
2
+ /**
3
+ * Virtual list screen elements collection interface
4
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/models/render-collection.model.ts
5
+ * @author Evgenii Grebennikov
6
+ * @email djonnyx@gmail.com
7
+ */
8
+ export interface IRenderVirtualListCollection extends Array<IRenderVirtualListItem> {
9
+ }
@@ -1,7 +1,33 @@
1
- export interface IRenderVirtualListItemConfig {
2
- sticky: number;
3
- snap: boolean;
4
- snapped: boolean;
5
- isVertical: boolean;
6
- dynamic: boolean;
7
- }
1
+ /**
2
+ * Object with configuration parameters for IRenderVirtualListItem
3
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/models/render-item-config.model.ts
4
+ * @author Evgenii Grebennikov
5
+ * @email djonnyx@gmail.com
6
+ *
7
+ */
8
+ export interface IRenderVirtualListItemConfig {
9
+ /**
10
+ * If greater than 0, the element will have a sticky position with the given zIndex.
11
+ */
12
+ sticky: number;
13
+ /**
14
+ * Specifies whether the element will snap.
15
+ */
16
+ snap: boolean;
17
+ /**
18
+ * Indicates that the element is snapped.
19
+ */
20
+ snapped: boolean;
21
+ /**
22
+ * Indicates that the element is being shifted by another snap element.
23
+ */
24
+ snappedOut: boolean;
25
+ /**
26
+ * Indicates that the element is a vertical list item.
27
+ */
28
+ isVertical: boolean;
29
+ /**
30
+ * Specifies that the element adapts to the size of its content.
31
+ */
32
+ dynamic: boolean;
33
+ }
@@ -1,10 +1,28 @@
1
- import { IRect } from "../types";
2
- import { Id } from "../types/id";
3
- import { IVirtualListItem } from "./item.model";
4
- import { IRenderVirtualListItemConfig } from "./render-item-config.model";
5
- export interface IRenderVirtualListItem {
6
- id: Id;
7
- measures: IRect;
8
- data: IVirtualListItem;
9
- config: IRenderVirtualListItemConfig;
10
- }
1
+ import { IRect } from "../types";
2
+ import { Id } from "../types/id";
3
+ import { IVirtualListItem } from "./item.model";
4
+ import { IRenderVirtualListItemConfig } from "./render-item-config.model";
5
+ /**
6
+ * List screen element model
7
+ * @link https://github.com/DjonnyX/ng-virtual-list/blob/main/projects/ng-virtual-list/src/lib/models/render-item.model.ts
8
+ * @author Evgenii Grebennikov
9
+ * @email djonnyx@gmail.com
10
+ */
11
+ export interface IRenderVirtualListItem {
12
+ /**
13
+ * Unique identifier of the element.
14
+ */
15
+ id: Id;
16
+ /**
17
+ * Element metrics.
18
+ */
19
+ measures: IRect;
20
+ /**
21
+ * Element data.
22
+ */
23
+ data: IVirtualListItem;
24
+ /**
25
+ * Object with configuration parameters for IRenderVirtualListItem.
26
+ */
27
+ config: IRenderVirtualListItemConfig;
28
+ }