{"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/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/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_INSTANT = 'instant';\r\n\r\nexport const BEHAVIOR_AUTO = 'auto';\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 { 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 { 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  imports: [CommonModule],\r\n  templateUrl: './ng-virtual-list-item.component.html',\r\n  styleUrl: './ng-virtual-list-item.component.scss',\r\n  host: {\r\n    'class': 'ngvl__item',\r\n  },\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgVirtualListItemComponent {\r\n  private static __nextId: number = 0;\r\n\r\n  private _id!: number;\r\n  get id() {\r\n    return this._id;\r\n  }\r\n\r\n  data = signal<IRenderVirtualListItem | undefined>(undefined);\r\n  private _data: IRenderVirtualListItem | undefined = undefined;\r\n  set item(v: IRenderVirtualListItem | undefined) {\r\n    if (this._data === v) {\r\n      return;\r\n    }\r\n\r\n    const data = this._data = v;\r\n\r\n    if (data) {\r\n      const styles = this._elementRef.nativeElement.style;\r\n      styles.zIndex = data.config.sticky;\r\n      if (data.config.snapped) {\r\n        styles.transform = 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.data.set(v);\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 = inject(ElementRef<HTMLElement>);\r\n\r\n  constructor() {\r\n    this._id = NgVirtualListItemComponent.__nextId = NgVirtualListItemComponent.__nextId === Number.MAX_SAFE_INTEGER\r\n      ? 0 : NgVirtualListItemComponent.__nextId + 1;\r\n  }\r\n\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","@let item = data();\r\n@let renderer = itemRenderer();\r\n\r\n@if (item) {\r\n    <li #listItem part=\"item\" class=\"ngvl-item__container\" [ngClass]=\"{'snapped': item.config.snapped,\r\n        'snapped-out': item.config.snappedOut}\">\r\n        @if (renderer) {\r\n            <ng-container [ngTemplateOutlet]=\"renderer\"\r\n                [ngTemplateOutletContext]=\"{data: item.data || {}, config: item.config}\" />\r\n        }\r\n    </li>\r\n}","import { Direction, Directions } from \"../enums\";\r\n\r\nconst HORIZONTAL_ALIASES = [Directions.HORIZONTAL, 'horizontal'],\r\n    VERTICAL_ALIASES = [Directions.VERTICAL, 'vertical'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/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 = 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 { EventEmitter } 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 = CacheMapEvents, L = CacheMapListeners> 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    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    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\ninterface IRecalculateMetricsOptions {\r\n    bounds: ISize;\r\n    collection: IVirtualListCollection;\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}\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    updateCollection<I extends { id: Id }, C extends Array<I>>(items: C, stickyMap: IVirtualListStickyMap,\r\n        options: Omit<IRecalculateMetricsOptions, 'collection'>): { displayItems: IRenderVirtualListCollection; totalSize: number; } {\r\n        this.cacheElements();\r\n\r\n        const metrics = this.recalculateMetrics({\r\n            ...options,\r\n            collection: items,\r\n        });\r\n\r\n        const displayItems = this.generateDisplayCollection(items, stickyMap, metrics);\r\n        return { displayItems, totalSize: metrics.totalSize };\r\n    }\r\n\r\n    protected recalculateMetrics(options: IRecalculateMetricsOptions): IMetrics {\r\n        // Необходима кореляция startDisplayObjectY с помощью дельты от высоты предыдущей и текущей размеченной области по версии кэша.\r\n        // TrackBox может расчитать дельту!\r\n\r\n        const { bounds, collection, dynamicSize, isVertical, itemSize, itemsOffset, scrollSize, snap, } = options;\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\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            startIndex;\r\n\r\n        if (dynamicSize) {\r\n            let y = 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 (y < scrollSize - componentSize) {\r\n                    leftItemsWeights.push(componentSize);\r\n                    leftHiddenItemsWeight += componentSize;\r\n                    itemsFromStartToScrollEnd = ii;\r\n                }\r\n\r\n                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\r\n            if (itemsFromStartToScrollEnd === -1) {\r\n                itemsFromStartToScrollEnd = 0;\r\n            }\r\n            if (itemsFromStartToDisplayEnd === -1) {\r\n                itemsFromStartToDisplayEnd = 0;\r\n            }\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        }\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\r\n        const metrics: IMetrics = {\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,\r\n            sizeProperty,\r\n            snap,\r\n            snippedPos,\r\n            startIndex,\r\n            startPosition,\r\n            totalItemsToDisplayEndWeight,\r\n            totalLength,\r\n            totalSize,\r\n            typicalItemSize,\r\n        };\r\n\r\n        return metrics;\r\n    }\r\n\r\n    protected generateDisplayCollection<I extends { id: Id }, C extends Array<I>>(items: C, stickyMap: IVirtualListStickyMap,\r\n        metrics: IMetrics): IRenderVirtualListCollection {\r\n        const {\r\n            normalizedItemWidth,\r\n            normalizedItemHeight,\r\n            // 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        const displayItems: IRenderVirtualListCollection = [];\r\n        if (items.length) {\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 : snippedPos,\r\n                            y: isVertical ? snippedPos : 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 ? snippedPos : pos;\r\n                        item.measures.y = isVertical ? snapped ? snippedPos : 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 {\r\n  AfterViewInit, ChangeDetectionStrategy, Component, ComponentRef, ElementRef, inject, input,\r\n  OnDestroy, output, signal, TemplateRef, ViewChild, viewChild, ViewContainerRef, ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { BehaviorSubject, combineLatest, distinctUntilChanged, filter, map, 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, 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, IVirtualListStickyMap } from './models';\r\nimport { Id } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { Direction, Directions } from './enums';\r\nimport { TrackBox, isDirection, toggleClassName } from './utils';\r\nimport { 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  imports: [CommonModule],\r\n  templateUrl: './ng-virtual-list.component.html',\r\n  styleUrl: './ng-virtual-list.component.scss',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgVirtualListComponent implements AfterViewInit, OnDestroy {\r\n  private static __nextId: number = 0;\r\n\r\n  private _id: number = NgVirtualListComponent.__nextId;\r\n  /**\r\n   * Readonly. Returns the unique identifier of the component.\r\n   */\r\n  get id() { return this._id; }\r\n\r\n  @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n  protected _listContainerRef: ViewContainerRef | undefined;\r\n\r\n  protected _container = viewChild<ElementRef<HTMLDivElement>>('container');\r\n\r\n  protected _list = viewChild<ElementRef<HTMLUListElement>>('list');\r\n\r\n  /**\r\n   * Fires when the list has been scrolled.\r\n   */\r\n  onScroll = output<Event | undefined>();\r\n\r\n  /**\r\n   * Fires when the list has completed scrolling.\r\n   */\r\n  onScrollEnd = output<Event | undefined>();\r\n\r\n  /**\r\n   * Collection of list items.\r\n   */\r\n  items = input.required<IVirtualListCollection>();\r\n\r\n  /**\r\n   * Determines whether elements will snap. Default value is \"true\".\r\n   */\r\n  snap = input<boolean>(DEFAULT_SNAP);\r\n\r\n  /**\r\n   * Determines whether scroll positions will be snapped to the element. Default value is \"false\".\r\n   */\r\n  snapToItem = input<boolean>(DEFAULT_SNAP_TO_ITEM);\r\n\r\n  /**\r\n   * Rendering element template.\r\n   */\r\n  itemRenderer = input.required<TemplateRef<any>>();\r\n\r\n  /**\r\n   * Dictionary zIndex by id of the list element. If the value is not set or equal to 0,\r\n   * then a simple element is displayed, if the value is greater than 0, then the sticky position mode is enabled for the element.\r\n   */\r\n  stickyMap = input<IVirtualListStickyMap>({});\r\n\r\n  /**\r\n   * If direction = 'vertical', then the height of a typical element. If direction = 'horizontal', then the width of a typical element.\r\n   * Ignored if the dynamicSize property is true.\r\n   */\r\n  itemSize = input(DEFAULT_ITEM_SIZE);\r\n\r\n  /**\r\n   * If true then the items in the list can have different sizes and the itemSize property is ignored.\r\n   * If false then the items in the list have a fixed size specified by the itemSize property. The default value is false.\r\n   */\r\n  dynamicSize = input(DEFAULT_DYNAMIC_SIZE);\r\n\r\n  /**\r\n   * Determines the direction in which elements are placed. Default value is \"vertical\".\r\n   */\r\n  direction = input<Direction>(DEFAULT_DIRECTION);\r\n\r\n  /**\r\n   * Number of elements outside the scope of visibility. Default value is 2.\r\n   */\r\n  itemsOffset = input<number>(DEFAULT_ITEMS_OFFSET);\r\n\r\n  private _isVertical = this.getIsVertical();\r\n\r\n  protected _displayItems = signal<IRenderVirtualListCollection | null>(null);\r\n\r\n  protected _displayComponents: Array<ComponentRef<NgVirtualListItemComponent>> = [];\r\n\r\n  protected _bounds = signal<DOMRect | null>(null);\r\n\r\n  protected _scrollSize = signal<number>(0);\r\n\r\n  private _resizeObserver: ResizeObserver | null = null;\r\n\r\n  private _onResizeHandler = () => {\r\n    this._bounds.set(this._container()?.nativeElement?.getBoundingClientRect() ?? null);\r\n  }\r\n\r\n  private _onScrollHandler = (e: Event) => {\r\n    const target = e.target as HTMLDivElement,\r\n      scrollSize = this._isVertical ? target.scrollTop : target.scrollLeft;\r\n\r\n    this._scrollSize.set(scrollSize);\r\n\r\n    this.onScroll.emit(e);\r\n  }\r\n\r\n  private _onScrollEndHandler = (e: Event) => {\r\n    const target = e.target as HTMLDivElement, s = this.itemSize(), itemSize = s < 0 ? DEFAULT_ITEM_SIZE : s,\r\n      snapToItem = this.snapToItem(), scrollSize = this._isVertical ? target.scrollTop : target.scrollLeft,\r\n      scrollItems = Math.round(scrollSize / itemSize), actualScrollSize = snapToItem ? scrollItems * itemSize : scrollSize;\r\n\r\n    if (target.scrollTop !== actualScrollSize) {\r\n      const container = target, params: ScrollToOptions = {\r\n        [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: actualScrollSize,\r\n        behavior: BEHAVIOR_INSTANT\r\n      };\r\n\r\n      container.scroll(params);\r\n    }\r\n\r\n    this.onScrollEnd.emit(e);\r\n  }\r\n\r\n  private _elementRef = inject(ElementRef<HTMLDivElement>);\r\n\r\n  private _initialized = signal<boolean>(false);\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    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._trackBox.displayComponents = this._displayComponents;\r\n\r\n    const $bounds = toObservable(this._bounds).pipe(\r\n      filter(b => !!b),\r\n    ), $items = toObservable(this.items).pipe(\r\n      map(i => !i ? [] : i),\r\n    ), $scrollSize = toObservable(this._scrollSize),\r\n      $itemSize = toObservable(this.itemSize).pipe(\r\n        map(v => v <= 0 ? DEFAULT_ITEM_SIZE : v),\r\n      ),\r\n      $itemsOffset = toObservable(this.itemsOffset).pipe(\r\n        map(v => v < 0 ? DEFAULT_ITEMS_OFFSET : v),\r\n      ),\r\n      $stickyMap = toObservable(this.stickyMap).pipe(\r\n        map(v => !v ? {} : v),\r\n      ),\r\n      $snap = toObservable(this.snap),\r\n      $isVertical = toObservable(this.direction).pipe(\r\n        map(v => this.getIsVertical(v || DEFAULT_DIRECTION)),\r\n      ),\r\n      $dynamicSize = toObservable(this.dynamicSize),\r\n      $cacheVersion = this.$cacheVersion,\r\n      $displayItems = toObservable(this._displayItems),\r\n      $initialized = toObservable(this._initialized);\r\n\r\n    $isVertical.pipe(\r\n      takeUntilDestroyed(),\r\n      tap(v => {\r\n        this._isVertical = v;\r\n        const el: HTMLElement = this._elementRef.nativeElement;\r\n        toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, true);\r\n      }),\r\n    ).subscribe();\r\n\r\n    $dynamicSize.pipe(\r\n      takeUntilDestroyed(),\r\n      tap(dynamicSize => {\r\n        if (dynamicSize) {\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    ).subscribe();\r\n\r\n    $displayItems.pipe(\r\n      takeUntilDestroyed(),\r\n      tap((displayItems) => {\r\n        this._trackBox.items = displayItems;\r\n      })\r\n    ).subscribe();\r\n\r\n    combineLatest([$initialized, $bounds, $items, $stickyMap, $scrollSize, $itemSize,\r\n      $itemsOffset, $snap, $isVertical, $dynamicSize, $cacheVersion,\r\n    ]).pipe(\r\n      takeUntilDestroyed(),\r\n      distinctUntilChanged(),\r\n      filter(([initialized]) => !!initialized),\r\n      switchMap(([,\r\n        bounds, items, stickyMap, scrollSize, itemSize,\r\n        itemsOffset, snap, isVertical, dynamicSize, cacheVersion,\r\n      ]) => {\r\n        const { width, height } = bounds;\r\n\r\n        const { displayItems, totalSize } = this._trackBox.updateCollection(items, stickyMap, {\r\n          bounds: { width, height }, dynamicSize, isVertical, itemSize, itemsOffset, scrollSize, snap,\r\n        });\r\n\r\n        this._displayItems.set(displayItems);\r\n\r\n        this.resetBoundsSize(isVertical, totalSize);\r\n\r\n        return of(displayItems);\r\n      }),\r\n    ).subscribe();\r\n\r\n    combineLatest([$initialized, toObservable(this.itemRenderer)]).pipe(\r\n      takeUntilDestroyed(),\r\n      distinctUntilChanged(),\r\n      filter(([initialized]) => !!initialized),\r\n      tap(([, itemRenderer]) => {\r\n        this.resetRenderers(itemRenderer);\r\n      })\r\n    )\r\n\r\n    combineLatest([$initialized, $displayItems]).pipe(\r\n      takeUntilDestroyed(),\r\n      distinctUntilChanged(),\r\n      filter(([initialized]) => !!initialized),\r\n      tap(([, displayItems]) => {\r\n        this.createDisplayComponentsIfNeed(displayItems);\r\n        this.tracking();\r\n      }),\r\n    ).subscribe();\r\n  }\r\n\r\n  ngOnInit() {\r\n    this._initialized.set(true);\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    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 index = items.findIndex(item => item.id === id), scrollSize = index * this.itemSize(), container = this._container();\r\n    if (container) {\r\n      const params: ScrollToOptions = { [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior };\r\n      container.nativeElement.scroll(params);\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    const containerEl = this._container();\r\n    if (containerEl) {\r\n      containerEl.nativeElement.addEventListener(SCROLL, this._onScrollHandler);\r\n      containerEl.nativeElement.addEventListener(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  ngOnDestroy(): void {\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>","/*\r\n * Public API Surface of ng-virtual-list\r\n */\r\n\r\nexport * from './lib/ng-virtual-list.component';\r\nexport * from './lib/models';\r\nexport * from './lib/types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}